All functions:
  Elements:
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: crypto_load_provider
      Src: /src/openvpn/tests/ntlm_support.c:37,1
    - Dst: msg
      Src: /src/openvpn/tests/ntlm_support.c:42,1
    - Dst: crypto_load_provider
      Src: /src/openvpn/tests/ntlm_support.c:38,1
    - Dst: md_valid
      Src: /src/openvpn/tests/ntlm_support.c:44,1
    - Dst: md_valid
      Src: /src/openvpn/tests/ntlm_support.c:40,1
    - Dst: msg
      Src: /src/openvpn/tests/ntlm_support.c:46,1
    - Dst: crypto_unload_provider
      Src: /src/openvpn/tests/ntlm_support.c:49,1
    - Dst: crypto_unload_provider
      Src: /src/openvpn/tests/ntlm_support.c:50,1
    - Dst: msg
      Src: /src/openvpn/tests/ntlm_support.c:53,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 55
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 55
    functionName: main
    functionSourceFile: /src/openvpn/tests/ntlm_support.c
    functionUses: []
    functionsReached:
    - md_valid
    - msg
    - crypto_unload_provider
    - crypto_load_provider
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/example_test/test.c:23,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 26
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 26
    functionName: teardown
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: int
    signature: 'static int teardown(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/example_test/test.c:38,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: int_test_success
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test.c
    functionUses: []
    functionsReached:
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void int_test_success(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/tests/unit_tests/example_test/test.c:12,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 18
      start: 9
    functionDepth: 0
    functionLinenumber: 9
    functionLinenumberEnd: 18
    functionName: setup
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test.c
    functionUses: []
    functionsReached:
    - malloc
    linkageType: ''
    returnType: int
    signature: 'static int setup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/example_test/test.c:46,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: failing_test
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test.c
    functionUses: []
    functionsReached:
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: '__attribute__((unused)) static void failing_test(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 32
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 32
    functionName: null_test_success
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void null_test_success(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/example_test/test.c:53,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/example_test/test.c:58,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/example_test/test.c:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test
    - cmocka_run_group_tests_name
    - cmocka_unit_test_setup_teardown
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 14
      start: 10
    functionDepth: 0
    functionLinenumber: 10
    functionLinenumberEnd: 14
    functionName: test_true
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test2.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void test_true(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/example_test/test2.c:21,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/example_test/test2.c:24,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 25
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 25
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/example_test/test2.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test
    - cmocka_run_group_tests_name
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:16,1
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:16,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:17,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:18,1
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:17,1
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:18,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 19
      start: 10
    functionDepth: 0
    functionLinenumber: 10
    functionLinenumberEnd: 19
    functionName: pass_any_null_param__returns_null
    functionSourceFile: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c
    functionUses: []
    functionsReached:
    - searchandreplace
    - assert_null
    linkageType: ''
    returnType: void
    signature: 'static void pass_any_null_param__returns_null(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:36,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:41,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:38,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:39,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 42
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 42
    functionName: replace_single_char__one_time__match_is_replaced
    functionSourceFile: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c
    functionUses: []
    functionsReached:
    - free
    - searchandreplace
    - assert_string_equal
    - assert_non_null
    linkageType: ''
    returnType: void
    signature: 'static void replace_single_char__one_time__match_is_replaced(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:58,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:60,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:61,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:63,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 64
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 64
    functionName: replace_longer_text__multiple_times__match_all_matches_are_replaced
    functionSourceFile: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c
    functionUses: []
    functionsReached:
    - free
    - searchandreplace
    - assert_string_equal
    - assert_non_null
    linkageType: ''
    returnType: void
    signature: 'static void replace_longer_text__multiple_times__match_all_matches_are_replaced(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:28,1
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:29,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:29,1
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:28,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:30,1
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:30,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 31
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 31
    functionName: pass_any_empty_string__returns_null
    functionSourceFile: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c
    functionUses: []
    functionsReached:
    - searchandreplace
    - assert_null
    linkageType: ''
    returnType: void
    signature: 'static void pass_any_empty_string__returns_null(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:47,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:49,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:50,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:52,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 53
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 53
    functionName: replace_single_char__multiple_times__match_all_matches_are_replaced
    functionSourceFile: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c
    functionUses: []
    functionsReached:
    - free
    - searchandreplace
    - assert_string_equal
    - assert_non_null
    linkageType: ''
    returnType: void
    signature: 'static void replace_single_char__multiple_times__match_all_matches_are_replaced(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: searchandreplace
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:69,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:71,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:72,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 75
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 75
    functionName: pattern_not_found__returns_original
    functionSourceFile: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c
    functionUses: []
    functionsReached:
    - free
    - searchandreplace
    - assert_string_equal
    - assert_non_null
    linkageType: ''
    returnType: void
    signature: 'static void pattern_not_found__returns_original(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:82,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:86,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:85,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:83,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:84,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:87,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c:90,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 91
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 91
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/plugins/auth-pam/test_search_and_replace.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test
    - cmocka_run_group_tests_name
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:59,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:62,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:63,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:61,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:65,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 66
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 66
    functionName: argv_printf__embedded_format_directive__replaced_in_output
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - argv_printf
    - argv_free
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf__embedded_format_directive__replaced_in_output(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:36,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:38,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:41,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:39,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 42
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 42
    functionName: argv_printf__multiple_spaces_in_format__parsed_as_one
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_free
    - assert_int_equal
    - argv_new
    - argv_printf
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf__multiple_spaces_in_format__parsed_as_one(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:82,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:88,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:85,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:87,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:84,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:90,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:91,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:93,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 94
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 94
    functionName: argv_printf__combined_path_with_spaces__argc_correct
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_free
    - assert_int_equal
    - argv_new
    - argv_printf
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf__combined_path_with_spaces__argc_correct(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:123,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:131,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:135,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:132,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:138,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 139
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 139
    functionName: argv_printf__long_args__data_correct
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - argv_printf
    - argv_free
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf__long_args__data_correct(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:155,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:158,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:157,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:161,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:159,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 162
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 162
    functionName: argv_parse_cmd__command_and_extra_options__argc_correct
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_printf_cat
    - argv_parse_cmd
    - argv_free
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_parse_cmd__command_and_extra_options__argc_correct(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:180,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:187,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:181,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:185,1
    - Dst: argv_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:184,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:188,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 189
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 189
    functionName: argv_str__empty_argv__empty_output
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - argv_str
    - argv_free
    - gc_new
    - gc_free
    - argv_new
    linkageType: ''
    returnType: void
    signature: 'static void argv_str__empty_argv__empty_output(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:215,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:220,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:219,1
    - Dst: argv_insert_head
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:218,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:221,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:223,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 224
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 224
    functionName: argv_insert_head__empty_argv__head_only
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - argv_free
    - argv_insert_head
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_insert_head__empty_argv__head_only(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 7
    argNames:
    - line
    - p
    - n
    - file
    - line_num
    - msglevel
    - gc
    argTypes:
    - char*
    - char**
    - int
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 31
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 31
    functionName: __wrap_parse_line
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int __wrap_parse_line(const char *line, char **p, const int n, const
      char *file, const int line_num, int msglevel, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:71,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:76,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:74,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:73,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:73,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 77
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 77
    functionName: argv_printf__group_sep_in_arg__fail_no_ouput
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_printf
    - argv_free
    - assert_false
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf__group_sep_in_arg__fail_no_ouput(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:47,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:49,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:51,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:50,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:53,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 54
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 54
    functionName: argv_printf_cat__multiple_spaces_in_format__parsed_as_one
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_printf_cat
    - argv_printf
    - argv_free
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf_cat__multiple_spaces_in_format__parsed_as_one(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:99,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:102,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:101,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:104,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:105,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:107,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:108,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:110,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:111,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:113,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:116,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:114,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 117
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 117
    functionName: argv_printf__empty_parameter__argc_correct
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_free
    - assert_int_equal
    - argv_new
    - argv_printf
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf__empty_parameter__argc_correct(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:144,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:147,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:149,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 150
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 150
    functionName: argv_parse_cmd__command_string__argc_correct
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_free
    - assert_int_equal
    - argv_new
    - argv_parse_cmd
    linkageType: ''
    returnType: void
    signature: 'static void argv_parse_cmd__command_string__argc_correct(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:167,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:171,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:170,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:169,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:172,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:174,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 175
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 175
    functionName: argv_printf_cat__used_twice__argc_correct
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - argv_printf_cat
    - argv_printf
    - argv_free
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_printf_cat__used_twice__argc_correct(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:194,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:199,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:200,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:198,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:195,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:201,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:202,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:203,1
    - Dst: argv_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:204,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:205,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:209,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:208,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 210
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 210
    functionName: argv_str__multiple_argv__correct_output
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - argv_str
    - argv_printf
    - argv_free
    - gc_new
    - gc_free
    - argv_new
    - argv_printf_cat
    linkageType: ''
    returnType: void
    signature: 'static void argv_str__multiple_argv__correct_output(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:229,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:240,1
    - Dst: argv_insert_head
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:234,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:233,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:235,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:244,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:247,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:249,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 250
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 250
    functionName: argv_insert_head__non_empty_argv__head_added
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - argv_printf
    - argv_free
    - argv_insert_head
    - argv_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void argv_insert_head__non_empty_argv__head_added(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:255,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:258,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:259,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:260,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:257,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:261,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:262,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:263,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:264,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:265,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:267,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:269,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:273,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:266,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:268,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_argv.c:270,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 274
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 274
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_argv.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test
    - cmocka_run_group_tests_name
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:51,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 7
    argNames:
    - line
    - p
    - n
    - file
    - line_num
    - msglevel
    - gc
    argTypes:
    - char*
    - char**
    - int
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: parse_line
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: int
    signature: 'int parse_line(const char *line, char **p, const int n, const char
      *file, const int line_num, int msglevel, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init_key_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:184,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:190,1
    - Dst: crypto_read_openvpn_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:186,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - key_direction
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 193
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 193
    functionName: init_tas_auth
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - init_key_type
    - crypto_read_openvpn_key
    - alloc_buf
    linkageType: ''
    returnType: struct tls_auth_standalone
    signature: 'struct tls_auth_standalone init_tas_auth(int key_direction) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 1
    argCount: 2
    argNames:
    - act
    - gc
    argTypes:
    - struct link_socket_actual*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 69
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 69
    functionName: print_link_socket_actual
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *print_link_socket_actual(const struct link_socket_actual
      *act, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:216,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:217,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:218,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - tas
    argTypes:
    - struct tls_auth_standalone*
    constantsTouched: []
    func_position:
      end: 219
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 219
    functionName: free_tas
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - free_key_ctx_bi
    - free_buf
    linkageType: ''
    returnType: void
    signature: 'void free_tas(struct tls_auth_standalone *tas) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:282,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:281,1
    - Dst: init_tas_auth
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:276,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:286,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:290,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:295,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:300,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:307,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:324,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:279,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:288,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:289,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:292,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:300,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:310,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:313,1
    - Dst: init_tas_auth
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:319,1
    - Dst: free_tas
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:327,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:323,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:301,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:297,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:311,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:312,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:315,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:317,1
    - Dst: free_tas
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:318,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:326,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:328,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:275,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:283,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:287,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:296,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:303,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:304,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:305,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:306,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:321,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:322,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 48
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 329
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 329
    functionName: test_tls_decrypt_lite_auth
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - buf_write
    - free_tas
    - BPTR
    - free_key_ctx_bi
    - buf_reset_len
    - free_buf
    - free_tls_pre_decrypt_state
    - init_tas_auth
    - assert_memory_equal
    - alloc_buf
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void test_tls_decrypt_lite_auth(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:389,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:395,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:406,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:411,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:412,1
    - Dst: buf_advance
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:415,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:378,1
    - Dst: reliable_ack_parse
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:388,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:397,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:398,1
    - Dst: buf_advance
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:401,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:403,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:418,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:379,1
    - Dst: buf_advance
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:382,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:391,1
    - Dst: reliable_ack_parse
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:402,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:392,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:405,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:409,1
    - Dst: reliable_ack_parse
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:416,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 419
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 419
    functionName: test_parse_ack
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - buf_write
    - assert_true
    - reliable_ack_parse
    - buf_reset_len
    - free_buf
    - assert_memory_equal
    - alloc_buf
    - assert_int_equal
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static void test_parse_ack(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: session_id_hmac_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:454,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:467,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:469,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:468,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:462,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:470,1
    - Dst: check_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:472,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:473,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:475,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:476,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:478,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:477,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 479
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 479
    functionName: test_verify_hmac_none
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - buf_write
    - assert_true
    - session_id_hmac_init
    - check_session_id_hmac
    - buf_reset_len
    - free_buf
    - hmac_ctx_free
    - free_tls_pre_decrypt_state
    - alloc_buf
    - assert_int_equal
    - hmac_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'static void test_verify_hmac_none(void **ut_state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:508,1
    - Dst: ntohs
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:517,1
    - Dst: ntohs
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:503,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:522,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:524,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:526,1
    - Dst: assert_memory_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:528,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:536,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:543,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:541,1
    - Dst: init_static_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:496,1
    - Dst: ntohl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:502,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:546,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:525,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:537,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:538,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:542,1
    - Dst: assert_memory_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:529,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:540,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:535,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:545,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 32
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 547
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 547
    functionName: test_calc_session_id_hmac_static
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - init_static_hmac
    - hmac_ctx_cleanup
    - calculate_session_id_hmac
    - ntohl
    - hmac_ctx_free
    - assert_memory_equal
    - assert_memory_not_equal
    - ntohs
    linkageType: ''
    returnType: void
    signature: 'static void test_calc_session_id_hmac_static(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_crypt_init_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:202,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:206,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:205,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - server
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 209
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 209
    functionName: init_tas_crypt
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - alloc_buf
    - tls_crypt_init_key
    linkageType: ''
    returnType: struct tls_auth_standalone
    signature: 'struct tls_auth_standalone init_tas_crypt(bool server) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init_tas_crypt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:227,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:244,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:253,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:263,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:228,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:241,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:255,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:232,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:234,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:238,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:239,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:240,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:248,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:258,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:261,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:233,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:231,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:237,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:254,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:245,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:247,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:246,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:256,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:257,1
    - Dst: free_tas
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:262,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 264
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 264
    functionName: test_tls_decrypt_lite_crypt
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - buf_write
    - free_tas
    - BPTR
    - free_key_ctx_bi
    - init_tas_crypt
    - buf_reset_len
    - free_buf
    - free_tls_pre_decrypt_state
    - alloc_buf
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void test_tls_decrypt_lite_crypt(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:338,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:347,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:359,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:358,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:357,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:356,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:362,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:366,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:367,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:368,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:346,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:345,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:349,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:350,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:351,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:365,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:339,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:353,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:371,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:352,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:360,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:355,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:370,1
    - Dst: free_tas
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:372,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 373
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 373
    functionName: test_tls_decrypt_lite_none
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - buf_write
    - free_tas
    - buf_reset_len
    - free_buf
    - assert_int_equal
    - alloc_buf
    - free_tls_pre_decrypt_state
    linkageType: ''
    returnType: void
    signature: 'void test_tls_decrypt_lite_none(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: session_id_hmac_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:424,1
    - Dst: init_tas_auth
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:433,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:436,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:430,1
    - Dst: buf_reset_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:435,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:437,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:438,1
    - Dst: check_session_id_hmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:441,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:442,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:444,1
    - Dst: free_tas
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:446,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:447,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:448,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:445,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 449
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 449
    functionName: test_verify_hmac_tls_auth
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - buf_write
    - free_tas
    - session_id_hmac_init
    - check_session_id_hmac
    - buf_reset_len
    - assert_false
    - free_buf
    - hmac_ctx_free
    - free_tls_pre_decrypt_state
    - init_tas_auth
    - alloc_buf
    - assert_int_equal
    - hmac_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'static void test_verify_hmac_tls_auth(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:484,1
    - Dst: hmac_ctx_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:489,1
    - Dst: md_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:484,1
    - Dst: hmac_ctx_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:485,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 491
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 491
    functionName: init_static_hmac
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - md_valid
    - hmac_ctx_init
    - ASSERT
    - hmac_ctx_new
    linkageType: ''
    returnType: hmac_ctx_t*
    signature: 'static hmac_ctx_t *init_static_hmac(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:564,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:575,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:572,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:571,1
    - Dst: tls_reset_standalone
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:568,1
    - Dst: tls_reset_standalone
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:576,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:577,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:577,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:577,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:578,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:578,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:581,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:578,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:578,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:580,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 582
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 582
    functionName: test_generate_reset_packet_plain
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - tls_reset_standalone
    - BPTR
    - BLEN
    - free_buf
    - free_tls_pre_decrypt_state
    - assert_memory_equal
    - alloc_buf
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_generate_reset_packet_plain(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: extract_command_buffer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:633,1
    - Dst: extract_command_buffer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:635,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:644,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:648,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:650,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:642,1
    - Dst: extract_command_buffer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:634,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:641,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:644,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:632,1
    - Dst: extract_command_buffer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:637,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:639,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:642,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:643,1
    - Dst: extract_command_buffer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:651,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:652,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:626,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:627,1
    - Dst: extract_command_buffer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:636,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:639,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:645,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:654,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 23
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 655
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 655
    functionName: test_extract_control_message
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - buf_write
    - assert_string_equal
    - BSTR
    - gc_new
    - extract_command_buffer
    - gc_free
    - assert_int_equal
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void test_extract_control_message(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:660,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:664,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:665,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:663,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:662,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:666,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:667,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:668,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:669,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:670,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:678,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:675,1
    - Dst: EVP_cleanup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:681,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:671,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 685
      start: 657
    functionDepth: 0
    functionLinenumber: 657
    functionLinenumberEnd: 685
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests_name
    - EVP_cleanup
    - OpenSSL_add_all_algorithms
    - cmocka_unit_test
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:62,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 5
    argNames:
    - session
    - label
    - label_size
    - ekm
    - ekm_size
    argTypes:
    - struct tls_session*
    - char*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 63
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 63
    functionName: key_state_export_keying_material
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool key_state_export_keying_material(struct tls_session *session,
      const char *label, size_t label_size, void *ekm, size_t ekm_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init_tas_auth
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:590,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:604,1
    - Dst: tls_reset_standalone
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:611,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:612,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:612,1
    - Dst: free_tas
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:619,1
    - Dst: reset_packet_id_send
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:601,1
    - Dst: init_tas_auth
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:591,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:605,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:613,1
    - Dst: free_tas
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:620,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:607,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:613,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:613,1
    - Dst: packet_id_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:593,1
    - Dst: tls_reset_standalone
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:602,1
    - Dst: reset_packet_id_send
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:610,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:612,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:613,1
    - Dst: packet_id_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:617,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c:615,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 1
    argNames:
    - ut_state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 621
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 621
    functionName: test_generate_reset_packet_tls_auth
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkt.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - tls_reset_standalone
    - free_tas
    - BPTR
    - reset_packet_id_send
    - BLEN
    - packet_id_free
    - free_tls_pre_decrypt_state
    - init_tas_auth
    - assert_memory_equal
    - packet_id_init
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_generate_reset_packet_tls_auth(void **ut_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_get_error
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:66,1
    - Dst: ERR_error_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:68,1
    - Dst: msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:68,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 70
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 70
    functionName: crypto_print_openssl_errors
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - msg
    - ERR_get_error
    - ERR_error_string
    linkageType: ''
    returnType: void
    signature: 'void crypto_print_openssl_errors(const unsigned int flags) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: CertOpenStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:153,1
    - Dst: BIO_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:170,1
    - Dst: BIO_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:177,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:190,1
    - Dst: PFXImportCertStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:204,1
    - Dst: PKCS12_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:205,1
    - Dst: CertFreeCertificateContext
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:222,1
    - Dst: init_cert_data
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:152,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:165,1
    - Dst: PKCS12_create
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:185,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:187,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:217,1
    - Dst: CertAddCertificateContextToStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:218,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:220,1
    - Dst: CertCloseStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:223,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:172,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:198,1
    - Dst: i2d_PKCS12
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:195,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:206,1
    - Dst: X509_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:186,1
    - Dst: CertEnumCertificatesInStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:216,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:155,1
    - Dst: PEM_read_bio_X509
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:168,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:175,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:181,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:208,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 47
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 226
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 226
    functionName: import_certs
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - PFXImportCertStore
    - CertCloseStore
    - CertOpenStore
    - assert_true
    - fail_msg
    - EVP_PKEY_free
    - assert_non_null
    - PEM_read_bio_PrivateKey
    - BIO_new_mem_buf
    - i2d_PKCS12
    - PKCS12_create
    - CertFreeCertificateContext
    - OPENSSL_free
    - CertEnumCertificatesInStore
    - X509_free
    - BIO_free
    - PKCS12_free
    - PEM_read_bio_X509
    - CertAddCertificateContextToStore
    - init_cert_data
    linkageType: ''
    returnType: void
    signature: 'static void import_certs(void **state) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:232,1
    - Dst: get_cert_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:238,1
    - Dst: CertDuplicateCertificateContext
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:245,1
    - Dst: lookup_cert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:239,1
    - Dst: CertEnumCertificatesInStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:236,1
    - Dst: CertDeleteCertificateFromStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:248,1
    - Dst: CertCloseStore
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:252,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:256,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 17
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 258
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 258
    functionName: cleanup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - get_cert_name
    - CertCloseStore
    - lookup_cert
    - gc_new
    - CertDeleteCertificateFromStore
    - gc_free
    - CertEnumCertificatesInStore
    - CertDuplicateCertificateContext
    linkageType: ''
    returnType: int
    signature: 'static int cleanup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:298,1
    - Dst: find_certificate_in_store
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:307,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:306,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:302,1
    - Dst: import_certs
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:301,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:313,1
    - Dst: get_cert_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:315,1
    - Dst: lookup_cert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:316,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:317,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:318,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:323,1
    - Dst: CertFreeCertificateContext
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:320,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:319,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 324
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 324
    functionName: test_find_cert_byname
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - get_cert_name
    - assert_string_equal
    - assert_non_null
    - snprintf
    - CertFreeCertificateContext
    - gc_new
    - lookup_cert
    - import_certs
    - gc_free
    - find_certificate_in_store
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_find_cert_byname(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_LIB_CTX_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:364,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:367,1
    - Dst: EVP_set_default_properties
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:370,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:365,1
    - Dst: OSSL_PROVIDER_add_builtin
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:366,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 372
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 372
    functionName: setup_xkey_provider
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_load
    - OSSL_LIB_CTX_new
    - OSSL_PROVIDER_add_builtin
    - EVP_set_default_properties
    linkageType: ''
    returnType: int
    signature: 'static int setup_xkey_provider(void **state) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: import_certs
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:436,1
    - Dst: SSLv23_client_method
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:445,1
    - Dst: SSL_CTX_new_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:445,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:446,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:437,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:448,1
    - Dst: SSL_CTX_use_CryptoAPI_certificate
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:449,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:451,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:455,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:457,1
    - Dst: SSL_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:461,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 463
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 463
    functionName: test_ssl_ctx_use_cryptoapicert
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - assert_non_null
    - assert_true
    - SSLv23_client_method
    - snprintf
    - SSL_CTX_use_CryptoAPI_certificate
    - fail_msg
    - SSL_CTX_check_private_key
    - import_certs
    - SSL_CTX_new_ex
    - SSL_CTX_free
    linkageType: ''
    returnType: void
    signature: 'void test_ssl_ctx_use_cryptoapicert(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:265,1
    - Dst: import_certs
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:268,1
    - Dst: find_certificate_in_store
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:274,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:273,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:269,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:278,1
    - Dst: get_cert_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:279,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:280,1
    - Dst: CertFreeCertificateContext
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:281,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:286,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:290,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 291
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 291
    functionName: test_find_cert_bythumb
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - get_cert_name
    - assert_string_equal
    - assert_non_null
    - snprintf
    - CertFreeCertificateContext
    - gc_new
    - import_certs
    - gc_free
    - find_certificate_in_store
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_find_cert_bythumb(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:331,1
    - Dst: find_certificate_in_store
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:340,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:339,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:335,1
    - Dst: import_certs
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:334,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:346,1
    - Dst: get_cert_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:348,1
    - Dst: lookup_cert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:349,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:350,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:351,1
    - Dst: CertFreeCertificateContext
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:353,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:352,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:356,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 357
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 357
    functionName: test_find_cert_byissuer
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - get_cert_name
    - assert_string_equal
    - assert_non_null
    - snprintf
    - CertFreeCertificateContext
    - gc_new
    - lookup_cert
    - import_certs
    - gc_free
    - find_certificate_in_store
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_find_cert_byissuer(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:378,1
    - Dst: OSSL_PROVIDER_unload
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:382,1
    - Dst: OSSL_LIB_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:386,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 389
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 389
    functionName: teardown_xkey_provider
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_unload
    - _countof
    - OSSL_LIB_CTX_free
    linkageType: ''
    returnType: int
    signature: 'static int teardown_xkey_provider(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:471,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:474,1
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:473,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:475,1
    - Dst: parse_hexstring
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:473,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:476,1
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:476,1
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:479,1
    - Dst: parse_hexstring
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:481,1
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:481,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:482,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 484
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 484
    functionName: test_parse_hexstring
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - _countof
    - parse_hexstring
    - assert_memory_equal
    - memset
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_parse_hexstring(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:489,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:491,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:494,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:492,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:493,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:495,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:496,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:498,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:502,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 505
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 505
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests_name
    - cmocka_unit_test
    - cmocka_unit_test_setup_teardown
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 1
    argCount: 3
    argNames:
    - man
    - b64_data
    - algorithm
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: management_query_pk_sig
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'char *management_query_pk_sig(struct management *man, const char *b64_data,
      const char *algorithm) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:127,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 129
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 129
    functionName: init_cert_data
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - memcpy
    - assert
    linkageType: ''
    returnType: void
    signature: 'void init_cert_data(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:136,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 4
    argCount: 1
    argNames:
    - friendly_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 141
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 141
    functionName: lookup_cert
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: struct test_cert*
    signature: 'static struct test_cert *lookup_cert(const char *friendly_name) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: import_certs
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:404,1
    - Dst: Load_CryptoAPI_certificate
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:414,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:413,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:405,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:416,1
    - Dst: X509_get0_pubkey
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:419,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:420,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:421,1
    - Dst: digest_sign_verify
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:421,1
    - Dst: X509_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:422,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c:423,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 17
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 425
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 425
    functionName: test_cryptoapi_sign
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - assert_non_null
    - assert_true
    - fail_msg
    - snprintf
    - X509_get0_pubkey
    - import_certs
    - digest_sign_verify
    - Load_CryptoAPI_certificate
    - X509_free
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void test_cryptoapi_sign(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 513
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 513
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_cryptoapi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:11,1
    - Dst: net_iface_up
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:13,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - up
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 14
      start: 8
    functionDepth: 0
    functionLinenumber: 8
    functionLinenumberEnd: 14
    functionName: net__iface_up
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_iface_up
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__iface_up(bool up) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:44,1
    - Dst: net_iface_mtu_set
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - mtu
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 47
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 47
    functionName: net__iface_mtu_set
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_iface_mtu_set
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__iface_mtu_set(int mtu) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: net_iface_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:26,1
    - Dst: assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:29,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:29,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - name
    - type
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 33
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 33
    functionName: net__iface_type
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - strcmp
    - net_iface_type
    - assert
    linkageType: ''
    returnType: int
    signature: 'static int net__iface_type(const char *name, const char *type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:74,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:80,1
    - Dst: net_addr_v6_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - addr_str
    - prefixlen
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 83
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 83
    functionName: net__addr_v6_add
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_addr_v6_add
    - inet_pton
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__addr_v6_add(const char *addr_str, int prefixlen) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:127,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:142,1
    - Dst: ntohl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:140,1
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:133,1
    - Dst: ntohl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:139,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:146,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:148,1
    - Dst: net_route_v4_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:150,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 4
    argNames:
    - dst_str
    - prefixlen
    - gw_str
    - metric
    argTypes:
    - char*
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 151
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 151
    functionName: net__route_v4_add_gw
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_route_v4_add
    - ntohl
    - inet_pton
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__route_v4_add_gw(const char *dst_str, int prefixlen,
      const char *gw_str, int metric) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:193,1
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:199,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:209,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:205,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:211,1
    - Dst: net_route_v6_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:213,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 4
    argNames:
    - dst_str
    - prefixlen
    - gw_str
    - metric
    argTypes:
    - char*
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 214
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 214
    functionName: net__route_v6_add_gw
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_route_v6_add
    - inet_pton
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__route_v6_add_gw(const char *dst_str, int prefixlen,
      const char *gw_str, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_iface_del
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:38,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: net__iface_del
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_iface_del
    linkageType: ''
    returnType: int
    signature: 'static int net__iface_del(const char *name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_iface_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:19,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - name
    - type
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 20
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 20
    functionName: net__iface_new
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_iface_new
    linkageType: ''
    returnType: int
    signature: 'static int net__iface_new(const char *name, const char *type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:55,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:63,1
    - Dst: net_addr_v4_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:65,1
    - Dst: ntohl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:61,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - addr_str
    - prefixlen
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 66
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 66
    functionName: net__addr_v4_add
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_addr_v4_add
    - ntohl
    - inet_pton
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__addr_v4_add(const char *addr_str, int prefixlen) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:96,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:104,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:107,1
    - Dst: ntohl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:102,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:109,1
    - Dst: net_route_v4_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:111,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 3
    argNames:
    - dst_str
    - prefixlen
    - metric
    argTypes:
    - char*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 113
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 113
    functionName: net__route_v4_add
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_route_v4_add
    - ntohl
    - inet_pton
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__route_v4_add(const char *dst_str, int prefixlen, int
      metric) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: inet_pton
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:164,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:173,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:175,1
    - Dst: net_route_v6_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:177,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:170,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 3
    argNames:
    - dst_str
    - prefixlen
    - metric
    argTypes:
    - char*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 179
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 179
    functionName: net__route_v6_add
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net_route_v6_add
    - inet_pton
    - printf
    linkageType: ''
    returnType: int
    signature: 'static int net__route_v6_add(const char *dst_str, int prefixlen, int
      metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:219,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 220
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 220
    functionName: usage
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: 'static void usage(char *name) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: net__iface_up
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:248,1
    - Dst: net__addr_v4_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:254,1
    - Dst: net__route_v4_add_gw
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:263,1
    - Dst: assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:274,1
    - Dst: assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:275,1
    - Dst: net__iface_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:274,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:280,1
    - Dst: usage
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:284,1
    - Dst: usage
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:229,1
    - Dst: net__route_v6_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:266,1
    - Dst: assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:276,1
    - Dst: net__iface_mtu_set
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:251,1
    - Dst: atoi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:244,1
    - Dst: net__addr_v6_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:257,1
    - Dst: net__route_v6_add_gw
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:269,1
    - Dst: net__iface_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:273,1
    - Dst: assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:273,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:234,1
    - Dst: net__route_v4_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:260,1
    - Dst: net__iface_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:276,1
    - Dst: net__iface_del
      Src: /src/openvpn/tests/unit_tests/openvpn/test_networking.c:275,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 36
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 286
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 286
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_networking.c
    functionUses: []
    functionsReached:
    - net__route_v4_add_gw
    - net__route_v6_add
    - usage
    - net__iface_up
    - net__route_v6_add_gw
    - atoi
    - net__iface_type
    - net__addr_v4_add
    - net__iface_del
    - strcmp
    - net__iface_mtu_set
    - net__iface_new
    - net__route_v4_add
    - assert
    - net__addr_v6_add
    - printf
    linkageType: ''
    returnType: int
    signature: 'int main(int argc, char *argv[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_get_random.c:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 36
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 36
    functionName: get_random
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_get_random.c
    functionUses: []
    functionsReached:
    - rand
    linkageType: ''
    returnType: unsigned long
    signature: 'unsigned long get_random(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_get_random.c:43,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 2
    argNames:
    - output
    - len
    argTypes:
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: prng_bytes
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_get_random.c
    functionUses: []
    functionsReached:
    - rand
    linkageType: ''
    returnType: void
    signature: 'void prng_bytes(uint8_t *output, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:53,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 5
    argNames:
    - session
    - label
    - label_size
    - ekm
    - ekm_size
    argTypes:
    - struct tls_session*
    - char*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: key_state_export_keying_material
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool key_state_export_keying_material(struct tls_session *session,
      const char *label, size_t label_size, void *ekm, size_t ekm_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:172,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:176,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:167,1
    - Dst: tls_peer_supports_ncp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:177,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:180,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:183,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:150,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:156,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:155,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:160,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:161,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:170,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:175,1
    - Dst: tls_peer_supports_ncp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:167,1
    - Dst: tls_peer_supports_ncp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:172,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:181,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:157,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:162,1
    - Dst: tls_peer_supports_ncp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:181,1
    - Dst: tls_peer_supports_ncp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:157,1
    - Dst: tls_peer_supports_ncp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:162,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:165,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:166,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:171,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:177,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:179,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 38
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 184
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 184
    functionName: test_extract_client_ciphers
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - gc_new
    - assert_false
    - gc_free
    - tls_peer_ncp_list
    - tls_peer_supports_ncp
    linkageType: ''
    returnType: void
    signature: 'static void test_extract_client_ciphers(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:238,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:247,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:250,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:253,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:243,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:256,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:260,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:263,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:267,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:270,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 271
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 271
    functionName: test_ncp_best
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - ncp_get_best_cipher
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void test_ncp_best(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:357,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:360,1
    - Dst: ncp_expanded_ciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:367,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:361,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:365,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:371,1
    - Dst: ncp_expanded_ciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:372,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:376,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:377,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:381,1
    - Dst: ncp_expanded_ciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:388,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:386,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:382,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:388,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:390,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:391,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 392
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 392
    functionName: test_ncp_expand
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - gc_new
    - gc_free
    - ncp_expanded_ciphers
    - cipher_valid
    - options_postprocess_setdefault_ncpciphers
    linkageType: ''
    returnType: void
    signature: 'static void test_ncp_expand(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:189,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:199,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:195,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:202,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:206,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:209,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:213,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:215,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:218,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:220,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:222,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:224,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:226,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:228,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:231,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:229,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 232
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 232
    functionName: test_poor_man
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - ncp_get_best_cipher
    - assert_string_equal
    - gc_new
    - gc_free
    - assert_ptr_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_poor_man(void **state) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:75,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:87,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:93,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:108,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:111,1
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:118,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:126,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:125,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:127,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:135,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:140,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:70,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:74,1
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:71,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:78,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:111,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:113,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:113,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:127,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:129,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:135,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:74,1
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:72,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:78,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:97,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:88,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:88,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:82,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:97,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:101,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:101,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:140,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:126,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:129,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:75,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:82,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:93,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:87,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:105,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:108,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:121,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:105,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:121,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:125,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:144,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 52
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 145
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 145
    functionName: test_check_ncp_ciphers_list
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - mutate_ncp_cipher_list
    - gc_new
    - gc_free
    - assert_ptr_equal
    - cipher_valid
    linkageType: ''
    returnType: void
    signature: 'static void test_check_ncp_ciphers_list(void **state) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:280,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:284,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:288,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:335,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:319,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:349,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:294,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:311,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:315,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:325,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:307,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:321,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:333,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:347,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:351,1
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:276,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:292,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:306,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:329,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:343,1
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:339,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 39
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 352
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 352
    functionName: test_ncp_default
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - gc_new
    - gc_free
    - cipher_valid
    - options_postprocess_setdefault_ncpciphers
    linkageType: ''
    returnType: void
    signature: 'static void test_ncp_default(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:408,1
    - Dst: cmocka_run_group_tests
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:412,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c:410,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 413
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 413
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests
    - OpenSSL_add_all_algorithms
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 64
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 64
    functionName: dco_get_supported_ciphers
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ncp.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *dco_get_supported_ciphers(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:45,1
    - Dst: options_string_compat_lzo
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:56,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:58,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:51,1
    - Dst: options_string_compat_lzo
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:49,1
    - Dst: options_string_compat_lzo
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:62,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:64,1
    - Dst: options_string_compat_lzo
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:68,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:71,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:73,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 74
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 74
    functionName: test_compat_lzo_string
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - options_string_compat_lzo
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void test_compat_lzo_string(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: parse_auth_failed_temp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:94,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:95,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:96,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:97,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 98
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 98
    functionName: test_auth_fail_temp_flags
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - assert_int_equal
    - assert_string_equal
    - parse_auth_failed_temp
    linkageType: ''
    returnType: void
    signature: 'static void test_auth_fail_temp_flags(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:132,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: word_compare_function
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: bool
    signature: 'static bool word_compare_function(const void *key1, const void *key2) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hash_iterator_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:148,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:157,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:150,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 9
    argCount: 2
    argNames:
    - hash
    - value
    argTypes:
    - struct hash*
    - void*
    constantsTouched: []
    func_position:
      end: 159
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 159
    functionName: hash_lookup_by_value
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - hash_iterator_free
    - hash_iterator_init
    - hash_iterator_next
    linkageType: ''
    returnType: struct hash_element*
    signature: 'static struct hash_element *hash_lookup_by_value(struct hash *hash,
      void *value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:317,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:318,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:320,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:325,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:328,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:322,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:333,1
    - Dst: mock_get_debug_level
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:338,1
    - Dst: mock_set_debug_level
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:339,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:342,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:346,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:360,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:376,1
    - Dst: positive_atoi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:363,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:359,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:375,1
    - Dst: atoi_warn
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:346,1
    - Dst: mock_set_debug_level
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:378,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:370,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:319,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:321,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:327,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:324,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:331,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:332,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:334,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:347,1
    - Dst: atoi_warn
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:347,1
    - Dst: atoi_warn
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:359,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:372,1
    - Dst: atoi_warn
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:375,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:371,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:366,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:354,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:317,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:318,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:320,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:325,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:322,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:328,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:333,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:343,1
    - Dst: positive_atoi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:343,1
    - Dst: positive_atoi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:350,1
    - Dst: positive_atoi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:355,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:368,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:355,1
    - Dst: atoi_warn
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:371,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:374,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:367,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:362,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:349,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:319,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:321,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:324,1
    - Dst: valid_integer
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:327,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:331,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:332,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:334,1
    - Dst: positive_atoi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:342,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:345,1
    - Dst: atoi_warn
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:345,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:356,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:364,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:351,1
    - Dst: positive_atoi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:367,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:363,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:350,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:358,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 70
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 379
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 379
    functionName: test_atoi_variants
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - assert_false
    - atoi_warn
    - CLEAR
    - valid_integer
    - positive_atoi
    - mock_get_debug_level
    - assert_int_equal
    - mock_set_debug_level
    linkageType: ''
    returnType: void
    signature: 'static void test_atoi_variants(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: parse_auth_failed_temp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:83,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:84,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:83,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 85
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 85
    functionName: test_auth_fail_temp_no_flags
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - strlen
    - assert_string_equal
    - parse_auth_failed_temp
    linkageType: ''
    returnType: void
    signature: 'static void test_auth_fail_temp_no_flags(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:125,1
    - Dst: hash_func
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:126,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - key
    - iv
    argTypes:
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 127
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 127
    functionName: word_hash_function
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - hash_func
    - strlen
    linkageType: ''
    returnType: uint32_t
    signature: 'static uint32_t word_hash_function(const void *key, uint32_t iv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: parse_auth_failed_temp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:107,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:108,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 110
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 110
    functionName: test_auth_fail_temp_flags_msg
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - assert_int_equal
    - assert_string_equal
    - parse_auth_failed_temp
    linkageType: ''
    returnType: void
    signature: 'static void test_auth_fail_temp_flags_msg(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rand
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 140
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 140
    functionName: get_random
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - rand
    linkageType: ''
    returnType: unsigned long
    signature: 'static unsigned long get_random(void) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:174,1
    - Dst: openvpn_test_get_srcdir_dir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:177,1
    - Dst: fgets
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:190,1
    - Dst: string_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:230,1
    - Dst: isalnum
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:201,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:233,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:242,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:246,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:268,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:272,1
    - Dst: hash_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:309,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:286,1
    - Dst: hash_n_elements
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:292,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:284,1
    - Dst: get_random
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:172,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:180,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:203,1
    - Dst: hash_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:232,1
    - Dst: hash_add
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:233,1
    - Dst: random
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:233,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:247,1
    - Dst: hash_remove
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:247,1
    - Dst: hash_n_buckets
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:255,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:262,1
    - Dst: hash_remove_by_value
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:300,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:290,1
    - Dst: hash_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:171,1
    - Dst: hash_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:172,1
    - Dst: fopen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:179,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:229,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:232,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:222,1
    - Dst: get_random
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:259,1
    - Dst: hash_iterator_init_range
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:260,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:276,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:280,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:311,1
    - Dst: hash_lookup_by_value
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:304,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:282,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:170,1
    - Dst: get_random
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:171,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:212,1
    - Dst: hash_lookup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:218,1
    - Dst: hash_remove
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:246,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:270,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:274,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:278,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:292,1
    - Dst: hash_lookup_by_value
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:299,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:304,1
    - Dst: hash_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:310,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 99
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 312
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 312
    functionName: test_list
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - get_random
    - fgets
    - assert_true
    - hash_iterator_next
    - hash_add
    - assert_int_equal
    - hash_init
    - hash_free
    - openvpn_test_get_srcdir_dir
    - assert_string_equal
    - assert_non_null
    - gc_new
    - assert_false
    - gc_free
    - hash_remove
    - string_alloc
    - ALLOC_OBJ_GC
    - assert_null
    - fopen
    - strcmp
    - isalnum
    - hash_remove_by_value
    - hash_iterator_init_range
    - hash_lookup_by_value
    - hash_lookup
    - hash_n_buckets
    - hash_n_elements
    - hash_iterator_free
    - ASSERT
    - random
    - printf
    linkageType: ''
    returnType: void
    signature: 'static void test_list(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:393,1
    - Dst: cmocka_run_group_tests
      Src: /src/openvpn/tests/unit_tests/openvpn/test_misc.c:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 395
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 395
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_misc.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_win32_execve.c:34,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 3
    argNames:
    - a
    - es
    - flags
    argTypes:
    - struct argv*
    - struct env_set*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 35
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 35
    functionName: openvpn_execve
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_win32_execve.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int openvpn_execve(const struct argv *a, const struct env_set *es,
      const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unlink
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:184,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:186,1
    - Dst: unlink
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:185,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 188
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 188
    functionName: cleanup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - unlink
    - gc_free
    linkageType: ''
    returnType: int
    signature: 'static int cleanup(void **state) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:479,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:480,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:480,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:479,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:481,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:481,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:482,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:482,1
    - Dst: create_kt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:487,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:492,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:499,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:500,1
    - Dst: packet_id_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:506,1
    - Dst: init_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:504,1
    - Dst: epoch_init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:494,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:498,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 23
    argCount: 4
    argNames:
    - cipher
    - auth
    - epoch
    - statickey
    argTypes:
    - char*
    - char*
    - bool
    - struct key2*
    constantsTouched: []
    func_position:
      end: 508
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 508
    functionName: init_crypto_options
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - memcpy
    - epoch_iterate_send_key
    - init_key_ctx_bi
    - rand_bytes
    - ASSERT
    - packet_id_init
    - create_kt
    - epoch_init_key_ctx
    linkageType: ''
    returnType: struct crypto_options
    signature: 'static struct crypto_options init_crypto_options(const char *cipher,
      const char *auth, bool epoch, struct key2 *statickey) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:582,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 583
      start: 579
    functionDepth: 0
    functionLinenumber: 579
    functionLinenumberEnd: 583
    functionName: test_data_channel_roundtrip_aes_128_cbc
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_128_cbc(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:612,1
    - Dst: run_data_channel_with_cipher_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:618,1
    - Dst: skip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:614,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 619
      start: 609
    functionDepth: 0
    functionLinenumber: 609
    functionLinenumberEnd: 619
    functionName: test_data_channel_roundtrip_chacha20_poly1305_epoch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher_epoch
    - skip
    - cipher_valid
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_chacha20_poly1305_epoch(void
      **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:163,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:164,1
    - Dst: get_tmp_dir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:164,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:165,1
    - Dst: get_tmp_dir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:165,1
    - Dst: open
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:167,1
    - Dst: open
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:168,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:171,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:173,1
    - Dst: write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:173,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:173,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:174,1
    - Dst: close
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:175,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:173,1
    - Dst: close
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:176,1
    - Dst: write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:174,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:174,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 26
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 178
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 178
    functionName: init
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - fail_msg
    - gc_new
    - get_tmp_dir
    - write
    - close
    - open
    - strlen
    - assert_int_equal
    - platform_create_temp_file
    linkageType: ''
    returnType: int
    signature: 'static int init(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:193,1
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:197,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:209,1
    - Dst: tls_ctx_client_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:196,1
    - Dst: SSL_CTX_get0_certificate
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:204,1
    - Dst: get_tmp_dir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:209,1
    - Dst: backend_x509_write_pem
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:210,1
    - Dst: buffer_read_from_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:212,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:213,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:213,1
    - Dst: unlink
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:216,1
    - Dst: tls_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:215,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:217,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 16
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 218
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 218
    functionName: crypto_pem_encode_certificate
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - buffer_read_from_file
    - unlink
    - tls_ctx_free
    - assert_string_equal
    - BSTR
    - tls_ctx_load_cert_file
    - gc_new
    - get_tmp_dir
    - gc_free
    - SSL_CTX_get0_certificate
    - tls_ctx_client_new
    - platform_create_temp_file
    - backend_x509_write_pem
    linkageType: ''
    returnType: void
    signature: 'static void crypto_pem_encode_certificate(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:513,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:514,1
    - Dst: free_epoch_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:515,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - co
    argTypes:
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 516
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 516
    functionName: uninit_crypto_options
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - free_epoch_key_ctx
    - free_key_ctx_bi
    - packet_id_free
    linkageType: ''
    returnType: void
    signature: 'static void uninit_crypto_options(struct crypto_options *co) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:588,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 589
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 589
    functionName: test_data_channel_roundtrip_aes_192_cbc
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_192_cbc(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:624,1
    - Dst: skip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:626,1
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:629,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 630
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 630
    functionName: test_data_channel_roundtrip_bf_cbc
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    - skip
    - cipher_valid
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_bf_cbc(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 1
    argCount: 5
    argNames:
    - up
    - auth_file
    - prefix
    - flags
    - auth_challenge
    argTypes:
    - struct user_pass*
    - char*
    - char*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 79
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 79
    functionName: get_user_pass_cr
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool get_user_pass_cr(struct user_pass *up, const char *auth_file,
      const char *prefix, const unsigned int flags, const char *auth_challenge) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ACK_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:293,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - frame
    argTypes:
    - struct frame*
    constantsTouched: []
    func_position:
      end: 310
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 310
    functionName: init_frame_parameters
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - ACK_SIZE
    linkageType: ''
    returnType: void
    signature: 'static void init_frame_parameters(struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:558,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 559
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 559
    functionName: test_data_channel_roundtrip_aes_192_gcm
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_192_gcm(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:594,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 595
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 595
    functionName: test_data_channel_roundtrip_aes_256_cbc
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_256_cbc(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_data_channel_known_vectors_run
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:771,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 772
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 772
    functionName: test_data_channel_known_vectors_epoch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - test_data_channel_known_vectors_run
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_known_vectors_epoch(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - signum
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: throw_signal
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void throw_signal(const int signum) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:322,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:323,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:343,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:345,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:345,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:349,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:351,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:354,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:364,1
    - Dst: init_frame_parameters
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:319,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:329,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:342,1
    - Dst: update_time
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:331,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:349,1
    - Dst: openvpn_encrypt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:357,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:363,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:366,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:321,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:322,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:323,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:324,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:324,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:345,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:351,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:351,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:354,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:364,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:364,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:315,1
    - Dst: clear_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:325,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:329,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:342,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:345,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:350,1
    - Dst: openvpn_decrypt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:360,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:360,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 43
    argCount: 1
    argNames:
    - co
    argTypes:
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 367
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 367
    functionName: do_data_channel_round_trip
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - clear_buf
    - memcpy
    - buf_init
    - BPTR
    - BUF_SIZE
    - openvpn_decrypt
    - BLEN
    - buf_write_alloc
    - gc_new
    - rand_bytes
    - gc_free
    - update_time
    - ASSERT
    - assert_memory_equal
    - init_frame_parameters
    - assert_int_equal
    - openvpn_encrypt
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void do_data_channel_round_trip(struct crypto_options *co) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:564,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 565
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 565
    functionName: test_data_channel_roundtrip_aes_192_gcm_epoch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher_epoch
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_192_gcm_epoch(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:600,1
    - Dst: skip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:602,1
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:606,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 607
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 607
    functionName: test_data_channel_roundtrip_chacha20_poly1305
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    - skip
    - cipher_valid
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_chacha20_poly1305(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_data_channel_known_vectors_run
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 778
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 778
    functionName: test_data_channel_known_vectors_shortpktid
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - test_data_channel_known_vectors_run
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_known_vectors_shortpktid(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:784,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:787,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:790,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:792,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:794,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:800,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:802,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:798,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:796,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:810,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:788,1
    - Dst: tls_init_lib
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:807,1
    - Dst: tls_free_lib
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:813,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:789,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:791,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:793,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:795,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:797,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:803,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:801,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:799,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 817
      start: 781
    functionDepth: 0
    functionLinenumber: 781
    functionLinenumberEnd: 817
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests_name
    - tls_free_lib
    - tls_init_lib
    - cmocka_unit_test
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:270,1
    - Dst: skip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:248,1
    - Dst: buf_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:264,1
    - Dst: buf_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:265,1
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:274,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:275,1
    - Dst: tls_ctx_load_priv_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:275,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:269,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:257,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:256,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:270,1
    - Dst: tls_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:276,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:257,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:256,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:264,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:265,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:269,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:275,1
    - Dst: tls_ctx_client_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:273,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:274,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 27
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 278
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 278
    functionName: test_load_certificate_and_key_uri
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - tls_ctx_free
    - BSTR
    - assert_true
    - buf_printf
    - tls_ctx_load_cert_file
    - skip
    - tls_ctx_client_new
    - tls_ctx_load_priv_file
    - strlen
    - assert_int_equal
    - string_mod
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void test_load_certificate_and_key_uri(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_client_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:229,1
    - Dst: tls_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:232,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:231,1
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:230,1
    - Dst: tls_ctx_load_priv_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:231,1
    - Dst: tls_ctx_client_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:235,1
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:236,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:237,1
    - Dst: tls_ctx_load_priv_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:237,1
    - Dst: tls_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:238,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 239
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 239
    functionName: test_load_certificate_and_key
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - tls_ctx_free
    - tls_ctx_load_cert_file
    - tls_ctx_load_priv_file
    - tls_ctx_client_new
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_load_certificate_and_key(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:546,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 547
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 547
    functionName: test_data_channel_roundtrip_aes_128_gcm
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_128_gcm(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:570,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 571
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 571
    functionName: test_data_channel_roundtrip_aes_256_gcm
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_256_gcm(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:642,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:654,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:653,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:653,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:654,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:655,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:655,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:656,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:656,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 659
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 659
    functionName: create_key
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - memcpy
    - ASSERT
    - static_assert
    linkageType: ''
    returnType: struct key2
    signature: 'static struct key2 create_key(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: win_get_tempdir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:144,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:148,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 150
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 150
    functionName: get_tmp_dir
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - win_get_tempdir
    - assert_non_null
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_tmp_dir(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:552,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 553
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 553
    functionName: test_data_channel_roundtrip_aes_128_gcm_epoch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher_epoch
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_128_gcm_epoch(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: run_data_channel_with_cipher_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:576,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: test_data_channel_roundtrip_aes_256_gcm_epoch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - run_data_channel_with_cipher_epoch
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_roundtrip_aes_256_gcm_epoch(void **state) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:675,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:669,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:676,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:677,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:678,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:697,1
    - Dst: buf_write_u8
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:707,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:742,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:749,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:762,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:725,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:762,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:739,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:749,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:693,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:690,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:693,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:683,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:699,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:699,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:702,1
    - Dst: buf_write_u8
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:706,1
    - Dst: openvpn_encrypt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:711,1
    - Dst: BEND
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:730,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:720,1
    - Dst: openvpn_decrypt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:758,1
    - Dst: uninit_crypto_options
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:764,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:676,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:677,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:678,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:698,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:714,1
    - Dst: buf_advance
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:715,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:720,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:725,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:735,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:754,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:762,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:761,1
    - Dst: buf_write_u8
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:708,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:754,1
    - Dst: create_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:664,1
    - Dst: init_crypto_options
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:666,1
    - Dst: init_frame_parameters
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:673,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:683,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:690,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:693,1
    - Dst: clear_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:679,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:697,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:699,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:702,1
    - Dst: buf_write_u8
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:705,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:761,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:765,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 68
    argCount: 1
    argNames:
    - epoch
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 766
      start: 661
    functionDepth: 0
    functionLinenumber: 661
    functionLinenumberEnd: 766
    functionName: test_data_channel_known_vectors_run
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - memcpy
    - BLEN
    - buf_write_alloc
    - buf_write_u8
    - init_frame_parameters
    - openvpn_encrypt
    - assert_int_equal
    - create_key
    - buf_write
    - BPTR
    - gc_new
    - gc_free
    - BEND
    - clear_buf
    - uninit_crypto_options
    - buf_init
    - init_crypto_options
    - openvpn_decrypt
    - strlen
    - alloc_buf_gc
    - BUF_SIZE
    - assert_memory_equal
    - ASSERT
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static void test_data_channel_known_vectors_run(bool epoch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:59,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - errnum
    - gc
    argTypes:
    - DWORD
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 60
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 60
    functionName: strerror_win32
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: char*
    signature: 'const char *strerror_win32(DWORD errnum, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - up
    - force
    argTypes:
    - struct user_pass*
    - bool
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 84
    functionName: purge_user_pass
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void purge_user_pass(struct user_pass *up, bool force) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:376,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:377,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:375,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:378,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:378,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:380,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:388,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:383,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:395,1
    - Dst: openvpn_decrypt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:403,1
    - Dst: init_frame_parameters
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:373,1
    - Dst: clear_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:379,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:391,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:397,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:397,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:399,1
    - Dst: openvpn_encrypt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:400,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:407,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:376,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:377,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:388,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:391,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:383,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:396,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:403,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:406,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:409,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:389,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:391,1
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:391,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:395,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:397,1
    - Dst: buf_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:399,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:407,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:407,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 2
    argNames:
    - co
    - len
    argTypes:
    - struct crypto_options*
    - int
    constantsTouched: []
    func_position:
      end: 410
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 410
    functionName: encrypt_one_packet
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - clear_buf
    - memcpy
    - buf_init
    - BPTR
    - BUF_SIZE
    - openvpn_decrypt
    - BLEN
    - buf_write_alloc
    - gc_new
    - rand_bytes
    - gc_free
    - assert_memory_equal
    - ASSERT
    - init_frame_parameters
    - assert_int_equal
    - openvpn_encrypt
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void encrypt_one_packet(struct crypto_options *co, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:524,1
    - Dst: check_aead_limits
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:528,1
    - Dst: do_data_channel_round_trip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:527,1
    - Dst: uninit_crypto_options
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:529,1
    - Dst: init_crypto_options
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:526,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 530
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 530
    functionName: run_data_channel_with_cipher_epoch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - uninit_crypto_options
    - init_crypto_options
    - check_aead_limits
    - strcmp
    - do_data_channel_round_trip
    linkageType: ''
    returnType: void
    signature: 'static void run_data_channel_with_cipher_epoch(const char *cipher) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:432,1
    - Dst: encrypt_one_packet
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:434,1
    - Dst: aead_usage_limit_reached
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:448,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:442,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:448,1
    - Dst: encrypt_one_packet
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:458,1
    - Dst: encrypt_one_packet
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:459,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:462,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - co
    - chachapoly
    argTypes:
    - struct crypto_options*
    - bool
    constantsTouched: []
    func_position:
      end: 463
      start: 413
    functionDepth: 0
    functionLinenumber: 413
    functionLinenumberEnd: 463
    functionName: check_aead_limits
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - encrypt_one_packet
    - aead_usage_limit_reached
    - assert_int_equal
    - assert_true
    linkageType: ''
    returnType: void
    signature: 'static void check_aead_limits(struct crypto_options *co, bool chachapoly) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:535,1
    - Dst: do_data_channel_round_trip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:537,1
    - Dst: uninit_crypto_options
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:539,1
    - Dst: init_crypto_options
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:536,1
    - Dst: check_aead_limits
      Src: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c:538,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - cipher
    - auth
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 540
      start: 532
    functionDepth: 0
    functionLinenumber: 532
    functionLinenumberEnd: 540
    functionName: run_data_channel_with_cipher
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_ssl.c
    functionUses: []
    functionsReached:
    - uninit_crypto_options
    - init_crypto_options
    - check_aead_limits
    - strcmp
    - do_data_channel_round_trip
    linkageType: ''
    returnType: void
    signature: 'static void run_data_channel_with_cipher(const char *cipher, const
      char *auth) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_LIB_CTX_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:314,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:317,1
    - Dst: OSSL_PROVIDER_add_builtin
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:316,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:318,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:315,1
    - Dst: EVP_set_default_properties
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:321,1
    - Dst: pkcs11_initialize
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:323,1
    - Dst: pkcs11_addProvider
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:324,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 326
      start: 309
    functionDepth: 0
    functionLinenumber: 309
    functionLinenumberEnd: 326
    functionName: setup_pkcs11
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_non_null
    - pkcs11_addProvider
    - OSSL_LIB_CTX_new
    - OSSL_PROVIDER_load
    - OSSL_PROVIDER_add_builtin
    - EVP_set_default_properties
    - pkcs11_initialize
    linkageType: ''
    returnType: int
    signature: 'static int setup_pkcs11(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:350,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 4
    argCount: 1
    argNames:
    - sha1
    argTypes:
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 355
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 355
    functionName: lookup_cert_byhash
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: struct test_cert*
    signature: 'static struct test_cert *lookup_cert_byhash(uint8_t *sha1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_get_error
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:53,1
    - Dst: msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:55,1
    - Dst: ERR_error_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:55,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: crypto_print_openssl_errors
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - msg
    - ERR_get_error
    - ERR_error_string
    linkageType: ''
    returnType: void
    signature: 'void crypto_print_openssl_errors(const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11_terminate
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:331,1
    - Dst: OSSL_LIB_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:341,1
    - Dst: SIZE
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:333,1
    - Dst: OSSL_PROVIDER_unload
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:337,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 344
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 344
    functionName: teardown_pkcs11
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - pkcs11_terminate
    - SIZE
    - OSSL_LIB_CTX_free
    - OSSL_PROVIDER_unload
    linkageType: ''
    returnType: int
    signature: 'static int teardown_pkcs11(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 90
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 90
    functionName: query_user_exec_builtin
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: bool
    signature: 'bool query_user_exec_builtin(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:99,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 5
    argNames:
    - prompt
    - prompt_len
    - resp
    - resp_len
    - echo
    argTypes:
    - char*
    - size_t
    - char*
    - size_t
    - bool
    constantsTouched: []
    func_position:
      end: 100
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 100
    functionName: query_user_add
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: void
    signature: 'void query_user_add(char *prompt, size_t prompt_len, char *resp, size_t
      resp_len, bool echo) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:473,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:477,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:482,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:479,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:475,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 485
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 485
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test_setup_teardown
    - cmocka_run_group_tests_name
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 83
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 83
    functionName: query_user_exec_systemd
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: bool
    signature: 'bool query_user_exec_systemd(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:64,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 7
    argNames:
    - line
    - p
    - n
    - file
    - line_num
    - msglevel
    - gc
    argTypes:
    - char*
    - char**
    - int
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 66
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 66
    functionName: parse_line
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: int
    signature: 'int parse_line(const char *line, char **p, const int n, const char
      *file, const int line_num, int msglevel, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: secure_memzero
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:105,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - up
    - force
    argTypes:
    - struct user_pass*
    - bool
    constantsTouched: []
    func_position:
      end: 106
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 106
    functionName: purge_user_pass
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - secure_memzero
    linkageType: ''
    returnType: void
    signature: 'void purge_user_pass(struct user_pass *up, const bool force) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:186,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:187,1
    - Dst: X509_digest
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:187,1
    - Dst: EVP_sha1
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:186,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:186,1
    - Dst: EVP_sha1
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:187,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - x509
    - hash
    - capacity
    argTypes:
    - X509*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 188
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 188
    functionName: sha1_fingerprint
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - EVP_sha1
    - assert_true
    - EVP_MD_size
    - X509_digest
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void sha1_fingerprint(X509 *x509, uint8_t *hash, int capacity) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: umask
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:200,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:214,1
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:226,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:229,1
    - Dst: close
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:217,1
    - Dst: setenv_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:222,1
    - Dst: sha1_fingerprint
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:252,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:257,1
    - Dst: write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:258,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:263,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:276,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:274,1
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:268,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:267,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:265,1
    - Dst: lseek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:276,1
    - Dst: mkstemp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:209,1
    - Dst: mkdtemp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:204,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:206,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:216,1
    - Dst: env_set_create
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:221,1
    - Dst: setenv_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:223,1
    - Dst: BIO_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:249,1
    - Dst: X509_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:253,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:257,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:258,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:273,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:275,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:271,1
    - Dst: unlink
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:284,1
    - Dst: init_cert_data
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:203,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:216,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:216,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:229,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:238,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:244,1
    - Dst: write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:257,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:258,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:258,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:260,1
    - Dst: lseek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:275,1
    - Dst: unlink
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:283,1
    - Dst: close
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:282,1
    - Dst: close
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:281,1
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:261,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:269,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:212,1
    - Dst: write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:216,1
    - Dst: setenv
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:220,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:227,1
    - Dst: mkstemp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:234,1
    - Dst: mkstemp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:235,1
    - Dst: PEM_read_bio_X509
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:248,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:251,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:257,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:265,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:280,1
    - Dst: ftruncate
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:274,1
    - Dst: ftruncate
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:273,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:271,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 77
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 286
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 286
    functionName: init
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_true
    - fail_msg
    - assert_int_equal
    - lseek
    - unlink
    - ftruncate
    - assert_non_null
    - BIO_new_mem_buf
    - setenv_str
    - write
    - mkdtemp
    - env_set_create
    - sha1_fingerprint
    - openvpn_execve_check
    - close
    - argv_printf
    - argv_new
    - strlen
    - umask
    - X509_free
    - BIO_free
    - argv_free
    - snprintf
    - mkstemp
    - PEM_read_bio_X509
    - init_cert_data
    - setenv
    linkageType: ''
    returnType: int
    signature: 'static int init(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - openvpn_x509_cert_t*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: x509_get_subject
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'char *x509_get_subject(openvpn_x509_cert_t *cert, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 1
    argCount: 3
    argNames:
    - man
    - b64_data
    - algorithm
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 116
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 116
    functionName: management_query_pk_sig
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'char *management_query_pk_sig(struct management *man, const char *b64_data,
      const char *algorithm) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:292,1
    - Dst: argv_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:296,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:295,1
    - Dst: argv_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:294,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:295,1
    - Dst: rmdir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:298,1
    - Dst: unlink
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:299,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:302,1
    - Dst: env_set_destroy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:305,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 307
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 307
    functionName: cleanup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - rmdir
    - unlink
    - argv_printf
    - assert_true
    - argv_free
    - env_set_destroy
    - argv_new
    - free
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'static int cleanup(void **state) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:164,1
    - Dst: strncpynt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:167,1
    - Dst: msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:175,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:171,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:166,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 5
    argNames:
    - up
    - auth_file
    - prefix
    - flags
    - unused
    argTypes:
    - struct user_pass*
    - char*
    - char*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 180
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 180
    functionName: get_user_pass_cr
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_true
    - msg
    - snprintf
    - strcmp
    - strncpynt
    linkageType: ''
    returnType: bool
    signature: 'bool get_user_pass_cr(struct user_pass *up, const char *auth_file,
      const char *prefix, const unsigned int flags, const char *unused) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: query_user_clear
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: void
    signature: 'void query_user_clear(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:153,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 155
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: init_cert_data
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - memcpy
    - assert
    linkageType: ''
    returnType: void
    signature: 'void init_cert_data(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_tls_ctx_use_pkcs11
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:467,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 468
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 468
    functionName: test_tls_ctx_use_pkcs11__management
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - test_tls_ctx_use_pkcs11
    linkageType: ''
    returnType: void
    signature: 'static void test_tls_ctx_use_pkcs11__management(void **state) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:376,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:380,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:383,1
    - Dst: lookup_cert_byhash
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:392,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:393,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:395,1
    - Dst: sha1_fingerprint
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:387,1
    - Dst: X509_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:388,1
    - Dst: pkcs11_management_id_count
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:364,1
    - Dst: malloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:379,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:386,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:402,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:365,1
    - Dst: pkcs11_management_id_get
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:374,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:379,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:381,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:381,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:382,1
    - Dst: d2i_X509
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:386,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:389,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 30
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 405
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 405
    functionName: test_pkcs11_ids
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - assert_non_null
    - assert_true
    - fail_msg
    - pkcs11_management_id_count
    - openvpn_base64_decode
    - X509_free
    - assert_memory_equal
    - sha1_fingerprint
    - malloc
    - free
    - lookup_cert_byhash
    - strlen
    - assert_int_equal
    - pkcs11_management_id_get
    - d2i_X509
    linkageType: ''
    returnType: void
    signature: 'static void test_pkcs11_ids(void **state) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_use_pkcs11
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:429,1
    - Dst: SSL_CTX_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:421,1
    - Dst: tls_ctx_use_pkcs11
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:434,1
    - Dst: X509_get0_pubkey
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:444,1
    - Dst: SSL_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:458,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:452,1
    - Dst: SSL_CTX_new_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:419,1
    - Dst: SSLv23_client_method
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:419,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:441,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:450,1
    - Dst: SSLv23_client_method
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:421,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:454,1
    - Dst: SSL_CTX_get0_privatekey
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:445,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:447,1
    - Dst: SSL_CTX_get0_certificate
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:438,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:439,1
    - Dst: sha1_fingerprint
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:440,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:446,1
    - Dst: digest_sign_verify
      Src: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c:450,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 460
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 460
    functionName: test_tls_ctx_use_pkcs11
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_pkcs11.c
    functionUses: []
    functionsReached:
    - SSL_CTX_new
    - SSLv23_client_method
    - assert_non_null
    - SSL_CTX_get0_privatekey
    - fail_msg
    - SSL_CTX_check_private_key
    - X509_get0_pubkey
    - SSL_CTX_get0_certificate
    - sha1_fingerprint
    - assert_memory_equal
    - digest_sign_verify
    - SSL_CTX_new_ex
    - assert_int_equal
    - tls_ctx_use_pkcs11
    - SSL_CTX_free
    linkageType: ''
    returnType: void
    signature: 'static void test_tls_ctx_use_pkcs11(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:86,1
    - Dst: auth_token_kt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:92,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:107,1
    - Dst: calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:101,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:106,1
    - Dst: init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:109,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 113
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 113
    functionName: setup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - auth_token_kt
    - strcpy
    - init_key_ctx
    - calloc
    linkageType: ''
    returnType: int
    signature: 'static int setup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 2
    argNames:
    - multi
    - reason
    argTypes:
    - struct tls_multi*
    - char*
    constantsTouched: []
    func_position:
      end: 56
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 56
    functionName: auth_set_client_reason
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void auth_set_client_reason(struct tls_multi *multi, const char *reason) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:134,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:136,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:136,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:135,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 138
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 138
    functionName: auth_token_basic_test
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - assert_int_equal
    - strcpy
    - generate_auth_token
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_basic_test(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:182,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:178,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:182,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:192,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:207,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:177,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:187,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:202,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:210,1
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:219,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:225,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:230,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:230,1
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:175,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:192,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:197,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:207,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:197,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:220,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:187,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:202,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:217,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:217,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:225,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 57
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 232
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 232
    functionName: auth_token_test_timeout
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - generate_auth_token
    - strcpy
    - free
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_test_timeout(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strdup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:249,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:250,1
    - Dst: zerohmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:253,1
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:255,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:257,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:259,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:260,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:260,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 262
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 262
    functionName: auth_token_test_known_keys
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - zerohmac
    - assert_string_equal
    - assert_non_null
    - strdup
    - generate_auth_token
    - strcpy
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_test_known_keys(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:268,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 3
    argNames:
    - es
    - name
    - value
    argTypes:
    - struct env_set*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 272
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 272
    functionName: setenv_str
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - streq
    linkageType: ''
    returnType: void
    signature: 'void setenv_str(struct env_set *es, const char *name, const char *value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:311,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:315,1
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:314,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:316,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:316,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:320,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:320,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:322,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:325,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:325,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:328,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:330,1
    - Dst: zerohmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:333,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:334,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:330,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:334,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 336
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 336
    functionName: auth_token_test_empty_user
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - zerohmac
    - generate_auth_token
    - strcpy
    - CLEAR
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_test_empty_user(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strdup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:379,1
    - Dst: auth_token_init_secret
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:383,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:380,1
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:382,1
    - Dst: zerohmac
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:386,1
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:388,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:390,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:392,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:393,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:393,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 394
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 394
    functionName: auth_token_test_random_keys
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - zerohmac
    - assert_string_equal
    - auth_token_init_secret
    - assert_non_null
    - strdup
    - assert_true
    - generate_auth_token
    - strcpy
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_test_random_keys(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:120,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:123,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:124,1
    - Dst: wipe_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:121,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 127
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 127
    functionName: teardown
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - wipe_auth_token
    - free_key_ctx
    - free
    linkageType: ''
    returnType: int
    signature: 'static int teardown(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:145,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:147,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:152,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:146,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:147,1
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:155,1
    - Dst: init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:156,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:158,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:158,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:161,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:164,1
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:162,1
    - Dst: init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:163,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:164,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 167
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 167
    functionName: auth_token_fail_invalid_key
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - generate_auth_token
    - strcpy
    - memset
    - assert_int_equal
    - init_key_ctx
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_fail_invalid_key(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:238,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:239,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - token
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 240
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 240
    functionName: zerohmac
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - strlen
    - memset
    linkageType: ''
    returnType: void
    signature: 'static void zerohmac(char *token) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:280,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:281,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:282,1
    - Dst: strdup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:285,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:282,1
    - Dst: wipe_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:288,1
    - Dst: generate_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:290,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:291,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:292,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:292,1
    - Dst: assert_int_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:295,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:296,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:301,1
    - Dst: memcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:295,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:302,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:295,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:303,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:302,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 304
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 304
    functionName: auth_token_test_session_mismatch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - assert_int_not_equal
    - strdup
    - generate_auth_token
    - strlen
    - strcpy
    - wipe_auth_token
    - free
    - memcmp
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void auth_token_test_session_mismatch(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: add_session_token_env
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:347,1
    - Dst: add_session_token_env
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:352,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:353,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:351,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:348,1
    - Dst: add_session_token_env
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:356,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:357,1
    - Dst: add_session_token_env
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:360,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:361,1
    - Dst: add_session_token_env
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:364,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:365,1
    - Dst: add_session_token_env
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:368,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:369,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 370
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 370
    functionName: auth_token_test_env
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - strcpy
    - add_session_token_env
    - assert_string_equal
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_test_env(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:402,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:405,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:405,1
    - Dst: auth_token_init_secret
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:403,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:404,1
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:407,1
    - Dst: auth_token_init_secret
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:408,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:409,1
    - Dst: verify_auth_token
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:409,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 410
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 410
    functionName: auth_token_test_key_load
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - verify_auth_token
    - auth_token_init_secret
    - assert_true
    - assert_false
    - strcpy
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'static void auth_token_test_key_load(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:415,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:418,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:420,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:417,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:419,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:421,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:422,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:423,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:424,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:425,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:432,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c:429,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 435
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 435
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests_name
    - cmocka_unit_test_setup_teardown
    - OpenSSL_add_all_algorithms
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: send_push_reply_auth_token
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_auth_token.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void send_push_reply_auth_token(struct tls_multi *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_management.c:41,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 3
    argNames:
    - man
    - type
    - reason
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 42
    functionName: management_auth_failure
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_management.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void management_auth_failure(struct management *man, const char *type,
      const char *reason) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 1
    argCount: 3
    argNames:
    - man
    - b64_data
    - algorithm
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 49
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 49
    functionName: management_query_pk_sig
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_management.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'char *management_query_pk_sig(struct management *man, const char *b64_data,
      const char *algorithm) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:110,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:113,1
    - Dst: BIO_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:116,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:111,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:114,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - pem
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 118
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 118
    functionName: load_pubkey
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - BIO_free
    - assert_non_null
    linkageType: ''
    returnType: EVP_PKEY*
    signature: 'static EVP_PKEY *load_pubkey(const char *pem) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:139,1
    - Dst: test_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:146,1
    - Dst: OSSL_PROVIDER_unload
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:143,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 147
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 147
    functionName: uninit_test
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_unload
    - _countof
    - test_free
    linkageType: ''
    returnType: void
    signature: 'static void uninit_test(void) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_get_id
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:234,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:241,1
    - Dst: EVP_MD_CTX_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:251,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:237,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:238,1
    - Dst: EVP_PKEY_get_id
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:243,1
    - Dst: EVP_DigestSignInit_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:254,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:256,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:266,1
    - Dst: EVP_MD_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:273,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:236,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:246,1
    - Dst: EVP_DigestSign
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:261,1
    - Dst: EVP_DigestSign
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:268,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:262,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:268,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:261,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:261,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:268,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:240,1
    - Dst: test_calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:264,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 42
    argCount: 1
    argNames:
    - pkey
    argTypes:
    - EVP_PKEY*
    constantsTouched: []
    func_position:
      end: 276
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 276
    functionName: digest_sign
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - OSSL_PARAM_construct_end
    - test_calloc
    - EVP_DigestSign
    - EVP_MD_CTX_free
    - assert_true
    - fail_msg
    - EVP_MD_CTX_new
    - EVP_PKEY_get_id
    - EVP_DigestSignInit_ex
    - strlen
    - assert_int_equal
    - OSSL_PARAM_construct_utf8_string
    linkageType: ''
    returnType: uint8_t*
    signature: 'static uint8_t *digest_sign(EVP_PKEY *pkey) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:384,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:387,1
    - Dst: xkey_load_generic_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:389,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:390,1
    - Dst: load_pubkey
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:386,1
    - Dst: digest_sign
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:394,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:395,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:398,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:399,1
    - Dst: test_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:400,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:402,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:406,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:403,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 408
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 408
    functionName: xkey_provider_test_generic_sign_cb
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - _countof
    - assert_non_null
    - assert_true
    - test_free
    - load_pubkey
    - assert_memory_equal
    - digest_sign
    - assert_int_equal
    - xkey_load_generic_key
    linkageType: ''
    returnType: void
    signature: 'static void xkey_provider_test_generic_sign_cb(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:123,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:126,1
    - Dst: OSSL_PROVIDER_add_builtin
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:125,1
    - Dst: EVP_set_default_properties
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:129,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:124,1
    - Dst: test_calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:132,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 134
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 134
    functionName: init_test
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_load
    - OSSL_PROVIDER_add_builtin
    - EVP_set_default_properties
    - test_calloc
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: void
    signature: 'static void init_test(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:327,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - handle
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 328
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 328
    functionName: xkey_free
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    linkageType: ''
    returnType: void
    signature: 'static void xkey_free(void *handle) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:413,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:420,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:418,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:416,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:423,1
    - Dst: uninit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:425,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 427
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 427
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test
    - init_test
    - cmocka_run_group_tests_name
    - uninit_test
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:196,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:203,1
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:200,1
    - Dst: OSSL_PROVIDER_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:196,1
    - Dst: EVP_SIGNATURE_fetch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:202,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:204,1
    - Dst: OSSL_PROVIDER_get0_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:204,1
    - Dst: EVP_SIGNATURE_get0_provider
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:204,1
    - Dst: EVP_SIGNATURE_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:206,1
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:211,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:215,1
    - Dst: OSSL_PROVIDER_get0_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:215,1
    - Dst: EVP_KEYMGMT_fetch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:213,1
    - Dst: EVP_KEYMGMT_get0_provider
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:215,1
    - Dst: EVP_KEYMGMT_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:217,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:214,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 219
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 219
    functionName: xkey_provider_test_fetch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_available
    - _countof
    - assert_string_equal
    - assert_non_null
    - assert_true
    - EVP_KEYMGMT_get0_provider
    - EVP_KEYMGMT_free
    - EVP_KEYMGMT_fetch
    - OSSL_PROVIDER_get0_name
    - EVP_SIGNATURE_fetch
    - EVP_SIGNATURE_free
    - EVP_SIGNATURE_get0_provider
    linkageType: ''
    returnType: void
    signature: 'static void xkey_provider_test_fetch(void **state) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strstr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:165,1
    - Dst: strstr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:172,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:172,1
    - Dst: strstr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:170,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:175,1
    - Dst: strstr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:178,1
    - Dst: strstr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:178,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:180,1
    - Dst: strstr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:180,1
    - Dst: strdup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:186,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:187,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 22
    argCount: 3
    argNames:
    - man
    - b64_data
    - algorithm
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 190
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 190
    functionName: management_query_pk_sig
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - assert_non_null
    - strdup
    - assert_string_equal
    - strstr
    linkageType: ''
    returnType: char*
    signature: 'char *management_query_pk_sig(struct management *man, const char *b64_data,
      const char *algorithm) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:342,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:344,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:348,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:352,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:344,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:354,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:358,1
    - Dst: OBJ_sn2nid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:358,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:360,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:362,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:364,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:370,1
    - Dst: min_size
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:370,1
    - Dst: fail_msg
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:366,1
    - Dst: strcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:364,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 30
    argCount: 6
    argNames:
    - handle
    - sig
    - siglen
    - tbs
    - tbslen
    - s
    argTypes:
    - void*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    - XKEY_SIGALG
    constantsTouched: []
    func_position:
      end: 373
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 373
    functionName: xkey_sign
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - memcpy
    - assert_string_equal
    - fail_msg
    - strcmp
    - assert_memory_equal
    - min_size
    - strlen
    - assert_int_equal
    - OBJ_sn2nid
    linkageType: ''
    returnType: int
    signature: 'static int xkey_sign(void *handle, unsigned char *sig, size_t *siglen,
      const unsigned char *tbs, size_t tbslen, XKEY_SIGALG s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 433
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 433
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:287,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:290,1
    - Dst: xkey_load_management_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:291,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:292,1
    - Dst: load_pubkey
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:289,1
    - Dst: digest_sign
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:299,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:300,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:303,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:304,1
    - Dst: test_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:305,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:313,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_provider.c:314,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 316
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 316
    functionName: xkey_provider_test_mgmt_sign_cb
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - _countof
    - assert_non_null
    - assert_true
    - test_free
    - load_pubkey
    - assert_memory_equal
    - digest_sign
    - assert_int_equal
    - xkey_load_management_key
    linkageType: ''
    returnType: void
    signature: 'static void xkey_provider_test_mgmt_sign_cb(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_expand_label
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:617,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:623,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 624
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 624
    functionName: crypto_test_ovpn_label_expand
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_memory_equal
    - ovpn_expand_label
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_ovpn_label_expand(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_KDF_fetch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:644,1
    - Dst: OSSL_PARAM_construct_int
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:659,1
    - Dst: EVP_KDF_CTX_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:651,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:645,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:652,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:660,1
    - Dst: OSSL_PARAM_construct_octet_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:662,1
    - Dst: OSSL_PARAM_construct_octet_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:664,1
    - Dst: OSSL_PARAM_construct_octet_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:667,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:670,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:676,1
    - Dst: EVP_KDF_derive
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:672,1
    - Dst: EVP_KDF_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:674,1
    - Dst: EVP_KDF_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:673,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 21
    argCount: 8
    argNames:
    - secret
    - secret_len
    - label
    - label_len
    - context
    - context_len
    - out
    - out_len
    argTypes:
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - uint8_t*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 678
      start: 632
    functionDepth: 0
    functionLinenumber: 632
    functionLinenumberEnd: 678
    functionName: ossl_expand_label
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - OSSL_PARAM_construct_end
    - EVP_KDF_fetch
    - EVP_KDF_free
    - assert_non_null
    - EVP_KDF_CTX_free
    - OSSL_PARAM_construct_octet_string
    - OSSL_PARAM_construct_int
    - EVP_KDF_CTX_new
    - EVP_KDF_derive
    - assert_int_equal
    - OSSL_PARAM_construct_utf8_string
    linkageType: ''
    returnType: bool
    signature: 'bool ossl_expand_label(const uint8_t *secret, size_t secret_len, const
      uint8_t *label, size_t label_len, const uint8_t *context, size_t context_len,
      uint8_t *out, uint16_t out_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ossl_expand_label
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:693,1
    - Dst: ovpn_expand_label
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:698,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:699,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 700
      start: 680
    functionDepth: 0
    functionLinenumber: 680
    functionLinenumberEnd: 700
    functionName: crypto_test_ovpn_expand_openssl3
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - ossl_expand_label
    - assert_memory_equal
    - ovpn_expand_label
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_ovpn_expand_openssl3(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:721,1
    - Dst: init_key_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:725,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:723,1
    - Dst: epoch_init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:731,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 736
      start: 717
    functionDepth: 0
    functionLinenumber: 717
    functionLinenumberEnd: 736
    functionName: crypto_test_epoch_setup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - epoch_init_key_ctx
    - init_key_type
    - calloc
    - gc_new
    linkageType: ''
    returnType: int
    signature: 'static int crypto_test_epoch_setup(void **state) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:97,1
    - Dst: string_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:100,1
    - Dst: string_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:101,1
    - Dst: string_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:102,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:104,1
    - Dst: toupper
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:106,1
    - Dst: tolower
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:107,1
    - Dst: rand
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:108,1
    - Dst: test_translate_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:123,1
    - Dst: test_translate_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:124,1
    - Dst: test_translate_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:125,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:129,1
    - Dst: test_translate_cipher
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:126,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 26
    argCount: 2
    argNames:
    - ciphername
    - openvpn_name
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 130
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 130
    functionName: test_cipher_names
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - test_translate_cipher
    - rand
    - tolower
    - toupper
    - gc_new
    - gc_free
    - strlen
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static void test_cipher_names(const char *ciphername, const char *openvpn_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_cipher_names
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:136,1
    - Dst: test_cipher_names
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:139,1
    - Dst: test_cipher_names
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:138,1
    - Dst: test_cipher_names
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:137,1
    - Dst: test_cipher_names
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:140,1
    - Dst: test_cipher_names
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:141,1
    - Dst: test_cipher_names
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:142,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 143
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 143
    functionName: crypto_translate_cipher_names
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - test_cipher_names
    linkageType: ''
    returnType: void
    signature: 'static void crypto_translate_cipher_names(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:156,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:170,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:168,1
    - Dst: ssl_tls1_PRF
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:164,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:160,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:175,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 177
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 177
    functionName: crypto_test_tls_prf
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - ssl_tls1_PRF
    - assert_true
    - assert_false
    - assert_memory_equal
    - strlen
    linkageType: ''
    returnType: void
    signature: 'static void crypto_test_tls_prf(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: skip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:706,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 707
      start: 703
    functionDepth: 0
    functionLinenumber: 703
    functionLinenumberEnd: 707
    functionName: crypto_test_ovpn_expand_openssl3
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - skip
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_ovpn_expand_openssl3(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:55,1
    - Dst: crypto_pem_decode
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:69,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:73,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:72,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:75,1
    - Dst: crypto_pem_encode
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:65,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:66,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:71,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:72,1
    - Dst: buf_set_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:61,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:66,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:69,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:73,1
    - Dst: buf_set_read
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:57,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:65,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:66,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:72,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:73,1
    - Dst: crypto_pem_decode
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:71,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:73,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 76
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 76
    functionName: crypto_pem_encode_decode_loopback
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - crypto_pem_encode
    - BPTR
    - assert_true
    - crypto_pem_decode
    - BLEN
    - gc_new
    - assert_false
    - gc_free
    - buf_set_write
    - assert_memory_equal
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void crypto_pem_encode_decode_loopback(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:243,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:244,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:270,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:308,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:309,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:285,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:271,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:336,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:337,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:341,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:284,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:290,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:276,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:291,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:275,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:314,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:315,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:321,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:322,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:327,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:328,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:230,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:252,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:253,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:258,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:259,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:264,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:265,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:342,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:345,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 79
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 346
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 346
    functionName: test_occ_mtu_calculation
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_int_equal
    - calc_options_string_link_mtu
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void test_occ_mtu_calculation(void **state) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:368,1
    - Dst: init_key_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:377,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:379,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:421,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:454,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:351,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:369,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:392,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:451,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:425,1
    - Dst: init_key_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:365,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:378,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:395,1
    - Dst: init_key_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:384,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:403,1
    - Dst: init_key_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:441,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:418,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:448,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:399,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:429,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 61
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 455
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 455
    functionName: test_mssfix_mtu_calculation
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - init_key_type
    - gc_new
    - frame_calculate_dynamic
    - gc_free
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_mssfix_mtu_calculation(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_hkdf_expand
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:571,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:573,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 574
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 574
    functionName: crypto_test_hkdf_expand_testa3
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_memory_equal
    - ovpn_hkdf_expand
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_hkdf_expand_testa3(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_epoch_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:742,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:745,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:743,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:744,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 747
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 747
    functionName: crypto_test_epoch_teardown
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - free_epoch_key_ctx
    - free_key_ctx_bi
    - gc_free
    - free
    linkageType: ''
    returnType: int
    signature: 'static int crypto_test_epoch_teardown(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:785,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:790,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:802,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:806,1
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:800,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:801,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:807,1
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:780,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:784,1
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:794,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:798,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:783,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:782,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:792,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:804,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:797,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:795,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:796,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:803,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 808
      start: 773
    functionDepth: 0
    functionLinenumber: 773
    functionLinenumberEnd: 808
    functionName: crypto_test_epoch_key_rotation
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - epoch_iterate_send_key
    - epoch_replace_update_recv_key
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_epoch_key_rotation(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_valid
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:81,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:91,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:89,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - ciphername
    - openvpn_name
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 92
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 92
    functionName: test_translate_cipher
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - cipher_kt_name
    - cipher_valid
    linkageType: ''
    returnType: void
    signature: 'static void test_translate_cipher(const char *ciphername, const char
      *openvpn_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:462,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:473,1
    - Dst: cipher_get_aead_limits
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:464,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:466,1
    - Dst: cipher_get_aead_limits
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:462,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:477,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 478
      start: 457
    functionDepth: 0
    functionLinenumber: 457
    functionLinenumberEnd: 478
    functionName: crypto_test_aead_limits
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_int_equal
    - cipher_get_aead_limits
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_aead_limits(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_hkdf_expand
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:601,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:603,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 604
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 604
    functionName: crypto_test_hkdf_expand_test_ovpn
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_memory_equal
    - ovpn_hkdf_expand
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_hkdf_expand_test_ovpn(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:756,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:757,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:759,1
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:762,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:758,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:763,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:765,1
    - Dst: epoch_generate_future_receive_keys
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:767,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:768,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:769,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 770
      start: 749
    functionDepth: 0
    functionLinenumber: 749
    functionLinenumberEnd: 770
    functionName: crypto_test_epoch_key_generation
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_int_equal
    - CLEAR
    - free_key_ctx
    - epoch_generate_future_receive_keys
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_epoch_key_generation(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:817,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:823,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:825,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:826,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:836,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:843,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:846,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:847,1
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:852,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:853,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:843,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:858,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:842,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:845,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:857,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:855,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:865,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:818,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:819,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:822,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:824,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:825,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:828,1
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:832,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:834,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:835,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:838,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:840,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:859,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:862,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:861,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:839,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:863,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:858,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:866,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:864,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:817,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:827,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:835,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:842,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:841,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:844,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:844,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:845,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:846,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:847,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:840,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:856,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:861,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:855,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:854,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:865,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:853,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:862,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:863,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:859,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:819,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:818,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:822,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:826,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:827,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:828,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:824,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:834,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:836,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:838,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:856,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:857,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:860,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:866,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:864,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:860,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:841,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:839,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:854,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 76
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 867
      start: 810
    functionDepth: 0
    functionLinenumber: 810
    functionLinenumberEnd: 867
    functionName: crypto_test_epoch_key_receive_lookup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - epoch_lookup_decrypt_key
    - epoch_replace_update_recv_key
    - assert_null
    - assert_ptr_equal
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_epoch_key_receive_lookup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hmac_ctx_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:187,1
    - Dst: md_kt_size
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:189,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:195,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:196,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:210,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:221,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:189,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:195,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:199,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:206,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:217,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:218,1
    - Dst: memcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:192,1
    - Dst: hmac_ctx_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:194,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:207,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:208,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:206,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:202,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:216,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:217,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:196,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:201,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:207,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:205,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:213,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:215,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:216,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:220,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:222,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 30
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 223
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 223
    functionName: crypto_test_hmac
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - memcpy
    - hmac_ctx_reset
    - hmac_ctx_init
    - hmac_ctx_final
    - hmac_ctx_free
    - hmac_ctx_update
    - assert_memory_equal
    - md_kt_size
    - hmac_ctx_new
    - strlen
    - assert_int_equal
    - memset
    - hmac_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'static void crypto_test_hmac(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_hkdf_expand
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:502,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:504,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 505
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 505
    functionName: crypto_test_hkdf_expand_testa1
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_memory_equal
    - ovpn_hkdf_expand
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_hkdf_expand_testa1(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:892,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:898,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:897,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:898,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:897,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:902,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:903,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:903,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:904,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:904,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:908,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:909,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:910,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:910,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:909,1
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:907,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:908,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 40
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 911
      start: 869
    functionDepth: 0
    functionLinenumber: 869
    functionLinenumberEnd: 911
    functionName: crypto_test_epoch_key_overflow
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - epoch_replace_update_recv_key
    - epoch_lookup_decrypt_key
    - assert_null
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_epoch_key_overflow(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_hkdf_expand
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:544,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:546,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 547
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 547
    functionName: crypto_test_hkdf_expand_testa2
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - assert_memory_equal
    - ovpn_hkdf_expand
    linkageType: ''
    returnType: void
    signature: 'void crypto_test_hkdf_expand_testa2(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init_key_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:919,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:924,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:935,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:925,1
    - Dst: epoch_data_key_derive
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:922,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:936,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 937
      start: 913
    functionDepth: 0
    functionLinenumber: 913
    functionLinenumberEnd: 937
    functionName: epoch_test_derive_data_key
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - init_key_type
    - epoch_data_key_derive
    - assert_memory_equal
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'void epoch_test_derive_data_key(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_cleanup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:987,1
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:946,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:951,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:953,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:955,1
    - Dst: cmocka_unit_test_prestate_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:961,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:960,1
    - Dst: cmocka_unit_test_prestate_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:965,1
    - Dst: cmocka_unit_test_prestate_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:973,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:957,1
    - Dst: cmocka_unit_test_prestate_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:969,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:948,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:949,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:981,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:950,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:952,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:954,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:956,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:959,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:977,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:958,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c:984,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 991
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 991
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_crypto.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test_prestate_setup_teardown
    - cmocka_run_group_tests_name
    - EVP_cleanup
    - OpenSSL_add_all_algorithms
    - cmocka_unit_test
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:72,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:73,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 75
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 75
    functionName: test_packet_id_write_teardown
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - gc_free
    - free
    linkageType: ''
    returnType: int
    signature: 'static int test_packet_id_write_teardown(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:95,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:97,1
    - Dst: packet_id_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:95,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:96,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:98,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:98,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:99,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:99,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 100
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 100
    functionName: test_packet_id_write_long
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - assert_true
    - assert_int_equal
    - htonl
    - packet_id_write
    linkageType: ''
    returnType: void
    signature: 'static void test_packet_id_write_long(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:122,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:125,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:124,1
    - Dst: packet_id_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:122,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:123,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:125,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:126,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:126,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 127
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 127
    functionName: test_packet_id_write_long_prepend
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - assert_true
    - assert_int_equal
    - htonl
    - packet_id_write
    linkageType: ''
    returnType: void
    signature: 'static void test_packet_id_write_long_prepend(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:154,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:154,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:150,1
    - Dst: packet_id_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:150,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:156,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:157,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:158,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:158,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:159,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:159,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 160
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 160
    functionName: test_packet_id_write_long_wrap
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - assert_true
    - assert_false
    - packet_id_write
    - assert_int_equal
    - htonl
    linkageType: ''
    returnType: void
    signature: 'static void test_packet_id_write_long_wrap(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:227,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:225,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:230,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:238,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:246,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:255,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:258,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:261,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:220,1
    - Dst: packet_id_write_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:223,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:227,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:231,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:235,1
    - Dst: packet_id_write_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:244,1
    - Dst: packet_id_write_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:236,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:243,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:249,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:254,1
    - Dst: packet_id_read_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:254,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:257,1
    - Dst: packet_id_read_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:257,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:260,1
    - Dst: packet_id_read_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:260,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:223,1
    - Dst: packet_id_write_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:231,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:246,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:244,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:236,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:238,1
    - Dst: packet_id_write_epoch
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:249,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 262
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 262
    functionName: test_packet_id_write_epoch
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - BPTR
    - assert_true
    - packet_id_read_epoch
    - assert_false
    - packet_id_write_epoch
    - assert_memory_equal
    - assert_int_equal
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void test_packet_id_write_epoch(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:53,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:62,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 66
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 66
    functionName: test_packet_id_write_setup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - calloc
    - gc_new
    linkageType: ''
    returnType: int
    signature: 'static int test_packet_id_write_setup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:109,1
    - Dst: packet_id_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:109,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:110,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:111,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:111,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:112,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 113
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 113
    functionName: test_packet_id_write_short_prepend
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - assert_true
    - htonl
    - packet_id_write
    linkageType: ''
    returnType: void
    signature: 'static void test_packet_id_write_short_prepend(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:83,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:85,1
    - Dst: packet_id_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:83,1
    - Dst: htonl
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:85,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:84,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:86,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 87
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 87
    functionName: test_packet_id_write_short
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - assert_true
    - htonl
    - packet_id_write
    linkageType: ''
    returnType: void
    signature: 'static void test_packet_id_write_short(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:136,1
    - Dst: packet_id_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:136,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 137
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 137
    functionName: test_packet_id_write_short_wrap
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_write
    - assert_false
    linkageType: ''
    returnType: void
    signature: 'static void test_packet_id_write_short_wrap(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:166,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:174,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:178,1
    - Dst: reliable_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:167,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:174,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:178,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:187,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:187,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:193,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:193,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:202,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:210,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:210,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:207,1
    - Dst: reliable_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:212,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:207,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:202,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 42
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 213
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 213
    functionName: test_get_num_output_sequenced_available
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - reliable_free
    - reliable_get_num_output_sequenced_available
    - reliable_init
    - malloc
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_get_num_output_sequenced_available(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:311,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:312,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:313,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:276,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:274,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:275,1
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:279,1
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:303,1
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:319,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:322,1
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:310,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:305,1
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:272,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:280,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:281,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:282,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:283,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:314,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:306,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:273,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:290,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:291,1
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:296,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:297,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:289,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:298,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:299,1
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:288,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:304,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:324,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:307,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 325
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 325
    functionName: test_copy_acks_to_lru
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - copy_acks_to_mru
    - assert_int_equal
    - assert_memory_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_copy_acks_to_lru(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:330,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:338,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:335,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:341,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:332,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:344,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:347,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:350,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:354,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:355,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c:359,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 360
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 360
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_packet_id.c
    functionUses: []
    functionsReached:
    - cmocka_unit_test_setup_teardown
    - cmocka_run_group_tests_name
    - openvpn_unit_test_setup
    - cmocka_unit_test
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:81,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 7
    argNames:
    - line
    - p
    - n
    - file
    - line_num
    - msglevel
    - gc
    argTypes:
    - char*
    - char**
    - int
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 83
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 83
    functionName: parse_line
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: int
    signature: 'int parse_line(const char *line, char **p, const int n, const char
      *file, const int line_num, int msglevel, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_expected
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:55,1
    - Dst: mock
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:59,1
    - Dst: strncpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:56,1
    - Dst: mock_ptr_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:56,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 60
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 60
    functionName: query_user_exec_builtin
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - strncpy
    - mock
    - mock_ptr_type
    - check_expected
    linkageType: ''
    returnType: bool
    signature: 'bool query_user_exec_builtin(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: protect_buffer_win32
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool protect_buffer_win32(char *buf, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:104,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:105,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - up
    argTypes:
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 106
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 106
    functionName: reset_user_pass
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - strcpy
    linkageType: ''
    returnType: void
    signature: 'static void reset_user_pass(struct user_pass *up) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:121,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:128,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:125,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:126,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:124,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:129,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:129,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:130,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:131,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:133,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:135,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:140,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:140,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:139,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:137,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:136,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:142,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:141,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 143
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 143
    functionName: test_get_user_pass_needok
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - get_user_pass_cr
    - reset_user_pass
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_get_user_pass_needok(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:223,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:224,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:225,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:230,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:233,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:239,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:242,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:227,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:228,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:231,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:220,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:226,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:240,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:239,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:238,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:228,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:229,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:237,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:236,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:241,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 243
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 243
    functionName: test_get_user_pass_authfile_stdin
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - get_user_pass_cr
    - reset_user_pass
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_get_user_pass_authfile_stdin(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:291,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:296,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:295,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:298,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:297,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:298,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:299,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:300,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:301,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 302
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 302
    functionName: test_get_user_pass_dynamic_challenge
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - get_user_pass_cr
    - reset_user_pass
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_get_user_pass_dynamic_challenge(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:64,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 3
    argNames:
    - man
    - type
    - reason
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: management_auth_failure
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: void
    signature: 'void management_auth_failure(struct management *man, const char *type,
      const char *reason) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: unprotect_buffer_win32
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool unprotect_buffer_win32(char *buf, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:112,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:114,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:114,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 115
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 115
    functionName: test_get_user_pass_defined
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_true
    - get_user_pass_cr
    - reset_user_pass
    linkageType: ''
    returnType: void
    signature: 'static void test_get_user_pass_defined(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:149,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:154,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:157,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:163,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:174,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:166,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:168,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:186,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:190,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:193,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:177,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:165,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:182,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:184,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:185,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:191,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:200,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:203,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:211,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:213,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:198,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:155,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:154,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:178,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:180,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:188,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:188,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:198,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:199,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:201,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:210,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:197,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:153,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:156,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:159,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:165,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:177,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:170,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:167,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:179,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:189,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:206,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:212,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:210,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:208,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:207,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 49
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 214
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 214
    functionName: test_get_user_pass_inline_creds
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - get_user_pass_cr
    - reset_user_pass
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_get_user_pass_inline_creds(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:257,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:256,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:260,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:269,1
    - Dst: openvpn_test_get_srcdir_dir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:277,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:282,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:267,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:279,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:280,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:283,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:257,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:258,1
    - Dst: openvpn_test_get_srcdir_dir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:264,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:265,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:269,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:274,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:266,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:271,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:249,1
    - Dst: openvpn_test_get_srcdir_dir
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:253,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:259,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:262,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:272,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:270,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:280,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:281,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 284
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 284
    functionName: test_get_user_pass_authfile_file
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - openvpn_test_get_srcdir_dir
    - assert_string_equal
    - assert_true
    - get_user_pass_cr
    - reset_user_pass
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_get_user_pass_authfile_file(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:315,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:314,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:322,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:331,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:330,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:337,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:350,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:351,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:353,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:354,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:308,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:316,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:320,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:324,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:326,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:335,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:336,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:338,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:339,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:349,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:355,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:312,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:313,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:319,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:333,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:332,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:340,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:353,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:357,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:317,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:318,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:320,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:321,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:334,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:338,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:342,1
    - Dst: reset_user_pass
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:344,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:352,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 42
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 358
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 358
    functionName: test_get_user_pass_static_challenge
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - get_user_pass_cr
    - reset_user_pass
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_get_user_pass_static_challenge(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:376,1
    - Dst: cmocka_run_group_tests
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 378
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 378
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:73,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 5
    argNames:
    - man
    - up
    - type
    - flags
    - static_challenge
    argTypes:
    - struct management*
    - struct user_pass*
    - char*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 75
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 75
    functionName: management_query_user_pass
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: bool
    signature: 'bool management_query_user_pass(struct management *man, struct user_pass
      *up, const char *type, const unsigned int flags, const char *static_challenge) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: query_user_exec_builtin
      Src: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: query_user_exec_systemd
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_user_pass.c
    functionUses: []
    functionsReached:
    - query_user_exec_builtin
    linkageType: ''
    returnType: bool
    signature: 'bool query_user_exec_systemd(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_common.h:37,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_common.h:38,1
    - Dst: setvbuf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_common.h:38,1
    - Dst: setvbuf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_common.h:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: openvpn_unit_test_setup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_common.h
    functionUses: []
    functionsReached:
    - assert_int_equal
    - setvbuf
    linkageType: ''
    returnType: void
    signature: 'static inline void openvpn_unit_test_setup(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/openvpn/tests/unit_tests/openvpn/test_common.h:55,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_common.h:65,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_common.h:63,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 3
    argNames:
    - buf
    - bufsize
    - filename
    argTypes:
    - char*
    - size_t
    - char*
    constantsTouched: []
    func_position:
      end: 66
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 66
    functionName: openvpn_test_get_srcdir_dir
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_common.h
    functionUses: []
    functionsReached:
    - snprintf
    - getenv
    - assert_non_null
    linkageType: ''
    returnType: void
    signature: 'void openvpn_test_get_srcdir_dir(char *buf, size_t bufsize, const
      char *filename) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:89,1
    - Dst: format_hex_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:94,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:95,1
    - Dst: format_hex_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:98,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:99,1
    - Dst: format_hex_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:102,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:103,1
    - Dst: format_hex_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:106,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:107,1
    - Dst: format_hex_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:110,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:111,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:113,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 114
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 114
    functionName: test_buffer_format_hex_ex
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - format_hex_ex
    - gc_free
    - gc_new
    - assert_string_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_format_hex_ex(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:335,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:338,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:336,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:344,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:351,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:329,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:326,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:327,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:330,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:331,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:339,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:339,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:346,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:347,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:348,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:342,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:340,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:335,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:325,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:326,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:330,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:334,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:343,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:343,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:347,1
    - Dst: strcpy
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:350,1
    - Dst: string_mod
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:351,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:352,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 34
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 353
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 353
    functionName: test_character_class
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_string_equal
    - assert_true
    - assert_false
    - strcpy
    - string_mod
    linkageType: ''
    returnType: void
    signature: 'static void test_character_class(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:59,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:64,1
    - Dst: buf_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:62,1
    - Dst: buf_printf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:63,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:60,1
    - Dst: buf_catrunc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:66,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:67,1
    - Dst: buf_catrunc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:69,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:70,1
    - Dst: buf_catrunc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:72,1
    - Dst: buf_catrunc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:75,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:73,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:76,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 79
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 79
    functionName: test_buffer_printf_catrunc
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - buf_catrunc
    - buf_printf
    - gc_new
    - gc_free
    - assert_buf_equals_str
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_printf_catrunc(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:359,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:367,1
    - Dst: string_check_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:367,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:361,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:364,1
    - Dst: buf_inc_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:370,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:371,1
    - Dst: string_check_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:371,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:374,1
    - Dst: string_check_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:374,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:375,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 376
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 376
    functionName: test_character_string_mod_buf
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - buf_write
    - string_check_buf
    - assert_true
    - assert_false
    - gc_new
    - gc_free
    - buf_inc_len
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void test_character_string_mod_buf(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:265,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:267,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:266,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:268,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:274,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:275,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:276,1
    - Dst: free_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:278,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:280,1
    - Dst: assert_ptr_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:284,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:288,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 289
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 289
    functionName: test_buffer_free_gc_two
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_ptr_not_equal
    - assert_non_null
    - gc_new
    - gc_free
    - assert_ptr_equal
    - free_buf_gc
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_free_gc_two(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:295,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:302,1
    - Dst: gc_realloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:297,1
    - Dst: assert_ptr_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:300,1
    - Dst: gc_realloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:298,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:303,1
    - Dst: gc_realloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:305,1
    - Dst: gc_realloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:308,1
    - Dst: assert_ptr_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:309,1
    - Dst: gc_realloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:311,1
    - Dst: gc_realloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:314,1
    - Dst: assert_ptr_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:312,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:315,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:318,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 18
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 319
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 319
    functionName: test_buffer_gc_realloc
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - gc_realloc
    - assert_ptr_not_equal
    - gc_new
    - gc_free
    - memset
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_gc_realloc(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:39,1
    - Dst: strprefix
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:39,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:41,1
    - Dst: strprefix
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:40,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:40,1
    - Dst: strprefix
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:41,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:42,1
    - Dst: strprefix
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:42,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:43,1
    - Dst: strprefix
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:43,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 44
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 44
    functionName: test_buffer_strprefix
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_true
    - strprefix
    - assert_false
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_strprefix(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:166,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:167,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 168
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 168
    functionName: test_buffer_list_aggregate_separator_empty
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_null
    - buffer_list_aggregate_separator
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_list_aggregate_separator_empty(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:407,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:411,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:408,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:412,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:409,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:413,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:414,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:416,1
    - Dst: snprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:417,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:418,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:419,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 427
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 427
    functionName: test_snprintf
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - memset
    - snprintf
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_snprintf(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:176,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:179,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:177,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:178,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 180
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 180
    functionName: test_buffer_list_aggregate_separator_noop
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_buf_equals_str
    - buffer_list_peek
    - assert_int_equal
    - buffer_list_aggregate_separator
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_list_aggregate_separator_noop(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:432,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:439,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:433,1
    - Dst: buf_chomp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:437,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:436,1
    - Dst: string_check_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:439,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:440,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:440,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:442,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:444,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:449,1
    - Dst: assert_string_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:450,1
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:450,1
    - Dst: string_check_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:449,1
    - Dst: buf_chomp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:447,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:452,1
    - Dst: buf_chomp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:445,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 453
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 453
    functionName: test_buffer_chomp
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - buf_write
    - assert_string_equal
    - BSTR
    - buf_chomp
    - assert_true
    - string_check_buf
    - gc_new
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void test_buffer_chomp(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:126,1
    - Dst: buffer_list_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:127,1
    - Dst: buffer_list_push
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:131,1
    - Dst: buffer_list_push
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:130,1
    - Dst: buffer_list_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:129,1
    - Dst: buffer_list_push
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:132,1
    - Dst: buffer_list_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:134,1
    - Dst: buffer_list_push
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:135,1
    - Dst: buffer_list_push
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:136,1
    - Dst: buffer_list_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:138,1
    - Dst: buffer_list_push_data
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:140,1
    - Dst: buffer_list_push_data
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:141,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 145
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 145
    functionName: test_buffer_list_setup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_push_data
    - buffer_list_push
    - calloc
    - buffer_list_new
    linkageType: ''
    returnType: int
    signature: 'static int test_buffer_list_setup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:191,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:193,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:195,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:194,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:191,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 196
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 196
    functionName: test_buffer_list_aggregate_separator_two
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_aggregate_separator
    - buffer_list_peek
    - assert_buf_equals_str
    - strlen
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_list_aggregate_separator_two(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:217,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:219,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:218,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:220,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 221
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 221
    functionName: test_buffer_list_aggregate_separator_nosep
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_buf_equals_str
    - buffer_list_peek
    - assert_int_equal
    - buffer_list_aggregate_separator
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_list_aggregate_separator_nosep(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:243,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:244,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:246,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:246,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:245,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 247
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 247
    functionName: test_buffer_list_aggregate_separator_emptybuffers
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_peek
    - assert_int_equal
    - BLEN
    - buffer_list_aggregate_separator
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_list_aggregate_separator_emptybuffers(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:152,1
    - Dst: buffer_list_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:155,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:156,1
    - Dst: buffer_list_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:154,1
    - Dst: buffer_list_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:153,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 158
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 158
    functionName: test_buffer_list_teardown
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - free
    linkageType: ''
    returnType: int
    signature: 'static int test_buffer_list_teardown(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:204,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:206,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:205,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:207,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 209
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 209
    functionName: test_buffer_list_aggregate_separator_all
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_buf_equals_str
    - buffer_list_peek
    - assert_int_equal
    - buffer_list_aggregate_separator
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_list_aggregate_separator_all(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:230,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:232,1
    - Dst: assert_buf_equals_str
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:233,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:231,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 234
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 234
    functionName: test_buffer_list_aggregate_separator_zerolen
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - assert_buf_equals_str
    - buffer_list_peek
    - assert_int_equal
    - buffer_list_aggregate_separator
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_list_aggregate_separator_zerolen(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:252,1
    - Dst: assert_ptr_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:255,1
    - Dst: assert_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:257,1
    - Dst: free_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:256,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:253,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:259,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 260
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 260
    functionName: test_buffer_free_gc_one
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - gc_new
    - assert_null
    - gc_free
    - assert_ptr_equal
    - free_buf_gc
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void test_buffer_free_gc_one(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:469,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:488,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:490,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:484,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:486,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:462,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:472,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:478,1
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:458,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:461,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:463,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:460,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:475,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:481,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:485,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:493,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:487,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:489,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c:466,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 494
      start: 455
    functionDepth: 0
    functionLinenumber: 455
    functionLinenumberEnd: 494
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_buffer.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests_name
    - cmocka_unit_test
    - cmocka_unit_test_setup_teardown
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_get_id
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:62,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:65,1
    - Dst: print_error
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:87,1
    - Dst: EVP_DigestSign
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:92,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:92,1
    - Dst: test_calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:99,1
    - Dst: print_error
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:101,1
    - Dst: EVP_DigestSign
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:104,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:104,1
    - Dst: EVP_DigestVerifyInit_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:118,1
    - Dst: print_error
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:120,1
    - Dst: print_error
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:75,1
    - Dst: EVP_MD_CTX_new
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:80,1
    - Dst: EVP_DigestSignInit_ex
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:83,1
    - Dst: print_error
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:94,1
    - Dst: print_error
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:106,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:97,1
    - Dst: EVP_MD_CTX_new
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:115,1
    - Dst: EVP_MD_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:133,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:71,1
    - Dst: EVP_PKEY_get_id
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:69,1
    - Dst: EVP_DigestVerify
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:123,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:123,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:67,1
    - Dst: EVP_MD_CTX_free
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:114,1
    - Dst: print_error
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:125,1
    - Dst: test_free
      Src: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c:135,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 58
    argCount: 2
    argNames:
    - privkey
    - pubkey
    argTypes:
    - EVP_PKEY*
    - EVP_PKEY*
    constantsTouched: []
    func_position:
      end: 137
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 137
    functionName: digest_sign_verify
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/pkey_test_utils.c
    functionUses: []
    functionsReached:
    - OSSL_PARAM_construct_end
    - EVP_DigestVerify
    - EVP_DigestVerifyInit_ex
    - test_calloc
    - EVP_DigestSign
    - EVP_MD_CTX_free
    - assert_true
    - EVP_MD_CTX_new
    - test_free
    - EVP_PKEY_get_id
    - print_error
    - EVP_DigestSignInit_ex
    - strlen
    - OSSL_PARAM_construct_utf8_string
    linkageType: ''
    returnType: int
    signature: 'int digest_sign_verify(EVP_PKEY *privkey, EVP_PKEY *pubkey) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - level
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 53
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 53
    functionName: mock_set_debug_level
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void mock_set_debug_level(int level) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:80,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:88,1
    - Dst: CLEAR
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:82,1
    - Dst: vsnprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:83,1
    - Dst: printf
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:87,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - flags
    - format
    - arglist
    argTypes:
    - unsigned int
    - char*
    - va_list
    constantsTouched: []
    func_position:
      end: 90
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 90
    functionName: x_msg_va
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached:
    - CLEAR
    - vsnprintf
    - printf
    linkageType: ''
    returnType: void
    signature: 'void x_msg_va(const unsigned int flags, const char *format, va_list
      arglist) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - level
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: mock_set_print_debug_level
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void mock_set_print_debug_level(int level) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:114,1
    - Dst: _exit
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:115,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 3
    argNames:
    - filename
    - line
    - condition
    argTypes:
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 116
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 116
    functionName: assert_failed
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached:
    - msg
    - _exit
    linkageType: ''
    returnType: void
    signature: 'void assert_failed(const char *filename, int line, const char *condition) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:127,1
    - Dst: exit
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 129
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 129
    functionName: out_of_memory
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached:
    - exit
    - fprintf
    linkageType: ''
    returnType: void
    signature: 'void out_of_memory(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: mock_get_debug_level
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int mock_get_debug_level(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: get_debug_level
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int get_debug_level(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:96,1
    - Dst: x_msg_va
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:97,1
    - Dst: va_end
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:98,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - flags
    - format
    - '...'
    argTypes:
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 99
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 99
    functionName: x_msg
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached:
    - va_end
    - x_msg_va
    - va_start
    linkageType: ''
    returnType: void
    signature: 'void x_msg(const unsigned int flags, const char *format, ...) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 135
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 135
    functionName: dont_mute
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool dont_mute(unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mock_assert
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:106,1
    - Dst: exit
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c:108,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 3
    argNames:
    - filename
    - line
    - condition
    argTypes:
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 109
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 109
    functionName: assert_failed
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_msg.c
    functionUses: []
    functionsReached:
    - mock_assert
    - exit
    linkageType: ''
    returnType: void
    signature: 'void assert_failed(const char *filename, int line, const char *condition) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:113,1
    - Dst: mock_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:117,1
    - Dst: check_expected
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:115,1
    - Dst: check_expected
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:114,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 2
    argNames:
    - filename
    - buf
    argTypes:
    - char*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 118
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 118
    functionName: __wrap_buffer_write_file
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - check_expected
    - mock_type
    - BSTR
    linkageType: ''
    returnType: bool
    signature: 'bool __wrap_buffer_write_file(const char *filename, const struct buffer
      *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:156,1
    - Dst: init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:167,1
    - Dst: packet_id_init
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:170,1
    - Dst: tls_crypt_kt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:162,1
    - Dst: init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:168,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:172,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:173,1
    - Dst: alloc_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:174,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:178,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:178,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:182,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:182,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 185
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 185
    functionName: test_tls_crypt_setup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - alloc_buf
    - buf_write
    - packet_id_init
    - tls_crypt_kt
    - strlen
    - init_key_ctx
    - calloc
    linkageType: ''
    returnType: int
    signature: 'static int test_tls_crypt_setup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_expected
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:123,1
    - Dst: mock_ptr_type
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:125,1
    - Dst: buf_write
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:127,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:126,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:126,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:127,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - filename
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 130
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 130
    functionName: __wrap_buffer_read_from_file
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - buf_write
    - mock_ptr_type
    - check_expected
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer __wrap_buffer_read_from_file(const char *filename, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:193,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:197,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:194,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:199,1
    - Dst: free_buf
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:195,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 202
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 202
    functionName: test_tls_crypt_teardown
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - free_key_ctx_bi
    - free_buf
    - free
    linkageType: ''
    returnType: int
    signature: 'static int test_tls_crypt_teardown(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:682,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:691,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:703,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:709,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:720,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:718,1
    - Dst: cmocka_run_group_tests_name
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:727,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:679,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:694,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:712,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:724,1
    - Dst: openvpn_unit_test_setup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:677,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:685,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:697,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:715,1
    - Dst: cmocka_unit_test
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:719,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:688,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:700,1
    - Dst: cmocka_unit_test_setup_teardown
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:706,1
    - Dst: EVP_cleanup
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:730,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 734
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 734
    functionName: main
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - cmocka_run_group_tests_name
    - EVP_cleanup
    - OpenSSL_add_all_algorithms
    - cmocka_unit_test_setup_teardown
    - cmocka_unit_test
    - openvpn_unit_test_setup
    linkageType: ''
    returnType: int
    signature: 'int main(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:568,1
    - Dst: tls_crypt_v2_wrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:568,1
    - Dst: tls_crypt_kt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:574,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:576,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:575,1
    - Dst: init_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:577,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:583,1
    - Dst: tls_crypt_v2_unwrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:583,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:589,1
    - Dst: memcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:589,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:590,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:590,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 591
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 591
    functionName: tls_crypt_v2_wrap_unwrap_wrong_key
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - assert_true
    - free_key_ctx_bi
    - BLEN
    - assert_false
    - init_key_ctx_bi
    - memcmp
    - tls_crypt_kt
    - memset
    - tls_crypt_v2_wrap_client_key
    - tls_crypt_v2_unwrap_client_key
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_v2_wrap_unwrap_wrong_key(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: skip_if_tls_crypt_not_supported
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:307,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:311,1
    - Dst: buf_clear
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:309,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:312,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:311,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:312,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:312,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:313,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:313,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:314,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:316,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:314,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:315,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:315,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:315,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:314,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 317
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 317
    functionName: tls_crypt_loopback_zero_len
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - skip_if_tls_crypt_not_supported
    - buf_clear
    - BPTR
    - assert_true
    - tls_crypt_wrap
    - BLEN
    - tls_crypt_unwrap
    - assert_memory_equal
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_loopback_zero_len(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: skip_if_tls_crypt_not_supported
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:387,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:389,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:390,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:389,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:390,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:390,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:392,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:392,1
    - Dst: buf_clear
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:393,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:394,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:394,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 395
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 395
    functionName: tls_crypt_fail_replay
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - skip_if_tls_crypt_not_supported
    - buf_clear
    - assert_true
    - tls_crypt_wrap
    - BLEN
    - tls_crypt_unwrap
    - assert_false
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_fail_replay(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:484,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:495,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:492,1
    - Dst: tls_crypt_v2_wrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:486,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:486,1
    - Dst: tls_crypt_v2_unwrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:495,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:500,1
    - Dst: memcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:500,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 502
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 502
    functionName: tls_crypt_v2_wrap_unwrap_no_metadata
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - assert_true
    - memcmp
    - tls_crypt_v2_wrap_client_key
    - tls_crypt_v2_unwrap_client_key
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_v2_wrap_unwrap_no_metadata(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:433,1
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:436,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:439,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:440,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:442,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:445,1
    - Dst: tls_crypt_kt
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:447,1
    - Dst: init_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:448,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:453,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 457
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 457
    functionName: test_tls_crypt_v2_setup
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - gc_new
    - init_key_ctx_bi
    - rand_bytes
    - tls_crypt_kt
    - calloc
    - alloc_buf_gc
    linkageType: ''
    returnType: int
    signature: 'static int test_tls_crypt_v2_setup(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_write_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:604,1
    - Dst: tls_crypt_v2_wrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:606,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:605,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:605,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:606,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:613,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:614,1
    - Dst: tls_crypt_v2_unwrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:614,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:619,1
    - Dst: memcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:619,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:620,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:620,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 621
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 621
    functionName: tls_crypt_v2_wrap_unwrap_dst_too_small
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - assert_true
    - BLEN
    - buf_write_alloc
    - assert_false
    - rand_bytes
    - memcmp
    - tls_crypt_v2_wrap_client_key
    - tls_crypt_v2_unwrap_client_key
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_v2_wrap_unwrap_dst_too_small(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:465,1
    - Dst: free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:470,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:468,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:466,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 473
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 473
    functionName: test_tls_crypt_v2_teardown
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - free_key_ctx_bi
    - gc_free
    - free
    linkageType: ''
    returnType: int
    signature: 'static int test_tls_crypt_v2_teardown(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:628,1
    - Dst: expect_memory
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:629,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:630,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:631,1
    - Dst: tls_crypt_v2_write_server_key_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:633,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 634
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 634
    functionName: test_tls_crypt_v2_write_server_key_file
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - expect_memory
    - tls_crypt_v2_write_server_key_file
    - strlen
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_tls_crypt_v2_write_server_key_file(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:241,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:264,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:264,1
    - Dst: tls_wrap_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:278,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:284,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:285,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:288,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:292,1
    - Dst: gc_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:296,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:285,1
    - Dst: tls_session_generate_dynamic_tls_crypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:251,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:255,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:256,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:264,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:270,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:274,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:275,1
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:281,1
    - Dst: tls_session_generate_dynamic_tls_crypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:282,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:285,1
    - Dst: tls_wrap_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:293,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:288,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:256,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:256,1
    - Dst: tls_wrap_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:265,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:277,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:275,1
    - Dst: tls_session_generate_dynamic_tls_crypt_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:273,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:275,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:277,1
    - Dst: buf_advance
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:291,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:277,1
    - Dst: assert_memory_not_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:292,1
    - Dst: buf_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:292,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 297
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 297
    functionName: test_tls_crypt_secure_reneg_key
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - BPTR
    - tls_crypt_wrap
    - tls_wrap_free
    - buf_len
    - gc_new
    - tls_session_generate_dynamic_tls_crypt_key
    - gc_free
    - assert_memory_equal
    - assert_memory_not_equal
    - memset
    - assert_int_equal
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static void test_tls_crypt_secure_reneg_key(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: skip_if_tls_crypt_not_supported
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:366,1
    - Dst: init_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:372,1
    - Dst: free_key_ctx
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:371,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:374,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:374,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:375,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:375,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:375,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:376,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:376,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 377
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 377
    functionName: tls_crypt_fail_invalid_key
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - skip_if_tls_crypt_not_supported
    - assert_true
    - tls_crypt_wrap
    - BLEN
    - tls_crypt_unwrap
    - assert_false
    - init_key_ctx
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_fail_invalid_key(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:46,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 5
    argNames:
    - session
    - label
    - label_size
    - ekm
    - ekm_size
    argTypes:
    - struct tls_session*
    - char*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 48
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 48
    functionName: key_state_export_keying_material
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - memset
    linkageType: ''
    returnType: bool
    signature: 'bool key_state_export_keying_material(struct tls_session *session,
      const char *label, size_t label_size, void *ekm, size_t ekm_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - output
    - len
    argTypes:
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 142
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 142
    functionName: __wrap_rand_bytes
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int __wrap_rand_bytes(uint8_t *output, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:642,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:644,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:645,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:648,1
    - Dst: expect_memory
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:643,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:649,1
    - Dst: tls_crypt_v2_write_client_key_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:651,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 652
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 652
    functionName: test_tls_crypt_v2_write_client_key_file
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - tls_crypt_v2_write_client_key_file
    - expect_memory
    - strlen
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_tls_crypt_v2_write_client_key_file(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 7
    argNames:
    - line
    - p
    - n
    - file
    - line_num
    - msglevel
    - gc
    argTypes:
    - char*
    - char**
    - int
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 108
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 108
    functionName: __wrap_parse_line
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int __wrap_parse_line(const char *line, char **p, const int n, const
      char *file, const int line_num, int msglevel, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:661,1
    - Dst: strlen
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:663,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:664,1
    - Dst: expect_string
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:667,1
    - Dst: expect_memory
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:662,1
    - Dst: will_return
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:668,1
    - Dst: tls_crypt_v2_write_client_key_file
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:670,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 672
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 672
    functionName: test_tls_crypt_v2_write_client_key_file_metadata
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - tls_crypt_v2_write_client_key_file
    - expect_memory
    - strlen
    - expect_string
    - will_return
    linkageType: ''
    returnType: void
    signature: 'static void test_tls_crypt_v2_write_client_key_file_metadata(void
      **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_write_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:515,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:517,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:516,1
    - Dst: tls_crypt_v2_wrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:517,1
    - Dst: rand_bytes
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:516,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:522,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:525,1
    - Dst: tls_crypt_v2_unwrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:525,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:529,1
    - Dst: memcmp
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:529,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:537,1
    - Dst: tls_crypt_v2_extract_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:537,1
    - Dst: tls_wrap_free
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:538,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:531,1
    - Dst: buf_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:531,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 539
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 539
    functionName: tls_crypt_v2_wrap_unwrap_max_metadata
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - assert_true
    - tls_crypt_v2_extract_client_key
    - tls_wrap_free
    - buf_write_alloc
    - rand_bytes
    - memcmp
    - buf_equal
    - tls_crypt_v2_wrap_client_key
    - tls_crypt_v2_unwrap_client_key
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_v2_wrap_unwrap_max_metadata(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: skip_if_tls_crypt_not_supported
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:221,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:224,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:223,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:224,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:223,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:224,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:225,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:225,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:226,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:226,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:228,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:226,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:227,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:227,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:227,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 229
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 229
    functionName: tls_crypt_loopback
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - skip_if_tls_crypt_not_supported
    - BPTR
    - assert_true
    - tls_crypt_wrap
    - BLEN
    - tls_crypt_unwrap
    - assert_memory_equal
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_loopback(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: skip_if_tls_crypt_not_supported
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:349,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:353,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:352,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:352,1
    - Dst: buf_clear
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:351,1
    - Dst: tls_crypt_buf_overhead
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:353,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:354,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:354,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 355
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 355
    functionName: tls_crypt_fail_msg_too_long
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - tls_crypt_buf_overhead
    - skip_if_tls_crypt_not_supported
    - buf_clear
    - assert_non_null
    - tls_crypt_wrap
    - BLEN
    - buf_write_alloc
    - assert_false
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_fail_msg_too_long(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: skip_if_tls_crypt_not_supported
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:407,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:411,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:411,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:412,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:412,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:412,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:414,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:414,1
    - Dst: buf_clear
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:415,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:416,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:416,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 417
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 417
    functionName: tls_crypt_ignore_replay
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - skip_if_tls_crypt_not_supported
    - buf_clear
    - assert_true
    - tls_crypt_wrap
    - BLEN
    - tls_crypt_unwrap
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_ignore_replay(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:551,1
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:552,1
    - Dst: tls_crypt_v2_wrap_client_key
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:552,1
    - Dst: buf_inc_len
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:551,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 556
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 556
    functionName: tls_crypt_v2_wrap_too_long_metadata
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - assert_true
    - tls_crypt_v2_wrap_client_key
    - buf_inc_len
    - assert_false
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_v2_wrap_too_long_metadata(void **state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: skip
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:209,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct test_tls_crypt_context*
    constantsTouched: []
    func_position:
      end: 211
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 211
    functionName: skip_if_tls_crypt_not_supported
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - skip
    linkageType: ''
    returnType: void
    signature: 'static void skip_if_tls_crypt_not_supported(struct test_tls_crypt_context
      *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_write_alloc
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:330,1
    - Dst: tls_crypt_buf_overhead
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:331,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:333,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:336,1
    - Dst: assert_memory_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:337,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:337,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:338,1
    - Dst: skip_if_tls_crypt_not_supported
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:327,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:331,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:334,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:335,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:336,1
    - Dst: assert_non_null
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:330,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:333,1
    - Dst: assert_int_equal
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:336,1
    - Dst: BLEN
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:334,1
    - Dst: buf_clear
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:329,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:334,1
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:335,1
    - Dst: BPTR
      Src: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c:337,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - state
    argTypes:
    - void**
    constantsTouched: []
    func_position:
      end: 339
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 339
    functionName: tls_crypt_loopback_max_len
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/test_tls_crypt.c
    functionUses: []
    functionsReached:
    - tls_crypt_buf_overhead
    - skip_if_tls_crypt_not_supported
    - buf_clear
    - assert_non_null
    - assert_true
    - tls_crypt_wrap
    - BPTR
    - BLEN
    - buf_write_alloc
    - tls_crypt_unwrap
    - assert_memory_equal
    - assert_int_equal
    linkageType: ''
    returnType: void
    signature: 'static void tls_crypt_loopback_max_len(void **state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_true
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_ssl_dependencies.c:44,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 7
    argNames:
    - line
    - p
    - n
    - file
    - line_num
    - msglevel
    - gc
    argTypes:
    - char*
    - char**
    - int
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: parse_line
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_ssl_dependencies.c
    functionUses: []
    functionsReached:
    - assert_true
    linkageType: ''
    returnType: int
    signature: 'int parse_line(const char *line, char **p, const int n, const char
      *file, const int line_num, int msglevel, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 4
    argNames:
    - buf
    - size
    - rwflag
    - u
    argTypes:
    - char*
    - int
    - int
    - void*
    constantsTouched: []
    func_position:
      end: 53
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 53
    functionName: pem_password_callback
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_ssl_dependencies.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int pem_password_callback(char *buf, int size, int rwflag, void *u) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert_false
      Src: /src/openvpn/tests/unit_tests/openvpn/mock_ssl_dependencies.c:59,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 3
    argNames:
    - session
    - cert_depth
    - cert_hash
    argTypes:
    - struct tls_session*
    - int
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 60
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 60
    functionName: cert_hash_remember
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_ssl_dependencies.c
    functionUses: []
    functionsReached:
    - assert_false
    linkageType: ''
    returnType: void
    signature: 'void cert_hash_remember(struct tls_session *session, const int cert_depth,
      const struct buffer *cert_hash) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 3
    argNames:
    - session
    - cert
    - cert_depth
    argTypes:
    - struct tls_session*
    - openvpn_x509_cert_t*
    - int
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    functionName: verify_cert
    functionSourceFile: /src/openvpn/tests/unit_tests/openvpn/mock_ssl_dependencies.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: result_t
    signature: 'result_t verify_cert(struct tls_session *session, openvpn_x509_cert_t
      *cert, int cert_depth) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - str
    - c
    - n
    argTypes:
    - char*
    - int
    - size_t
    constantsTouched: []
    func_position:
      end: 55
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 55
    functionName: __memrchr
    functionSourceFile: /src/openvpn/src/compat/compat-dirname.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *__memrchr(const char *str, int c, size_t n) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: strrchr
      Src: /src/openvpn/src/compat/compat-dirname.c:68,1
    - Dst: __memrchr
      Src: /src/openvpn/src/compat/compat-dirname.c:92,1
    - Dst: strrchr
      Src: /src/openvpn/src/compat/compat-dirname.c:72,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 46
    argCount: 1
    argNames:
    - path
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 141
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 141
    functionName: dirname
    functionSourceFile: /src/openvpn/src/compat/compat-dirname.c
    functionUses: []
    functionsReached:
    - __memrchr
    - strrchr
    linkageType: ''
    returnType: char*
    signature: 'char *dirname(char *path) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strcspn
      Src: /src/openvpn/src/compat/compat-strsep.c:44,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - stringp
    - delim
    argTypes:
    - char**
    - char*
    constantsTouched: []
    func_position:
      end: 57
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 57
    functionName: strsep
    functionSourceFile: /src/openvpn/src/compat/compat-strsep.c
    functionUses: []
    functionsReached:
    - strcspn
    linkageType: ''
    returnType: char*
    signature: 'char *strsep(char **stringp, const char *delim) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: fork
      Src: /src/openvpn/src/compat/compat-daemon.c:53,1
    - Dst: chdir
      Src: /src/openvpn/src/compat/compat-daemon.c:72,1
    - Dst: open
      Src: /src/openvpn/src/compat/compat-daemon.c:82,1
    - Dst: exit
      Src: /src/openvpn/src/compat/compat-daemon.c:62,1
    - Dst: setsid
      Src: /src/openvpn/src/compat/compat-daemon.c:65,1
    - Dst: dup2
      Src: /src/openvpn/src/compat/compat-daemon.c:84,1
    - Dst: dup2
      Src: /src/openvpn/src/compat/compat-daemon.c:85,1
    - Dst: dup2
      Src: /src/openvpn/src/compat/compat-daemon.c:86,1
    - Dst: close
      Src: /src/openvpn/src/compat/compat-daemon.c:89,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 27
    argCount: 2
    argNames:
    - nochdir
    - noclose
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 102
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 102
    functionName: daemon
    functionSourceFile: /src/openvpn/src/compat/compat-daemon.c
    functionUses: []
    functionsReached:
    - chdir
    - exit
    - setsid
    - fork
    - dup2
    - open
    - close
    linkageType: ''
    returnType: int
    signature: 'int daemon(int nochdir, int noclose) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/openvpn/src/compat/compat-gettimeofday.c:49,1
    - Dst: GetTickCount
      Src: /src/openvpn/src/compat/compat-gettimeofday.c:50,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: gettimeofday_calibrate
    functionSourceFile: /src/openvpn/src/compat/compat-gettimeofday.c
    functionUses: []
    functionsReached:
    - time
    - GetTickCount
    linkageType: ''
    returnType: void
    signature: 'static void gettimeofday_calibrate(void) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: GetTickCount
      Src: /src/openvpn/src/compat/compat-gettimeofday.c:63,1
    - Dst: gettimeofday_calibrate
      Src: /src/openvpn/src/compat/compat-gettimeofday.c:108,1
    - Dst: gettimeofday_calibrate
      Src: /src/openvpn/src/compat/compat-gettimeofday.c:74,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 37
    argCount: 2
    argNames:
    - tv
    - tz
    argTypes:
    - struct timeval*
    - void*
    constantsTouched: []
    func_position:
      end: 113
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 113
    functionName: gettimeofday
    functionSourceFile: /src/openvpn/src/compat/compat-gettimeofday.c
    functionUses: []
    functionsReached:
    - gettimeofday_calibrate
    - GetTickCount
    linkageType: ''
    returnType: int
    signature: 'int gettimeofday(struct timeval *tv, void *tz) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/openvpn/src/compat/compat-gettimeofday.c:123,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - tv
    - tz
    argTypes:
    - struct timeval*
    - void*
    constantsTouched: []
    func_position:
      end: 126
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 126
    functionName: gettimeofday
    functionSourceFile: /src/openvpn/src/compat/compat-gettimeofday.c
    functionUses: []
    functionsReached:
    - time
    linkageType: ''
    returnType: int
    signature: 'int gettimeofday(struct timeval *tv, void *tz) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strrchr
      Src: /src/openvpn/src/compat/compat-basename.c:38,1
    - Dst: strrchr
      Src: /src/openvpn/src/compat/compat-basename.c:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 45
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 45
    functionName: basename
    functionSourceFile: /src/openvpn/src/compat/compat-basename.c
    functionUses: []
    functionsReached:
    - strrchr
    linkageType: ''
    returnType: char*
    signature: 'char *basename(char *filename) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/msiex.c:49,1
    - Dst: MsiGetProperty
      Src: /src/openvpn/src/openvpnmsica/msiex.c:50,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msiex.c:54,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:57,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpnmsica/msiex.c:61,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msiex.c:67,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:70,1
    - Dst: MsiGetProperty
      Src: /src/openvpn/src/openvpnmsica/msiex.c:74,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/msiex.c:81,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/msiex.c:87,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:88,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 35
    argCount: 3
    argNames:
    - MSIHANDLE
    - hInstall
    - LPCWSTR
    - szName
    - pszValue
    argTypes:
    - _In_
    - _In_z_
    - _Out_*
    constantsTouched: []
    func_position:
      end: 91
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 91
    functionName: msi_get_string
    functionSourceFile: /src/openvpn/src/openvpnmsica/msiex.c
    functionUses: []
    functionsReached:
    - MsiGetProperty
    - memcpy
    - _countof
    - msg
    - SetLastError
    - malloc
    - free
    linkageType: ''
    returnType: UINT
    signature: 'UINT msi_get_string( _In_ MSIHANDLE hInstall, _In_z_ LPCWSTR szName,
      _Out_ LPWSTR *pszValue) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/msiex.c:165,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msiex.c:170,1
    - Dst: MsiFormatRecord
      Src: /src/openvpn/src/openvpnmsica/msiex.c:166,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpnmsica/msiex.c:177,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:173,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msiex.c:183,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:186,1
    - Dst: MsiFormatRecord
      Src: /src/openvpn/src/openvpnmsica/msiex.c:190,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/msiex.c:197,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/msiex.c:203,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:204,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 35
    argCount: 3
    argNames:
    - MSIHANDLE
    - hInstall
    - MSIHANDLE
    - hRecord
    - pszValue
    argTypes:
    - _In_
    - _In_
    - _Out_*
    constantsTouched: []
    func_position:
      end: 207
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 207
    functionName: msi_format_record
    functionSourceFile: /src/openvpn/src/openvpnmsica/msiex.c
    functionUses: []
    functionsReached:
    - memcpy
    - _countof
    - msg
    - SetLastError
    - malloc
    - free
    - MsiFormatRecord
    linkageType: ''
    returnType: UINT
    signature: 'UINT msi_format_record( _In_ MSIHANDLE hInstall, _In_ MSIHANDLE hRecord,
      _Out_ LPWSTR *pszValue) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/msiex.c:107,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:115,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msiex.c:112,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpnmsica/msiex.c:119,1
    - Dst: MsiRecordGetString
      Src: /src/openvpn/src/openvpnmsica/msiex.c:108,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msiex.c:125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:128,1
    - Dst: MsiRecordGetString
      Src: /src/openvpn/src/openvpnmsica/msiex.c:132,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/msiex.c:139,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/msiex.c:145,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:146,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 35
    argCount: 3
    argNames:
    - MSIHANDLE
    - hRecord
    - iField
    - pszValue
    argTypes:
    - _In_
    - _In_ unsigned
    - _Out_*
    constantsTouched: []
    func_position:
      end: 149
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 149
    functionName: msi_get_record_string
    functionSourceFile: /src/openvpn/src/openvpnmsica/msiex.c
    functionUses: []
    functionsReached:
    - memcpy
    - _countof
    - msg
    - SetLastError
    - MsiRecordGetString
    - malloc
    - free
    linkageType: ''
    returnType: UINT
    signature: 'UINT msi_get_record_string( _In_ MSIHANDLE hRecord, _In_ unsigned
      int iField, _Out_ LPWSTR *pszValue) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msi_get_record_string
      Src: /src/openvpn/src/openvpnmsica/msiex.c:224,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:241,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/msiex.c:246,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/msiex.c:249,1
    - Dst: MsiCreateRecord
      Src: /src/openvpn/src/openvpnmsica/msiex.c:237,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msiex.c:250,1
    - Dst: msi_format_record
      Src: /src/openvpn/src/openvpnmsica/msiex.c:255,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/msiex.c:258,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/msiex.c:260,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 4
    argNames:
    - MSIHANDLE
    - hInstall
    - MSIHANDLE
    - hRecord
    - iField
    - pszValue
    argTypes:
    - _In_
    - _In_
    - _In_ unsigned
    - _Out_*
    constantsTouched: []
    func_position:
      end: 262
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 262
    functionName: msi_format_field
    functionSourceFile: /src/openvpn/src/openvpnmsica/msiex.c
    functionUses: []
    functionsReached:
    - msi_format_record
    - msg
    - MsiCloseHandle
    - SetLastError
    - msi_get_record_string
    - MsiRecordSetString
    - free
    - MsiCreateRecord
    linkageType: ''
    returnType: UINT
    signature: 'UINT msi_format_field( _In_ MSIHANDLE hInstall, _In_ MSIHANDLE hRecord,
      _In_ unsigned int iField, _Out_ LPWSTR *pszValue) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNREFERENCED_PARAMETER
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:49,1
    - Dst: calloc
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:66,1
    - Dst: TlsAlloc
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:56,1
    - Dst: UNREFERENCED_PARAMETER
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:50,1
    - Dst: TlsSetValue
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:72,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:80,1
    - Dst: TlsGetValue
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:80,1
    - Dst: TlsFree
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:81,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:87,1
    - Dst: TlsGetValue
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:87,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 20
    argCount: 3
    argNames:
    - HINSTANCE
    - hinstDLL
    - dwReason
    - lpReserved
    argTypes:
    - _In_
    - _In_
    - _In_
    constantsTouched: []
    func_position:
      end: 92
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 92
    functionName: DllMain
    functionSourceFile: /src/openvpn/src/openvpnmsica/dllmain.c
    functionUses: []
    functionsReached:
    - TlsAlloc
    - UNREFERENCED_PARAMETER
    - TlsFree
    - TlsSetValue
    - free
    - TlsGetValue
    - calloc
    linkageType: ''
    returnType: BOOL
    signature: 'BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD dwReason,
      _In_ LPVOID lpReserved) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UNREFERENCED_PARAMETER
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 101
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 101
    functionName: dont_mute
    functionSourceFile: /src/openvpn/src/openvpnmsica/dllmain.c
    functionUses: []
    functionsReached:
    - UNREFERENCED_PARAMETER
    linkageType: ''
    returnType: bool
    signature: 'bool dont_mute(unsigned int flags) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: MsiRecordSetStringA
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:136,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:137,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:159,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:194,1
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:123,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:124,1
    - Dst: MsiRecordSetStringA
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:127,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:108,1
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:135,1
    - Dst: MsiRecordSetStringA
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:143,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:151,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:156,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:142,1
    - Dst: MsiProcessMessage
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:193,1
    - Dst: MsiCreateRecord
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:118,1
    - Dst: TlsGetValue
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:110,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:123,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:132,1
    - Dst: iswspace
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:177,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:188,1
    - Dst: FormatMessage
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:163,1
    - Dst: LocalFree
      Src: /src/openvpn/src/openvpnmsica/dllmain.c:189,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 55
    argCount: 3
    argNames:
    - flags
    - format
    - arglist
    argTypes:
    - unsigned int
    - char*
    - va_list
    constantsTouched: []
    func_position:
      end: 195
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 195
    functionName: x_msg_va
    functionSourceFile: /src/openvpn/src/openvpnmsica/dllmain.c
    functionUses: []
    functionsReached:
    - LocalFree
    - _countof
    - vsnprintf
    - MsiProcessMessage
    - GetLastError
    - MsiCloseHandle
    - FormatMessage
    - MsiRecordSetStringA
    - iswspace
    - malloc
    - free
    - MsiRecordSetString
    - TlsGetValue
    - MsiCreateRecord
    - MsiRecordSetInteger
    linkageType: ''
    returnType: void
    signature: 'void x_msg_va(const unsigned int flags, const char *format, va_list
      arglist) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msica_arg_seq_join
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:86,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:93,1
    - Dst: MsiSetProperty
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:87,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:88,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:94,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 3
    argNames:
    - MSIHANDLE
    - hInstall
    - szProperty
    - seq
    argTypes:
    - _In_
    - _In_z_
    - _In_*
    constantsTouched: []
    func_position:
      end: 98
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 98
    functionName: setup_sequence
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - MsiSetProperty
    - msg
    - SetLastError
    - msica_arg_seq_join
    - free
    linkageType: ''
    returnType: UINT
    signature: 'static UINT setup_sequence( _In_ MSIHANDLE hInstall, _In_z_ LPCWSTR
      szProperty, _In_ struct msica_arg_seq *seq) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:117,1
    - Dst: GetModuleFileName
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:121,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:117,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:121,1
    - Dst: _L
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:118,1
    - Dst: wcsrchr
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:122,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:126,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:127,1
    - Dst: GetCurrentProcessId
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:135,1
    - Dst: MessageBox
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - szFunctionName
    argTypes:
    - _In_z_
    constantsTouched: []
    func_position:
      end: 139
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 139
    functionName: _debug_popup
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - _L
    - _countof
    - GetCurrentProcessId
    - wcsrchr
    - MessageBox
    - GetModuleFileName
    linkageType: ''
    returnType: void
    signature: 'static void _debug_popup(_In_z_ LPCSTR szFunctionName) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:176,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:173,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:210,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:253,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:223,1
    - Dst: wcsstr
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:230,1
    - Dst: MultiByteToWideChar
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:253,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:264,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:279,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:286,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:195,1
    - Dst: IIDFromString
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:254,1
    - Dst: MsiSetProperty
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:276,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:196,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:219,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:238,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:232,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:255,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:280,1
    - Dst: MsiSetProperty
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:283,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:287,1
    - Dst: tap_free_adapter_list
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:298,1
    - Dst: tap_list_adapters
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:157,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:192,1
    - Dst: GetAdaptersAddresses
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:214,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:245,1
    - Dst: SUCCEEDED
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:254,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:270,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:292,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:294,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:296,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 110
    argCount: 4
    argNames:
    - MSIHANDLE
    - hInstall
    - szzHardwareIDs
    - szAdaptersPropertyName
    - szActiveAdaptersPropertyName
    argTypes:
    - _In_
    - _In_z_
    - _In_z_
    - _In_z_
    constantsTouched: []
    func_position:
      end: 299
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 299
    functionName: find_adapters
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - MultiByteToWideChar
    - MsiSetProperty
    - memcpy
    - _countof
    - msg
    - IIDFromString
    - tap_list_adapters
    - SetLastError
    - tap_free_adapter_list
    - CoTaskMemFree
    - SUCCEEDED
    - StringFromIID
    - malloc
    - free
    - GetAdaptersAddresses
    - memcmp
    - wcsstr
    linkageType: ''
    returnType: void
    signature: 'static void find_adapters( _In_ MSIHANDLE hInstall, _In_z_ LPCWSTR
      szzHardwareIDs, _In_z_ LPCWSTR szAdaptersPropertyName, _In_z_ LPCWSTR szActiveAdaptersPropertyName) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNREFERENCED_PARAMETER
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:340,1
    - Dst: debug_popup
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:342,1
    - Dst: SendMessage
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:349,1
    - Dst: Sleep
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:350,1
    - Dst: FindWindow
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:345,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - MSIHANDLE
    - hInstall
    argTypes:
    - _In_
    constantsTouched: []
    func_position:
      end: 354
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 354
    functionName: CloseOpenVPNGUI
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - UNREFERENCED_PARAMETER
    - Sleep
    - SendMessage
    - FindWindow
    - debug_popup
    linkageType: ''
    returnType: UINT
    signature: 'UINT __stdcall CloseOpenVPNGUI(_In_ MSIHANDLE hInstall) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: tap_list_adapters
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:574,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:594,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:597,1
    - Dst: PRIGUID_PARAM
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:600,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:608,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:591,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:605,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:590,1
    - Dst: PRIGUID_PARAM
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:593,1
    - Dst: msica_arg_seq_add_head
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:601,1
    - Dst: PRIGUID_PARAM
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:607,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:614,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:604,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:583,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:598,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:613,1
    - Dst: PRIGUID_PARAM
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:616,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:617,1
    - Dst: tap_free_adapter_list
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:625,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 37
    argCount: 6
    argNames:
    - seq
    - seqCommit
    - seqRollback
    - szDisplayName
    - szzHardwareIDs
    - iTicks
    argTypes:
    - _Inout_*
    - _Inout_opt_*
    - _Inout_opt_*
    - _In_z_
    - _In_z_
    - _Inout_*
    constantsTouched: []
    func_position:
      end: 627
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 627
    functionName: schedule_adapter_delete
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - _countof
    - msica_arg_seq_add_head
    - msica_arg_seq_add_tail
    - tap_list_adapters
    - tap_free_adapter_list
    - wcsicmp
    - PRIGUID_PARAM
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD schedule_adapter_delete( _Inout_ struct msica_arg_seq
      *seq, _Inout_opt_ struct msica_arg_seq *seqCommit, _Inout_opt_ struct msica_arg_seq
      *seqRollback, _In_z_ LPCWSTR szDisplayName, _In_z_ LPCWSTR szzHardwareIDs, _Inout_
      int *iTicks) '
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: OPENVPNMSICA_SAVE_MSI_SESSION
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:642,1
    - Dst: msica_arg_seq_init
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:651,1
    - Dst: msica_arg_seq_init
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:652,1
    - Dst: msica_arg_seq_init
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:654,1
    - Dst: msica_arg_seq_init
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:656,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:687,1
    - Dst: MsiGetActiveDatabase
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:662,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:697,1
    - Dst: MsiCreateRecord
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:702,1
    - Dst: MsiViewFetch
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:714,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:742,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:723,1
    - Dst: memcpy_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:769,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:803,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:851,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:743,1
    - Dst: msi_get_record_string
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:764,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:865,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:893,1
    - Dst: msica_arg_seq_free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:896,1
    - Dst: msica_arg_seq_free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:899,1
    - Dst: msica_arg_seq_free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:900,1
    - Dst: msica_arg_seq_free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:898,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:802,1
    - Dst: wcschr
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:757,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:870,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:722,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:871,1
    - Dst: setup_sequence
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:875,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:869,1
    - Dst: MsiDatabaseIsTablePersistent
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:671,1
    - Dst: setup_sequence
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:877,1
    - Dst: debug_popup
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:637,1
    - Dst: CoInitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:640,1
    - Dst: SUCCEEDED
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:640,1
    - Dst: msica_arg_seq_init
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:653,1
    - Dst: msica_arg_seq_init
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:655,1
    - Dst: MsiEvaluateCondition
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:659,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:665,1
    - Dst: MsiDatabaseOpenView
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:684,1
    - Dst: MsiViewExecute
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:693,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:696,1
    - Dst: msi_get_record_string
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:731,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:741,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:769,1
    - Dst: schedule_adapter_delete
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:830,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:865,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:866,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:867,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:868,1
    - Dst: CoUninitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:903,1
    - Dst: setup_sequence
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:876,1
    - Dst: setup_sequence
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:874,1
    - Dst: MsiProcessMessage
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:843,1
    - Dst: msi_get_record_string
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:781,1
    - Dst: msica_arg_seq_free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:897,1
    - Dst: schedule_adapter_create
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:812,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:809,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:797,1
    - Dst: MsiGetComponentState
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:738,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:853,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:770,1
    - Dst: GetTempPath
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:862,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:887,1
    - Dst: MsiViewClose
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:889,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:891,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:706,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:746,1
    - Dst: MsiEvaluateCondition
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:794,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:841,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:842,1
    - Dst: setup_sequence
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:879,1
    - Dst: msi_format_field
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:751,1
    - Dst: setup_sequence
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:878,1
    - Dst: msica_arg_seq_free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:895,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:688,1
    CyclomaticComplexity: 52
    EdgeCount: 52
    ICount: 165
    argCount: 1
    argNames:
    - MSIHANDLE
    - hInstall
    argTypes:
    - _In_
    constantsTouched: []
    func_position:
      end: 906
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 906
    functionName: EvaluateTUNTAPAdapters
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - MsiDatabaseIsTablePersistent
    - setup_sequence
    - MsiViewFetch
    - msg
    - MsiCloseHandle
    - MsiEvaluateCondition
    - wcslen
    - schedule_adapter_delete
    - msi_get_record_string
    - msica_arg_seq_free
    - MsiViewExecute
    - free
    - msi_format_field
    - swprintf_s
    - wcschr
    - OPENVPNMSICA_SAVE_MSI_SESSION
    - SetLastError
    - CoInitialize
    - MsiGetActiveDatabase
    - msica_arg_seq_init
    - SUCCEEDED
    - MsiGetComponentState
    - MsiViewClose
    - GetTempPath
    - CoUninitialize
    - MsiRecordSetInteger
    - MsiProcessMessage
    - _countof
    - debug_popup
    - schedule_adapter_create
    - msica_arg_seq_add_tail
    - MsiDatabaseOpenView
    - memcpy_s
    - MsiCreateRecord
    linkageType: ''
    returnType: UINT
    signature: 'UINT __stdcall EvaluateTUNTAPAdapters(_In_ MSIHANDLE hInstall) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:944,1
    - Dst: CreateFileW
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:948,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:944,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:946,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:951,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:955,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - szTmpDir
    argTypes:
    - _In_z_
    constantsTouched: []
    func_position:
      end: 957
      start: 940
    functionDepth: 0
    functionLinenumber: 940
    functionLinenumberEnd: 957
    functionName: CreateRebootFile
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - _countof
    - CloseHandle
    - msg
    - CreateFileW
    linkageType: ''
    returnType: void
    signature: 'static void CreateRebootFile(_In_z_ LPCWSTR szTmpDir) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: debug_popup
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:309,1
    - Dst: OPENVPNMSICA_SAVE_MSI_SESSION
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:313,1
    - Dst: CoInitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:311,1
    - Dst: SUCCEEDED
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:311,1
    - Dst: find_adapters
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:315,1
    - Dst: find_adapters
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:320,1
    - Dst: CoUninitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:328,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - MSIHANDLE
    - hInstall
    argTypes:
    - _In_
    constantsTouched: []
    func_position:
      end: 331
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 331
    functionName: FindSystemInfo
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - CoUninitialize
    - find_adapters
    - OPENVPNMSICA_SAVE_MSI_SESSION
    - debug_popup
    - SUCCEEDED
    - CoInitialize
    linkageType: ''
    returnType: UINT
    signature: 'UINT __stdcall FindSystemInfo(_In_ MSIHANDLE hInstall) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CoInitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:367,1
    - Dst: MsiCreateRecord
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:372,1
    - Dst: SUCCEEDED
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:367,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:433,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:406,1
    - Dst: debug_popup
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:364,1
    - Dst: OPENVPNMSICA_SAVE_MSI_SESSION
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:369,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:382,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:389,1
    - Dst: MsiFormatRecord
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:391,1
    - Dst: MsiFormatRecord
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:402,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:421,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:398,1
    - Dst: ShellExecuteEx
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:418,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:407,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:430,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:420,1
    - Dst: CoUninitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:437,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:395,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:376,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:379,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:383,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 51
    argCount: 1
    argNames:
    - MSIHANDLE
    - hInstall
    argTypes:
    - _In_
    constantsTouched: []
    func_position:
      end: 440
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 440
    functionName: StartOpenVPNGUI
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - _countof
    - ShellExecuteEx
    - CoUninitialize
    - msg
    - GetLastError
    - OPENVPNMSICA_SAVE_MSI_SESSION
    - SetLastError
    - CoInitialize
    - MsiCloseHandle
    - debug_popup
    - SUCCEEDED
    - MsiRecordSetString
    - malloc
    - free
    - MsiFormatRecord
    - MsiCreateRecord
    linkageType: ''
    returnType: UINT
    signature: 'UINT __stdcall StartOpenVPNGUI(_In_ MSIHANDLE hInstall) '
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: MsiGetMode
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:974,1
    - Dst: MsiGetMode
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:974,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:987,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:996,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1000,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1009,1
    - Dst: wcschr
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1013,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1025,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1028,1
    - Dst: tap_set_adapter_name
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1042,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1103,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1143,1
    - Dst: tap_delete_adapter
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1091,1
    - Dst: SUCCEEDED
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:969,1
    - Dst: MsiCreateRecord
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:993,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:994,1
    - Dst: MsiProcessMessage
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:997,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1001,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:995,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1024,1
    - Dst: tap_create_adapter
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1037,1
    - Dst: MsiCreateRecord
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1052,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1053,1
    - Dst: tap_delete_adapter
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1075,1
    - Dst: parse_guid
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1107,1
    - Dst: CreateRebootFile
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1145,1
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1150,1
    - Dst: parse_guid
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1097,1
    - Dst: CoUninitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1154,1
    - Dst: debug_popup
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:966,1
    - Dst: CoInitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:969,1
    - Dst: CommandLineToArgvW
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:984,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:988,1
    - Dst: MsiCreateRecord
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1023,1
    - Dst: MsiProcessMessage
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1027,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1115,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1139,1
    - Dst: LocalFree
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1148,1
    - Dst: wcscpy_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1115,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1093,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1054,1
    - Dst: OPENVPNMSICA_SAVE_MSI_SESSION
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:972,1
    - Dst: msi_get_string
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:978,1
    - Dst: MsiRecordSetString
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1026,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1045,1
    - Dst: MsiProcessMessage
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1055,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1056,1
    - Dst: tap_list_adapters
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1066,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1072,1
    - Dst: tap_free_adapter_list
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1080,1
    - Dst: parse_guid
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1087,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1083,1
    - Dst: tap_enable_adapter
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1101,1
    - Dst: tap_enable_adapter
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1111,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1113,1
    - Dst: MsiRecordSetInteger
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1129,1
    - Dst: MsiProcessMessage
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1130,1
    - Dst: MsiCloseHandle
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1147,1
    CyclomaticComplexity: 43
    EdgeCount: 43
    ICount: 132
    argCount: 1
    argNames:
    - MSIHANDLE
    - hInstall
    argTypes:
    - _In_
    constantsTouched: []
    func_position:
      end: 1157
      start: 959
    functionDepth: 0
    functionLinenumber: 959
    functionLinenumberEnd: 1157
    functionName: ProcessDeferredAction
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - msg
    - MsiCloseHandle
    - wcslen
    - wcsncmp
    - MsiRecordSetString
    - free
    - LocalFree
    - wcschr
    - GetLastError
    - OPENVPNMSICA_SAVE_MSI_SESSION
    - CoInitialize
    - CommandLineToArgvW
    - wcscpy_s
    - SUCCEEDED
    - msi_get_string
    - MsiGetMode
    - wcsicmp
    - CreateRebootFile
    - CoUninitialize
    - MsiRecordSetInteger
    - MsiProcessMessage
    - _countof
    - tap_set_adapter_name
    - tap_delete_adapter
    - tap_list_adapters
    - debug_popup
    - tap_enable_adapter
    - tap_create_adapter
    - parse_guid
    - tap_free_adapter_list
    - MsiCreateRecord
    linkageType: ''
    returnType: UINT
    signature: 'UINT __stdcall ProcessDeferredAction(_In_ MSIHANDLE hInstall) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: debug_popup
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1166,1
    - Dst: SUCCEEDED
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1168,1
    - Dst: CoInitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1168,1
    - Dst: GetTempPathW
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1174,1
    - Dst: OPENVPNMSICA_SAVE_MSI_SESSION
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1170,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1178,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1178,1
    - Dst: FindFirstFileW
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1183,1
    - Dst: FindClose
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1185,1
    - Dst: CoUninitialize
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1193,1
    - Dst: DeleteFileW
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1186,1
    - Dst: MsiSetMode
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:1188,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - MSIHANDLE
    - hInstall
    argTypes:
    - _In_
    constantsTouched: []
    func_position:
      end: 1196
      start: 1159
    functionDepth: 0
    functionLinenumber: 1159
    functionLinenumberEnd: 1196
    functionName: CheckAndScheduleReboot
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - _countof
    - CoUninitialize
    - FindClose
    - msg
    - GetTempPathW
    - OPENVPNMSICA_SAVE_MSI_SESSION
    - debug_popup
    - SUCCEEDED
    - FindFirstFileW
    - DeleteFileW
    - MsiSetMode
    - CoInitialize
    linkageType: ''
    returnType: UINT
    signature: 'UINT __stdcall CheckAndScheduleReboot(_In_ MSIHANDLE hInstall) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: tap_list_adapters
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:473,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:489,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:498,1
    - Dst: msica_arg_seq_add_tail
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:493,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:488,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:499,1
    - Dst: msica_arg_seq_add_head
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:502,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:508,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:511,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:516,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:520,1
    - Dst: tap_free_adapter_list
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:531,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 35
    argCount: 5
    argNames:
    - seq
    - seqRollback
    - szDisplayName
    - szHardwareId
    - iTicks
    argTypes:
    - _Inout_*
    - _Inout_opt_*
    - _In_z_
    - _In_z_
    - _Inout_*
    constantsTouched: []
    func_position:
      end: 533
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 533
    functionName: schedule_adapter_create
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - msica_arg_seq_add_head
    - _countof
    - msica_arg_seq_add_tail
    - msg
    - tap_list_adapters
    - wcslen
    - tap_free_adapter_list
    - wcsicmp
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD schedule_adapter_create( _Inout_ struct msica_arg_seq
      *seq, _Inout_opt_ struct msica_arg_seq *seqRollback, _In_z_ LPCWSTR szDisplayName,
      _In_z_ LPCWSTR szHardwareId, _Inout_ int *iTicks) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swscanf_s
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:923,1
    - Dst: PRIGUID_PARAM_REF
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:923,1
    - Dst: _L
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:923,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/openvpnmsica.c:925,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - LPCWSTR
    - szArg
    - guid
    argTypes:
    - _In_z_
    - _Out_*
    constantsTouched: []
    func_position:
      end: 929
      start: 918
    functionDepth: 0
    functionLinenumber: 918
    functionLinenumberEnd: 929
    functionName: parse_guid
    functionSourceFile: /src/openvpn/src/openvpnmsica/openvpnmsica.c
    functionUses: []
    functionsReached:
    - _L
    - msg
    - PRIGUID_PARAM_REF
    - swscanf_s
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL parse_guid( _In_z_ LPCWSTR szArg, _Out_ GUID *guid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - seq
    argTypes:
    - _Inout_*
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: msica_arg_seq_init
    functionSourceFile: /src/openvpn/src/openvpnmsica/msica_arg.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void msica_arg_seq_init(_Inout_ struct msica_arg_seq *seq) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:58,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:64,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:59,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:62,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 2
    argNames:
    - seq
    - argument
    argTypes:
    - _Inout_*
    - _In_z_
    constantsTouched: []
    func_position:
      end: 71
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 71
    functionName: msica_arg_seq_add_head
    functionSourceFile: /src/openvpn/src/openvpnmsica/msica_arg.c
    functionUses: []
    functionsReached:
    - msg
    - malloc
    - memcpy
    - wcslen
    linkageType: ''
    returnType: void
    signature: 'void msica_arg_seq_add_head( _Inout_ struct msica_arg_seq *seq, _In_z_
      LPCWSTR argument) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:99,1
    - Dst: wcscpy
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:117,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:107,1
    - Dst: wcscpy
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:127,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:104,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:128,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - seq
    argTypes:
    - _In_*
    constantsTouched: []
    func_position:
      end: 136
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 136
    functionName: msica_arg_seq_join
    functionSourceFile: /src/openvpn/src/openvpnmsica/msica_arg.c
    functionUses: []
    functionsReached:
    - wcscpy
    - msg
    - malloc
    - wcslen
    linkageType: ''
    returnType: LPWSTR
    signature: 'LPWSTR msica_arg_seq_join(_In_ const struct msica_arg_seq *seq) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:79,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:80,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:85,1
    - Dst: msg
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:83,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - seq
    - argument
    argTypes:
    - _Inout_*
    - _Inout_
    constantsTouched: []
    func_position:
      end: 89
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 89
    functionName: msica_arg_seq_add_tail
    functionSourceFile: /src/openvpn/src/openvpnmsica/msica_arg.c
    functionUses: []
    functionsReached:
    - msg
    - malloc
    - memcpy
    - wcslen
    linkageType: ''
    returnType: void
    signature: 'void msica_arg_seq_add_tail( _Inout_ struct msica_arg_seq *seq, _Inout_
      LPCWSTR argument) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpnmsica/msica_arg.c:47,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - seq
    argTypes:
    - _Inout_*
    constantsTouched: []
    func_position:
      end: 50
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 50
    functionName: msica_arg_seq_free
    functionSourceFile: /src/openvpn/src/openvpnmsica/msica_arg.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void msica_arg_seq_free(_Inout_ struct msica_arg_seq *seq) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/src/plugins/down-root/down-root.c:166,1
    - Dst: dup
      Src: /src/openvpn/src/plugins/down-root/down-root.c:173,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:181,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/down-root/down-root.c:169,1
    - Dst: daemon
      Src: /src/openvpn/src/plugins/down-root/down-root.c:179,1
    - Dst: dup2
      Src: /src/openvpn/src/plugins/down-root/down-root.c:188,1
    - Dst: close
      Src: /src/openvpn/src/plugins/down-root/down-root.c:189,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 20
    argCount: 1
    argNames:
    - envp
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 192
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 192
    functionName: daemonize
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - daemon
    - dup
    - get_env
    - warn
    - dup2
    - close
    linkageType: ''
    returnType: void
    signature: 'static void daemonize(const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - array
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 122
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 122
    functionName: string_array_len
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int string_array_len(const char *array[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dup2
      Src: /src/openvpn/src/plugins/down-root/down-root.c:188,1
    - Dst: close
      Src: /src/openvpn/src/plugins/down-root/down-root.c:189,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames:
    - fd
    - '>= 3'
    argTypes: []
    constantsTouched: []
    func_position:
      end: 190
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 190
    functionName: if
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - close
    - dup2
    linkageType: ''
    returnType: else
    signature: 'else if (fd >= 3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/openvpn/src/plugins/down-root/down-root.c:225,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/down-root/down-root.c:229,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/down-root/down-root.c:228,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/down-root/down-root.c:230,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/down-root/down-root.c:227,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/down-root/down-root.c:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 232
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 232
    functionName: set_signals
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - signal
    linkageType: ''
    returnType: void
    signature: 'static void set_signals(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/plugins/down-root/down-root.c:240,1
    - Dst: free
      Src: /src/openvpn/src/plugins/down-root/down-root.c:241,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - context
    argTypes:
    - struct down_root_context*
    constantsTouched: []
    func_position:
      end: 243
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 243
    functionName: free_context
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void free_context(struct down_root_context *context) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/src/plugins/down-root/down-root.c:288,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:291,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/src/plugins/down-root/down-root.c:299,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/src/plugins/down-root/down-root.c:299,1
    - Dst: string_array_len
      Src: /src/openvpn/src/plugins/down-root/down-root.c:305,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:307,1
    - Dst: calloc
      Src: /src/openvpn/src/plugins/down-root/down-root.c:314,1
    - Dst: string_array_len
      Src: /src/openvpn/src/plugins/down-root/down-root.c:314,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:317,1
    - Dst: string_array_len
      Src: /src/openvpn/src/plugins/down-root/down-root.c:322,1
    - Dst: atoi
      Src: /src/openvpn/src/plugins/down-root/down-root.c:334,1
    - Dst: free_context
      Src: /src/openvpn/src/plugins/down-root/down-root.c:341,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/down-root/down-root.c:331,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 33
    argCount: 3
    argNames:
    - type_mask
    - argv
    - envp
    argTypes:
    - unsigned int*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 343
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 343
    functionName: openvpn_plugin_open_v1
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - atoi
    - string_array_len
    - get_env
    - warn
    - fprintf
    - free_context
    - calloc
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT openvpn_plugin_handle_t openvpn_plugin_open_v1(unsigned
      int *type_mask, const char *argv[], const char *envp[]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/down-root/down-root.c:448,1
    - Dst: waitpid
      Src: /src/openvpn/src/plugins/down-root/down-root.c:464,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:456,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:450,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:458,1
    - Dst: close
      Src: /src/openvpn/src/plugins/down-root/down-root.c:467,1
    - Dst: free_context
      Src: /src/openvpn/src/plugins/down-root/down-root.c:471,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 472
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 472
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - waitpid
    - warn
    - send_control
    - fprintf
    - DEBUG
    - free_context
    - close
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: socketpair
      Src: /src/openvpn/src/plugins/down-root/down-root.c:359,1
    - Dst: close
      Src: /src/openvpn/src/plugins/down-root/down-root.c:382,1
    - Dst: fork
      Src: /src/openvpn/src/plugins/down-root/down-root.c:369,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:361,1
    - Dst: fcntl
      Src: /src/openvpn/src/plugins/down-root/down-root.c:385,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:387,1
    - Dst: recv_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:391,1
    - Dst: close_fds_except
      Src: /src/openvpn/src/plugins/down-root/down-root.c:405,1
    - Dst: set_signals
      Src: /src/openvpn/src/plugins/down-root/down-root.c:408,1
    - Dst: daemonize
      Src: /src/openvpn/src/plugins/down-root/down-root.c:411,1
    - Dst: exit
      Src: /src/openvpn/src/plugins/down-root/down-root.c:417,1
    - Dst: down_root_server
      Src: /src/openvpn/src/plugins/down-root/down-root.c:414,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:425,1
    - Dst: close
      Src: /src/openvpn/src/plugins/down-root/down-root.c:416,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:423,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:436,1
    - Dst: recv_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:429,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 45
    argCount: 4
    argNames:
    - handle
    - type
    - argv
    - envp
    argTypes:
    - openvpn_plugin_handle_t
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 441
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 441
    functionName: openvpn_plugin_func_v1
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - close_fds_except
    - down_root_server
    - exit
    - fcntl
    - recv_control
    - set_signals
    - socketpair
    - warn
    - send_control
    - daemonize
    - fork
    - close
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v1(openvpn_plugin_handle_t
      handle, const int type, const char *argv[], const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: send_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:482,1
    - Dst: close
      Src: /src/openvpn/src/plugins/down-root/down-root.c:483,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 486
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 486
    functionName: openvpn_plugin_abort_v1
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - send_control
    - close
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_abort_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/plugins/down-root/down-root.c:91,1
    - Dst: strncmp
      Src: /src/openvpn/src/plugins/down-root/down-root.c:94,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 105
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 105
    functionName: get_env
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/plugins/down-root/down-root.c:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 141
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 141
    functionName: recv_control
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'static int recv_control(int fd) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/openvpn/src/plugins/down-root/down-root.c:147,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - fd
    - code
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 156
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 156
    functionName: send_control
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'static int send_control(int fd, int code) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: closelog
      Src: /src/openvpn/src/plugins/down-root/down-root.c:208,1
    - Dst: close
      Src: /src/openvpn/src/plugins/down-root/down-root.c:213,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - keep
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 216
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 216
    functionName: close_fds_except
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - close
    - closelog
    linkageType: ''
    returnType: void
    signature: 'static void close_fds_except(int keep) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fork
      Src: /src/openvpn/src/plugins/down-root/down-root.c:255,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:264,1
    - Dst: err
      Src: /src/openvpn/src/plugins/down-root/down-root.c:260,1
    - Dst: waitpid
      Src: /src/openvpn/src/plugins/down-root/down-root.c:269,1
    - Dst: execve
      Src: /src/openvpn/src/plugins/down-root/down-root.c:258,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:272,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 2
    argNames:
    - argv
    - envp
    argTypes:
    - char**
    - char**
    constantsTouched: []
    func_position:
      end: 277
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 277
    functionName: run_script
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - err
    - waitpid
    - warn
    - fprintf
    - execve
    - fork
    linkageType: ''
    returnType: int
    signature: 'static int run_script(char *const *argv, char *const *envp) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/down-root/down-root.c:497,1
    - Dst: recv_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:520,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:507,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:505,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:499,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/down-root/down-root.c:522,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:524,1
    - Dst: run_script
      Src: /src/openvpn/src/plugins/down-root/down-root.c:530,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:532,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:534,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:553,1
    - Dst: warn
      Src: /src/openvpn/src/plugins/down-root/down-root.c:543,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:557,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/down-root/down-root.c:541,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:566,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/down-root/down-root.c:540,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/down-root/down-root.c:564,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 34
    argCount: 4
    argNames:
    - fd
    - argv
    - envp
    - verb
    argTypes:
    - int
    - char**
    - char**
    - int
    constantsTouched: []
    func_position:
      end: 570
      start: 491
    functionDepth: 0
    functionLinenumber: 491
    functionLinenumberEnd: 570
    functionName: down_root_server
    functionSourceFile: /src/openvpn/src/plugins/down-root/down-root.c
    functionUses: []
    functionsReached:
    - recv_control
    - warn
    - send_control
    - fprintf
    - DEBUG
    - run_script
    linkageType: ''
    returnType: void
    signature: 'static void down_root_server(const int fd, char *const *argv, char
      *const *envp, const int verb) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:140,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 150
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 150
    functionName: recv_control
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'static int recv_control(int fd) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:173,1
    - Dst: read
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:174,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 3
    argNames:
    - fd
    - buffer
    - len
    argTypes:
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 182
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 182
    functionName: recv_string
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - memset
    - read
    linkageType: ''
    returnType: int
    signature: 'static int recv_string(int fd, char *buffer, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dup2
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:231,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames:
    - fd
    - '>= 3'
    argTypes: []
    constantsTouched: []
    func_position:
      end: 233
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 233
    functionName: if
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - close
    - dup2
    linkageType: ''
    returnType: else
    signature: 'else if (fd >= 3) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: isalnum
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:285,1
    - Dst: strncasecmp
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:293,1
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:293,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - query
    - match
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 294
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 294
    functionName: name_value_match
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - strlen
    - strncasecmp
    - isalnum
    linkageType: ''
    returnType: int
    signature: 'static int name_value_match(const char *query, const char *match) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:304,1
    - Dst: strncmp
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:305,1
    - Dst: strdup
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:310,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:313,1
    - Dst: strchr
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:318,1
    - Dst: plugin_base64_decode
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:325,1
    - Dst: plugin_base64_decode
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:329,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:333,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:335,1
    - Dst: plugin_secure_memzero
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:342,1
    - Dst: strcpy
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:344,1
    - Dst: plugin_secure_memzero
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:351,1
    - Dst: plugin_secure_memzero
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:343,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:346,1
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:351,1
    - Dst: free
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:352,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 36
    argCount: 1
    argNames:
    - up
    argTypes:
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 354
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 354
    functionName: split_scrv1_password
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - plugin_base64_decode
    - strdup
    - plugin_secure_memzero
    - strchr
    - strcpy
    - DEBUG
    - free
    - strlen
    - plugin_log
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'static void split_scrv1_password(struct user_pass *up) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:530,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:584,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:529,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:532,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:536,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:547,1
    - Dst: send_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:569,1
    - Dst: send_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:567,1
    - Dst: send_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:565,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:590,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:531,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:548,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:553,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:564,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:571,1
    - Dst: recv_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:575,1
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:562,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:582,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:531,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:551,1
    - Dst: send_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:568,1
    - Dst: send_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:566,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 66
    argCount: 4
    argNames:
    - handle
    - type
    - argv
    - envp
    argTypes:
    - openvpn_plugin_handle_t
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 596
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 596
    functionName: openvpn_plugin_func_v1
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - recv_control
    - send_string
    - get_env
    - send_control
    - DEBUG
    - strlen
    - plugin_log
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v1(openvpn_plugin_handle_t
      handle, const int type, const char *argv[], const char *envp[]) '
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:661,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:675,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:673,1
    - Dst: name_value_match
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:693,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:698,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:700,1
    - Dst: strstr
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:706,1
    - Dst: searchandreplace
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:708,1
    - Dst: strstr
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:710,1
    - Dst: searchandreplace
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:712,1
    - Dst: strdup
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:724,1
    - Dst: strdup
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:754,1
    - Dst: free
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:778,1
    - Dst: searchandreplace
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:720,1
    - Dst: searchandreplace
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:716,1
    - Dst: strstr
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:718,1
    - Dst: strstr
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:714,1
    - Dst: strdup
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:746,1
    CyclomaticComplexity: 44
    EdgeCount: 44
    ICount: 73
    argCount: 4
    argNames:
    - n
    - msg_array
    - response_array
    - appdata_ptr
    argTypes:
    - int
    - struct pam_message**
    - struct pam_response**
    - void*
    constantsTouched: []
    func_position:
      end: 782
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 782
    functionName: my_conv
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - searchandreplace
    - strstr
    - strdup
    - name_value_match
    - DEBUG
    - free
    - plugin_log
    - calloc
    linkageType: ''
    returnType: int
    signature: 'static int my_conv(int n, const struct pam_message **msg_array, struct
      pam_response **response_array, void *appdata_ptr) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pam_start
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:801,1
    - Dst: pam_authenticate
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:812,1
    - Dst: pam_set_item
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:807,1
    - Dst: pam_acct_mgmt
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:816,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:826,1
    - Dst: pam_strerror
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:828,1
    - Dst: pam_end
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:832,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 2
    argNames:
    - service
    - up
    argTypes:
    - char*
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 836
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 836
    functionName: pam_auth
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - pam_start
    - pam_set_item
    - pam_strerror
    - pam_authenticate
    - plugin_log
    - pam_acct_mgmt
    - pam_end
    linkageType: ''
    returnType: int
    signature: 'static int pam_auth(const char *service, const struct user_pass *up) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:156,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - fd
    - code
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 165
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 165
    functionName: send_control
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'static int send_control(int fd, int code) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:187,1
    - Dst: write
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:188,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - fd
    - string
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 197
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 197
    functionName: send_string
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - strlen
    - write
    linkageType: ''
    returnType: int
    signature: 'static int send_string(int fd, const char *string) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: closelog
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:253,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:258,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - keep
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 261
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 261
    functionName: close_fds_except
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - close
    - closelog
    linkageType: ''
    returnType: void
    signature: 'static void close_fds_except(int keep) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:392,1
    - Dst: socketpair
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:449,1
    - Dst: fcntl
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:475,1
    - Dst: fork
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:459,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:510,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:405,1
    - Dst: string_array_len
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:403,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:421,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:438,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:472,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:486,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:477,1
    - Dst: exit
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:512,1
    - Dst: calloc
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:382,1
    - Dst: string_array_len
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:414,1
    - Dst: string_array_len
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:416,1
    - Dst: close_fds_except
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:497,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:451,1
    - Dst: free
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:517,1
    - Dst: fprintf
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:375,1
    - Dst: atoi
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:441,1
    - Dst: recv_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:481,1
    - Dst: set_signals
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:500,1
    - Dst: daemonize
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:504,1
    - Dst: pam_server
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:508,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 76
    argCount: 3
    argNames:
    - v3structver
    - args
    - ret
    argTypes:
    - int
    - struct openvpn_plugin_args_open_in*
    - struct openvpn_plugin_args_open_return*
    constantsTouched: []
    func_position:
      end: 519
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 519
    functionName: openvpn_plugin_open_v3
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - close_fds_except
    - exit
    - OPENVPN_PLUGIN_MASK
    - atoi
    - fcntl
    - string_array_len
    - recv_control
    - set_signals
    - socketpair
    - get_env
    - free
    - pam_server
    - fprintf
    - daemonize
    - fork
    - close
    - plugin_log
    - calloc
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_open_v3(const int v3structver, struct
      openvpn_plugin_args_open_in const *args, struct openvpn_plugin_args_open_return
      *ret) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:603,1
    - Dst: waitpid
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:619,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:611,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:605,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:613,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:622,1
    - Dst: free
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:626,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 627
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 627
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - waitpid
    - send_control
    - DEBUG
    - free
    - plugin_log
    - close
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:270,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:273,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:275,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:274,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:272,1
    - Dst: signal
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:276,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 277
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 277
    functionName: set_signals
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - signal
    linkageType: ''
    returnType: void
    signature: 'static void set_signals(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:637,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:638,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 641
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 641
    functionName: openvpn_plugin_abort_v1
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - send_control
    - close
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_abort_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:863,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:873,1
    - Dst: exit
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:884,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:888,1
    - Dst: pam_auth
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:899,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:903,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:906,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:852,1
    - Dst: exit
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:879,1
    - Dst: open
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:892,1
    - Dst: write
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:901,1
    - Dst: getpid
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:889,1
    - Dst: exit
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:897,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:907,1
    - Dst: waitpid
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:868,1
    - Dst: fork
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:859,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:854,1
    - Dst: fork
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:875,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:878,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:895,1
    - Dst: exit
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:909,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 41
    argCount: 4
    argNames:
    - fd
    - ac_file_name
    - service
    - up
    argTypes:
    - int
    - char*
    - char*
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 910
      start: 848
    functionDepth: 0
    functionLinenumber: 848
    functionLinenumberEnd: 910
    functionName: do_deferred_pam_auth
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - exit
    - getpid
    - waitpid
    - send_control
    - write
    - pam_auth
    - fork
    - open
    - plugin_log
    - close
    linkageType: ''
    returnType: void
    signature: 'static void do_deferred_pam_auth(int fd, const char *ac_file_name,
      const char *service, const struct user_pass *up) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:940,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:948,1
    - Dst: recv_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:979,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:982,1
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1003,1
    - Dst: do_deferred_pam_auth
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1005,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1015,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1017,1
    - Dst: plugin_secure_memzero
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1044,1
    - Dst: plugin_secure_memzero
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1047,1
    - Dst: dlopen_pam
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:937,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:930,1
    - Dst: memset
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:961,1
    - Dst: recv_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:976,1
    - Dst: recv_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:977,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:990,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:993,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:994,1
    - Dst: split_scrv1_password
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:999,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1025,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1054,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:928,1
    - Dst: dlerror
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:939,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:939,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:950,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:954,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:970,1
    - Dst: recv_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:966,1
    - Dst: recv_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:978,1
    - Dst: recv_string
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:980,1
    - Dst: pam_auth
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1013,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1036,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:968,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:987,1
    - Dst: send_control
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1023,1
    - Dst: plugin_secure_memzero
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1029,1
    - Dst: DEBUG
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1052,1
    - Dst: plugin_secure_memzero
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1048,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1040,1
    - Dst: dlclose_pam
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:1050,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 77
    argCount: 4
    argNames:
    - fd
    - service
    - verb
    - name_value_list
    argTypes:
    - int
    - char*
    - int
    - struct name_value_list*
    constantsTouched: []
    func_position:
      end: 1058
      start: 915
    functionDepth: 0
    functionLinenumber: 915
    functionLinenumberEnd: 1058
    functionName: pam_server
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - recv_string
    - dlclose_pam
    - split_scrv1_password
    - do_deferred_pam_auth
    - recv_control
    - strlen
    - plugin_secure_memzero
    - send_control
    - DEBUG
    - pam_auth
    - dlerror
    - memset
    - plugin_log
    - dlopen_pam
    linkageType: ''
    returnType: void
    signature: 'static void pam_server(int fd, const char *service, int verb, const
      struct name_value_list *name_value_list) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:209,1
    - Dst: plugin_log
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:224,1
    - Dst: get_env
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:212,1
    - Dst: dup
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:216,1
    - Dst: daemon
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:222,1
    - Dst: dup2
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:231,1
    - Dst: close
      Src: /src/openvpn/src/plugins/auth-pam/auth-pam.c:232,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 21
    argCount: 1
    argNames:
    - envp
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 235
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 235
    functionName: daemonize
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/auth-pam.c
    functionUses: []
    functionsReached:
    - daemon
    - dup
    - get_env
    - dup2
    - plugin_log
    - close
    linkageType: ''
    returnType: void
    signature: 'static void daemonize(const char *envp[]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:49,1
    - Dst: strstr
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:73,1
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:53,1
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:50,1
    - Dst: strdup
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:76,1
    - Dst: strncat
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:81,1
    - Dst: strcat
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:82,1
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:84,1
    - Dst: strstr
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:85,1
    - Dst: strdup
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:87,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 39
    argCount: 3
    argNames:
    - tosearch
    - searchfor
    - replacewith
    argTypes:
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 88
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 88
    functionName: searchandreplace
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/utils.c
    functionUses: []
    functionsReached:
    - strstr
    - strdup
    - strncat
    - strlen
    - strcat
    linkageType: ''
    returnType: char*
    signature: 'char *searchandreplace(const char *tosearch, const char *searchfor,
      const char *replacewith) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - array
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 124
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 124
    functionName: string_array_len
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/utils.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int string_array_len(const char *array[]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:96,1
    - Dst: strncmp
      Src: /src/openvpn/src/plugins/auth-pam/utils.c:99,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 110
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 110
    functionName: get_env
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/utils.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dlopen
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:36,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - so
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 39
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 39
    functionName: dlopen_pam
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - dlopen
    linkageType: ''
    returnType: int
    signature: 'int dlopen_pam(const char *so) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:59,1
    - Dst: real_pam_start
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:62,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 3
    argCount: 4
    argNames:
    - service_name
    - user
    - pam_conversation
    - pamh
    argTypes:
    - char*
    - char*
    - struct pam_conv*
    - pam_handle_t**
    constantsTouched: []
    func_position:
      end: 63
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 63
    functionName: pam_start
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_start
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_start(const char *service_name, const char *user, const struct
      pam_conv *pam_conversation, pam_handle_t **pamh) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:77,1
    - Dst: real_pam_set_item
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:79,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 3
    argNames:
    - pamh
    - item_type
    - item
    argTypes:
    - pam_handle_t*
    - int
    - void*
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    functionName: pam_set_item
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_set_item
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_set_item(pam_handle_t *pamh, int item_type, const void *item) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:96,1
    - Dst: real_pam_fail_delay
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:98,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - musec_delay
    argTypes:
    - pam_handle_t*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 99
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 99
    functionName: pam_fail_delay
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - RESOLVE_PAM_FUNCTION
    - real_pam_fail_delay
    linkageType: ''
    returnType: int
    signature: 'int pam_fail_delay(pam_handle_t *pamh, unsigned int musec_delay) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:107,1
    - Dst: real_pam_strerror
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:109,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - errnum
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 110
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 110
    functionName: pam_strerror
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_strerror
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: const_char_pointer
    signature: 'const_char_pointer pam_strerror(pam_handle_t *pamh, int errnum) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:125,1
    - Dst: real_pam_getenv
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:127,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - name
    argTypes:
    - pam_handle_t*
    - char*
    constantsTouched: []
    func_position:
      end: 128
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 128
    functionName: pam_getenv
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - RESOLVE_PAM_FUNCTION
    - real_pam_getenv
    linkageType: ''
    returnType: const_char_pointer
    signature: 'const_char_pointer pam_getenv(pam_handle_t *pamh, const char *name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:146,1
    - Dst: real_pam_authenticate
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:148,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - flags
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 149
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 149
    functionName: pam_authenticate
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_authenticate
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_authenticate(pam_handle_t *pamh, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:155,1
    - Dst: real_pam_setcred
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:156,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - flags
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 157
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 157
    functionName: pam_setcred
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_setcred
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_setcred(pam_handle_t *pamh, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:69,1
    - Dst: real_pam_end
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:70,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - pam_status
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 71
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 71
    functionName: pam_end
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_end
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_end(pam_handle_t *pamh, int pam_status) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dlclose
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 49
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 49
    functionName: dlclose_pam
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - dlclose
    linkageType: ''
    returnType: void
    signature: 'void dlclose_pam(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:86,1
    - Dst: real_pam_get_item
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:89,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 3
    argNames:
    - pamh
    - item_type
    - item
    argTypes:
    - pam_handle_t*
    - int
    - void**
    constantsTouched: []
    func_position:
      end: 90
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 90
    functionName: pam_get_item
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - RESOLVE_PAM_FUNCTION
    - real_pam_get_item
    linkageType: ''
    returnType: int
    signature: 'int pam_get_item(const pam_handle_t *pamh, int item_type, const void
      **item) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:116,1
    - Dst: real_pam_putenv
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:118,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - name_value
    argTypes:
    - pam_handle_t*
    - char*
    constantsTouched: []
    func_position:
      end: 119
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 119
    functionName: pam_putenv
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - RESOLVE_PAM_FUNCTION
    - real_pam_putenv
    linkageType: ''
    returnType: int
    signature: 'int pam_putenv(pam_handle_t *pamh, const char *name_value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:175,1
    - Dst: real_pam_open_session
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:177,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - flags
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 178
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 178
    functionName: pam_open_session
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - RESOLVE_PAM_FUNCTION
    - real_pam_open_session
    linkageType: ''
    returnType: int
    signature: 'int pam_open_session(pam_handle_t *pamh, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:184,1
    - Dst: real_pam_close_session
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:186,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - flags
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 187
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 187
    functionName: pam_close_session
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_close_session
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_close_session(pam_handle_t *pamh, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:195,1
    - Dst: real_pam_chauthtok
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:196,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - flags
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 197
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 197
    functionName: pam_chauthtok
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_chauthtok
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_chauthtok(pam_handle_t *pamh, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:135,1
    - Dst: real_pam_getenvlist
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:137,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - pamh
    argTypes:
    - pam_handle_t*
    constantsTouched: []
    func_position:
      end: 138
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 138
    functionName: pam_getenvlist
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_getenvlist
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: char_ppointer
    signature: 'char_ppointer pam_getenvlist(pam_handle_t *pamh) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RESOLVE_PAM_FUNCTION
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:165,1
    - Dst: real_pam_acct_mgmt
      Src: /src/openvpn/src/plugins/auth-pam/pamdl.c:166,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - pamh
    - flags
    argTypes:
    - pam_handle_t*
    - int
    constantsTouched: []
    func_position:
      end: 167
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 167
    functionName: pam_acct_mgmt
    functionSourceFile: /src/openvpn/src/plugins/auth-pam/pamdl.c
    functionUses: []
    functionsReached:
    - real_pam_acct_mgmt
    - RESOLVE_PAM_FUNCTION
    linkageType: ''
    returnType: int
    signature: 'int pam_acct_mgmt(pam_handle_t *pamh, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: utf8to16_size
      Src: /src/openvpn/src/openvpnserv/service.h:121,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - utf8
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 122
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 122
    functionName: utf8to16
    functionSourceFile: /src/openvpn/src/openvpnserv/service.h
    functionUses: []
    functionsReached:
    - utf8to16_size
    linkageType: ''
    returnType: wchar_t*
    signature: 'static inline wchar_t *utf8to16(const char *utf8) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/common.c:240,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:247,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/common.c:241,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:247,1
    - Dst: RegisterEventSource
      Src: /src/openvpn/src/openvpnserv/common.c:244,1
    - Dst: va_start
      Src: /src/openvpn/src/openvpnserv/common.c:251,1
    - Dst: vswprintf
      Src: /src/openvpn/src/openvpnserv/common.c:252,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:252,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpnserv/common.c:253,1
    - Dst: ReportEvent
      Src: /src/openvpn/src/openvpnserv/common.c:256,1
    - Dst: DeregisterEventSource
      Src: /src/openvpn/src/openvpnserv/common.c:259,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - flags
    - format
    - '...'
    argTypes:
    - DWORD
    - LPCWSTR
    constantsTouched: []
    func_position:
      end: 263
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 263
    functionName: MsgToEventLog
    functionSourceFile: /src/openvpn/src/openvpnserv/common.c
    functionUses: []
    functionsReached:
    - va_end
    - _countof
    - GetLastError
    - swprintf
    - vswprintf
    - DeregisterEventSource
    - va_start
    - GetLastErrorText
    - ReportEvent
    - RegisterEventSource
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD MsgToEventLog(DWORD flags, LPCWSTR format, ...) '
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnserv/common.c:70,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:75,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:106,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:90,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:141,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/common.c:157,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/common.c:165,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/common.c:172,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:65,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/common.c:71,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:82,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:82,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:84,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:113,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:99,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:98,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/common.c:161,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:90,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:91,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:120,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/common.c:149,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnserv/common.c:187,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/common.c:193,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/common.c:188,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:65,1
    - Dst: RegOpenKeyEx
      Src: /src/openvpn/src/openvpnserv/common.c:67,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:98,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:113,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:114,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:127,1
    - Dst: GetRegString
      Src: /src/openvpn/src/openvpnserv/common.c:134,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/common.c:153,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnserv/common.c:171,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 93
    argCount: 1
    argNames:
    - s
    argTypes:
    - settings_t*
    constantsTouched: []
    func_position:
      end: 195
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 195
    functionName: GetOpenvpnSettings
    functionSourceFile: /src/openvpn/src/openvpnserv/common.c
    functionUses: []
    functionsReached:
    - _countof
    - RegCloseKey
    - GetRegString
    - SetLastError
    - swprintf
    - _wcsicmp
    - RegOpenKeyEx
    - MsgToEventLog
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD GetOpenvpnSettings(settings_t *s) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValue
      Src: /src/openvpn/src/openvpnserv/common.c:32,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:38,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnserv/common.c:46,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/common.c:47,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 5
    argNames:
    - key
    - value
    - data
    - size
    - default_value
    argTypes:
    - HKEY
    - LPCWSTR
    - LPWSTR
    - DWORD
    - LPCWSTR
    constantsTouched: []
    func_position:
      end: 51
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 51
    functionName: GetRegString
    functionSourceFile: /src/openvpn/src/openvpnserv/common.c
    functionUses: []
    functionsReached:
    - RegGetValue
    - SetLastError
    - MsgToEventLog
    - swprintf
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD GetRegString(HKEY key, LPCWSTR value, LPWSTR data, DWORD
      size, LPCWSTR default_value) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/common.c:206,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/common.c:216,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:210,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/common.c:217,1
    - Dst: FormatMessage
      Src: /src/openvpn/src/openvpnserv/common.c:207,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:217,1
    - Dst: LocalFree
      Src: /src/openvpn/src/openvpnserv/common.c:222,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 226
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 226
    functionName: GetLastErrorText
    functionSourceFile: /src/openvpn/src/openvpnserv/common.c
    functionUses: []
    functionsReached:
    - LocalFree
    - _countof
    - GetLastError
    - FormatMessage
    - swprintf
    - wcslen
    linkageType: ''
    returnType: LPCWSTR
    signature: 'LPCWSTR GetLastErrorText(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MultiByteToWideChar
      Src: /src/openvpn/src/openvpnserv/common.c:268,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/common.c:269,1
    - Dst: MultiByteToWideChar
      Src: /src/openvpn/src/openvpnserv/common.c:274,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - utf8
    - size
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 276
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 276
    functionName: utf8to16_size
    functionSourceFile: /src/openvpn/src/openvpnserv/common.c
    functionUses: []
    functionsReached:
    - MultiByteToWideChar
    - malloc
    linkageType: ''
    returnType: wchar_t*
    signature: 'wchar_t *utf8to16_size(const char *utf8, int size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSystemDirectoryW
      Src: /src/openvpn/src/openvpnserv/common.c:283,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:285,1
    - Dst: wcscpy_s
      Src: /src/openvpn/src/openvpnserv/common.c:285,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:283,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/common.c:286,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 290
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 290
    functionName: get_win_sys_path
    functionSourceFile: /src/openvpn/src/openvpnserv/common.c
    functionUses: []
    functionsReached:
    - GetSystemDirectoryW
    - _countof
    - wcscpy_s
    linkageType: ''
    returnType: wchar_t*
    signature: 'const wchar_t *get_win_sys_path(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:132,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - pfirst
    - data
    argTypes:
    - list_item_t**
    - LPVOID
    constantsTouched: []
    func_position:
      end: 143
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 143
    functionName: AddListItem
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - malloc
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD AddListItem(list_item_t **pfirst, LPVOID data) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:653,1
    - Dst: sockaddr_inet
      Src: /src/openvpn/src/openvpnserv/interactive.c:666,1
    - Dst: sockaddr_inet
      Src: /src/openvpn/src/openvpnserv/interactive.c:664,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:659,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:672,1
    - Dst: InterfaceLuid
      Src: /src/openvpn/src/openvpnserv/interactive.c:675,1
    - Dst: CreateIpForwardEntry2
      Src: /src/openvpn/src/openvpnserv/interactive.c:685,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:691,1
    - Dst: DeleteRoute
      Src: /src/openvpn/src/openvpnserv/interactive.c:694,1
    - Dst: DeleteRoute
      Src: /src/openvpn/src/openvpnserv/interactive.c:699,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:705,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:705,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:711,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 2
    argNames:
    - msg
    - lists
    argTypes:
    - route_message_t*
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 715
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 715
    functionName: HandleRouteMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - sockaddr_inet
    - CreateIpForwardEntry2
    - RemoveListItem
    - free
    - DeleteRoute
    - InterfaceLuid
    - malloc
    - AddListItem
    - strlen
    - ZeroMemory
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleRouteMessage(route_message_t *msg, undo_lists_t
      *lists) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1948,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1951,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - key
    argTypes:
    - HKEY
    constantsTouched: []
    func_position:
      end: 1956
      start: 1941
    functionDepth: 0
    functionLinenumber: 1941
    functionLinenumberEnd: 1956
    functionName: IsDhcpEnabled
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegGetValueA
    - MsgToEventLog
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL IsDhcpEnabled(HKEY key) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DeleteNrptRules
      Src: /src/openvpn/src/openvpnserv/interactive.c:3734,1
    - Dst: ApplyDnsSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:3751,1
    - Dst: ResetDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:3742,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:3746,1
    - Dst: GetDnsSearchListKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:3739,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 3753
      start: 3727
    functionDepth: 0
    functionLinenumber: 3727
    functionLinenumberEnd: 3753
    functionName: CleanupRegistry
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ApplyDnsSettings
    - RegCloseKey
    - GetDnsSearchListKey
    - DeleteNrptRules
    - ResetDnsSearchDomains
    linkageType: ''
    returnType: void
    signature: 'static void CleanupRegistry(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FlushIpNetTable
      Src: /src/openvpn/src/openvpnserv/interactive.c:723,1
    - Dst: FlushIpNetTable2
      Src: /src/openvpn/src/openvpnserv/interactive.c:726,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - flush_neighbors_message_t*
    constantsTouched: []
    func_position:
      end: 727
      start: 718
    functionDepth: 0
    functionLinenumber: 718
    functionLinenumberEnd: 727
    functionName: HandleFlushNeighborsMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - FlushIpNetTable2
    - FlushIpNetTable
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleFlushNeighborsMessage(flush_neighbors_message_t
      *msg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetNameServersValue
      Src: /src/openvpn/src/openvpnserv/interactive.c:1823,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - itf_id
    - family
    argTypes:
    - PCWSTR
    - short
    constantsTouched: []
    func_position:
      end: 1824
      start: 1820
    functionDepth: 0
    functionLinenumber: 1820
    functionLinenumberEnd: 1824
    functionName: ResetNameServers
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - SetNameServersValue
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD ResetNameServers(PCWSTR itf_id, short family) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1905,1
    - Dst: ApplyDnsSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:1928,1
    - Dst: ResetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:1864,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1869,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1889,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:1915,1
    - Dst: SetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:1908,1
    - Dst: RtlIpv6AddressToStringA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1899,1
    - Dst: SetDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:1878,1
    - Dst: RtlIpv4AddressToStringA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1903,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1834,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1848,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1849,1
    - Dst: InterfaceIdString
      Src: /src/openvpn/src/openvpnserv/interactive.c:1853,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1853,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:1869,1
    - Dst: ApplyDnsSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:1880,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1917,1
    - Dst: _wcsdup
      Src: /src/openvpn/src/openvpnserv/interactive.c:1914,1
    - Dst: ResetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:1918,1
    - Dst: SetDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:1926,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 66
    argCount: 2
    argNames:
    - msg
    - lists
    argTypes:
    - dns_cfg_message_t*
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 1931
      start: 1826
    functionDepth: 0
    functionLinenumber: 1826
    functionLinenumberEnd: 1931
    functionName: HandleDNSConfigMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ApplyDnsSettings
    - _countof
    - InterfaceIdString
    - ResetNameServers
    - RtlIpv4AddressToStringA
    - RtlIpv6AddressToStringA
    - RemoveListItem
    - SetNameServers
    - free
    - AddListItem
    - strlen
    - SetDnsSearchDomains
    - _wcsdup
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleDNSConfigMessage(const dns_cfg_message_t *msg,
      undo_lists_t *lists) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2026,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpnserv/interactive.c:2034,1
    - Dst: IsDhcpEnabled
      Src: /src/openvpn/src/openvpnserv/interactive.c:2034,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpnserv/interactive.c:2045,1
    - Dst: RegGetValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2037,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - itf_key
    - addrs
    - size
    argTypes:
    - HKEY
    - PSTR
    - PDWORD
    constantsTouched: []
    func_position:
      end: 2053
      start: 2019
    functionDepth: 0
    functionLinenumber: 2019
    functionLinenumberEnd: 2053
    functionName: GetItfDnsServersV4
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegGetValueA
    - IsDhcpEnabled
    - strchr
    linkageType: ''
    returnType: LSTATUS
    signature: 'static LSTATUS GetItfDnsServersV4(HKEY itf_key, PSTR addrs, PDWORD
      size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ServiceStartInteractive
      Src: /src/openvpn/src/openvpnserv/interactive.c:3719,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - dwArgc
    - lpszArgv
    argTypes:
    - DWORD
    - LPWSTR*
    constantsTouched: []
    func_position:
      end: 3720
      start: 3715
    functionDepth: 0
    functionLinenumber: 3715
    functionLinenumberEnd: 3720
    functionName: ServiceStartInteractiveOwn
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ServiceStartInteractive
    linkageType: ''
    returnType: VOID
    signature: 'VOID WINAPI ServiceStartInteractiveOwn(DWORD dwArgc, LPWSTR *lpszArgv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetNameServersValue
      Src: /src/openvpn/src/openvpnserv/interactive.c:1809,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - itf_id
    - family
    - addrs
    argTypes:
    - PCWSTR
    - short
    - PCSTR
    constantsTouched: []
    func_position:
      end: 1810
      start: 1806
    functionDepth: 0
    functionLinenumber: 1806
    functionLinenumberEnd: 1810
    functionName: SetNameServers
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - SetNameServersValue
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD SetNameServers(PCWSTR itf_id, short family, PCSTR addrs) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1970,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpnserv/interactive.c:1979,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpnserv/interactive.c:1989,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpnserv/interactive.c:1980,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1990,1
    - Dst: SetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:2000,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - itf_id
    - addresses
    argTypes:
    - PWSTR
    - nrpt_address_t*
    constantsTouched: []
    func_position:
      end: 2007
      start: 1966
    functionDepth: 0
    functionLinenumber: 1966
    functionLinenumberEnd: 2007
    functionName: SetNameServerAddresses
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - SetNameServers
    - strcpy
    - strchr
    - strlen
    linkageType: ''
    returnType: LSTATUS
    signature: 'static LSTATUS SetNameServerAddresses(PWSTR itf_id, const nrpt_address_t
      *addresses) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IIDFromString
      Src: /src/openvpn/src/openvpnserv/interactive.c:2285,1
    - Dst: GetIfEntry2
      Src: /src/openvpn/src/openvpnserv/interactive.c:2298,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2287,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2300,1
    - Dst: ConvertInterfaceGuidToLuid
      Src: /src/openvpn/src/openvpnserv/interactive.c:2292,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 1
    argNames:
    - iid_str
    argTypes:
    - PWSTR
    constantsTouched: []
    func_position:
      end: 2312
      start: 2277
    functionDepth: 0
    functionLinenumber: 2277
    functionLinenumberEnd: 2312
    functionName: IsInterfaceConnected
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - IIDFromString
    - GetIfEntry2
    - MsgToEventLog
    - ConvertInterfaceGuidToLuid
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL IsInterfaceConnected(PWSTR iid_str) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: OpenNrptBaseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2689,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2692,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2701,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:2701,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2702,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2710,1
    - Dst: RegEnumKeyExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2711,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2716,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:2722,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:2723,1
    - Dst: RegDeleteKeyW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2728,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2735,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 2
    argNames:
    - pid
    - gpol
    argTypes:
    - DWORD
    - PBOOL
    constantsTouched: []
    func_position:
      end: 2737
      start: 2685
    functionDepth: 0
    functionLinenumber: 2685
    functionLinenumberEnd: 2737
    functionName: DeleteNrptRules
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - RegCloseKey
    - RegDeleteKeyW
    - OpenNrptBaseKey
    - swprintf
    - wcslen
    - RegEnumKeyExW
    - wcsncmp
    - MsgToEventLog
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL DeleteNrptRules(DWORD pid, PBOOL gpol) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1291,1
    - Dst: isalnum
      Src: /src/openvpn/src/openvpnserv/interactive.c:1297,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1295,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - key
    argTypes:
    - HKEY
    constantsTouched: []
    func_position:
      end: 1304
      start: 1286
    functionDepth: 0
    functionLinenumber: 1286
    functionLinenumberEnd: 1304
    functionName: HasValidSearchList
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - strlen
    - RegGetValueA
    - isalnum
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL HasValidSearchList(HKEY key) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2196,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2216,1
    - Dst: ListContainsDomain
      Src: /src/openvpn/src/openvpnserv/interactive.c:2217,1
    - Dst: wcschr
      Src: /src/openvpn/src/openvpnserv/interactive.c:2209,1
    - Dst: wcschr
      Src: /src/openvpn/src/openvpnserv/interactive.c:2197,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2229,1
    - Dst: memmove
      Src: /src/openvpn/src/openvpnserv/interactive.c:2247,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 58
    argCount: 4
    argNames:
    - itf
    - search_domains
    - domains
    - size
    argTypes:
    - HKEY
    - PCWSTR
    - PWSTR
    - PDWORD
    constantsTouched: []
    func_position:
      end: 2267
      start: 2180
    functionDepth: 0
    functionLinenumber: 2180
    functionLinenumberEnd: 2267
    functionName: GetItfDnsDomains
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ListContainsDomain
    - wcschr
    - memmove
    - wcslen
    - RegGetValueW
    linkageType: ''
    returnType: LSTATUS
    signature: 'static LSTATUS GetItfDnsDomains(HKEY itf, PCWSTR search_domains, PWSTR
      domains, PDWORD size) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RegOpenKeyExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2660,1
    - Dst: RegOpenKeyExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2664,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - key
    - gpol
    argTypes:
    - PHKEY
    - PBOOL
    constantsTouched: []
    func_position:
      end: 2672
      start: 2646
    functionDepth: 0
    functionLinenumber: 2646
    functionLinenumberEnd: 2672
    functionName: OpenNrptBaseKey
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegOpenKeyExA
    linkageType: ''
    returnType: LSTATUS
    signature: 'static LSTATUS OpenNrptBaseKey(PHKEY key, PBOOL gpol) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetInterfacesKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1764,1
    - Dst: RegOpenKeyExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1770,1
    - Dst: RegSetValueExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1778,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1773,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1778,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1781,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1788,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1792,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 3
    argNames:
    - itf_id
    - family
    - value
    argTypes:
    - PCWSTR
    - short
    - PCSTR
    constantsTouched: []
    func_position:
      end: 1795
      start: 1758
    functionDepth: 0
    functionLinenumber: 1758
    functionLinenumberEnd: 1795
    functionName: SetNameServersValue
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegCloseKey
    - RegOpenKeyExW
    - GetInterfacesKey
    - RegSetValueExA
    - strlen
    - MsgToEventLog
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD SetNameServersValue(PCWSTR itf_id, short family, PCSTR
      value) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2900,1
    - Dst: utf8to16
      Src: /src/openvpn/src/openvpnserv/interactive.c:2916,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2902,1
    - Dst: netsh_wins_cmd
      Src: /src/openvpn/src/openvpnserv/interactive.c:2927,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2913,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:2932,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:2932,1
    - Dst: RtlIpv4AddressToStringW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2942,1
    - Dst: netsh_wins_cmd
      Src: /src/openvpn/src/openvpnserv/interactive.c:2943,1
    - Dst: _wcsdup
      Src: /src/openvpn/src/openvpnserv/interactive.c:2957,1
    - Dst: netsh_wins_cmd
      Src: /src/openvpn/src/openvpnserv/interactive.c:2961,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:2968,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:2960,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:2958,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 47
    argCount: 2
    argNames:
    - msg
    - lists
    argTypes:
    - wins_cfg_message_t*
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 2970
      start: 2892
    functionDepth: 0
    functionLinenumber: 2892
    functionLinenumberEnd: 2970
    functionName: HandleWINSConfigMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - RtlIpv4AddressToStringW
    - RemoveListItem
    - utf8to16
    - free
    - AddListItem
    - netsh_wins_cmd
    - _wcsdup
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleWINSConfigMessage(const wins_cfg_message_t *msg,
      undo_lists_t *lists) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:1025,1
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:1029,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:1040,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpnserv/interactive.c:1040,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1040,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1048,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1048,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1048,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1048,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1049,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:1057,1
    - Dst: ExecCommand
      Src: /src/openvpn/src/openvpnserv/interactive.c:1059,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:1050,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1062,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 34
    argCount: 3
    argNames:
    - action
    - if_name
    - addr
    argTypes:
    - wchar_t*
    - wchar_t*
    - wchar_t*
    constantsTouched: []
    func_position:
      end: 1064
      start: 1018
    functionDepth: 0
    functionLinenumber: 1018
    functionLinenumberEnd: 1064
    functionName: netsh_wins_cmd
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - get_win_sys_path
    - wcslen
    - swprintf
    - ExecCommand
    - malloc
    - free
    - wcscmp
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD netsh_wins_cmd(const wchar_t *action, const wchar_t *if_name,
      const wchar_t *addr) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ApplyGpolSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:1178,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:1187,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1180,1
    - Dst: OpenSCManager
      Src: /src/openvpn/src/openvpnserv/interactive.c:1183,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1186,1
    - Dst: OpenServiceA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1191,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1194,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:1195,1
    - Dst: ControlService
      Src: /src/openvpn/src/openvpnserv/interactive.c:1200,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1202,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/interactive.c:1212,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/interactive.c:1216,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:1203,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 1
    argNames:
    - apply_gpol
    argTypes:
    - BOOL
    constantsTouched: []
    func_position:
      end: 1219
      start: 1171
    functionDepth: 0
    functionLinenumber: 1171
    functionLinenumberEnd: 1219
    functionName: ApplyDnsSettings
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - OpenSCManager
    - ApplyGpolSettings
    - GetLastError
    - ControlService
    - OpenServiceA
    - MsgToEventLog
    - CloseServiceHandle
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ApplyDnsSettings(BOOL apply_gpol) '
  - BBCount: 27
    BranchProfiles: []
    Callsites:
    - Dst: ReadPipeAsync
      Src: /src/openvpn/src/openvpnserv/interactive.c:3089,1
    - Dst: HandleWfpBlockMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3126,1
    - Dst: HandleFlushNeighborsMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3118,1
    - Dst: HandleRouteMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3111,1
    - Dst: HandleAddressMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3103,1
    - Dst: HandleRegisterDNSMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3131,1
    - Dst: HandleDNSConfigMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3136,1
    - Dst: HandleDNSConfigNrptMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3143,1
    - Dst: HandleWINSConfigMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3149,1
    - Dst: HandleEnableDHCPMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3155,1
    - Dst: HandleCreateAdapterMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3169,1
    - Dst: WritePipeAsync
      Src: /src/openvpn/src/openvpnserv/interactive.c:3180,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3175,1
    - Dst: HandleMTUMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3162,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 50
    argCount: 6
    argNames:
    - pipe
    - proc_info
    - bytes
    - count
    - events
    - lists
    argTypes:
    - HANDLE
    - PPROCESS_INFORMATION
    - DWORD
    - DWORD
    - LPHANDLE
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 3181
      start: 3075
    functionDepth: 0
    functionLinenumber: 3075
    functionLinenumberEnd: 3181
    functionName: HandleMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - HandleEnableDHCPMessage
    - HandleCreateAdapterMessage
    - HandleRouteMessage
    - HandleWINSConfigMessage
    - HandleAddressMessage
    - HandleWfpBlockMessage
    - HandleDNSConfigNrptMessage
    - ReadPipeAsync
    - HandleMTUMessage
    - WritePipeAsync
    - HandleFlushNeighborsMessage
    - HandleDNSConfigMessage
    - MsgToEventLog
    - HandleRegisterDNSMessage
    linkageType: ''
    returnType: VOID
    signature: 'static VOID HandleMessage(HANDLE pipe, PPROCESS_INFORMATION proc_info,
      DWORD bytes, DWORD count, LPHANDLE events, undo_lists_t *lists) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:1069,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - item
    - str
    argTypes:
    - LPVOID
    - LPVOID
    constantsTouched: []
    func_position:
      end: 1070
      start: 1066
    functionDepth: 0
    functionLinenumber: 1066
    functionLinenumberEnd: 1070
    functionName: CmpWString
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - wcscmp
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL CmpWString(LPVOID item, LPVOID str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:2980,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:2991,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2980,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2990,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpnserv/interactive.c:2980,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:2998,1
    - Dst: ExecCommand
      Src: /src/openvpn/src/openvpnserv/interactive.c:3000,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3006,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - dhcp
    argTypes:
    - enable_dhcp_message_t*
    constantsTouched: []
    func_position:
      end: 3008
      start: 2972
    functionDepth: 0
    functionLinenumber: 2972
    functionLinenumberEnd: 3008
    functionName: HandleEnableDHCPMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - get_win_sys_path
    - swprintf
    - wcslen
    - malloc
    - free
    - ExecCommand
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleEnableDHCPMessage(const enable_dhcp_message_t *dhcp) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: DeleteAddress
      Src: /src/openvpn/src/openvpnserv/interactive.c:3198,1
    - Dst: DeleteRoute
      Src: /src/openvpn/src/openvpnserv/interactive.c:3202,1
    - Dst: UndoNrptRules
      Src: /src/openvpn/src/openvpnserv/interactive.c:3214,1
    - Dst: ResetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:3206,1
    - Dst: ResetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:3210,1
    - Dst: UndoDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:3218,1
    - Dst: netsh_wins_cmd
      Src: /src/openvpn/src/openvpnserv/interactive.c:3222,1
    - Dst: delete_wfp_block_filters
      Src: /src/openvpn/src/openvpnserv/interactive.c:3227,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:3230,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:3235,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3248,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3247,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 24
    argCount: 1
    argNames:
    - lists
    argTypes:
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 3251
      start: 3184
    functionDepth: 0
    functionLinenumber: 3184
    functionLinenumberEnd: 3251
    functionName: Undo
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - DeleteAddress
    - UndoNrptRules
    - ResetNameServers
    - free
    - set_interface_metric
    - DeleteRoute
    - delete_wfp_block_filters
    - netsh_wins_cmd
    - UndoDnsSearchDomains
    linkageType: ''
    returnType: VOID
    signature: 'static VOID Undo(undo_lists_t *lists) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetSystemInfo
      Src: /src/openvpn/src/openvpnserv/interactive.c:1159,1
    - Dst: ApplyGpolSettings64
      Src: /src/openvpn/src/openvpnserv/interactive.c:1161,1
    - Dst: ApplyGpolSettings32
      Src: /src/openvpn/src/openvpnserv/interactive.c:1161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1162
      start: 1155
    functionDepth: 0
    functionLinenumber: 1155
    functionLinenumberEnd: 1162
    functionName: ApplyGpolSettings
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ApplyGpolSettings64
    - GetSystemInfo
    - ApplyGpolSettings32
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ApplyGpolSettings(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RegOpenKeyExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1738,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1742,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - family
    - key
    argTypes:
    - short
    - PHKEY
    constantsTouched: []
    func_position:
      end: 1747
      start: 1731
    functionDepth: 0
    functionLinenumber: 1731
    functionLinenumberEnd: 1747
    functionName: GetInterfacesKey
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - MsgToEventLog
    - RegOpenKeyExA
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL GetInterfacesKey(short family, PHKEY key) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RegCreateKeyExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2450,1
    - Dst: RegSetValueExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2475,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2464,1
    - Dst: RegSetValueExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2457,1
    - Dst: RegSetValueExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2464,1
    - Dst: RegSetValueExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2482,1
    - Dst: RegSetValueExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2489,1
    - Dst: RegSetValueExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2498,1
    - Dst: RegSetValueExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2506,1
    - Dst: RegDeleteKeyW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2515,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2517,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 39
    argCount: 6
    argNames:
    - nrpt_key
    - subkey
    - address
    - domains
    - dom_size
    - dnssec
    argTypes:
    - HKEY
    - PCWSTR
    - PCSTR
    - PCWSTR
    - DWORD
    - BOOL
    constantsTouched: []
    func_position:
      end: 2519
      start: 2443
    functionDepth: 0
    functionLinenumber: 2443
    functionLinenumberEnd: 2519
    functionName: SetNrptRule
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegCloseKey
    - RegDeleteKeyW
    - RegSetValueExW
    - RegCreateKeyExW
    - RegSetValueExA
    - strlen
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD SetNrptRule(HKEY nrpt_key, PCWSTR subkey, PCSTR address,
      PCWSTR domains, DWORD dom_size, BOOL dnssec) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: GetInterfacesKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2330,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2347,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2340,1
    - Dst: RegOpenKeyExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2359,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2423,1
    - Dst: IsInterfaceConnected
      Src: /src/openvpn/src/openvpnserv/interactive.c:2353,1
    - Dst: GetItfDnsDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:2368,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2396,1
    - Dst: GetItfDnsServersV4
      Src: /src/openvpn/src/openvpnserv/interactive.c:2380,1
    - Dst: GetInterfacesKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2329,1
    - Dst: RegEnumKeyExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2341,1
    - Dst: memset
      Src: /src/openvpn/src/openvpnserv/interactive.c:2367,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2400,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2373,1
    - Dst: RegOpenKeyExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:2394,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2383,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2428,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2361,1
    - Dst: GetItfDnsServersV6
      Src: /src/openvpn/src/openvpnserv/interactive.c:2399,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2403,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2427,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 64
    argCount: 3
    argNames:
    - search_domains
    - data
    - data_size
    argTypes:
    - PCWSTR
    - nrpt_exclude_data_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 2429
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2429
    functionName: GetNrptExcludeData
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - GetItfDnsServersV6
    - _countof
    - RegCloseKey
    - GetItfDnsDomains
    - RegEnumKeyExW
    - RegOpenKeyExW
    - GetInterfacesKey
    - IsInterfaceConnected
    - memset
    - MsgToEventLog
    - GetItfDnsServersV4
    linkageType: ''
    returnType: void
    signature: 'static void GetNrptExcludeData(PCWSTR search_domains, nrpt_exclude_data_t
      *data, size_t data_size) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: InitOverlapped
      Src: /src/openvpn/src/openvpnserv/interactive.c:220,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:240,1
    - Dst: ReadFile
      Src: /src/openvpn/src/openvpnserv/interactive.c:238,1
    - Dst: WriteFile
      Src: /src/openvpn/src/openvpnserv/interactive.c:234,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:226,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:240,1
    - Dst: WaitForMultipleObjects
      Src: /src/openvpn/src/openvpnserv/interactive.c:251,1
    - Dst: CancelIo
      Src: /src/openvpn/src/openvpnserv/interactive.c:255,1
    - Dst: PeekNamedPipe
      Src: /src/openvpn/src/openvpnserv/interactive.c:261,1
    - Dst: GetOverlappedResult
      Src: /src/openvpn/src/openvpnserv/interactive.c:265,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:270,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:269,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 46
    argCount: 6
    argNames:
    - op
    - pipe
    - buffer
    - size
    - count
    - events
    argTypes:
    - async_op_t
    - HANDLE
    - LPVOID
    - DWORD
    - DWORD
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 272
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 272
    functionName: AsyncPipeOp
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - InitOverlapped
    - GetLastError
    - WaitForMultipleObjects
    - GetOverlappedResult
    - free
    - CancelIo
    - malloc
    - WriteFile
    - CloseHandleEx
    - ReadFile
    - PeekNamedPipe
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD AsyncPipeOp(async_op_t op, HANDLE pipe, LPVOID buffer,
      DWORD size, DWORD count, LPHANDLE events) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1423,1
    - Dst: InitialSearchListExists
      Src: /src/openvpn/src/openvpnserv/interactive.c:1429,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1425,1
    - Dst: RegSetValueExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1436,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1435,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1439,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - key
    - list
    argTypes:
    - HKEY
    - PCWSTR
    constantsTouched: []
    func_position:
      end: 1445
      start: 1420
    functionDepth: 0
    functionLinenumber: 1420
    functionLinenumberEnd: 1445
    functionName: StoreInitialDnsSearchList
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - MsgToEventLog
    - InitialSearchListExists
    - wcslen
    - RegSetValueExW
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL StoreInitialDnsSearchList(HKEY key, PCWSTR list) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/openvpnserv/interactive.c:2534,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2535,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:2548,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2538,1
    - Dst: GetNrptExcludeData
      Src: /src/openvpn/src/openvpnserv/interactive.c:2535,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2548,1
    - Dst: SetNrptRule
      Src: /src/openvpn/src/openvpnserv/interactive.c:2549,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2552,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 3
    argNames:
    - nrpt_key
    - ovpn_pid
    - search_domains
    argTypes:
    - HKEY
    - DWORD
    - PCWSTR
    constantsTouched: []
    func_position:
      end: 2555
      start: 2530
    functionDepth: 0
    functionLinenumber: 2530
    functionLinenumberEnd: 2555
    functionName: SetNrptExcludeRules
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - SetNrptRule
    - _countof
    - swprintf
    - GetNrptExcludeData
    - memset
    - MsgToEventLog
    linkageType: ''
    returnType: void
    signature: 'static void SetNrptExcludeRules(HKEY nrpt_key, DWORD ovpn_pid, PCWSTR
      search_domains) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: utf8to16
      Src: /src/openvpn/src/openvpnserv/interactive.c:542,1
    - Dst: ConvertInterfaceAliasToLuid
      Src: /src/openvpn/src/openvpnserv/interactive.c:546,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:547,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - iface_name
    - luid
    argTypes:
    - char*
    - PNET_LUID
    constantsTouched: []
    func_position:
      end: 554
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 554
    functionName: InterfaceLuid
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - free
    - utf8to16
    - ConvertInterfaceAliasToLuid
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD InterfaceLuid(const char *iface_name, PNET_LUID luid) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1396,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1403,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - key
    argTypes:
    - HKEY
    constantsTouched: []
    func_position:
      end: 1408
      start: 1391
    functionDepth: 0
    functionLinenumber: 1391
    functionLinenumberEnd: 1408
    functionName: InitialSearchListExists
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegGetValueA
    - MsgToEventLog
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL InitialSearchListExists(HKEY key) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2780,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2801,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2777,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:2819,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2824,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:2851,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:2830,1
    - Dst: SetDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:2835,1
    - Dst: SetNameServerAddresses
      Src: /src/openvpn/src/openvpnserv/interactive.c:2874,1
    - Dst: ApplyDnsSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:2886,1
    - Dst: InterfaceIdString
      Src: /src/openvpn/src/openvpnserv/interactive.c:2812,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2812,1
    - Dst: ResetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:2833,1
    - Dst: SetDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:2883,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2775,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2776,1
    - Dst: DeleteNrptRules
      Src: /src/openvpn/src/openvpnserv/interactive.c:2829,1
    - Dst: ApplyDnsSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:2839,1
    - Dst: ResetNameServers
      Src: /src/openvpn/src/openvpnserv/interactive.c:2832,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:2861,1
    - Dst: SetNrptRules
      Src: /src/openvpn/src/openvpnserv/interactive.c:2867,1
    - Dst: OpenNrptBaseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:2844,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:2858,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 71
    argCount: 3
    argNames:
    - msg
    - ovpn_pid
    - lists
    argTypes:
    - nrpt_dns_cfg_message_t*
    - DWORD
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 2890
      start: 2765
    functionDepth: 0
    functionLinenumber: 2765
    functionLinenumberEnd: 2890
    functionName: HandleDNSConfigNrptMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ApplyDnsSettings
    - _countof
    - InterfaceIdString
    - ResetNameServers
    - RemoveListItem
    - OpenNrptBaseKey
    - SetNrptRules
    - SetNameServerAddresses
    - DeleteNrptRules
    - SetDnsSearchDomains
    - malloc
    - free
    - AddListItem
    - strlen
    - MsgToEventLog
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleDNSConfigNrptMessage(const nrpt_dns_cfg_message_t
      *msg, DWORD ovpn_pid, undo_lists_t *lists) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:559,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - item
    - address
    argTypes:
    - LPVOID
    - LPVOID
    constantsTouched: []
    func_position:
      end: 560
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 560
    functionName: CmpAddress
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL CmpAddress(LPVOID item, LPVOID address) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: RegOpenKeyExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1331,1
    - Dst: HasValidSearchList
      Src: /src/openvpn/src/openvpnserv/interactive.c:1350,1
    - Dst: HasValidSearchList
      Src: /src/openvpn/src/openvpnserv/interactive.c:1336,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1341,1
    - Dst: RegOpenKeyExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1345,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1354,1
    - Dst: InterfaceIdString
      Src: /src/openvpn/src/openvpnserv/interactive.c:1361,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1361,1
    - Dst: RegOpenKeyExA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1365,1
    - Dst: RegOpenKeyExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1370,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1371,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 3
    argNames:
    - itf_name
    - gpol
    - key
    argTypes:
    - PCSTR
    - PBOOL
    - PHKEY
    constantsTouched: []
    func_position:
      end: 1382
      start: 1323
    functionDepth: 0
    functionLinenumber: 1323
    functionLinenumberEnd: 1382
    functionName: GetDnsSearchListKey
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - InterfaceIdString
    - _countof
    - RegCloseKey
    - RegOpenKeyExA
    - RegOpenKeyExW
    - HasValidSearchList
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL GetDnsSearchListKey(PCSTR itf_name, PBOOL gpol, PHKEY
      key) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeleteNrptRules
      Src: /src/openvpn/src/openvpnserv/interactive.c:2748,1
    - Dst: ApplyDnsSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:2750,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - ovpn_pid
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 2752
      start: 2744
    functionDepth: 0
    functionLinenumber: 2744
    functionLinenumberEnd: 2752
    functionName: UndoNrptRules
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ApplyDnsSettings
    - DeleteNrptRules
    linkageType: ''
    returnType: void
    signature: 'static void UndoNrptRules(DWORD ovpn_pid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:185,1
    - Dst: CreateEvent
      Src: /src/openvpn/src/openvpnserv/interactive.c:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - overlapped
    argTypes:
    - LPOVERLAPPED
    constantsTouched: []
    func_position:
      end: 188
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 188
    functionName: InitOverlapped
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ZeroMemory
    - CreateEvent
    linkageType: ''
    returnType: HANDLE
    signature: 'static HANDLE InitOverlapped(LPOVERLAPPED overlapped) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CommandLineToArgvW
      Src: /src/openvpn/src/openvpnserv/interactive.c:372,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:376,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:398,1
    - Dst: CheckOption
      Src: /src/openvpn/src/openvpnserv/interactive.c:396,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:378,1
    - Dst: IsOption
      Src: /src/openvpn/src/openvpnserv/interactive.c:406,1
    - Dst: CheckOption
      Src: /src/openvpn/src/openvpnserv/interactive.c:411,1
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:413,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:415,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:420,1
    - Dst: LocalFree
      Src: /src/openvpn/src/openvpnserv/interactive.c:433,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 39
    argCount: 5
    argNames:
    - pipe
    - workdir
    - options
    - errmsg
    - capacity
    argTypes:
    - HANDLE
    - WCHAR*
    - WCHAR*
    - WCHAR*
    - DWORD
    constantsTouched: []
    func_position:
      end: 436
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 436
    functionName: ValidateOptions
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - LocalFree
    - IsOption
    - GetLastError
    - swprintf
    - CommandLineToArgvW
    - CheckOption
    - wcscmp
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ValidateOptions(HANDLE pipe, const WCHAR *workdir, const
      WCHAR *options, WCHAR *errmsg, DWORD capacity) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: InterfaceLuid
      Src: /src/openvpn/src/openvpnserv/interactive.c:1238,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1247,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1241,1
    - Dst: ConvertInterfaceLuidToGuid
      Src: /src/openvpn/src/openvpnserv/interactive.c:1244,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/openvpnserv/interactive.c:1251,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1253,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1257,1
    - Dst: wcsncpy
      Src: /src/openvpn/src/openvpnserv/interactive.c:1263,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/openvpnserv/interactive.c:1268,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 3
    argNames:
    - itf_name
    - str
    - len
    argTypes:
    - PCSTR
    - PWSTR
    - size_t
    constantsTouched: []
    func_position:
      end: 1271
      start: 1230
    functionDepth: 0
    functionLinenumber: 1230
    functionLinenumberEnd: 1271
    functionName: InterfaceIdString
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - wcslen
    - CoTaskMemFree
    - wcsncpy
    - StringFromIID
    - InterfaceLuid
    - MsgToEventLog
    - ConvertInterfaceLuidToGuid
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD InterfaceIdString(PCSTR itf_name, PWSTR str, size_t len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpnserv/interactive.c:194,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:198,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - overlapped
    argTypes:
    - LPOVERLAPPED
    constantsTouched: []
    func_position:
      end: 201
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 201
    functionName: ResetOverlapped
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ZeroMemory
    - ResetEvent
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ResetOverlapped(LPOVERLAPPED overlapped) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:457,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:449,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:461,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:465,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:473,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:495,1
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:480,1
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:490,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:509,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:464,1
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:500,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:456,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:479,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:489,1
    - Dst: PeekNamedPipeAsync
      Src: /src/openvpn/src/openvpnserv/interactive.c:445,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:448,1
    - Dst: ReadPipeAsync
      Src: /src/openvpn/src/openvpnserv/interactive.c:469,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:472,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:499,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:485,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 53
    argCount: 2
    argNames:
    - pipe
    - sud
    argTypes:
    - HANDLE
    - STARTUP_DATA*
    constantsTouched: []
    func_position:
      end: 511
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 511
    functionName: GetStartupData
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ReturnError
    - PeekNamedPipeAsync
    - ReadPipeAsync
    - wcslen
    - malloc
    - free
    - MsgToEventLog
    - ReturnLastError
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL GetStartupData(HANDLE pipe, STARTUP_DATA *sud) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: CleanupRegistry
      Src: /src/openvpn/src/openvpnserv/interactive.c:3778,1
    - Dst: GetOpenvpnSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:3781,1
    - Dst: InitOverlapped
      Src: /src/openvpn/src/openvpnserv/interactive.c:3787,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3791,1
    - Dst: CreateSemaphoreW
      Src: /src/openvpn/src/openvpnserv/interactive.c:3795,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3822,1
    - Dst: CreateThread
      Src: /src/openvpn/src/openvpnserv/interactive.c:3833,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3824,1
    - Dst: CreateClientPipeInstance
      Src: /src/openvpn/src/openvpnserv/interactive.c:3808,1
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3843,1
    - Dst: Sleep
      Src: /src/openvpn/src/openvpnserv/interactive.c:3872,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3895,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3848,1
    - Dst: ResetOverlapped
      Src: /src/openvpn/src/openvpnserv/interactive.c:3861,1
    - Dst: RegisterServiceCtrlHandlerEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3765,1
    - Dst: ReportStatusToSCMgr
      Src: /src/openvpn/src/openvpnserv/interactive.c:3775,1
    - Dst: UpdateWaitHandles
      Src: /src/openvpn/src/openvpnserv/interactive.c:3802,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3821,1
    - Dst: WaitForMultipleObjects
      Src: /src/openvpn/src/openvpnserv/interactive.c:3828,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:3845,1
    - Dst: TerminateThread
      Src: /src/openvpn/src/openvpnserv/interactive.c:3847,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3849,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3878,1
    - Dst: FreeWaitHandles
      Src: /src/openvpn/src/openvpnserv/interactive.c:3892,1
    - Dst: CreateEvent
      Src: /src/openvpn/src/openvpnserv/interactive.c:3788,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3798,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:3836,1
    - Dst: UpdateWaitHandles
      Src: /src/openvpn/src/openvpnserv/interactive.c:3846,1
    - Dst: ResumeThread
      Src: /src/openvpn/src/openvpnserv/interactive.c:3853,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3858,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpnserv/interactive.c:3870,1
    - Dst: UpdateWaitHandles
      Src: /src/openvpn/src/openvpnserv/interactive.c:3886,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3894,1
    - Dst: ReportStatusToSCMgr
      Src: /src/openvpn/src/openvpnserv/interactive.c:3899,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpnserv/interactive.c:3879,1
    - Dst: CancelIo
      Src: /src/openvpn/src/openvpnserv/interactive.c:3866,1
    - Dst: CreateClientPipeInstance
      Src: /src/openvpn/src/openvpnserv/interactive.c:3832,1
    - Dst: ReportStatusToSCMgr
      Src: /src/openvpn/src/openvpnserv/interactive.c:3816,1
    - Dst: ConnectNamedPipe
      Src: /src/openvpn/src/openvpnserv/interactive.c:3820,1
    - Dst: UpdateWaitHandles
      Src: /src/openvpn/src/openvpnserv/interactive.c:3839,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3869,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:3885,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3887,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3893,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 101
    argCount: 2
    argNames:
    - dwArgc
    - lpszArgv
    argTypes:
    - DWORD
    - LPWSTR*
    constantsTouched: []
    func_position:
      end: 3900
      start: 3755
    functionDepth: 0
    functionLinenumber: 3755
    functionLinenumberEnd: 3900
    functionName: ServiceStartInteractive
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - GetOpenvpnSettings
    - CreateSemaphoreW
    - ReturnError
    - ConnectNamedPipe
    - ResetEvent
    - CloseHandleEx
    - CreateEvent
    - InitOverlapped
    - CreateThread
    - ResetOverlapped
    - Sleep
    - GetLastError
    - FreeWaitHandles
    - CleanupRegistry
    - RemoveListItem
    - ReportStatusToSCMgr
    - AddListItem
    - CreateClientPipeInstance
    - MsgToEventLog
    - UpdateWaitHandles
    - RegisterServiceCtrlHandlerEx
    - ResumeThread
    - WaitForMultipleObjects
    - TerminateThread
    - CancelIo
    - SetEvent
    linkageType: ''
    returnType: VOID
    signature: 'VOID WINAPI ServiceStartInteractive(DWORD dwArgc, LPWSTR *lpszArgv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:637,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - item
    - route
    argTypes:
    - LPVOID
    - LPVOID
    constantsTouched: []
    func_position:
      end: 638
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 638
    functionName: CmpRoute
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL CmpRoute(LPVOID item, LPVOID route) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DeleteIpForwardEntry2
      Src: /src/openvpn/src/openvpnserv/interactive.c:643,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fwd_row
    argTypes:
    - PMIB_IPFORWARD_ROW2
    constantsTouched: []
    func_position:
      end: 644
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 644
    functionName: DeleteRoute
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - DeleteIpForwardEntry2
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD DeleteRoute(PMIB_IPFORWARD_ROW2 fwd_row) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1465,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:1480,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1479,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1468,1
    - Dst: StoreInitialDnsSearchList
      Src: /src/openvpn/src/openvpnserv/interactive.c:1473,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1482,1
    - Dst: wcsncpy
      Src: /src/openvpn/src/openvpnserv/interactive.c:1490,1
    - Dst: wcsncpy
      Src: /src/openvpn/src/openvpnserv/interactive.c:1494,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1494,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1497,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1501,1
    - Dst: RegSetValueExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1498,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 3
    argNames:
    - key
    - have_list
    - domains
    argTypes:
    - HKEY
    - BOOL
    - PCWSTR
    constantsTouched: []
    func_position:
      end: 1507
      start: 1456
    functionDepth: 0
    functionLinenumber: 1456
    functionLinenumberEnd: 1507
    functionName: AddDnsSearchDomains
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - StoreInitialDnsSearchList
    - RegSetValueExW
    - wcslen
    - RegGetValueW
    - MsgToEventLog
    - wcsncpy
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL AddDnsSearchDomains(HKEY key, BOOL have_list, PCWSTR domains) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2580,1
    - Dst: utf8to16
      Src: /src/openvpn/src/openvpnserv/interactive.c:2601,1
    - Dst: SetNrptExcludeRules
      Src: /src/openvpn/src/openvpnserv/interactive.c:2606,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:2607,1
    - Dst: utf8to16_size
      Src: /src/openvpn/src/openvpnserv/interactive.c:2583,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpnserv/interactive.c:2619,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2620,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:2624,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:2624,1
    - Dst: SetNrptRule
      Src: /src/openvpn/src/openvpnserv/interactive.c:2625,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:2633,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:2628,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 40
    argCount: 6
    argNames:
    - nrpt_key
    - addresses
    - domains
    - search_domains
    - dnssec
    - ovpn_pid
    argTypes:
    - HKEY
    - nrpt_address_t*
    - char*
    - char*
    - BOOL
    - DWORD
    constantsTouched: []
    func_position:
      end: 2636
      start: 2569
    functionDepth: 0
    functionLinenumber: 2569
    functionLinenumberEnd: 2636
    functionName: SetNrptRules
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - SetNrptRule
    - swprintf
    - utf8to16_size
    - strcpy
    - MsgToEventLog
    - utf8to16
    - free
    - strlen
    - SetNrptExcludeRules
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD SetNrptRules(HKEY nrpt_key, const nrpt_address_t *addresses,
      const char *domains, const char *search_domains, BOOL dnssec, DWORD ovpn_pid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DeleteUnicastIpAddressEntry
      Src: /src/openvpn/src/openvpnserv/interactive.c:565,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - addr_row
    argTypes:
    - PMIB_UNICASTIPADDRESS_ROW
    constantsTouched: []
    func_position:
      end: 566
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 566
    functionName: DeleteAddress
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - DeleteUnicastIpAddressEntry
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD DeleteAddress(PMIB_UNICASTIPADDRESS_ROW addr_row) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: InitializeIpInterfaceEntry
      Src: /src/openvpn/src/openvpnserv/interactive.c:3015,1
    - Dst: GetIpInterfaceEntry
      Src: /src/openvpn/src/openvpnserv/interactive.c:3018,1
    - Dst: SetIpInterfaceEntry
      Src: /src/openvpn/src/openvpnserv/interactive.c:3029,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - mtu
    argTypes:
    - set_mtu_message_t*
    constantsTouched: []
    func_position:
      end: 3031
      start: 3010
    functionDepth: 0
    functionLinenumber: 3010
    functionLinenumberEnd: 3031
    functionName: HandleMTUMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - SetIpInterfaceEntry
    - InitializeIpInterfaceEntry
    - GetIpInterfaceEntry
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleMTUMessage(const set_mtu_message_t *mtu) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:575,1
    - Dst: CreateUnicastIpAddressEntry
      Src: /src/openvpn/src/openvpnserv/interactive.c:602,1
    - Dst: InitializeUnicastIpAddressEntry
      Src: /src/openvpn/src/openvpnserv/interactive.c:581,1
    - Dst: InterfaceLuid
      Src: /src/openvpn/src/openvpnserv/interactive.c:592,1
    - Dst: sockaddr_inet
      Src: /src/openvpn/src/openvpnserv/interactive.c:582,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:608,1
    - Dst: DeleteAddress
      Src: /src/openvpn/src/openvpnserv/interactive.c:611,1
    - Dst: DeleteAddress
      Src: /src/openvpn/src/openvpnserv/interactive.c:616,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:622,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:622,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:628,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 36
    argCount: 2
    argNames:
    - msg
    - lists
    argTypes:
    - address_message_t*
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 632
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 632
    functionName: HandleAddressMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - DeleteAddress
    - sockaddr_inet
    - RemoveListItem
    - free
    - CreateUnicastIpAddressEntry
    - InitializeUnicastIpAddressEntry
    - InterfaceLuid
    - malloc
    - AddListItem
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleAddressMessage(address_message_t *msg, undo_lists_t
      *lists) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LoadLibraryA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1130,1
    - Dst: RtlPublishWnfStateData
      Src: /src/openvpn/src/openvpnserv/interactive.c:1142,1
    - Dst: GetProcAddress
      Src: /src/openvpn/src/openvpnserv/interactive.c:1136,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1148
      start: 1118
    functionDepth: 0
    functionLinenumber: 1118
    functionLinenumberEnd: 1148
    functionName: ApplyGpolSettings64
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - GetProcAddress
    - LoadLibraryA
    - RtlPublishWnfStateData
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ApplyGpolSettings64(void) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1568,1
    - Dst: wcsstr
      Src: /src/openvpn/src/openvpnserv/interactive.c:1576,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1579,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1571,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1584,1
    - Dst: wmemmove
      Src: /src/openvpn/src/openvpnserv/interactive.c:1588,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1590,1
    - Dst: RegGetValueW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1596,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1599,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnserv/interactive.c:1605,1
    - Dst: RegSetValueExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1613,1
    - Dst: ResetDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:1607,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1616,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1605,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 2
    argNames:
    - key
    - domains
    argTypes:
    - HKEY
    - PCWSTR
    constantsTouched: []
    func_position:
      end: 1619
      start: 1561
    functionDepth: 0
    functionLinenumber: 1561
    functionLinenumberEnd: 1619
    functionName: RemoveDnsSearchDomains
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - wmemmove
    - RegSetValueExW
    - wcslen
    - RegGetValueW
    - wcsncmp
    - MsgToEventLog
    - wcsstr
    - ResetDnsSearchDomains
    linkageType: ''
    returnType: void
    signature: 'static void RemoveDnsSearchDomains(HKEY key, PCWSTR domains) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ConvertStringSecurityDescriptorToSecurityDescriptor
      Src: /src/openvpn/src/openvpnserv/interactive.c:3613,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3615,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:3635,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:3635,1
    - Dst: CreateNamedPipe
      Src: /src/openvpn/src/openvpnserv/interactive.c:3636,1
    - Dst: LocalFree
      Src: /src/openvpn/src/openvpnserv/interactive.c:3640,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3644,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames:
    - VOID
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3649
      start: 3601
    functionDepth: 0
    functionLinenumber: 3601
    functionLinenumberEnd: 3649
    functionName: CreateClientPipeInstance
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - LocalFree
    - _countof
    - ConvertStringSecurityDescriptorToSecurityDescriptor
    - swprintf
    - CreateNamedPipe
    - MsgToEventLog
    linkageType: ''
    returnType: HANDLE
    signature: 'static HANDLE CreateClientPipeInstance(VOID) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1528,1
    - Dst: RegSetValueExW
      Src: /src/openvpn/src/openvpnserv/interactive.c:1540,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:1539,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1543,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1533,1
    - Dst: RegDeleteValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1548,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 1
    argNames:
    - key
    argTypes:
    - HKEY
    constantsTouched: []
    func_position:
      end: 1553
      start: 1520
    functionDepth: 0
    functionLinenumber: 1520
    functionLinenumberEnd: 1553
    functionName: ResetDnsSearchDomains
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegSetValueExW
    - wcslen
    - RegDeleteValueA
    - RegGetValueW
    - MsgToEventLog
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ResetDnsSearchDomains(HKEY key) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: wcsstr
      Src: /src/openvpn/src/openvpnserv/interactive.c:2142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 3
    argNames:
    - list
    - domain
    - len
    argTypes:
    - PCWSTR
    - PCWSTR
    - size_t
    constantsTouched: []
    func_position:
      end: 2157
      start: 2136
    functionDepth: 0
    functionLinenumber: 2136
    functionLinenumberEnd: 2157
    functionName: ListContainsDomain
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - wcsstr
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ListContainsDomain(PCWSTR list, PCWSTR domain, size_t
      len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:960,1
    - Dst: ExecCommand
      Src: /src/openvpn/src/openvpnserv/interactive.c:967,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:965,1
    - Dst: WaitForMultipleObjects
      Src: /src/openvpn/src/openvpnserv/interactive.c:962,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpnserv/interactive.c:960,1
    - Dst: ReleaseSemaphore
      Src: /src/openvpn/src/openvpnserv/interactive.c:970,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:972,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:977,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - unused
    argTypes:
    - LPVOID
    constantsTouched: []
    func_position:
      end: 981
      start: 938
    functionDepth: 0
    functionLinenumber: 938
    functionLinenumberEnd: 981
    functionName: RegisterDNS
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _countof
    - get_win_sys_path
    - WaitForMultipleObjects
    - swprintf
    - ReleaseSemaphore
    - MsgToEventLog
    - ExecCommand
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD WINAPI RegisterDNS(LPVOID unused) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: RegGetValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2071,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpnserv/interactive.c:2079,1
    - Dst: IsDhcpEnabled
      Src: /src/openvpn/src/openvpnserv/interactive.c:2079,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpnserv/interactive.c:2103,1
    - Dst: RegGetValueA
      Src: /src/openvpn/src/openvpnserv/interactive.c:2083,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2110,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:2114,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpnserv/interactive.c:2117,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 3
    argNames:
    - itf_key
    - addrs
    - size
    argTypes:
    - HKEY
    - PSTR
    - PDWORD
    constantsTouched: []
    func_position:
      end: 2125
      start: 2064
    functionDepth: 0
    functionLinenumber: 2064
    functionLinenumberEnd: 2125
    functionName: GetItfDnsServersV6
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegGetValueA
    - IsDhcpEnabled
    - strchr
    - strlen
    - inet_ntop
    linkageType: ''
    returnType: LSTATUS
    signature: 'static LSTATUS GetItfDnsServersV6(HKEY itf_key, PSTR addrs, PDWORD
      size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CreateThread
      Src: /src/openvpn/src/openvpnserv/interactive.c:990,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpnserv/interactive.c:999,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:1003,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1007
      start: 983
    functionDepth: 0
    functionLinenumber: 983
    functionLinenumberEnd: 1007
    functionName: HandleRegisterDNSMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - GetLastError
    - CreateThread
    - CloseHandle
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleRegisterDNSMessage(void) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnserv/interactive.c:3062,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/openvpnserv/interactive.c:3067,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:3062,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:3067,1
    - Dst: ExecCommand
      Src: /src/openvpn/src/openvpnserv/interactive.c:3072,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 13
    argCount: 1
    argNames:
    - msg
    argTypes:
    - create_adapter_message_t*
    constantsTouched: []
    func_position:
      end: 3073
      start: 3040
    functionDepth: 0
    functionLinenumber: 3040
    functionLinenumberEnd: 3073
    functionName: HandleCreateAdapterMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - ExecCommand
    - _countof
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleCreateAdapterMessage(const create_adapter_message_t
      *msg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: match
      Src: /src/openvpn/src/openvpnserv/interactive.c:156,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:164,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 3
    argNames:
    - pfirst
    - match
    - ctx
    argTypes:
    - list_item_t**
    - match_fn_t
    - LPVOID
    constantsTouched: []
    func_position:
      end: 168
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 168
    functionName: RemoveListItem
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - match
    - free
    linkageType: ''
    returnType: LPVOID
    signature: 'static LPVOID RemoveListItem(list_item_t **pfirst, match_fn_t match,
      LPVOID ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AsyncPipeOp
      Src: /src/openvpn/src/openvpnserv/interactive.c:277,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - pipe
    - count
    - events
    argTypes:
    - HANDLE
    - DWORD
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 278
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: PeekNamedPipeAsync
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - AsyncPipeOp
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD PeekNamedPipeAsync(HANDLE pipe, DWORD count, LPHANDLE
      events) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AsyncPipeOp
      Src: /src/openvpn/src/openvpnserv/interactive.c:289,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 5
    argNames:
    - pipe
    - data
    - size
    - count
    - events
    argTypes:
    - HANDLE
    - LPVOID
    - DWORD
    - DWORD
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: WritePipeAsync
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - AsyncPipeOp
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD WritePipeAsync(HANDLE pipe, LPVOID data, DWORD size,
      DWORD count, LPHANDLE events) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:517,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - sud
    argTypes:
    - STARTUP_DATA*
    constantsTouched: []
    func_position:
      end: 518
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 518
    functionName: FreeStartupData
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: VOID
    signature: 'static VOID FreeStartupData(STARTUP_DATA *sud) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:763,1
    - Dst: delete_wfp_block_filters
      Src: /src/openvpn/src/openvpnserv/interactive.c:767,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:775,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:778,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:770,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:782,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - msg
    - lists
    argTypes:
    - wfp_block_message_t*
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 786
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 786
    functionName: DeleteWfpBlock
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RemoveListItem
    - set_interface_metric
    - free
    - delete_wfp_block_filters
    - MsgToEventLog
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD DeleteWfpBlock(const wfp_block_message_t *msg, undo_lists_t
      *lists) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetDnsSearchListKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1631,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1635,1
    - Dst: RemoveDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:1634,1
    - Dst: ApplyDnsSettings
      Src: /src/openvpn/src/openvpnserv/interactive.c:1636,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1638,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - undo_data
    argTypes:
    - dns_domains_undo_data_t*
    constantsTouched: []
    func_position:
      end: 1641
      start: 1626
    functionDepth: 0
    functionLinenumber: 1626
    functionLinenumberEnd: 1641
    functionName: UndoDnsSearchDomains
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ApplyDnsSettings
    - RegCloseKey
    - GetDnsSearchListKey
    - RemoveDnsSearchDomains
    - free
    linkageType: ''
    returnType: void
    signature: 'static void UndoDnsSearchDomains(dns_domains_undo_data_t *undo_data) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:886,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpnserv/interactive.c:896,1
    - Dst: CreateProcessW
      Src: /src/openvpn/src/openvpnserv/interactive.c:893,1
    - Dst: _wcsdup
      Src: /src/openvpn/src/openvpnserv/interactive.c:892,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:887,1
    - Dst: GetExitCodeProcess
      Src: /src/openvpn/src/openvpnserv/interactive.c:897,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:899,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:900,1
    - Dst: TerminateProcess
      Src: /src/openvpn/src/openvpnserv/interactive.c:907,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:908,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:913,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpnserv/interactive.c:922,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:931,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpnserv/interactive.c:921,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:927,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:918,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:926,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 3
    argNames:
    - argv0
    - cmdline
    - timeout
    argTypes:
    - WCHAR*
    - WCHAR*
    - DWORD
    constantsTouched: []
    func_position:
      end: 933
      start: 877
    functionDepth: 0
    functionLinenumber: 877
    functionLinenumberEnd: 933
    functionName: ExecCommand
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - GetExitCodeProcess
    - CloseHandle
    - GetLastError
    - TerminateProcess
    - CreateProcessW
    - free
    - WaitForSingleObject
    - ZeroMemory
    - MsgToEventLog
    - _wcsdup
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD ExecCommand(const WCHAR *argv0, const WCHAR *cmdline,
      DWORD timeout) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpnserv/interactive.c:176,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - handle
    argTypes:
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 180
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 180
    functionName: CloseHandleEx
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - CloseHandle
    linkageType: ''
    returnType: HANDLE
    signature: 'static HANDLE CloseHandleEx(LPHANDLE handle) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AsyncPipeOp
      Src: /src/openvpn/src/openvpnserv/interactive.c:283,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 5
    argNames:
    - pipe
    - buffer
    - size
    - count
    - events
    argTypes:
    - HANDLE
    - LPVOID
    - DWORD
    - DWORD
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: ReadPipeAsync
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - AsyncPipeOp
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD ReadPipeAsync(HANDLE pipe, LPVOID buffer, DWORD size,
      DWORD count, LPHANDLE events) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:296,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:302,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:302,1
    - Dst: WritePipeAsync
      Src: /src/openvpn/src/openvpnserv/interactive.c:304,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:304,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 4
    argNames:
    - pipe
    - pid
    - count
    - events
    argTypes:
    - HANDLE
    - DWORD
    - DWORD
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 305
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 305
    functionName: ReturnProcessId
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - WritePipeAsync
    - _countof
    - swprintf
    - wcslen
    linkageType: ''
    returnType: VOID
    signature: 'static VOID ReturnProcessId(HANDLE pipe, DWORD pid, DWORD count, LPHANDLE
      events) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:525,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 2
    argNames:
    - family
    - addr
    argTypes:
    - short
    - inet_address_t*
    constantsTouched: []
    func_position:
      end: 536
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 536
    functionName: sockaddr_inet
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - ZeroMemory
    linkageType: ''
    returnType: SOCKADDR_INET
    signature: 'static SOCKADDR_INET sockaddr_inet(short family, inet_address_t *addr) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: add_wfp_block_filters
      Src: /src/openvpn/src/openvpnserv/interactive.c:800,1
    - Dst: get_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:812,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:803,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:825,1
    - Dst: get_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:818,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:828,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpnserv/interactive.c:837,1
    - Dst: DeleteWfpBlock
      Src: /src/openvpn/src/openvpnserv/interactive.c:843,1
    - Dst: delete_wfp_block_filters
      Src: /src/openvpn/src/openvpnserv/interactive.c:852,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:853,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 39
    argCount: 2
    argNames:
    - msg
    - lists
    argTypes:
    - wfp_block_message_t*
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 857
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 857
    functionName: AddWfpBlock
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - delete_wfp_block_filters
    - DeleteWfpBlock
    - add_wfp_block_filters
    - get_interface_metric
    - set_interface_metric
    - malloc
    - free
    - AddListItem
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD AddWfpBlock(const wfp_block_message_t *msg, undo_lists_t
      *lists) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:3662,1
    - Dst: realloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:3683,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 5
    argNames:
    - handles_ptr
    - count
    - io_event
    - exit_event
    - threads
    argTypes:
    - LPHANDLE*
    - LPDWORD
    - HANDLE
    - HANDLE
    - list_item_t*
    constantsTouched: []
    func_position:
      end: 3699
      start: 3652
    functionDepth: 0
    functionLinenumber: 3652
    functionLinenumberEnd: 3699
    functionName: UpdateWaitHandles
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - realloc
    - malloc
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD UpdateWaitHandles(LPHANDLE *handles_ptr, LPDWORD count,
      HANDLE io_event, HANDLE exit_event, list_item_t *threads) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddWfpBlock
      Src: /src/openvpn/src/openvpnserv/interactive.c:864,1
    - Dst: DeleteWfpBlock
      Src: /src/openvpn/src/openvpnserv/interactive.c:868,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - lists
    argTypes:
    - wfp_block_message_t*
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 870
      start: 859
    functionDepth: 0
    functionLinenumber: 859
    functionLinenumberEnd: 870
    functionName: HandleWfpBlockMessage
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - DeleteWfpBlock
    - AddWfpBlock
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD HandleWfpBlockMessage(const wfp_block_message_t *msg,
      undo_lists_t *lists) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - item
    - any
    argTypes:
    - LPVOID
    - LPVOID
    constantsTouched: []
    func_position:
      end: 757
      start: 753
    functionDepth: 0
    functionLinenumber: 753
    functionLinenumberEnd: 757
    functionName: CmpAny
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL CmpAny(LPVOID item, LPVOID any) '
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3340,1
    - Dst: SetEntriesInAcl
      Src: /src/openvpn/src/openvpnserv/interactive.c:3400,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:3470,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3414,1
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpnserv/interactive.c:3445,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpnserv/interactive.c:3537,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3557,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:3289,1
    - Dst: GetTokenInformation
      Src: /src/openvpn/src/openvpnserv/interactive.c:3312,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3319,1
    - Dst: GetTokenInformation
      Src: /src/openvpn/src/openvpnserv/interactive.c:3344,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3351,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:3460,1
    - Dst: SetHandleInformation
      Src: /src/openvpn/src/openvpnserv/interactive.c:3428,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3506,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:3461,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3564,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3407,1
    - Dst: RevertToSelf
      Src: /src/openvpn/src/openvpnserv/interactive.c:3496,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3499,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3314,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3329,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3346,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3361,1
    - Dst: PeekNamedPipeAsync
      Src: /src/openvpn/src/openvpnserv/interactive.c:3521,1
    - Dst: FlushFileBuffers
      Src: /src/openvpn/src/openvpnserv/interactive.c:3553,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3571,1
    - Dst: IsValidSid
      Src: /src/openvpn/src/openvpnserv/interactive.c:3327,1
    - Dst: IsValidSid
      Src: /src/openvpn/src/openvpnserv/interactive.c:3359,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:3372,1
    - Dst: SetSecurityDescriptorDacl
      Src: /src/openvpn/src/openvpnserv/interactive.c:3405,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpnserv/interactive.c:3514,1
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpnserv/interactive.c:3419,1
    - Dst: ReturnProcessId
      Src: /src/openvpn/src/openvpnserv/interactive.c:3503,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3475,1
    - Dst: TerminateProcess
      Src: /src/openvpn/src/openvpnserv/interactive.c:3498,1
    - Dst: FreeStartupData
      Src: /src/openvpn/src/openvpnserv/interactive.c:3560,1
    - Dst: OpenThreadToken
      Src: /src/openvpn/src/openvpnserv/interactive.c:3338,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3397,1
    - Dst: DuplicateTokenEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3412,1
    - Dst: TerminateProcess
      Src: /src/openvpn/src/openvpnserv/interactive.c:3541,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3556,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3569,1
    - Dst: SetNamedPipeHandleState
      Src: /src/openvpn/src/openvpnserv/interactive.c:3454,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:3434,1
    - Dst: OpenProcessToken
      Src: /src/openvpn/src/openvpnserv/interactive.c:3306,1
    - Dst: IsAuthorizedUser
      Src: /src/openvpn/src/openvpnserv/interactive.c:3373,1
    - Dst: CreatePipe
      Src: /src/openvpn/src/openvpnserv/interactive.c:3427,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:3546,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3561,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3568,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3492,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3423,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:3292,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3335,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3507,1
    - Dst: WriteFile
      Src: /src/openvpn/src/openvpnserv/interactive.c:3515,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3565,1
    - Dst: ImpersonateNamedPipeClient
      Src: /src/openvpn/src/openvpnserv/interactive.c:3333,1
    - Dst: ValidateOptions
      Src: /src/openvpn/src/openvpnserv/interactive.c:3372,1
    - Dst: CreateProcessAsUserW
      Src: /src/openvpn/src/openvpnserv/interactive.c:3488,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/interactive.c:3546,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3566,1
    - Dst: GetCurrentThread
      Src: /src/openvpn/src/openvpnserv/interactive.c:3338,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:3511,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3441,1
    - Dst: CreateEnvironmentBlock
      Src: /src/openvpn/src/openvpnserv/interactive.c:3473,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3505,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3430,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3516,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3563,1
    - Dst: GetStartupData
      Src: /src/openvpn/src/openvpnserv/interactive.c:3294,1
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3375,1
    - Dst: _L
      Src: /src/openvpn/src/openvpnserv/interactive.c:3419,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/interactive.c:3434,1
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3548,1
    - Dst: DestroyEnvironmentBlock
      Src: /src/openvpn/src/openvpnserv/interactive.c:3559,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3562,1
    - Dst: GetCurrentThreadId
      Src: /src/openvpn/src/openvpnserv/interactive.c:3435,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3464,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:3290,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3301,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:3320,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:3352,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:3530,1
    - Dst: HandleMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:3534,1
    - Dst: InitializeSecurityDescriptor
      Src: /src/openvpn/src/openvpnserv/interactive.c:3299,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3449,1
    - Dst: GetExitCodeProcess
      Src: /src/openvpn/src/openvpnserv/interactive.c:3538,1
    - Dst: Undo
      Src: /src/openvpn/src/openvpnserv/interactive.c:3550,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpnserv/interactive.c:3509,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpnserv/interactive.c:3291,1
    - Dst: GetCurrentProcess
      Src: /src/openvpn/src/openvpnserv/interactive.c:3306,1
    - Dst: CreateNamedPipe
      Src: /src/openvpn/src/openvpnserv/interactive.c:3436,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3456,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpnserv/interactive.c:3515,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3567,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3323,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3316,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3348,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3355,1
    - Dst: SetSecurityDescriptorOwner
      Src: /src/openvpn/src/openvpnserv/interactive.c:3395,1
    - Dst: DisconnectNamedPipe
      Src: /src/openvpn/src/openvpnserv/interactive.c:3554,1
    - Dst: CloseHandleEx
      Src: /src/openvpn/src/openvpnserv/interactive.c:3570,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3402,1
    - Dst: ReturnLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:3308,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3558,1
    CyclomaticComplexity: 63
    EdgeCount: 63
    ICount: 222
    argCount: 1
    argNames:
    - p
    argTypes:
    - LPVOID
    constantsTouched: []
    func_position:
      end: 3574
      start: 3253
    functionDepth: 0
    functionLinenumber: 3253
    functionLinenumberEnd: 3574
    functionName: RunOpenvpn
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - _L
    - OpenThreadToken
    - IsAuthorizedUser
    - SetHandleInformation
    - GetExitCodeProcess
    - WriteFile
    - SetSecurityDescriptorDacl
    - TerminateProcess
    - ReturnError
    - wcslen
    - DestroyEnvironmentBlock
    - DuplicateTokenEx
    - ValidateOptions
    - WideCharToMultiByte
    - free
    - CloseHandleEx
    - SetNamedPipeHandleState
    - GetLastError
    - SetSecurityDescriptorOwner
    - OpenProcessToken
    - ReturnProcessId
    - GetCurrentThread
    - PeekNamedPipeAsync
    - WaitForSingleObject
    - CreateProcessAsUserW
    - Undo
    - InitializeSecurityDescriptor
    - ZeroMemory
    - CreateEnvironmentBlock
    - ReturnLastError
    - _countof
    - FreeStartupData
    - IsValidSid
    - HandleMessage
    - swprintf
    - ImpersonateNamedPipeClient
    - strlen
    - MsgToEventLog
    - FlushFileBuffers
    - GetCurrentProcess
    - CreatePipe
    - CreateFile
    - SetEntriesInAcl
    - GetStartupData
    - GetTokenInformation
    - CreateNamedPipe
    - malloc
    - GetCurrentThreadId
    - RevertToSelf
    - DisconnectNamedPipe
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD WINAPI RunOpenvpn(LPVOID p) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ReportStatusToSCMgr
      Src: /src/openvpn/src/openvpnserv/interactive.c:3585,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpnserv/interactive.c:3588,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 4
    argNames:
    - ctrl_code
    - event
    - data
    - ctx
    argTypes:
    - DWORD
    - DWORD
    - LPVOID
    - LPVOID
    constantsTouched: []
    func_position:
      end: 3598
      start: 3577
    functionDepth: 0
    functionLinenumber: 3577
    functionLinenumberEnd: 3598
    functionName: ServiceCtrlInteractive
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - SetEvent
    - ReportStatusToSCMgr
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD WINAPI ServiceCtrlInteractive(DWORD ctrl_code, DWORD
      event, LPVOID data, LPVOID ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: FormatMessage
      Src: /src/openvpn/src/openvpnserv/interactive.c:742,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:749,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - err
    - msg
    argTypes:
    - DWORD
    - char*
    constantsTouched: []
    func_position:
      end: 750
      start: 729
    functionDepth: 0
    functionLinenumber: 729
    functionLinenumberEnd: 750
    functionName: BlockDNSErrHandler
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - MsgToEventLog
    - FormatMessage
    linkageType: ''
    returnType: void
    signature: 'static void BlockDNSErrHandler(DWORD err, const char *msg) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: FormatMessageW
      Src: /src/openvpn/src/openvpnserv/interactive.c:320,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/interactive.c:332,1
    - Dst: FormatMessageW
      Src: /src/openvpn/src/openvpnserv/interactive.c:326,1
    - Dst: WritePipeAsync
      Src: /src/openvpn/src/openvpnserv/interactive.c:332,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:333,1
    - Dst: LocalFree
      Src: /src/openvpn/src/openvpnserv/interactive.c:337,1
    - Dst: LocalFree
      Src: /src/openvpn/src/openvpnserv/interactive.c:341,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 5
    argNames:
    - pipe
    - error
    - func
    - count
    - events
    argTypes:
    - HANDLE
    - DWORD
    - LPCWSTR
    - DWORD
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 343
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 343
    functionName: ReturnError
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - LocalFree
    - FormatMessageW
    - wcslen
    - WritePipeAsync
    - MsgToEventLog
    linkageType: ''
    returnType: VOID
    signature: 'static VOID ReturnError(HANDLE pipe, DWORD error, LPCWSTR func, DWORD
      count, LPHANDLE events) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LoadLibraryA
      Src: /src/openvpn/src/openvpnserv/interactive.c:1092,1
    - Dst: GetProcAddress
      Src: /src/openvpn/src/openvpnserv/interactive.c:1098,1
    - Dst: RtlPublishWnfStateData
      Src: /src/openvpn/src/openvpnserv/interactive.c:1104,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1110
      start: 1078
    functionDepth: 0
    functionLinenumber: 1078
    functionLinenumberEnd: 1110
    functionName: ApplyGpolSettings32
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - GetProcAddress
    - LoadLibraryA
    - RtlPublishWnfStateData
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL ApplyGpolSettings32(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReturnError
      Src: /src/openvpn/src/openvpnserv/interactive.c:349,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/interactive.c:349,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - pipe
    - func
    argTypes:
    - HANDLE
    - LPCWSTR
    constantsTouched: []
    func_position:
      end: 350
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 350
    functionName: ReturnLastError
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - GetLastError
    - ReturnError
    linkageType: ''
    returnType: VOID
    signature: 'static VOID ReturnLastError(HANDLE pipe, LPCWSTR func) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:3705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - h
    argTypes:
    - LPHANDLE
    constantsTouched: []
    func_position:
      end: 3706
      start: 3702
    functionDepth: 0
    functionLinenumber: 3702
    functionLinenumberEnd: 3706
    functionName: FreeWaitHandles
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: VOID
    signature: 'static VOID FreeWaitHandles(LPHANDLE h) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - item
    - hnd
    argTypes:
    - LPVOID
    - LPVOID
    constantsTouched: []
    func_position:
      end: 3712
      start: 3708
    functionDepth: 0
    functionLinenumber: 3708
    functionLinenumberEnd: 3712
    functionName: CmpHandle
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL CmpHandle(LPVOID item, LPVOID hnd) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: GetDnsSearchListKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1670,1
    - Dst: RemoveDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:1681,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1682,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/interactive.c:1673,1
    - Dst: RemoveListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:1678,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1683,1
    - Dst: utf8to16
      Src: /src/openvpn/src/openvpnserv/interactive.c:1690,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/interactive.c:1696,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1699,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpnserv/interactive.c:1703,1
    - Dst: AddDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:1706,1
    - Dst: RemoveDnsSearchDomains
      Src: /src/openvpn/src/openvpnserv/interactive.c:1709,1
    - Dst: AddListItem
      Src: /src/openvpn/src/openvpnserv/interactive.c:1707,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1711,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/interactive.c:1710,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpnserv/interactive.c:1720,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 36
    argCount: 4
    argNames:
    - itf_name
    - domains
    - gpol
    - lists
    argTypes:
    - PCSTR
    - PCSTR
    - PBOOL
    - undo_lists_t*
    constantsTouched: []
    func_position:
      end: 1722
      start: 1664
    functionDepth: 0
    functionLinenumber: 1664
    functionLinenumberEnd: 1722
    functionName: SetDnsSearchDomains
    functionSourceFile: /src/openvpn/src/openvpnserv/interactive.c
    functionUses: []
    functionsReached:
    - RegCloseKey
    - GetDnsSearchListKey
    - AddListItem
    - RemoveDnsSearchDomains
    - RemoveListItem
    - AddDnsSearchDomains
    - utf8to16
    - free
    - malloc
    - strncpy
    - MsgToEventLog
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD SetDnsSearchDomains(PCSTR itf_name, PCSTR domains, PBOOL
      gpol, undo_lists_t *lists) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetTokenInformation
      Src: /src/openvpn/src/openvpnserv/validate.c:208,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/validate.c:211,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpnserv/validate.c:209,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/validate.c:215,1
    - Dst: GetTokenInformation
      Src: /src/openvpn/src/openvpnserv/validate.c:217,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/validate.c:219,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/validate.c:220,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - token
    argTypes:
    - HANDLE
    constantsTouched: []
    func_position:
      end: 223
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 223
    functionName: GetTokenGroups
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - GetLastError
    - GetTokenInformation
    - malloc
    - free
    - MsgToEventLog
    linkageType: ''
    returnType: PTOKEN_GROUPS
    signature: 'static PTOKEN_GROUPS GetTokenGroups(const HANDLE token) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/validate.c:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - name
    - white_list
    argTypes:
    - WCHAR*
    - WCHAR*
    constantsTouched: []
    func_position:
      end: 108
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 108
    functionName: OptionLookup
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - wcscmp
    linkageType: ''
    returnType: int
    signature: 'static int OptionLookup(const WCHAR *name, const WCHAR *white_list[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/validate.c:237,1
    - Dst: LookupAccountName
      Src: /src/openvpn/src/openvpnserv/validate.c:239,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 3
    argNames:
    - name
    - sid
    - sid_size
    argTypes:
    - WCHAR*
    - PSID
    - DWORD
    constantsTouched: []
    func_position:
      end: 244
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 244
    functionName: LookupSID
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - _countof
    - LookupAccountName
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL LookupSID(const WCHAR *name, PSID sid, DWORD sid_size) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PathIsRelativeW
      Src: /src/openvpn/src/openvpnserv/validate.c:68,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnserv/validate.c:80,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/validate.c:70,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpnserv/validate.c:70,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/validate.c:80,1
    - Dst: wcsstr
      Src: /src/openvpn/src/openvpnserv/validate.c:81,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpnserv/validate.c:81,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 18
    argCount: 3
    argNames:
    - workdir
    - fname
    - s
    argTypes:
    - WCHAR*
    - WCHAR*
    - settings_t*
    constantsTouched: []
    func_position:
      end: 87
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 87
    functionName: CheckConfigPath
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - _countof
    - swprintf
    - wcslen
    - wcsncmp
    - PathIsRelativeW
    - wcsstr
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL CheckConfigPath(const WCHAR *workdir, const WCHAR *fname,
      const settings_t *s) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/validate.c:123,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpnserv/validate.c:125,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/validate.c:137,1
    - Dst: CreateWellKnownSid
      Src: /src/openvpn/src/openvpnserv/validate.c:131,1
    - Dst: LookupAccountSidW
      Src: /src/openvpn/src/openvpnserv/validate.c:134,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - name
    - nlen
    argTypes:
    - WCHAR*
    - DWORD
    constantsTouched: []
    func_position:
      end: 140
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 140
    functionName: GetBuiltinAdminGroupName
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - CreateWellKnownSid
    - _countof
    - LookupAccountSidW
    - malloc
    - free
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL GetBuiltinAdminGroupName(WCHAR *name, DWORD nlen) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LookupAccountSidW
      Src: /src/openvpn/src/openvpnserv/validate.c:154,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/validate.c:156,1
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/validate.c:163,1
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/validate.c:163,1
    - Dst: GetBuiltinAdminGroupName
      Src: /src/openvpn/src/openvpnserv/validate.c:168,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/validate.c:168,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/validate.c:174,1
    - Dst: GetTokenGroups
      Src: /src/openvpn/src/openvpnserv/validate.c:180,1
    - Dst: IsUserInGroup
      Src: /src/openvpn/src/openvpnserv/validate.c:183,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/validate.c:186,1
    - Dst: free
      Src: /src/openvpn/src/openvpnserv/validate.c:193,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 4
    argNames:
    - sid
    - token
    - ovpn_admin_group
    - ovpn_service_user
    argTypes:
    - PSID
    - HANDLE
    - WCHAR*
    - WCHAR*
    constantsTouched: []
    func_position:
      end: 195
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 195
    functionName: IsAuthorizedUser
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - _countof
    - LookupAccountSidW
    - free
    - IsUserInGroup
    - GetBuiltinAdminGroupName
    - MsgToEventLog
    - wcscmp
    - GetTokenGroups
    linkageType: ''
    returnType: BOOL
    signature: 'BOOL IsAuthorizedUser(PSID sid, const HANDLE token, const WCHAR *ovpn_admin_group,
      const WCHAR *ovpn_service_user) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LookupSID
      Src: /src/openvpn/src/openvpnserv/validate.c:268,1
    - Dst: EqualSid
      Src: /src/openvpn/src/openvpnserv/validate.c:297,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/validate.c:268,1
    - Dst: NetLocalGroupGetMembers
      Src: /src/openvpn/src/openvpnserv/validate.c:288,1
    - Dst: EqualSid
      Src: /src/openvpn/src/openvpnserv/validate.c:272,1
    - Dst: NetApiBufferFree
      Src: /src/openvpn/src/openvpnserv/validate.c:299,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpnserv/validate.c:305,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/validate.c:306,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 34
    argCount: 3
    argNames:
    - sid
    - token_groups
    - group_name
    argTypes:
    - PSID
    - PTOKEN_GROUPS
    - WCHAR*
    constantsTouched: []
    func_position:
      end: 310
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 310
    functionName: IsUserInGroup
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - LookupSID
    - NetLocalGroupGetMembers
    - _countof
    - SetLastError
    - EqualSid
    - MsgToEventLog
    - NetApiBufferFree
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL IsUserInGroup(PSID sid, const PTOKEN_GROUPS token_groups,
      const WCHAR *group_name) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpnserv/validate.c:322,1
    - Dst: OptionLookup
      Src: /src/openvpn/src/openvpnserv/validate.c:331,1
    - Dst: CheckConfigPath
      Src: /src/openvpn/src/openvpnserv/validate.c:324,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 4
    argNames:
    - workdir
    - argc
    - argv
    - s
    argTypes:
    - WCHAR*
    - int
    - WCHAR*
    - settings_t*
    constantsTouched: []
    func_position:
      end: 337
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 337
    functionName: CheckOption
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.c
    functionUses: []
    functionsReached:
    - OptionLookup
    - wcscmp
    - CheckConfigPath
    linkageType: ''
    returnType: BOOL
    signature: 'BOOL CheckOption(const WCHAR *workdir, int argc, WCHAR *argv[], const
      settings_t *s) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SetServiceStatus
      Src: /src/openvpn/src/openvpnserv/service.c:46,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/service.c:49,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - service
    - status
    argTypes:
    - SERVICE_STATUS_HANDLE
    - SERVICE_STATUS*
    constantsTouched: []
    func_position:
      end: 53
      start: 20
    functionDepth: 0
    functionLinenumber: 20
    functionLinenumberEnd: 53
    functionName: ReportStatusToSCMgr
    functionSourceFile: /src/openvpn/src/openvpnserv/service.c
    functionUses: []
    functionsReached:
    - SetServiceStatus
    - MsgToEventLog
    linkageType: ''
    returnType: BOOL
    signature: 'BOOL ReportStatusToSCMgr(SERVICE_STATUS_HANDLE service, SERVICE_STATUS
      *status) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OpenSCManager
      Src: /src/openvpn/src/openvpnserv/service.c:115,1
    - Dst: OpenService
      Src: /src/openvpn/src/openvpnserv/service.c:122,1
    - Dst: StartService
      Src: /src/openvpn/src/openvpnserv/service.c:125,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:118,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:118,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:127,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:132,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:132,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/service.c:135,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:139,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:139,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/service.c:142,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - type
    argTypes:
    - openvpn_service_type
    constantsTouched: []
    func_position:
      end: 144
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 144
    functionName: CmdStartService
    functionSourceFile: /src/openvpn/src/openvpnserv/service.c
    functionUses: []
    functionsReached:
    - OpenSCManager
    - OpenService
    - StartService
    - wprintf
    - GetLastErrorText
    - CloseServiceHandle
    linkageType: ''
    returnType: int
    signature: 'static int CmdStartService(openvpn_service_type type) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:158,1
    - Dst: ControlService
      Src: /src/openvpn/src/openvpnserv/service.c:174,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:176,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:210,1
    - Dst: Sleep
      Src: /src/openvpn/src/openvpnserv/service.c:184,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:205,1
    - Dst: OpenSCManager
      Src: /src/openvpn/src/openvpnserv/service.c:155,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:158,1
    - Dst: OpenService
      Src: /src/openvpn/src/openvpnserv/service.c:165,1
    - Dst: QueryServiceStatus
      Src: /src/openvpn/src/openvpnserv/service.c:179,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:210,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/service.c:217,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:169,1
    - Dst: Sleep
      Src: /src/openvpn/src/openvpnserv/service.c:177,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:183,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:194,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/service.c:213,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:169,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:198,1
    - Dst: DeleteService
      Src: /src/openvpn/src/openvpnserv/service.c:203,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 42
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 219
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 219
    functionName: CmdRemoveServices
    functionSourceFile: /src/openvpn/src/openvpnserv/service.c
    functionUses: []
    functionsReached:
    - QueryServiceStatus
    - OpenSCManager
    - Sleep
    - OpenService
    - ControlService
    - DeleteService
    - wprintf
    - GetLastErrorText
    - CloseServiceHandle
    linkageType: ''
    returnType: int
    signature: 'static int CmdRemoveServices(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetModuleFileName
      Src: /src/openvpn/src/openvpnserv/service.c:63,1
    - Dst: wcscat_s
      Src: /src/openvpn/src/openvpnserv/service.c:70,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:65,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/service.c:63,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:65,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpnserv/service.c:70,1
    - Dst: OpenSCManager
      Src: /src/openvpn/src/openvpnserv/service.c:72,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:75,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:75,1
    - Dst: CreateService
      Src: /src/openvpn/src/openvpnserv/service.c:81,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/service.c:103,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:99,1
    - Dst: CloseServiceHandle
      Src: /src/openvpn/src/openvpnserv/service.c:94,1
    - Dst: GetLastErrorText
      Src: /src/openvpn/src/openvpnserv/service.c:99,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:93,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 105
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 105
    functionName: CmdInstallServices
    functionSourceFile: /src/openvpn/src/openvpnserv/service.c
    functionUses: []
    functionsReached:
    - _countof
    - OpenSCManager
    - CreateService
    - wprintf
    - GetModuleFileName
    - CloseServiceHandle
    - GetLastErrorText
    - wcscat_s
    linkageType: ''
    returnType: int
    signature: 'static int CmdInstallServices(void) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/service.c:248,1
    - Dst: CmdStartService
      Src: /src/openvpn/src/openvpnserv/service.c:258,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/service.c:260,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:281,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:277,1
    - Dst: CmdRemoveServices
      Src: /src/openvpn/src/openvpnserv/service.c:254,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/service.c:270,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:280,1
    - Dst: MsgToEventLog
      Src: /src/openvpn/src/openvpnserv/service.c:301,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/service.c:256,1
    - Dst: CmdInstallServices
      Src: /src/openvpn/src/openvpnserv/service.c:250,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/service.c:262,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:276,1
    - Dst: StartServiceCtrlDispatcher
      Src: /src/openvpn/src/openvpnserv/service.c:299,1
    - Dst: _wcsicmp
      Src: /src/openvpn/src/openvpnserv/service.c:252,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:278,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:297,1
    - Dst: wprintf
      Src: /src/openvpn/src/openvpnserv/service.c:296,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - WCHAR*
    constantsTouched: []
    func_position:
      end: 305
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 305
    functionName: wmain
    functionSourceFile: /src/openvpn/src/openvpnserv/service.c
    functionUses: []
    functionsReached:
    - _wcsicmp
    - CmdRemoveServices
    - CmdInstallServices
    - wprintf
    - CmdStartService
    - MsgToEventLog
    - StartServiceCtrlDispatcher
    linkageType: ''
    returnType: int
    signature: 'int wmain(int argc, WCHAR *argv[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpnserv/validate.h:48,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - o
    argTypes:
    - WCHAR*
    constantsTouched: []
    func_position:
      end: 49
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 49
    functionName: IsOption
    functionSourceFile: /src/openvpn/src/openvpnserv/validate.h
    functionUses: []
    functionsReached:
    - wcsncmp
    linkageType: ''
    returnType: BOOL
    signature: 'static inline BOOL IsOption(const WCHAR *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/src/tapctl/error.c:32,1
    - Dst: va_end
      Src: /src/openvpn/src/tapctl/error.c:34,1
    - Dst: x_msg_va
      Src: /src/openvpn/src/tapctl/error.c:33,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - flags
    - format
    - '...'
    argTypes:
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 35
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 35
    functionName: x_msg
    functionSourceFile: /src/openvpn/src/tapctl/error.c
    functionUses: []
    functionsReached:
    - va_end
    - x_msg_va
    - va_start
    linkageType: ''
    returnType: void
    signature: 'void x_msg(const unsigned int flags, const char *format, ...) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:165,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:169,1
    - Dst: wcsdup
      Src: /src/openvpn/src/tapctl/main.c:180,1
    - Dst: is_adapter_name_available
      Src: /src/openvpn/src/tapctl/main.c:178,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/main.c:183,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/main.c:184,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/tapctl/main.c:191,1
    - Dst: is_adapter_name_available
      Src: /src/openvpn/src/tapctl/main.c:193,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 2
    argNames:
    - hwid
    - adapter_list
    argTypes:
    - LPCWSTR
    - struct tap_adapter_node*
    constantsTouched: []
    func_position:
      end: 200
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 200
    functionName: get_unique_adapter_name
    functionSourceFile: /src/openvpn/src/tapctl/main.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - wcslen
    - wcsdup
    - wcsicmp
    - malloc
    - is_adapter_name_available
    linkageType: ''
    returnType: LPWSTR
    signature: 'static LPWSTR get_unique_adapter_name(LPCWSTR hwid, struct tap_adapter_node
      *adapter_list) '
  - BBCount: 28
    BranchProfiles: []
    Callsites:
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:236,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:264,1
    - Dst: get_unique_adapter_name
      Src: /src/openvpn/src/tapctl/main.c:295,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/main.c:310,1
    - Dst: tap_delete_adapter
      Src: /src/openvpn/src/tapctl/main.c:338,1
    - Dst: memcpy_s
      Src: /src/openvpn/src/tapctl/main.c:358,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:362,1
    - Dst: FAILED
      Src: /src/openvpn/src/tapctl/main.c:398,1
    - Dst: tap_list_adapters
      Src: /src/openvpn/src/tapctl/main.c:402,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:405,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:449,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:457,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:389,1
    - Dst: tap_delete_adapter
      Src: /src/openvpn/src/tapctl/main.c:434,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:226,1
    - Dst: usage
      Src: /src/openvpn/src/tapctl/main.c:224,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:240,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:246,1
    - Dst: tap_set_adapter_name
      Src: /src/openvpn/src/tapctl/main.c:307,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:311,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/main.c:322,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/main.c:333,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:354,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:381,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:416,1
    - Dst: tap_free_adapter_list
      Src: /src/openvpn/src/tapctl/main.c:387,1
    - Dst: IIDFromString
      Src: /src/openvpn/src/tapctl/main.c:398,1
    - Dst: memset
      Src: /src/openvpn/src/tapctl/main.c:356,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:219,1
    - Dst: usage
      Src: /src/openvpn/src/tapctl/main.c:216,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:228,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:230,1
    - Dst: tap_create_adapter
      Src: /src/openvpn/src/tapctl/main.c:273,1
    - Dst: tap_list_adapters
      Src: /src/openvpn/src/tapctl/main.c:287,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:290,1
    - Dst: wcsdup
      Src: /src/openvpn/src/tapctl/main.c:295,1
    - Dst: tap_free_adapter_list
      Src: /src/openvpn/src/tapctl/main.c:324,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/main.c:331,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/main.c:358,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:393,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:413,1
    - Dst: memcpy
      Src: /src/openvpn/src/tapctl/main.c:418,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/main.c:383,1
    - Dst: SetupSetNonInteractiveMode
      Src: /src/openvpn/src/tapctl/main.c:212,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:232,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:234,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:254,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:281,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:258,1
    - Dst: is_adapter_name_available
      Src: /src/openvpn/src/tapctl/main.c:300,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/main.c:314,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:332,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:344,1
    - Dst: tap_list_adapters
      Src: /src/openvpn/src/tapctl/main.c:370,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:373,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:440,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/main.c:380,1
    - Dst: tap_free_adapter_list
      Src: /src/openvpn/src/tapctl/main.c:426,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 149
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - LPCWSTR
    constantsTouched: []
    func_position:
      end: 461
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 461
    functionName: wmain
    functionSourceFile: /src/openvpn/src/tapctl/main.c
    functionUses: []
    functionsReached:
    - memcpy
    - fwprintf
    - IIDFromString
    - wcslen
    - wcsdup
    - StringFromIID
    - free
    - CoTaskMemFree
    - wcsicmp
    - FAILED
    - memset
    - usage
    - tap_set_adapter_name
    - tap_delete_adapter
    - get_unique_adapter_name
    - tap_list_adapters
    - is_adapter_name_available
    - tap_create_adapter
    - memcpy_s
    - tap_free_adapter_list
    - SetupSetNonInteractiveMode
    linkageType: ''
    returnType: int
    signature: 'int __cdecl wmain(int argc, LPCWSTR argv[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UNREFERENCED_PARAMETER
      Src: /src/openvpn/src/tapctl/main.c:467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 470
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 470
    functionName: dont_mute
    functionSourceFile: /src/openvpn/src/tapctl/main.c
    functionUses: []
    functionsReached:
    - UNREFERENCED_PARAMETER
    linkageType: ''
    returnType: bool
    signature: 'bool dont_mute(unsigned int flags) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: vfprintf
      Src: /src/openvpn/src/tapctl/main.c:477,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/main.c:483,1
    - Dst: FormatMessage
      Src: /src/openvpn/src/tapctl/main.c:485,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:478,1
    - Dst: iswspace
      Src: /src/openvpn/src/tapctl/main.c:499,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:512,1
    - Dst: LocalFree
      Src: /src/openvpn/src/tapctl/main.c:514,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:518,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 3
    argNames:
    - flags
    - format
    - arglist
    argTypes:
    - unsigned int
    - char*
    - va_list
    constantsTouched: []
    func_position:
      end: 521
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 521
    functionName: x_msg_va
    functionSourceFile: /src/openvpn/src/tapctl/main.c
    functionUses: []
    functionsReached:
    - LocalFree
    - vfprintf
    - GetLastError
    - fwprintf
    - FormatMessage
    - iswspace
    linkageType: ''
    returnType: void
    signature: 'void x_msg_va(const unsigned int flags, const char *format, va_list
      arglist) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 124
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 124
    functionName: usage
    functionSourceFile: /src/openvpn/src/tapctl/main.c
    functionUses: []
    functionsReached:
    - fwprintf
    linkageType: ''
    returnType: void
    signature: 'static void usage(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/main.c:134,1
    - Dst: fwprintf
      Src: /src/openvpn/src/tapctl/main.c:140,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/main.c:142,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/main.c:139,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 3
    argNames:
    - name
    - adapter_list
    - log
    argTypes:
    - LPCWSTR
    - struct tap_adapter_node*
    - BOOL
    constantsTouched: []
    func_position:
      end: 150
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 150
    functionName: is_adapter_name_available
    functionSourceFile: /src/openvpn/src/tapctl/main.c
    functionUses: []
    functionsReached:
    - CoTaskMemFree
    - fwprintf
    - wcsicmp
    - StringFromIID
    linkageType: ''
    returnType: BOOL
    signature: 'static BOOL is_adapter_name_available(LPCWSTR name, struct tap_adapter_node
      *adapter_list, BOOL log) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:109,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - LPCWSTR
    - szz
    argTypes:
    - _In_z_
    constantsTouched: []
    func_position:
      end: 113
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 113
    functionName: wcszlen
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - wcslen
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t wcszlen(_In_z_ LPCWSTR szz) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SetupDiSetClassInstallParams
      Src: /src/openvpn/src/tapctl/tap.c:244,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:261,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:250,1
    - Dst: SetupDiCallClassInstaller
      Src: /src/openvpn/src/tapctl/tap.c:256,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:251,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:262,1
    - Dst: check_reboot
      Src: /src/openvpn/src/tapctl/tap.c:267,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 3
    argNames:
    - hDeviceInfoSet
    - PSP_DEVINFO_DATA
    - pDeviceInfoData
    - pbRebootRequired
    argTypes:
    - _In_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 269
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 269
    functionName: delete_device
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - GetLastError
    - SetupDiCallClassInstaller
    - msg
    - SetupDiSetClassInstallParams
    - check_reboot
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD delete_device( _In_ HDEVINFO hDeviceInfoSet, _In_ PSP_DEVINFO_DATA
      pDeviceInfoData, _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: change_device_state
      Src: /src/openvpn/src/tapctl/tap.c:360,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - hDeviceInfoSet
    - PSP_DEVINFO_DATA
    - pDeviceInfoData
    - pbRebootRequired
    argTypes:
    - _In_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 361
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 361
    functionName: enable_device
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - change_device_state
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD enable_device( _In_ HDEVINFO hDeviceInfoSet, _In_ PSP_DEVINFO_DATA
      pDeviceInfoData, _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: SetupDiGetDeviceRegistryProperty
      Src: /src/openvpn/src/tapctl/tap.c:661,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/tap.c:671,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:674,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:683,1
    - Dst: memcpy
      Src: /src/openvpn/src/tapctl/tap.c:678,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/tap.c:687,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:690,1
    - Dst: SetupDiGetDeviceRegistryProperty
      Src: /src/openvpn/src/tapctl/tap.c:694,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:707,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:708,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:714,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 5
    argNames:
    - hDeviceInfoSet
    - PSP_DEVINFO_DATA
    - pDeviceInfoData
    - dwProperty
    - pdwPropertyRegDataType
    - ppData
    argTypes:
    - _In_
    - _In_
    - _In_
    - _Out_opt_
    - _Out_*
    constantsTouched: []
    func_position:
      end: 718
      start: 643
    functionDepth: 0
    functionLinenumber: 643
    functionLinenumberEnd: 718
    functionName: get_device_reg_property
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - memcpy
    - GetLastError
    - msg
    - malloc
    - SetupDiGetDeviceRegistryProperty
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD get_device_reg_property( _In_ HDEVINFO hDeviceInfoSet,
      _In_ PSP_DEVINFO_DATA pDeviceInfoData, _In_ DWORD dwProperty, _Out_opt_ LPDWORD
      pdwPropertyRegDataType, _Out_ LPVOID *ppData) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1102,1
    - Dst: get_reg_string
      Src: /src/openvpn/src/tapctl/tap.c:1108,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1111,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1112,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:1126,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1130,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:1119,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:1119,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1131,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/tap.c:1139,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/tap.c:1120,1
    - Dst: ExecCommand
      Src: /src/openvpn/src/tapctl/tap.c:1125,1
    - Dst: RegOpenKeyEx
      Src: /src/openvpn/src/tapctl/tap.c:1094,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/tapctl/tap.c:1086,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/tap.c:1082,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1103,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:1119,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:1123,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/tapctl/tap.c:1121,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/tap.c:1078,1
    - Dst: _countof
      Src: /src/openvpn/src/tapctl/tap.c:1087,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/tapctl/tap.c:1136,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/tap.c:1138,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 3
    argNames:
    - pguidAdapter
    - LPCWSTR
    - szName
    - bSilent
    argTypes:
    - _In_
    - _In_
    - _In_
    constantsTouched: []
    func_position:
      end: 1141
      start: 1061
    functionDepth: 0
    functionLinenumber: 1061
    functionLinenumberEnd: 1141
    functionName: tap_set_adapter_name
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - swprintf_s
    - _countof
    - RegCloseKey
    - msg
    - get_reg_string
    - SetLastError
    - wcslen
    - CoTaskMemFree
    - StringFromIID
    - malloc
    - free
    - RegOpenKeyEx
    - ExecCommand
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD tap_set_adapter_name( _In_ LPCGUID pguidAdapter, _In_ LPCWSTR
      szName, _In_ BOOL bSilent) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:756,1
    - Dst: SetupDiCallClassInstaller
      Src: /src/openvpn/src/tapctl/tap.c:800,1
    - Dst: installfn
      Src: /src/openvpn/src/tapctl/tap.c:831,1
    - Dst: SetupDiCreateDeviceInfoList
      Src: /src/openvpn/src/tapctl/tap.c:740,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:757,1
    - Dst: SetupDiCreateDeviceInfo
      Src: /src/openvpn/src/tapctl/tap.c:763,1
    - Dst: SetupDiSetSelectedDevice
      Src: /src/openvpn/src/tapctl/tap.c:778,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:795,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:783,1
    - Dst: SetupDiCallClassInstaller
      Src: /src/openvpn/src/tapctl/tap.c:865,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:875,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:880,1
    - Dst: FreeLibrary
      Src: /src/openvpn/src/tapctl/tap.c:887,1
    - Dst: SetupDiDestroyDeviceInfoList
      Src: /src/openvpn/src/tapctl/tap.c:889,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:743,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:772,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:792,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:805,1
    - Dst: DiInstallDevice
      Src: /src/openvpn/src/tapctl/tap.c:816,1
    - Dst: find_function
      Src: /src/openvpn/src/tapctl/tap.c:822,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:826,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:835,1
    - Dst: get_net_adapter_guid
      Src: /src/openvpn/src/tapctl/tap.c:840,1
    - Dst: _countof
      Src: /src/openvpn/src/tapctl/tap.c:753,1
    - Dst: SetupDiClassNameFromGuid
      Src: /src/openvpn/src/tapctl/tap.c:750,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:744,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:773,1
    - Dst: SetupDiSetDeviceRegistryProperty
      Src: /src/openvpn/src/tapctl/tap.c:788,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:794,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:782,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:806,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:827,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:834,1
    - Dst: SetupDiSetClassInstallParams
      Src: /src/openvpn/src/tapctl/tap.c:858,1
    - Dst: check_reboot
      Src: /src/openvpn/src/tapctl/tap.c:871,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 82
    argCount: 5
    argNames:
    - hwndParent
    - szDeviceDescription
    - LPCWSTR
    - szHwId
    - pbRebootRequired
    - pguidAdapter
    argTypes:
    - _In_opt_
    - _In_opt_
    - _In_
    - _Inout_
    - _Out_
    constantsTouched: []
    func_position:
      end: 891
      start: 721
    functionDepth: 0
    functionLinenumber: 721
    functionLinenumberEnd: 891
    functionName: tap_create_adapter
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - FreeLibrary
    - _countof
    - find_function
    - GetLastError
    - msg
    - SetupDiCreateDeviceInfo
    - SetupDiCreateDeviceInfoList
    - SetupDiSetDeviceRegistryProperty
    - wcslen
    - SetupDiCallClassInstaller
    - DiInstallDevice
    - installfn
    - SetupDiSetSelectedDevice
    - SetupDiSetClassInstallParams
    - get_net_adapter_guid
    - SetupDiDestroyDeviceInfoList
    - check_reboot
    - SetupDiClassNameFromGuid
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD tap_create_adapter( _In_opt_ HWND hwndParent, _In_opt_ LPCWSTR
      szDeviceDescription, _In_ LPCWSTR szHwId, _Inout_ LPBOOL pbRebootRequired, _Out_
      LPGUID pguidAdapter) '
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1168,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1177,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1178,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/tap.c:1184,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1205,1
    - Dst: RegOpenKeyEx
      Src: /src/openvpn/src/tapctl/tap.c:1282,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1291,1
    - Dst: get_reg_string
      Src: /src/openvpn/src/tapctl/tap.c:1297,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1304,1
    - Dst: memcpy
      Src: /src/openvpn/src/tapctl/tap.c:1322,1
    - Dst: SetupDiDestroyDeviceInfoList
      Src: /src/openvpn/src/tapctl/tap.c:1348,1
    - Dst: swprintf_s
      Src: /src/openvpn/src/tapctl/tap.c:1274,1
    - Dst: wcszlen
      Src: /src/openvpn/src/tapctl/tap.c:1309,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/tap.c:1311,1
    - Dst: memcpy
      Src: /src/openvpn/src/tapctl/tap.c:1320,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:1335,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/tapctl/tap.c:1337,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/tap.c:1339,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:1341,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/tap.c:1346,1
    - Dst: SetupDiGetDeviceInfoListDetail
      Src: /src/openvpn/src/tapctl/tap.c:1175,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1169,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1198,1
    - Dst: get_device_reg_property
      Src: /src/openvpn/src/tapctl/tap.c:1213,1
    - Dst: wcszistr
      Src: /src/openvpn/src/tapctl/tap.c:1228,1
    - Dst: get_net_adapter_guid
      Src: /src/openvpn/src/tapctl/tap.c:1261,1
    - Dst: wcszistr
      Src: /src/openvpn/src/tapctl/tap.c:1245,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1290,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1303,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:1310,1
    - Dst: SetupDiGetClassDevsEx
      Src: /src/openvpn/src/tapctl/tap.c:1158,1
    - Dst: SetupDiEnumDeviceInfo
      Src: /src/openvpn/src/tapctl/tap.c:1193,1
    - Dst: _countof
      Src: /src/openvpn/src/tapctl/tap.c:1275,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/tap.c:1270,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:1238,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:1314,1
    - Dst: memcpy
      Src: /src/openvpn/src/tapctl/tap.c:1318,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 111
    argCount: 3
    argNames:
    - hwndParent
    - szzHwIDs
    - ppAdapter
    argTypes:
    - _In_opt_
    - _In_opt_
    - _Out_**
    constantsTouched: []
    func_position:
      end: 1350
      start: 1144
    functionDepth: 0
    functionLinenumber: 1144
    functionLinenumberEnd: 1350
    functionName: tap_list_adapters
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - memcpy
    - msg
    - wcslen
    - get_device_reg_property
    - StringFromIID
    - get_net_adapter_guid
    - free
    - swprintf_s
    - GetLastError
    - SetLastError
    - CoTaskMemFree
    - SetupDiGetClassDevsEx
    - wcszistr
    - _countof
    - RegCloseKey
    - SetupDiGetDeviceInfoListDetail
    - get_reg_string
    - RegOpenKeyEx
    - SetupDiDestroyDeviceInfoList
    - wcszlen
    - malloc
    - SetupDiEnumDeviceInfo
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD tap_list_adapters( _In_opt_ HWND hwndParent, _In_opt_ LPCWSTR
      szzHwIDs, _Out_ struct tap_adapter_node **ppAdapter) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:129,1
    - Dst: wcsicmp
      Src: /src/openvpn/src/tapctl/tap.c:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - LPCWSTR
    - szzHay
    - szNeedle
    argTypes:
    - _In_z_
    - _In_z_
    constantsTouched: []
    func_position:
      end: 138
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 138
    functionName: wcszistr
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - wcsicmp
    - wcslen
    linkageType: ''
    returnType: LPCWSTR
    signature: 'static LPCWSTR wcszistr(_In_z_ LPCWSTR szzHay, _In_z_ LPCWSTR szNeedle) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SetupDiSetClassInstallParams
      Src: /src/openvpn/src/tapctl/tap.c:310,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:316,1
    - Dst: SetupDiCallClassInstaller
      Src: /src/openvpn/src/tapctl/tap.c:322,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:317,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:327,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:328,1
    - Dst: check_reboot
      Src: /src/openvpn/src/tapctl/tap.c:333,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 4
    argNames:
    - hDeviceInfoSet
    - PSP_DEVINFO_DATA
    - pDeviceInfoData
    - bEnable
    - pbRebootRequired
    argTypes:
    - _In_
    - _In_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 335
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 335
    functionName: change_device_state
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - GetLastError
    - SetupDiCallClassInstaller
    - msg
    - SetupDiSetClassInstallParams
    - check_reboot
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD change_device_state( _In_ HDEVINFO hDeviceInfoSet, _In_
      PSP_DEVINFO_DATA pDeviceInfoData, _In_ BOOL bEnable, _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: change_device_state
      Src: /src/openvpn/src/tapctl/tap.c:386,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - hDeviceInfoSet
    - PSP_DEVINFO_DATA
    - pDeviceInfoData
    - pbRebootRequired
    argTypes:
    - _In_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 387
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 387
    functionName: disable_device
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - change_device_state
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD disable_device( _In_ HDEVINFO hDeviceInfoSet, _In_ PSP_DEVINFO_DATA
      pDeviceInfoData, _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: SetupDiOpenDevRegKey
      Src: /src/openvpn/src/tapctl/tap.c:569,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:579,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:578,1
    - Dst: RegQueryValueEx
      Src: /src/openvpn/src/tapctl/tap.c:587,1
    - Dst: Sleep
      Src: /src/openvpn/src/tapctl/tap.c:593,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:597,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:598,1
    - Dst: get_reg_string
      Src: /src/openvpn/src/tapctl/tap.c:603,1
    - Dst: SUCCEEDED
      Src: /src/openvpn/src/tapctl/tap.c:612,1
    - Dst: CLSIDFromString
      Src: /src/openvpn/src/tapctl/tap.c:612,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:613,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/tapctl/tap.c:617,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 4
    argNames:
    - hDeviceInfoSet
    - PSP_DEVINFO_DATA
    - pDeviceInfoData
    - iNumAttempts
    - pguidAdapter
    argTypes:
    - _In_
    - _In_
    - _In_
    - _Out_
    constantsTouched: []
    func_position:
      end: 619
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 619
    functionName: get_net_adapter_guid
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - RegCloseKey
    - Sleep
    - SetupDiOpenDevRegKey
    - msg
    - GetLastError
    - SetLastError
    - get_reg_string
    - SUCCEEDED
    - free
    - RegQueryValueEx
    - CLSIDFromString
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD get_net_adapter_guid( _In_ HDEVINFO hDeviceInfoSet, _In_
      PSP_DEVINFO_DATA pDeviceInfoData, _In_ int iNumAttempts, _Out_ LPGUID pguidAdapter) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: SetupDiGetClassDevsEx
      Src: /src/openvpn/src/tapctl/tap.c:929,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:948,1
    - Dst: SetupDiGetDeviceInfoListDetail
      Src: /src/openvpn/src/tapctl/tap.c:946,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:939,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:940,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:949,1
    - Dst: SetupDiEnumDeviceInfo
      Src: /src/openvpn/src/tapctl/tap.c:958,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:963,1
    - Dst: StringFromIID
      Src: /src/openvpn/src/tapctl/tap.c:966,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:967,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:975,1
    - Dst: CoTaskMemFree
      Src: /src/openvpn/src/tapctl/tap.c:968,1
    - Dst: get_net_adapter_guid
      Src: /src/openvpn/src/tapctl/tap.c:982,1
    - Dst: memcmp
      Src: /src/openvpn/src/tapctl/tap.c:990,1
    - Dst: funcOperation
      Src: /src/openvpn/src/tapctl/tap.c:992,1
    - Dst: SetupDiDestroyDeviceInfoList
      Src: /src/openvpn/src/tapctl/tap.c:998,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 39
    argCount: 4
    argNames:
    - hwndParent
    - pguidAdapter
    - funcOperation
    - pbRebootRequired
    argTypes:
    - _In_opt_
    - _In_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 1000
      start: 914
    functionDepth: 0
    functionLinenumber: 914
    functionLinenumberEnd: 1000
    functionName: execute_on_first_adapter
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - funcOperation
    - SetupDiGetDeviceInfoListDetail
    - GetLastError
    - msg
    - CoTaskMemFree
    - SetupDiGetClassDevsEx
    - StringFromIID
    - get_net_adapter_guid
    - SetupDiEnumDeviceInfo
    - memcmp
    - SetupDiDestroyDeviceInfoList
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD execute_on_first_adapter( _In_opt_ HWND hwndParent, _In_
      LPCGUID pguidAdapter, _In_ devop_func_t funcOperation, _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execute_on_first_adapter
      Src: /src/openvpn/src/tapctl/tap.c:1020,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 4
    argNames:
    - hwndParent
    - pguidAdapter
    - bEnable
    - pbRebootRequired
    argTypes:
    - _In_opt_
    - _In_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 1021
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1021
    functionName: tap_enable_adapter
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - execute_on_first_adapter
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD tap_enable_adapter( _In_opt_ HWND hwndParent, _In_ LPCGUID pguidAdapter,
      _In_ BOOL bEnable, _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: execute_on_first_adapter
      Src: /src/openvpn/src/tapctl/tap.c:1009,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - hwndParent
    - pguidAdapter
    - pbRebootRequired
    argTypes:
    - _In_opt_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 1010
      start: 1003
    functionDepth: 0
    functionLinenumber: 1003
    functionLinenumberEnd: 1010
    functionName: tap_delete_adapter
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - execute_on_first_adapter
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD tap_delete_adapter( _In_opt_ HWND hwndParent, _In_ LPCGUID pguidAdapter,
      _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:1364,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - pAdapterList
    argTypes:
    - _In_*
    constantsTouched: []
    func_position:
      end: 1366
      start: 1353
    functionDepth: 0
    functionLinenumber: 1353
    functionLinenumberEnd: 1366
    functionName: tap_free_adapter_list
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void tap_free_adapter_list( _In_ struct tap_adapter_node *pAdapterList) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SetupDiGetDeviceInstallParams
      Src: /src/openvpn/src/tapctl/tap.c:191,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:196,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:197,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 3
    argNames:
    - hDeviceInfoSet
    - PSP_DEVINFO_DATA
    - pDeviceInfoData
    - pbRebootRequired
    argTypes:
    - _In_
    - _In_
    - _Inout_
    constantsTouched: []
    func_position:
      end: 207
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 207
    functionName: check_reboot
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - GetLastError
    - SetupDiGetDeviceInstallParams
    - msg
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD check_reboot( _In_ HDEVINFO hDeviceInfoSet, _In_ PSP_DEVINFO_DATA
      pDeviceInfoData, _Inout_ LPBOOL pbRebootRequired) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: RegQueryValueEx
      Src: /src/openvpn/src/tapctl/tap.c:416,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:439,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/tap.c:469,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:484,1
    - Dst: ExpandEnvironmentStrings
      Src: /src/openvpn/src/tapctl/tap.c:514,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:425,1
    - Dst: RegQueryValueEx
      Src: /src/openvpn/src/tapctl/tap.c:443,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:453,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:485,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:517,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/tap.c:436,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:454,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:498,1
    - Dst: malloc
      Src: /src/openvpn/src/tapctl/tap.c:506,1
    - Dst: ExpandEnvironmentStrings
      Src: /src/openvpn/src/tapctl/tap.c:477,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:509,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:510,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:530,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:426,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:452,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:472,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:483,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:491,1
    - Dst: msg
      Src: /src/openvpn/src/tapctl/tap.c:473,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 66
    argCount: 3
    argNames:
    - HKEY
    - hKey
    - LPCWSTR
    - szName
    - pszValue
    argTypes:
    - _In_
    - _In_
    - _Out_*
    constantsTouched: []
    func_position:
      end: 533
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 533
    functionName: get_reg_string
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - msg
    - SetLastError
    - ExpandEnvironmentStrings
    - malloc
    - free
    - RegQueryValueEx
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD get_reg_string( _In_ HKEY hKey, _In_ LPCWSTR szName,
      _Out_ LPWSTR *pszValue) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetSystemDirectoryW
      Src: /src/openvpn/src/tapctl/tap.c:68,1
    - Dst: _countof
      Src: /src/openvpn/src/tapctl/tap.c:75,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:74,1
    - Dst: wcslen
      Src: /src/openvpn/src/tapctl/tap.c:74,1
    - Dst: _countof
      Src: /src/openvpn/src/tapctl/tap.c:68,1
    - Dst: SetLastError
      Src: /src/openvpn/src/tapctl/tap.c:77,1
    - Dst: wcscat_s
      Src: /src/openvpn/src/tapctl/tap.c:80,1
    - Dst: _countof
      Src: /src/openvpn/src/tapctl/tap.c:80,1
    - Dst: wcscat_s
      Src: /src/openvpn/src/tapctl/tap.c:81,1
    - Dst: _countof
      Src: /src/openvpn/src/tapctl/tap.c:81,1
    - Dst: LoadLibraryW
      Src: /src/openvpn/src/tapctl/tap.c:83,1
    - Dst: FreeLibrary
      Src: /src/openvpn/src/tapctl/tap.c:91,1
    - Dst: GetProcAddress
      Src: /src/openvpn/src/tapctl/tap.c:88,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 3
    argNames:
    - libname
    - funcname
    - m
    argTypes:
    - WCHAR*
    - char*
    - HMODULE*
    constantsTouched: []
    func_position:
      end: 96
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 96
    functionName: find_function
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - GetSystemDirectoryW
    - FreeLibrary
    - _countof
    - SetLastError
    - wcslen
    - LoadLibraryW
    - GetProcAddress
    - wcscat_s
    linkageType: ''
    returnType: void*
    signature: 'static void *find_function(const WCHAR *libname, const char *funcname,
      HMODULE *m) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ZeroMemory
      Src: /src/openvpn/src/tapctl/tap.c:1033,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/tapctl/tap.c:1043,1
    - Dst: CreateProcessW
      Src: /src/openvpn/src/tapctl/tap.c:1040,1
    - Dst: _wcsdup
      Src: /src/openvpn/src/tapctl/tap.c:1039,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/tapctl/tap.c:1034,1
    - Dst: GetExitCodeProcess
      Src: /src/openvpn/src/tapctl/tap.c:1044,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1046,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/tapctl/tap.c:1049,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/tapctl/tap.c:1050,1
    - Dst: GetLastError
      Src: /src/openvpn/src/tapctl/tap.c:1054,1
    - Dst: free
      Src: /src/openvpn/src/tapctl/tap.c:1057,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - cmdline
    argTypes:
    - WCHAR*
    constantsTouched: []
    func_position:
      end: 1059
      start: 1024
    functionDepth: 0
    functionLinenumber: 1024
    functionLinenumberEnd: 1059
    functionName: ExecCommand
    functionSourceFile: /src/openvpn/src/tapctl/tap.c
    functionUses: []
    functionsReached:
    - GetExitCodeProcess
    - CloseHandle
    - GetLastError
    - CreateProcessW
    - free
    - WaitForSingleObject
    - ZeroMemory
    - _wcsdup
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD ExecCommand(const WCHAR *cmdline) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - level
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 86
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 86
    functionName: check_debug_level
    functionSourceFile: /src/openvpn/src/tapctl/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool check_debug_level(unsigned int level) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/tapctl/error.h:92,1
    - Dst: dont_mute
      Src: /src/openvpn/src/tapctl/error.h:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 93
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 93
    functionName: msg_test
    functionSourceFile: /src/openvpn/src/tapctl/error.h
    functionUses: []
    functionsReached:
    - dont_mute
    - check_debug_level
    linkageType: ''
    returnType: bool
    signature: 'static inline bool msg_test(unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - hash
    - key
    argTypes:
    - struct hash*
    - void*
    constantsTouched: []
    func_position:
      end: 118
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 118
    functionName: hash_value
    functionSourceFile: /src/openvpn/src/openvpn/list.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t hash_value(const struct hash *hash, const void
      *key) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hash_value
      Src: /src/openvpn/src/openvpn/list.h:143,1
    - Dst: hash_lookup_fast
      Src: /src/openvpn/src/openvpn/list.h:146,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 7
    argCount: 2
    argNames:
    - hash
    - key
    argTypes:
    - struct hash*
    - void*
    constantsTouched: []
    func_position:
      end: 153
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 153
    functionName: hash_lookup
    functionSourceFile: /src/openvpn/src/openvpn/list.h
    functionUses: []
    functionsReached:
    - hash_lookup_fast
    - hash_value
    linkageType: ''
    returnType: void*
    signature: 'static inline void *hash_lookup(struct hash *hash, const void *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - hash
    argTypes:
    - struct hash*
    constantsTouched: []
    func_position:
      end: 130
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 130
    functionName: hash_n_buckets
    functionSourceFile: /src/openvpn/src/openvpn/list.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int hash_n_buckets(const struct hash *hash) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - hash
    - hv
    argTypes:
    - struct hash*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 136
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 136
    functionName: hash_bucket
    functionSourceFile: /src/openvpn/src/openvpn/list.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct hash_bucket*
    signature: 'static inline struct hash_bucket *hash_bucket(struct hash *hash, uint32_t
      hv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - hash
    argTypes:
    - struct hash*
    constantsTouched: []
    func_position:
      end: 124
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 124
    functionName: hash_n_elements
    functionSourceFile: /src/openvpn/src/openvpn/list.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int hash_n_elements(const struct hash *hash) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash_value
      Src: /src/openvpn/src/openvpn/list.h:181,1
    - Dst: hash_remove_fast
      Src: /src/openvpn/src/openvpn/list.h:183,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - hash
    - key
    argTypes:
    - struct hash*
    - void*
    constantsTouched: []
    func_position:
      end: 185
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 185
    functionName: hash_remove
    functionSourceFile: /src/openvpn/src/openvpn/list.h
    functionUses: []
    functionsReached:
    - hash_remove_fast
    - hash_value
    linkageType: ''
    returnType: bool
    signature: 'static inline bool hash_remove(struct hash *hash, const void *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/list.h:165,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 5
    argNames:
    - hash
    - bucket
    - key
    - hv
    - value
    argTypes:
    - struct hash*
    - struct hash_bucket*
    - void*
    - uint32_t
    - void*
    constantsTouched: []
    func_position:
      end: 172
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 172
    functionName: hash_add_fast
    functionSourceFile: /src/openvpn/src/openvpn/list.h
    functionUses: []
    functionsReached:
    - ALLOC_OBJ
    linkageType: ''
    returnType: void
    signature: 'static inline void hash_add_fast(struct hash *hash, struct hash_bucket
      *bucket, const void *key, uint32_t hv, void *value) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/otime.h:65,1
    - Dst: update_now_usec
      Src: /src/openvpn/src/openvpn/otime.h:68,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - tv
    - tz
    argTypes:
    - struct timeval*
    - void*
    constantsTouched: []
    func_position:
      end: 73
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 73
    functionName: openvpn_gettimeofday
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached:
    - gettimeofday
    - update_now_usec
    linkageType: ''
    returnType: int
    signature: 'static inline int openvpn_gettimeofday(struct timeval *tv, void *tz) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/otime.h:91,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - t
    argTypes:
    - time_t*
    constantsTouched: []
    func_position:
      end: 97
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 97
    functionName: openvpn_time
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached:
    - update_time
    linkageType: ''
    returnType: time_t
    signature: 'static inline time_t openvpn_time(time_t *t) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - tv
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 110
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 110
    functionName: tv_defined
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tv_defined(const struct timeval *tv) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 142
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 142
    functionName: tv_add
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void tv_add(struct timeval *dest, const struct timeval
      *src) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 176
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 176
    functionName: tv_le
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tv_le(const struct timeval *t1, const struct timeval
      *t2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 210
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 210
    functionName: tv_gt
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tv_gt(const struct timeval *t1, const struct timeval
      *t2) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 13
    argCount: 3
    argNames:
    - dest
    - t1
    - t2
    argTypes:
    - struct timeval*
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 237
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 237
    functionName: tv_delta
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void tv_delta(struct timeval *dest, const struct timeval
      *t1, const struct timeval *t2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tv_subtract
      Src: /src/openvpn/src/openvpn/otime.h:249,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 3
    argNames:
    - t1
    - t2
    - sigma
    argTypes:
    - struct timeval*
    - struct timeval*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 251
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 251
    functionName: tv_within_sigma
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached:
    - tv_subtract
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tv_within_sigma(const struct timeval *t1, const
      struct timeval *t2, unsigned int sigma) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - tv
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 104
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 104
    functionName: tv_clear
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void tv_clear(struct timeval *tv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/otime.h:81,1
    - Dst: update_now
      Src: /src/openvpn/src/openvpn/otime.h:83,1
    - Dst: time
      Src: /src/openvpn/src/openvpn/otime.h:83,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 86
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 86
    functionName: update_time
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached:
    - time
    - update_now
    - openvpn_gettimeofday
    linkageType: ''
    returnType: void
    signature: 'static inline void update_time(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 159
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 159
    functionName: tv_lt
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tv_lt(const struct timeval *t1, const struct timeval
      *t2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 193
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 193
    functionName: tv_ge
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tv_ge(const struct timeval *t1, const struct timeval
      *t2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 2
    argNames:
    - t1
    - t2
    argTypes:
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 216
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 216
    functionName: tv_eq
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tv_eq(const struct timeval *t1, const struct timeval
      *t2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: constrain_int
      Src: /src/openvpn/src/openvpn/otime.h:127,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 3
    argNames:
    - tv1
    - tv2
    - max_seconds
    argTypes:
    - struct timeval*
    - struct timeval*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 128
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 128
    functionName: tv_subtract
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached:
    - constrain_int
    linkageType: ''
    returnType: int
    signature: 'static inline int tv_subtract(const struct timeval *tv1, const struct
      timeval *tv2, const unsigned int max_seconds) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 3
    argNames:
    - wakeup
    - at
    - current
    argTypes:
    - interval_t*
    - time_t
    - time_t
    constantsTouched: []
    func_position:
      end: 272
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 272
    functionName: interval_earliest_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/otime.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void interval_earliest_wakeup(interval_t *wakeup, time_t
      at, time_t current) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 45
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 45
    functionName: stub_compress_uninit
    functionSourceFile: /src/openvpn/src/openvpn/compstub.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void stub_compress_uninit(struct compress_context *compctx) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/compstub.c:86,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/compstub.c:89,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/compstub.c:92,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/compstub.c:98,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/compstub.c:99,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/compstub.c:99,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/compstub.c:102,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 22
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 106
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 106
    functionName: stub_decompress
    functionSourceFile: /src/openvpn/src/openvpn/compstub.c
    functionUses: []
    functionsReached:
    - dmsg
    - BPTR
    - ASSERT
    - BEND
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static void stub_decompress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/compstub.c:132,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/compstub.c:150,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/compstub.c:149,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/compstub.c:141,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/compstub.c:154,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 16
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 158
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 158
    functionName: stubv2_decompress
    functionSourceFile: /src/openvpn/src/openvpn/compstub.c
    functionUses: []
    functionsReached:
    - dmsg
    - buf_advance
    - BPTR
    linkageType: ''
    returnType: void
    signature: 'static void stubv2_decompress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 40
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 40
    functionName: stub_compress_init
    functionSourceFile: /src/openvpn/src/openvpn/compstub.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void stub_compress_init(struct compress_context *compctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/compstub.c:58,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/compstub.c:60,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/compstub.c:60,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/compstub.c:59,1
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/compstub.c:69,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 14
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 72
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 72
    functionName: stub_compress
    functionSourceFile: /src/openvpn/src/openvpn/compstub.c
    functionUses: []
    functionsReached:
    - buf_safe
    - BPTR
    - buf_prepend
    - ASSERT
    - BEND
    linkageType: ''
    returnType: void
    signature: 'static void stub_compress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compv2_escape_data_ifneeded
      Src: /src/openvpn/src/openvpn/compstub.c:119,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 4
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 120
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 120
    functionName: stubv2_compress
    functionSourceFile: /src/openvpn/src/openvpn/compstub.c
    functionUses: []
    functionsReached:
    - compv2_escape_data_ifneeded
    linkageType: ''
    returnType: void
    signature: 'static void stubv2_compress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: connection_established
      Src: /src/openvpn/src/openvpn/forward.c:340,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/forward.c:364,1
    - Dst: reset_coarse_timers
      Src: /src/openvpn/src/openvpn/forward.c:365,1
    - Dst: do_up
      Src: /src/openvpn/src/openvpn/forward.c:369,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/forward.c:348,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:371,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/forward.c:375,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 377
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 377
    functionName: check_connection_established
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - management_set_state
    - do_up
    - connection_established
    - event_timeout_clear
    - event_timeout_init
    - register_signal
    - reset_coarse_timers
    linkageType: ''
    returnType: void
    signature: 'static void check_connection_established(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:555,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 556
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 556
    functionName: check_scheduled_exit
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'static void check_scheduled_exit(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/forward.c:866,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/forward.c:869,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 870
      start: 861
    functionDepth: 0
    functionLinenumber: 861
    functionLinenumberEnd: 870
    functionName: check_timeout_random_component_dowork
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - get_random
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void check_timeout_random_component_dowork(struct context *c) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/forward.c:1456,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/forward.c:1458,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/forward.c:1468,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/forward.c:1473,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1473,1
    - Dst: drop_if_recursive_routing
      Src: /src/openvpn/src/openvpn/forward.c:1479,1
    - Dst: process_ip_header
      Src: /src/openvpn/src/openvpn/forward.c:1487,1
    - Dst: ipv4_packet_size_verify
      Src: /src/openvpn/src/openvpn/forward.c:1491,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1491,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1492,1
    - Dst: encrypt_sign
      Src: /src/openvpn/src/openvpn/forward.c:1501,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/forward.c:1505,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:1507,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/forward.c:1508,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1493,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 2
    argNames:
    - c
    - out_sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1509
      start: 1453
    functionDepth: 0
    functionLinenumber: 1453
    functionLinenumberEnd: 1509
    functionName: process_incoming_tun
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - drop_if_recursive_routing
    - TUNNEL_TYPE
    - dmsg
    - BPTR
    - BLEN
    - process_ip_header
    - gc_new
    - perf_pop
    - gc_free
    - fprintf
    - encrypt_sign
    - ipv4_packet_size_verify
    - buf_reset
    - perf_push
    linkageType: ''
    returnType: void
    signature: 'void process_incoming_tun(struct context *c, struct link_socket *out_sock) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:2345,1
    - Dst: read_incoming_link
      Src: /src/openvpn/src/openvpn/forward.c:2363,1
    - Dst: management_io
      Src: /src/openvpn/src/openvpn/forward.c:2346,1
    - Dst: process_outgoing_tun
      Src: /src/openvpn/src/openvpn/forward.c:2358,1
    - Dst: process_outgoing_link
      Src: /src/openvpn/src/openvpn/forward.c:2353,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/forward.c:2364,1
    - Dst: process_incoming_link
      Src: /src/openvpn/src/openvpn/forward.c:2366,1
    - Dst: read_incoming_tun
      Src: /src/openvpn/src/openvpn/forward.c:2372,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/forward.c:2373,1
    - Dst: process_incoming_tun
      Src: /src/openvpn/src/openvpn/forward.c:2375,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/forward.c:2380,1
    - Dst: process_incoming_dco
      Src: /src/openvpn/src/openvpn/forward.c:2382,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 32
    argCount: 2
    argNames:
    - c
    - sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 2385
      start: 2337
    functionDepth: 0
    functionLinenumber: 2337
    functionLinenumberEnd: 2385
    functionName: process_io
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - management_io
    - IS_SIG
    - process_outgoing_tun
    - process_outgoing_link
    - process_incoming_link
    - ASSERT
    - read_incoming_link
    - read_incoming_tun
    - process_incoming_dco
    - process_incoming_tun
    linkageType: ''
    returnType: void
    signature: 'void process_io(struct context *c, struct link_socket *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/forward.c:383,1
    - Dst: tls_send_payload
      Src: /src/openvpn/src/openvpn/forward.c:390,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/forward.c:390,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:386,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:392,1
    - Dst: sanitize_control_message
      Src: /src/openvpn/src/openvpn/forward.c:394,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/forward.c:397,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 3
    argNames:
    - session
    - str
    - msglevel
    argTypes:
    - struct tls_session*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 399
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 399
    functionName: send_control_channel_string_dowork
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - sanitize_control_message
    - msg
    - gc_new
    - gc_free
    - ASSERT
    - strlen
    - tls_send_payload
    linkageType: ''
    returnType: bool
    signature: 'bool send_control_channel_string_dowork(struct tls_session *session,
      const char *str, int msglevel) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: check_timeout_random_component_dowork
      Src: /src/openvpn/src/openvpn/forward.c:877,1
    - Dst: tv_add
      Src: /src/openvpn/src/openvpn/forward.c:881,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 883
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 883
    functionName: check_timeout_random_component
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - tv_add
    - check_timeout_random_component_dowork
    linkageType: ''
    returnType: void
    signature: 'static inline void check_timeout_random_component(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: multi_io_process_flags
      Src: /src/openvpn/src/openvpn/forward.c:2175,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 3
    argNames:
    - c
    - multi_io
    - flags
    argTypes:
    - struct context*
    - struct multi_io*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2177
      start: 2170
    functionDepth: 0
    functionLinenumber: 2170
    functionLinenumberEnd: 2177
    functionName: get_io_flags_dowork_udp
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - multi_io_process_flags
    linkageType: ''
    returnType: void
    signature: 'void get_io_flags_dowork_udp(struct context *c, struct multi_io *multi_io,
      const unsigned int flags) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: event_reset
      Src: /src/openvpn/src/openvpn/forward.c:2226,1
    - Dst: multi_io_process_flags
      Src: /src/openvpn/src/openvpn/forward.c:2228,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/forward.c:2248,1
    - Dst: dco_event_set
      Src: /src/openvpn/src/openvpn/forward.c:2233,1
    - Dst: management_socket_set
      Src: /src/openvpn/src/openvpn/forward.c:2240,1
    - Dst: sockets_read_residual
      Src: /src/openvpn/src/openvpn/forward.c:2266,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/forward.c:2271,1
    - Dst: show_wait_status
      Src: /src/openvpn/src/openvpn/forward.c:2273,1
    - Dst: event_wait
      Src: /src/openvpn/src/openvpn/forward.c:2280,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/forward.c:2280,1
    - Dst: check_status
      Src: /src/openvpn/src/openvpn/forward.c:2282,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/forward.c:2326,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/forward.c:2334,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:2299,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/forward.c:2331,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 58
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2335
      start: 2204
    functionDepth: 0
    functionLinenumber: 2204
    functionLinenumberEnd: 2335
    functionName: io_wait_dowork
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - multi_io_process_flags
    - event_ctl
    - sockets_read_residual
    - check_debug_level
    - dmsg
    - msg
    - SIZE
    - check_status
    - show_wait_status
    - get_signal
    - event_wait
    - event_reset
    - update_time
    - dco_event_set
    - management_socket_set
    linkageType: ''
    returnType: void
    signature: 'void io_wait_dowork(struct context *c, const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: interval_action
      Src: /src/openvpn/src/openvpn/forward.c:404,1
    - Dst: context_immediate_reschedule
      Src: /src/openvpn/src/openvpn/forward.c:405,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 406
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 406
    functionName: reschedule_multi_process
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - interval_action
    - context_immediate_reschedule
    linkageType: ''
    returnType: void
    signature: 'void reschedule_multi_process(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_defined
      Src: /src/openvpn/src/openvpn/forward.c:536,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/forward.c:541,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/forward.c:543,1
    - Dst: reset_coarse_timers
      Src: /src/openvpn/src/openvpn/forward.c:542,1
    - Dst: tls_set_single_session
      Src: /src/openvpn/src/openvpn/forward.c:540,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:545,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 547
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 547
    functionName: schedule_exit
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - event_timeout_init
    - msg
    - update_time
    - tls_set_single_session
    - event_timeout_defined
    - reset_coarse_timers
    linkageType: ''
    returnType: bool
    signature: 'bool schedule_exit(struct context *c) '
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:738,1
    - Dst: check_status_file
      Src: /src/openvpn/src/openvpn/forward.c:740,1
    - Dst: check_server_poll_timeout
      Src: /src/openvpn/src/openvpn/forward.c:798,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:796,1
    - Dst: packet_id_persist_enabled
      Src: /src/openvpn/src/openvpn/forward.c:730,1
    - Dst: check_connection_established
      Src: /src/openvpn/src/openvpn/forward.c:746,1
    - Dst: check_ping_restart
      Src: /src/openvpn/src/openvpn/forward.c:787,1
    - Dst: check_add_routes
      Src: /src/openvpn/src/openvpn/forward.c:758,1
    - Dst: check_scheduled_exit
      Src: /src/openvpn/src/openvpn/forward.c:806,1
    - Dst: check_send_occ_load_test
      Src: /src/openvpn/src/openvpn/forward.c:818,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:731,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:744,1
    - Dst: check_push_request
      Src: /src/openvpn/src/openvpn/forward.c:752,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:756,1
    - Dst: check_send_auth_token
      Src: /src/openvpn/src/openvpn/forward.c:764,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:804,1
    - Dst: process_explicit_exit_notification_timer_wakeup
      Src: /src/openvpn/src/openvpn/forward.c:823,1
    - Dst: check_ping_send
      Src: /src/openvpn/src/openvpn/forward.c:827,1
    - Dst: packet_id_persist_save
      Src: /src/openvpn/src/openvpn/forward.c:733,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:750,1
    - Dst: check_session_timeout
      Src: /src/openvpn/src/openvpn/forward.c:780,1
    - Dst: check_inactivity_timeout
      Src: /src/openvpn/src/openvpn/forward.c:771,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:769,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:762,1
    - Dst: check_send_occ_req
      Src: /src/openvpn/src/openvpn/forward.c:815,1
    - Dst: management_check_bytecount
      Src: /src/openvpn/src/openvpn/forward.c:832,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 48
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 835
      start: 725
    functionDepth: 0
    functionLinenumber: 725
    functionLinenumberEnd: 835
    functionName: process_coarse_timers
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - check_push_request
    - packet_id_persist_enabled
    - check_add_routes
    - check_send_auth_token
    - process_explicit_exit_notification_timer_wakeup
    - check_session_timeout
    - check_send_occ_req
    - check_connection_established
    - event_timeout_trigger
    - check_inactivity_timeout
    - check_ping_restart
    - check_server_poll_timeout
    - check_scheduled_exit
    - check_send_occ_load_test
    - check_ping_send
    - check_status_file
    - packet_id_persist_save
    - management_check_bytecount
    linkageType: ''
    returnType: void
    signature: 'static void process_coarse_timers(struct context *c) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/forward.c:1748,1
    - Dst: shaper_wrote_bytes
      Src: /src/openvpn/src/openvpn/forward.c:1763,1
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/forward.c:1772,1
    - Dst: socks_preprocess_outgoing_link
      Src: /src/openvpn/src/openvpn/forward.c:1799,1
    - Dst: link_socket_write
      Src: /src/openvpn/src/openvpn/forward.c:1802,1
    - Dst: management_bytes_server
      Src: /src/openvpn/src/openvpn/forward.c:1825,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1840,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/forward.c:1842,1
    - Dst: register_activity
      Src: /src/openvpn/src/openvpn/forward.c:1851,1
    - Dst: tls_initial_packet_received
      Src: /src/openvpn/src/openvpn/forward.c:1863,1
    - Dst: openvpn_errno
      Src: /src/openvpn/src/openvpn/forward.c:1832,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1865,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1748,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/forward.c:1784,1
    - Dst: management_bytes_client
      Src: /src/openvpn/src/openvpn/forward.c:1824,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1873,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/forward.c:1880,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:1882,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/forward.c:1874,1
    - Dst: datagram_overhead
      Src: /src/openvpn/src/openvpn/forward.c:1761,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1764,1
    - Dst: link_socket_set_tos
      Src: /src/openvpn/src/openvpn/forward.c:1777,1
    - Dst: PROTO_DUMP
      Src: /src/openvpn/src/openvpn/forward.c:1791,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/forward.c:1788,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1789,1
    - Dst: link_socket_write_post_size_adjust
      Src: /src/openvpn/src/openvpn/forward.c:1807,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/forward.c:1790,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1787,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/forward.c:1812,1
    - Dst: check_status
      Src: /src/openvpn/src/openvpn/forward.c:1833,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/forward.c:1736,1
    - Dst: ask_gremlin
      Src: /src/openvpn/src/openvpn/forward.c:1752,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/forward.c:1739,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1838,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1843,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:1866,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/forward.c:1883,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 78
    argCount: 2
    argNames:
    - c
    - sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1884
      start: 1733
    functionDepth: 0
    functionLinenumber: 1733
    functionLinenumberEnd: 1884
    functionName: process_outgoing_link
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - event_timeout_reset
    - msg
    - link_socket_actual_defined
    - BLEN
    - datagram_overhead
    - management_bytes_server
    - ask_gremlin
    - tls_initial_packet_received
    - link_socket_set_tos
    - max_int
    - perf_pop
    - gc_new
    - register_signal
    - gc_free
    - proto2ascii
    - socks_preprocess_outgoing_link
    - fprintf
    - link_socket_write_post_size_adjust
    - buf_reset
    - perf_push
    - management_bytes_client
    - shaper_wrote_bytes
    - openvpn_errno
    - check_status
    - PROTO_DUMP
    - print_link_socket_actual
    - link_socket_write
    - ASSERT
    - register_activity
    linkageType: ''
    returnType: void
    signature: 'void process_outgoing_link(struct context *c, struct link_socket *sock) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1924,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/forward.c:1921,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/forward.c:1924,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1927,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1928,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1939,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1959,1
    - Dst: register_activity
      Src: /src/openvpn/src/openvpn/forward.c:1967,1
    - Dst: process_ip_header
      Src: /src/openvpn/src/openvpn/forward.c:1908,1
    - Dst: tun_write_win32
      Src: /src/openvpn/src/openvpn/forward.c:1935,1
    - Dst: write_tun_afunix
      Src: /src/openvpn/src/openvpn/forward.c:1939,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1939,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1957,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1943,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1962,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1976,1
    - Dst: ipv4_packet_size_verify
      Src: /src/openvpn/src/openvpn/forward.c:1927,1
    - Dst: write_tun
      Src: /src/openvpn/src/openvpn/forward.c:1943,1
    - Dst: check_status
      Src: /src/openvpn/src/openvpn/forward.c:1951,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1943,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:1983,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/forward.c:1902,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1929,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/forward.c:1981,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 47
    argCount: 2
    argNames:
    - c
    - in_sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1984
      start: 1890
    functionDepth: 0
    functionLinenumber: 1890
    functionLinenumberEnd: 1984
    functionName: process_outgoing_tun
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - write_tun_afunix
    - dmsg
    - BPTR
    - msg
    - check_status
    - BLEN
    - process_ip_header
    - perf_pop
    - tun_write_win32
    - write_tun
    - fprintf
    - ipv4_packet_size_verify
    - register_activity
    - buf_reset
    - perf_push
    linkageType: ''
    returnType: void
    signature: 'void process_outgoing_tun(struct context *c, struct link_socket *in_sock) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: wait_signal
      Src: /src/openvpn/src/openvpn/forward.c:2067,1
    - Dst: shaper_delay
      Src: /src/openvpn/src/openvpn/forward.c:2084,1
    - Dst: shaper_soonest_event
      Src: /src/openvpn/src/openvpn/forward.c:2093,1
    - Dst: TO_LINK_FRAG
      Src: /src/openvpn/src/openvpn/forward.c:2101,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/forward.c:2084,1
    - Dst: socket_set
      Src: /src/openvpn/src/openvpn/forward.c:2146,1
    - Dst: tun_set
      Src: /src/openvpn/src/openvpn/forward.c:2150,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 50
    argCount: 5
    argNames:
    - c
    - es
    - flags
    - out_socket
    - out_tuntap
    argTypes:
    - struct context*
    - struct event_set*
    - unsigned int
    - unsigned int*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 2162
      start: 2052
    functionDepth: 0
    functionLinenumber: 2052
    functionLinenumberEnd: 2162
    functionName: multi_io_process_flags
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - shaper_soonest_event
    - socket_set
    - max_int
    - tun_set
    - TO_LINK_FRAG
    - wait_signal
    - shaper_delay
    linkageType: ''
    returnType: void
    signature: 'static void multi_io_process_flags(struct context *c, struct event_set
      *es, const unsigned int flags, unsigned int *out_socket, unsigned int *out_tuntap) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: send_control_channel_string_dowork
      Src: /src/openvpn/src/openvpn/forward.c:414,1
    - Dst: reschedule_multi_process
      Src: /src/openvpn/src/openvpn/forward.c:415,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 3
    argNames:
    - c
    - str
    - msglevel
    argTypes:
    - struct context*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 420
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 420
    functionName: send_control_channel_string
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - send_control_channel_string_dowork
    - reschedule_multi_process
    linkageType: ''
    returnType: bool
    signature: 'bool send_control_channel_string(struct context *c, const char *str,
      int msglevel) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: context_reschedule_sec
      Src: /src/openvpn/src/openvpn/forward.c:842,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/forward.c:852,1
    - Dst: process_coarse_timers
      Src: /src/openvpn/src/openvpn/forward.c:849,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 859
      start: 837
    functionDepth: 0
    functionLinenumber: 837
    functionLinenumberEnd: 859
    functionName: check_coarse_timers
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - process_coarse_timers
    - context_reschedule_sec
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void check_coarse_timers(struct context *c) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/forward.c:2000,1
    - Dst: tuntap_defined
      Src: /src/openvpn/src/openvpn/forward.c:2003,1
    - Dst: check_tls
      Src: /src/openvpn/src/openvpn/forward.c:2020,1
    - Dst: tun_show_debug
      Src: /src/openvpn/src/openvpn/forward.c:2005,1
    - Dst: check_coarse_timers
      Src: /src/openvpn/src/openvpn/forward.c:2011,1
    - Dst: check_tls_errors
      Src: /src/openvpn/src/openvpn/forward.c:2024,1
    - Dst: tls_test_payload_len
      Src: /src/openvpn/src/openvpn/forward.c:2032,1
    - Dst: check_incoming_control_channel
      Src: /src/openvpn/src/openvpn/forward.c:2034,1
    - Dst: check_send_occ_msg
      Src: /src/openvpn/src/openvpn/forward.c:2038,1
    - Dst: check_fragment
      Src: /src/openvpn/src/openvpn/forward.c:2044,1
    - Dst: check_timeout_random_component
      Src: /src/openvpn/src/openvpn/forward.c:2049,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 23
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2050
      start: 1986
    functionDepth: 0
    functionLinenumber: 1986
    functionLinenumberEnd: 2050
    functionName: pre_select
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - check_debug_level
    - check_incoming_control_channel
    - check_timeout_random_component
    - check_send_occ_msg
    - check_fragment
    - check_coarse_timers
    - check_tls_errors
    - tls_test_payload_len
    - tun_show_debug
    - check_tls
    - tuntap_defined
    linkageType: ''
    returnType: void
    signature: 'void pre_select(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 132
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 132
    functionName: context_immediate_reschedule
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void context_immediate_reschedule(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/forward.c:518,1
    - Dst: tls_initial_packet_received
      Src: /src/openvpn/src/openvpn/forward.c:520,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:522,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:519,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:523,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 526
      start: 515
    functionDepth: 0
    functionLinenumber: 515
    functionLinenumberEnd: 526
    functionName: check_server_poll_timeout
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - event_timeout_reset
    - msg
    - register_signal
    - ASSERT
    - tls_initial_packet_received
    linkageType: ''
    returnType: void
    signature: 'static void check_server_poll_timeout(struct context *c) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: is_ipv4
      Src: /src/openvpn/src/openvpn/forward.c:1677,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1677,1
    - Dst: client_nat_transform
      Src: /src/openvpn/src/openvpn/forward.c:1697,1
    - Dst: link_socket_extract_tos
      Src: /src/openvpn/src/openvpn/forward.c:1683,1
    - Dst: mss_fixup_ipv4
      Src: /src/openvpn/src/openvpn/forward.c:1690,1
    - Dst: dhcp_extract_router_msg
      Src: /src/openvpn/src/openvpn/forward.c:1702,1
    - Dst: route_list_add_vpn_gateway
      Src: /src/openvpn/src/openvpn/forward.c:1705,1
    - Dst: is_ipv6
      Src: /src/openvpn/src/openvpn/forward.c:1709,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1709,1
    - Dst: mss_fixup_ipv6
      Src: /src/openvpn/src/openvpn/forward.c:1714,1
    - Dst: ipv6_send_icmp_unreachable
      Src: /src/openvpn/src/openvpn/forward.c:1719,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 58
    argCount: 4
    argNames:
    - c
    - flags
    - buf
    - sock
    argTypes:
    - struct context*
    - unsigned int
    - struct buffer*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1727
      start: 1647
    functionDepth: 0
    functionLinenumber: 1647
    functionLinenumberEnd: 1727
    functionName: process_ip_header
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - client_nat_transform
    - link_socket_extract_tos
    - mss_fixup_ipv4
    - ipv6_send_icmp_unreachable
    - route_list_add_vpn_gateway
    - dhcp_extract_router_msg
    - mss_fixup_ipv6
    - is_ipv6
    - is_ipv4
    linkageType: ''
    returnType: void
    signature: 'void process_ip_header(struct context *c, unsigned int flags, struct
      buffer *buf, struct link_socket *sock) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/forward.c:578,1
    - Dst: fragment_ready_to_send
      Src: /src/openvpn/src/openvpn/forward.c:592,1
    - Dst: fragment_outgoing_defined
      Src: /src/openvpn/src/openvpn/forward.c:587,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:592,1
    - Dst: frame_adjust_path_mtu
      Src: /src/openvpn/src/openvpn/forward.c:583,1
    - Dst: encrypt_sign
      Src: /src/openvpn/src/openvpn/forward.c:593,1
    - Dst: fragment_housekeeping
      Src: /src/openvpn/src/openvpn/forward.c:597,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 598
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 598
    functionName: check_fragment
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - fragment_outgoing_defined
    - fragment_housekeeping
    - fragment_ready_to_send
    - encrypt_sign
    - ASSERT
    - frame_adjust_path_mtu
    - get_link_socket_info
    linkageType: ''
    returnType: void
    signature: 'static void check_fragment(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/forward.c:59,1
    - Dst: tun_stat
      Src: /src/openvpn/src/openvpn/forward.c:62,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/forward.c:61,1
    - Dst: tun_stat
      Src: /src/openvpn/src/openvpn/forward.c:63,1
    - Dst: tv_string
      Src: /src/openvpn/src/openvpn/forward.c:64,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/forward.c:67,1
    - Dst: socket_stat
      Src: /src/openvpn/src/openvpn/forward.c:68,1
    - Dst: socket_stat
      Src: /src/openvpn/src/openvpn/forward.c:69,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/forward.c:71,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 2
    argNames:
    - c
    - gc
    argTypes:
    - struct context*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 72
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 72
    functionName: wait_status_string
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - tv_string
    - BSTR
    - buf_printf
    - socket_stat
    - tun_stat
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *wait_status_string(struct context *c, struct gc_arena
      *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_connection_oriented
      Src: /src/openvpn/src/openvpn/forward.c:106,1
    - Dst: check_tls_errors_co
      Src: /src/openvpn/src/openvpn/forward.c:110,1
    - Dst: check_tls_errors_nco
      Src: /src/openvpn/src/openvpn/forward.c:117,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 121
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 121
    functionName: check_tls_errors
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - link_socket_connection_oriented
    - check_tls_errors_nco
    - check_tls_errors_co
    linkageType: ''
    returnType: void
    signature: 'static inline void check_tls_errors(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: send_push_request
      Src: /src/openvpn/src/openvpn/forward.c:322,1
    - Dst: event_timeout_modify_wakeup
      Src: /src/openvpn/src/openvpn/forward.c:325,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 326
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 326
    functionName: check_push_request
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - send_push_request
    - event_timeout_modify_wakeup
    linkageType: ''
    returnType: void
    signature: 'static void check_push_request(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/forward.c:490,1
    - Dst: dco_get_peer_stats
      Src: /src/openvpn/src/openvpn/forward.c:490,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:504,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:503,1
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/forward.c:498,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 505
      start: 487
    functionDepth: 0
    functionLinenumber: 487
    functionLinenumberEnd: 505
    functionName: check_inactivity_timeout
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - event_timeout_reset
    - dco_get_peer_stats
    - msg
    - dco_enabled
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'static void check_inactivity_timeout(struct context *c) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/forward.c:969,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/forward.c:943,1
    - Dst: socket_connection_reset
      Src: /src/openvpn/src/openvpn/forward.c:952,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/forward.c:946,1
    - Dst: port_share_redirect
      Src: /src/openvpn/src/openvpn/forward.c:959,1
    - Dst: tuntap_is_dco_win_timeout
      Src: /src/openvpn/src/openvpn/forward.c:982,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:973,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:974,1
    - Dst: socks_postprocess_incoming_link
      Src: /src/openvpn/src/openvpn/forward.c:993,1
    - Dst: trigger_ping_timeout_signal
      Src: /src/openvpn/src/openvpn/forward.c:989,1
    - Dst: check_status
      Src: /src/openvpn/src/openvpn/forward.c:985,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:977,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:995,1
    - Dst: link_socket_read
      Src: /src/openvpn/src/openvpn/forward.c:948,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:946,1
    - Dst: socket_foreign_protocol_detected
      Src: /src/openvpn/src/openvpn/forward.c:955,1
    - Dst: socket_foreign_protocol_head
      Src: /src/openvpn/src/openvpn/forward.c:957,1
    - Dst: socket_foreign_protocol_sd
      Src: /src/openvpn/src/openvpn/forward.c:958,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:960,1
    - Dst: event_timeout_defined
      Src: /src/openvpn/src/openvpn/forward.c:966,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:968,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 31
    argCount: 2
    argNames:
    - c
    - sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 996
      start: 932
    functionDepth: 0
    functionLinenumber: 932
    functionLinenumberEnd: 996
    functionName: read_incoming_link
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - buf_init
    - management_sleep
    - link_socket_read
    - socket_foreign_protocol_head
    - msg
    - socket_foreign_protocol_detected
    - event_timeout_defined
    - perf_pop
    - check_status
    - register_signal
    - socks_postprocess_incoming_link
    - socket_connection_reset
    - tuntap_is_dco_win_timeout
    - ASSERT
    - socket_foreign_protocol_sd
    - trigger_ping_timeout_signal
    - port_share_redirect
    - perf_push
    linkageType: ''
    returnType: void
    signature: 'void read_incoming_link(struct context *c, struct link_socket *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/forward.c:77,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/forward.c:78,1
    - Dst: wait_status_string
      Src: /src/openvpn/src/openvpn/forward.c:78,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/forward.c:79,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 80
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 80
    functionName: show_wait_status
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - wait_status_string
    - gc_free
    - gc_new
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void show_wait_status(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/forward.c:510,1
    - Dst: event_timeout_remaining
      Src: /src/openvpn/src/openvpn/forward.c:511,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/forward.c:512,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - server_poll_timeout
    argTypes:
    - struct event_timeout*
    constantsTouched: []
    func_position:
      end: 513
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 513
    functionName: get_server_poll_remaining_time
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - event_timeout_remaining
    - update_time
    - max_int
    linkageType: ''
    returnType: int
    signature: 'int get_server_poll_remaining_time(struct event_timeout *server_poll_timeout) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_assign
      Src: /src/openvpn/src/openvpn/forward.c:609,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 4
    argNames:
    - orig_buf
    - dest_stub
    - src_stub
    - storage
    argTypes:
    - uint8_t*
    - struct buffer*
    - struct buffer*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 616
      start: 604
    functionDepth: 0
    functionLinenumber: 604
    functionLinenumberEnd: 616
    functionName: buffer_turnover
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - buf_assign
    linkageType: ''
    returnType: void
    signature: 'static inline void buffer_turnover(const uint8_t *orig_buf, struct
      buffer *dest_stub, struct buffer *src_stub, struct buffer *storage) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_test_payload_len
      Src: /src/openvpn/src/openvpn/forward.c:290,1
    - Dst: tls_rec_payload
      Src: /src/openvpn/src/openvpn/forward.c:296,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:292,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/forward.c:294,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/forward.c:295,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:298,1
    - Dst: extract_command_buffer
      Src: /src/openvpn/src/openvpn/forward.c:300,1
    - Dst: parse_incoming_control_channel_command
      Src: /src/openvpn/src/openvpn/forward.c:304,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:310,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/forward.c:313,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 18
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 314
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 314
    functionName: check_incoming_control_channel
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - msg
    - BLEN
    - gc_new
    - tls_rec_payload
    - parse_incoming_control_channel_command
    - extract_command_buffer
    - gc_free
    - ASSERT
    - tls_test_payload_len
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void check_incoming_control_channel(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/forward.c:921,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 3
    argNames:
    - size
    - size_delta
    - buf
    argTypes:
    - int*
    - int
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 926
      start: 913
    functionDepth: 0
    functionLinenumber: 913
    functionLinenumberEnd: 926
    functionName: link_socket_write_post_size_adjust
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static inline void link_socket_write_post_size_adjust(int *size, int
      size_delta, struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:87,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: check_tls_errors_co
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - msg
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'static void check_tls_errors_co(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - c
    - sec
    argTypes:
    - struct context*
    - int
    constantsTouched: []
    func_position:
      end: 146
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 146
    functionName: context_reschedule_sec
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void context_reschedule_sec(struct context *c, int sec) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: interval_test
      Src: /src/openvpn/src/openvpn/forward.c:186,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/forward.c:194,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/forward.c:190,1
    - Dst: reset_coarse_timers
      Src: /src/openvpn/src/openvpn/forward.c:195,1
    - Dst: tls_multi_process
      Src: /src/openvpn/src/openvpn/forward.c:188,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/forward.c:200,1
    - Dst: interval_action
      Src: /src/openvpn/src/openvpn/forward.c:201,1
    - Dst: send_auth_failed
      Src: /src/openvpn/src/openvpn/forward.c:207,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:211,1
    - Dst: interval_future_trigger
      Src: /src/openvpn/src/openvpn/forward.c:215,1
    - Dst: check_dco_key_status
      Src: /src/openvpn/src/openvpn/forward.c:230,1
    - Dst: context_reschedule_sec
      Src: /src/openvpn/src/openvpn/forward.c:234,1
    - Dst: interval_schedule_wakeup
      Src: /src/openvpn/src/openvpn/forward.c:218,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 236
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 236
    functionName: check_tls
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - interval_test
    - interval_schedule_wakeup
    - check_dco_key_status
    - event_timeout_init
    - interval_future_trigger
    - reset_coarse_timers
    - register_signal
    - interval_action
    - context_reschedule_sec
    - update_time
    - send_auth_failed
    - tls_multi_process
    - get_link_socket_info
    linkageType: ''
    returnType: void
    signature: 'static void check_tls(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: do_route
      Src: /src/openvpn/src/openvpn/forward.c:428,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/forward.c:436,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/forward.c:435,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/forward.c:434,1
    - Dst: initialization_sequence_completed
      Src: /src/openvpn/src/openvpn/forward.c:437,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - c
    - errors
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 438
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 438
    functionName: check_add_routes_action
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - initialization_sequence_completed
    - update_time
    - do_route
    - event_timeout_clear
    linkageType: ''
    returnType: void
    signature: 'static void check_add_routes_action(struct context *c, const bool
      errors) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:714,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:717,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:718,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 720
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 720
    functionName: check_session_timeout
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - msg
    - event_timeout_trigger
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'static void check_session_timeout(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socks_process_incoming_udp
      Src: /src/openvpn/src/openvpn/forward.c:895,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 2
    argNames:
    - c
    - sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 897
      start: 890
    functionDepth: 0
    functionLinenumber: 890
    functionLinenumberEnd: 897
    functionName: socks_postprocess_incoming_link
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - socks_process_incoming_udp
    linkageType: ''
    returnType: void
    signature: 'static inline void socks_postprocess_incoming_link(struct context
      *c, struct link_socket *sock) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/forward.c:1001,1
    - Dst: management_bytes_client
      Src: /src/openvpn/src/openvpn/forward.c:1018,1
    - Dst: management_bytes_server
      Src: /src/openvpn/src/openvpn/forward.c:1019,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/forward.c:1048,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/forward.c:1050,1
    - Dst: interval_action
      Src: /src/openvpn/src/openvpn/forward.c:1102,1
    - Dst: tls_pre_decrypt
      Src: /src/openvpn/src/openvpn/forward.c:1099,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/forward.c:1081,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1136,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/forward.c:1141,1
    - Dst: corrupt_gremlin
      Src: /src/openvpn/src/openvpn/forward.c:1036,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1071,1
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/forward.c:1107,1
    - Dst: link_socket_connection_oriented
      Src: /src/openvpn/src/openvpn/forward.c:1132,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:1135,1
    - Dst: ask_gremlin
      Src: /src/openvpn/src/openvpn/forward.c:1032,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/forward.c:1044,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1047,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1049,1
    - Dst: PROTO_DUMP
      Src: /src/openvpn/src/openvpn/forward.c:1051,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1083,1
    - Dst: link_socket_bad_incoming_addr
      Src: /src/openvpn/src/openvpn/forward.c:1066,1
    - Dst: link_socket_verify_incoming_addr
      Src: /src/openvpn/src/openvpn/forward.c:1064,1
    - Dst: openvpn_decrypt
      Src: /src/openvpn/src/openvpn/forward.c:1127,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/forward.c:1143,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 66
    argCount: 3
    argNames:
    - c
    - lsi
    - floated
    argTypes:
    - struct context*
    - struct link_socket_info*
    - bool
    constantsTouched: []
    func_position:
      end: 1146
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 1146
    functionName: process_incoming_link_part1
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - event_timeout_reset
    - msg
    - corrupt_gremlin
    - BLEN
    - management_bytes_server
    - ask_gremlin
    - BPTR
    - gc_new
    - register_signal
    - gc_free
    - proto2ascii
    - openvpn_decrypt
    - link_socket_bad_incoming_addr
    - interval_action
    - fprintf
    - link_socket_verify_incoming_addr
    - tls_pre_decrypt
    - buf_reset
    - management_bytes_client
    - link_socket_connection_oriented
    - dco_enabled
    - PROTO_DUMP
    - print_link_socket_actual
    linkageType: ''
    returnType: bool
    signature: 'bool process_incoming_link_part1(struct context *c, struct link_socket_info
      *lsi, bool floated) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/forward.c:1234,1
    - Dst: process_incoming_link_part1
      Src: /src/openvpn/src/openvpn/forward.c:1239,1
    - Dst: process_incoming_link_part2
      Src: /src/openvpn/src/openvpn/forward.c:1240,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:1242,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 2
    argNames:
    - c
    - sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1243
      start: 1231
    functionDepth: 0
    functionLinenumber: 1231
    functionLinenumberEnd: 1243
    functionName: process_incoming_link
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - process_incoming_link_part2
    - perf_pop
    - process_incoming_link_part1
    - perf_push
    linkageType: ''
    returnType: void
    signature: 'static void process_incoming_link(struct context *c, struct link_socket
      *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:94,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: check_tls_errors_nco
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'static void check_tls_errors_nco(struct context *c) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/forward.c:152,1
    - Dst: dco_update_keys
      Src: /src/openvpn/src/openvpn/forward.c:163,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:167,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 169
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 169
    functionName: check_dco_key_status
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - dco_update_keys
    - dco_enabled
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'void check_dco_key_status(struct context *c) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: receive_exit_message
      Src: /src/openvpn/src/openvpn/forward.c:275,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:253,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:257,1
    - Dst: server_pushed_info
      Src: /src/openvpn/src/openvpn/forward.c:259,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:261,1
    - Dst: server_pushed_info
      Src: /src/openvpn/src/openvpn/forward.c:263,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:269,1
    - Dst: receive_auth_pending
      Src: /src/openvpn/src/openvpn/forward.c:271,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:279,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:265,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:273,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:241,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:245,1
    - Dst: receive_auth_failed
      Src: /src/openvpn/src/openvpn/forward.c:243,1
    - Dst: incoming_push_message
      Src: /src/openvpn/src/openvpn/forward.c:247,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/forward.c:249,1
    - Dst: server_pushed_signal
      Src: /src/openvpn/src/openvpn/forward.c:251,1
    - Dst: server_pushed_signal
      Src: /src/openvpn/src/openvpn/forward.c:255,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/forward.c:279,1
    - Dst: receive_cr_response
      Src: /src/openvpn/src/openvpn/forward.c:267,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 31
    argCount: 2
    argNames:
    - c
    - buf
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 281
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 281
    functionName: parse_incoming_control_channel_command
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - receive_auth_pending
    - buf_string_match_head_str
    - server_pushed_signal
    - BSTR
    - msg
    - receive_cr_response
    - incoming_push_message
    - receive_exit_message
    - server_pushed_info
    - receive_auth_failed
    linkageType: ''
    returnType: void
    signature: 'static void parse_incoming_control_channel_command(struct context
      *c, struct buffer *buf) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: test_routes
      Src: /src/openvpn/src/openvpn/forward.c:443,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/forward.c:447,1
    - Dst: check_add_routes_action
      Src: /src/openvpn/src/openvpn/forward.c:445,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:453,1
    - Dst: check_add_routes_action
      Src: /src/openvpn/src/openvpn/forward.c:449,1
    - Dst: tun_standby
      Src: /src/openvpn/src/openvpn/forward.c:456,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:458,1
    - Dst: show_routes
      Src: /src/openvpn/src/openvpn/forward.c:461,1
    - Dst: show_adapters
      Src: /src/openvpn/src/openvpn/forward.c:462,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/forward.c:466,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/forward.c:469,1
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/forward.c:471,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 473
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 473
    functionName: check_add_routes
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - event_timeout_reset
    - msg
    - show_routes
    - event_timeout_init
    - show_adapters
    - register_signal
    - test_routes
    - event_timeout_trigger
    - update_time
    - check_add_routes_action
    - tun_standby
    linkageType: ''
    returnType: void
    signature: 'static void check_add_routes(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socks_process_outgoing_udp
      Src: /src/openvpn/src/openvpn/forward.c:907,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 7
    argCount: 4
    argNames:
    - c
    - sock
    - to_addr
    - size_delta
    argTypes:
    - struct context*
    - struct link_socket*
    - struct link_socket_actual**
    - int*
    constantsTouched: []
    func_position:
      end: 910
      start: 899
    functionDepth: 0
    functionLinenumber: 899
    functionLinenumberEnd: 910
    functionName: socks_preprocess_outgoing_link
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - socks_process_outgoing_udp
    linkageType: ''
    returnType: void
    signature: 'static inline void socks_preprocess_outgoing_link(struct context *c,
      struct link_socket *sock, struct link_socket_actual **to_addr, int *size_delta) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: fragment_incoming
      Src: /src/openvpn/src/openvpn/forward.c:1156,1
    - Dst: ipv4_packet_size_verify
      Src: /src/openvpn/src/openvpn/forward.c:1170,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1170,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1171,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1172,1
    - Dst: TLS_MODE
      Src: /src/openvpn/src/openvpn/forward.c:1186,1
    - Dst: link_socket_set_outgoing_addr
      Src: /src/openvpn/src/openvpn/forward.c:1188,1
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/forward.c:1194,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/forward.c:1201,1
    - Dst: buffer_turnover
      Src: /src/openvpn/src/openvpn/forward.c:1217,1
    - Dst: process_received_occ_msg
      Src: /src/openvpn/src/openvpn/forward.c:1214,1
    - Dst: is_occ_msg
      Src: /src/openvpn/src/openvpn/forward.c:1212,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/forward.c:1207,1
    - Dst: tuntap_defined
      Src: /src/openvpn/src/openvpn/forward.c:1220,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/forward.c:1227,1
    - Dst: is_ping_msg
      Src: /src/openvpn/src/openvpn/forward.c:1205,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 40
    argCount: 3
    argNames:
    - c
    - lsi
    - orig_buf
    argTypes:
    - struct context*
    - struct link_socket_info*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 1229
      start: 1148
    functionDepth: 0
    functionLinenumber: 1148
    functionLinenumberEnd: 1229
    functionName: process_incoming_link_part2
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - BPTR
    - fragment_incoming
    - event_timeout_reset
    - dmsg
    - process_received_occ_msg
    - BLEN
    - TLS_MODE
    - link_socket_set_outgoing_addr
    - max_int
    - is_ping_msg
    - ipv4_packet_size_verify
    - buffer_turnover
    - is_occ_msg
    - buf_reset
    - tuntap_defined
    linkageType: ''
    returnType: void
    signature: 'void process_incoming_link_part2(struct context *c, struct link_socket_info
      *lsi, const uint8_t *orig_buf) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: dco_do_read
      Src: /src/openvpn/src/openvpn/forward.c:1251,1
    - Dst: trigger_ping_timeout_signal
      Src: /src/openvpn/src/openvpn/forward.c:1279,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1285,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1264,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1277,1
    - Dst: tls_session_soft_reset
      Src: /src/openvpn/src/openvpn/forward.c:1287,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1291,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 18
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1297
      start: 1245
    functionDepth: 0
    functionLinenumber: 1245
    functionLinenumberEnd: 1297
    functionName: process_incoming_dco
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - msg
    - tls_session_soft_reset
    - trigger_ping_timeout_signal
    - dco_do_read
    linkageType: ''
    returnType: void
    signature: 'static void process_incoming_dco(struct context *c) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: get_tun_ip_ver
      Src: /src/openvpn/src/openvpn/forward.c:1389,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/forward.c:1408,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1405,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1389,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1394,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1416,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1427,1
    - Dst: OPENVPN_IN6_ARE_ADDR_EQUAL
      Src: /src/openvpn/src/openvpn/forward.c:1430,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/forward.c:1438,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1442,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/forward.c:1443,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/forward.c:1444,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 39
    argCount: 2
    argNames:
    - c
    - buf
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1446
      start: 1375
    functionDepth: 0
    functionLinenumber: 1375
    functionLinenumberEnd: 1446
    functionName: drop_if_recursive_routing
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - BPTR
    - msg
    - BLEN
    - gc_new
    - print_link_socket_actual
    - gc_free
    - get_tun_ip_ver
    - OPENVPN_IN6_ARE_ADDR_EQUAL
    - memcmp
    linkageType: ''
    returnType: void
    signature: 'static void drop_if_recursive_routing(struct context *c, struct buffer
      *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: print_status
      Src: /src/openvpn/src/openvpn/forward.c:566,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 568
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 568
    functionName: check_status_file
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - print_status
    linkageType: ''
    returnType: void
    signature: 'static void check_status_file(struct context *c) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/forward.c:630,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:632,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:665,1
    - Dst: fragment_outgoing
      Src: /src/openvpn/src/openvpn/forward.c:659,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/forward.c:665,1
    - Dst: tls_pre_encrypt
      Src: /src/openvpn/src/openvpn/forward.c:670,1
    - Dst: tls_prepend_opcode_v2
      Src: /src/openvpn/src/openvpn/forward.c:676,1
    - Dst: openvpn_encrypt
      Src: /src/openvpn/src/openvpn/forward.c:685,1
    - Dst: tls_prepend_opcode_v1
      Src: /src/openvpn/src/openvpn/forward.c:692,1
    - Dst: tls_post_encrypt
      Src: /src/openvpn/src/openvpn/forward.c:694,1
    - Dst: link_socket_get_outgoing_addr
      Src: /src/openvpn/src/openvpn/forward.c:700,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/forward.c:700,1
    - Dst: buffer_turnover
      Src: /src/openvpn/src/openvpn/forward.c:704,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 35
    argCount: 2
    argNames:
    - c
    - comp_frag
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 705
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 705
    functionName: encrypt_sign
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - buf_init
    - tls_post_encrypt
    - msg
    - dco_enabled
    - fragment_outgoing
    - tls_prepend_opcode_v2
    - tls_pre_encrypt
    - tls_prepend_opcode_v1
    - ASSERT
    - buffer_turnover
    - openvpn_encrypt
    - get_link_socket_info
    - link_socket_get_outgoing_addr
    linkageType: ''
    returnType: void
    signature: 'void encrypt_sign(struct context *c, bool comp_frag) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/forward.c:1317,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/forward.c:1323,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1336,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1335,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:1354,1
    - Dst: check_status
      Src: /src/openvpn/src/openvpn/forward.c:1362,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/forward.c:1322,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1346,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1330,1
    - Dst: tuntap_abort
      Src: /src/openvpn/src/openvpn/forward.c:1352,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/forward.c:1311,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1323,1
    - Dst: read_tun_afunix
      Src: /src/openvpn/src/openvpn/forward.c:1326,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1326,1
    - Dst: ipv4_packet_size_verify
      Src: /src/openvpn/src/openvpn/forward.c:1335,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/forward.c:1345,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:1347,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/forward.c:1356,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:1364,1
    - Dst: sockethandle_finalize
      Src: /src/openvpn/src/openvpn/forward.c:1320,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1317,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1322,1
    - Dst: read_tun
      Src: /src/openvpn/src/openvpn/forward.c:1330,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1337,1
    - Dst: tuntap_stop
      Src: /src/openvpn/src/openvpn/forward.c:1343,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/forward.c:1357,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1365
      start: 1303
    functionDepth: 0
    functionLinenumber: 1303
    functionLinenumberEnd: 1365
    functionName: read_incoming_tun
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - buf_safe
    - TUNNEL_TYPE
    - sockethandle_finalize
    - buf_init
    - BPTR
    - msg
    - check_status
    - dco_enabled
    - BLEN
    - perf_pop
    - register_signal
    - tuntap_abort
    - tuntap_stop
    - ASSERT
    - read_tun_afunix
    - ipv4_packet_size_verify
    - read_tun
    - perf_push
    linkageType: ''
    returnType: void
    signature: 'void read_incoming_tun(struct context *c) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1534,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/forward.c:1591,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1608,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1605,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1616,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/forward.c:1640,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/forward.c:1526,1
    - Dst: is_ipv6
      Src: /src/openvpn/src/openvpn/forward.c:1534,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1541,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1577,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/forward.c:1589,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/forward.c:1605,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1609,1
    - Dst: buf_copy_n
      Src: /src/openvpn/src/openvpn/forward.c:1609,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1612,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1616,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/forward.c:1641,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1536,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/forward.c:1608,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1589,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/forward.c:1612,1
    - Dst: ip_checksum
      Src: /src/openvpn/src/openvpn/forward.c:1616,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1623,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/forward.c:1628,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/forward.c:1630,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1635,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/forward.c:1642,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/forward.c:1556,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/forward.c:1560,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/forward.c:1587,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/forward.c:1619,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/forward.c:1619,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/forward.c:1623,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/forward.c:1639,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/forward.c:1642,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 64
    argCount: 3
    argNames:
    - c
    - buf
    - client
    argTypes:
    - struct context*
    - struct buffer*
    - bool
    constantsTouched: []
    func_position:
      end: 1645
      start: 1521
    functionDepth: 0
    functionLinenumber: 1521
    functionLinenumberEnd: 1645
    functionName: ipv6_send_icmp_unreachable
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - buf_copy_n
    - TUNNEL_TYPE
    - buf_safe
    - buf_init
    - memcpy
    - BPTR
    - BLEN
    - ip_checksum
    - inet_pton
    - buf_write_prepend
    - CLEAR
    - min_int
    - ASSERT
    - is_ipv6
    - htons
    linkageType: ''
    returnType: void
    signature: 'void ipv6_send_icmp_unreachable(struct context *c, struct buffer *buf,
      bool client) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_io_flags_dowork_udp
      Src: /src/openvpn/src/openvpn/forward.c:2200,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 3
    argNames:
    - c
    - multi_io
    - flags
    argTypes:
    - struct context*
    - struct multi_io*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2202
      start: 2179
    functionDepth: 0
    functionLinenumber: 2179
    functionLinenumberEnd: 2202
    functionName: get_io_flags_udp
    functionSourceFile: /src/openvpn/src/openvpn/forward.c
    functionUses: []
    functionsReached:
    - get_io_flags_dowork_udp
    linkageType: ''
    returnType: void
    signature: 'void get_io_flags_udp(struct context *c, struct multi_io *multi_io,
      const unsigned int flags) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:53,1
    - Dst: cert_hash_remember
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:62,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:56,1
    - Dst: x509_get_sha256_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:61,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:55,1
    - Dst: x509_get_subject
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:85,1
    - Dst: backend_x509_get_serial
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:86,1
    - Dst: mbedtls_x509_crt_verify_info
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:88,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:89,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:96,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:117,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:101,1
    - Dst: verify_cert
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:112,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:106,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 37
    argCount: 4
    argNames:
    - session_obj
    - cert
    - cert_depth
    - flags
    argTypes:
    - void*
    - mbedtls_x509_crt*
    - int
    - uint32_t*
    constantsTouched: []
    func_position:
      end: 123
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 123
    functionName: verify_callback
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - x509_get_subject
    - gc_new
    - mbedtls_x509_crt_verify_info
    - gc_free
    - ASSERT
    - cert_hash_remember
    - chomp
    - x509_get_sha256_fingerprint
    - backend_x509_get_serial
    - verify_cert
    linkageType: ''
    returnType: int
    signature: 'int verify_callback(void *session_obj, mbedtls_x509_crt *cert, int
      cert_depth, uint32_t *flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: x509_get_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:270,1
    - Dst: mbedtls_md_info_from_type
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:270,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - mbedtls_x509_crt*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 272
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 272
    functionName: x509_get_sha1_fingerprint
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - x509_get_fingerprint
    - mbedtls_md_info_from_type
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer x509_get_sha1_fingerprint(mbedtls_x509_crt *cert, struct
      gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:326,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:333,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:336,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:337,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 20
    argCount: 2
    argNames:
    - orig
    - gc
    argTypes:
    - mbedtls_asn1_buf*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 340
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 340
    functionName: asn1_buf_to_c_string
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - memcpy
    - gc_malloc
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'static char *asn1_buf_to_c_string(const mbedtls_asn1_buf *orig, struct
      gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:363,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 8
    argCount: 4
    argNames:
    - ll_head
    - name
    - msglevel
    - gc
    argTypes:
    - struct x509_track**
    - char*
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 372
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 372
    functionName: x509_track_add
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: void
    signature: 'void x509_track_add(const struct x509_track **ll_head, const char
      *name, int msglevel, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_oid_get_attr_short_name
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:432,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:439,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:464,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:434,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:463,1
    - Dst: setenv_str_incr
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:465,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 3
    argNames:
    - es
    - cert_depth
    - cert
    argTypes:
    - struct env_set*
    - int
    - mbedtls_x509_crt*
    constantsTouched: []
    func_position:
      end: 469
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 469
    functionName: x509_setenv
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_oid_get_attr_short_name
    - snprintf
    - string_mod
    - setenv_str_incr
    linkageType: ''
    returnType: void
    signature: 'void x509_setenv(struct env_set *es, int cert_depth, mbedtls_x509_crt
      *cert) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:488,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:492,1
    - Dst: mbedtls_x509_crt_check_key_usage
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:507,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:515,1
    - Dst: mbedtls_x509_crt_has_ext_type
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:490,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:518,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 3
    argNames:
    - cert
    - expected_ku
    - expected_len
    argTypes:
    - mbedtls_x509_crt*
    - unsigned*
    - int
    constantsTouched: []
    func_position:
      end: 523
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 523
    functionName: x509_verify_cert_ku
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - mbedtls_x509_crt_has_ext_type
    - mbedtls_x509_crt_check_key_usage
    linkageType: ''
    returnType: result_t
    signature: 'result_t x509_verify_cert_ku(mbedtls_x509_crt *cert, const unsigned
      *const expected_ku, int expected_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: x509_get_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:277,1
    - Dst: mbedtls_md_info_from_type
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:277,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - mbedtls_x509_crt*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 279
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 279
    functionName: x509_get_sha256_fingerprint
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - x509_get_fingerprint
    - mbedtls_md_info_from_type
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer x509_get_sha256_fingerprint(mbedtls_x509_crt *cert,
      struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_oid_get_attr_short_name
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:350,1
    - Dst: asn1_buf_to_c_string
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:353,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:351,1
    - Dst: do_setenv_x509
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:354,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 13
    argCount: 5
    argNames:
    - es
    - xt
    - cert
    - depth
    - gc
    argTypes:
    - struct env_set*
    - struct x509_track*
    - mbedtls_x509_crt*
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 357
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 357
    functionName: do_setenv_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_oid_get_attr_short_name
    - strcmp
    - do_setenv_x509
    - asn1_buf_to_c_string
    linkageType: ''
    returnType: void
    signature: 'static void do_setenv_name(struct env_set *es, const struct x509_track
      *xt, const mbedtls_x509_crt *cert, int depth, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:378,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:389,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:383,1
    - Dst: x509_get_sha1_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:391,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:383,1
    - Dst: x509_get_sha256_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:395,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:398,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:398,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:399,1
    - Dst: do_setenv_x509
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:400,1
    - Dst: do_setenv_name
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:404,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:409,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 31
    argCount: 4
    argNames:
    - xt
    - es
    - depth
    - cert
    argTypes:
    - struct x509_track*
    - struct env_set*
    - int
    - mbedtls_x509_crt*
    constantsTouched: []
    func_position:
      end: 410
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 410
    functionName: x509_setenv_track
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - BPTR
    - do_setenv_x509
    - x509_get_sha1_fingerprint
    - BLEN
    - gc_new
    - format_hex_ex
    - strcmp
    - gc_free
    - x509_get_sha256_fingerprint
    - do_setenv_name
    linkageType: ''
    returnType: void
    signature: 'void x509_setenv_track(const struct x509_track *xt, struct env_set
      *es, const int depth, mbedtls_x509_crt *cert) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_x509_crt_has_ext_type
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:530,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:538,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:532,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:547,1
    - Dst: mbedtls_oid_get_extended_key_usage
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:545,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:549,1
    - Dst: mbedtls_oid_get_numeric_string
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:556,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:559,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:561,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 26
    argCount: 2
    argNames:
    - cert
    - expected_oid
    argTypes:
    - mbedtls_x509_crt*
    - char*
    constantsTouched: []
    func_position:
      end: 572
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 572
    functionName: x509_verify_cert_eku
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - strcmp
    - mbedtls_oid_get_extended_key_usage
    - mbedtls_x509_crt_has_ext_type
    - mbedtls_oid_get_numeric_string
    linkageType: ''
    returnType: result_t
    signature: 'result_t x509_verify_cert_eku(mbedtls_x509_crt *cert, const char *const
      expected_oid) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - opt
    argTypes:
    - struct tls_options*
    constantsTouched: []
    func_position:
      end: 583
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 583
    functionName: tls_verify_crl_missing
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool tls_verify_crl_missing(const struct tls_options *opt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_x509_dn_gets
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:289,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:293,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - mbedtls_x509_crt*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 297
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 297
    functionName: x509_get_subject
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - string_alloc
    - mbedtls_x509_dn_gets
    linkageType: ''
    returnType: char*
    signature: 'char *x509_get_subject(mbedtls_x509_crt *cert, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:305,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:307,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:306,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:308,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:309,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:310,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:311,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:312,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 4
    argNames:
    - es
    - name
    - value
    - depth
    argTypes:
    - struct env_set*
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 313
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 313
    functionName: do_setenv_x509
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - setenv_str
    - malloc
    - free
    - strlen
    - string_mod
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'static void do_setenv_x509(struct env_set *es, const char *name, char
      *value, int depth) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - cert
    - usage
    argTypes:
    - mbedtls_x509_crt*
    - int
    constantsTouched: []
    func_position:
      end: 482
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 482
    functionName: x509_verify_ns_cert_type
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: result_t
    signature: 'result_t x509_verify_ns_cert_type(mbedtls_x509_crt *cert, const int
      usage) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:228,1
    - Dst: buffer_write_file
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:242,1
    - Dst: crypto_pem_encode
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:237,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:235,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:232,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:247,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:250,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:252,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 2
    argNames:
    - cert
    - filename
    argTypes:
    - openvpn_x509_cert_t*
    - char*
    constantsTouched: []
    func_position:
      end: 254
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 254
    functionName: backend_x509_write_pem
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - crypto_pem_encode
    - msg
    - gc_new
    - gc_free
    - alloc_buf_gc
    - buffer_write_file
    linkageType: ''
    returnType: result_t
    signature: 'result_t backend_x509_write_pem(openvpn_x509_cert_t *cert, const char
      *filename) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_mpi_init
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:180,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:181,1
    - Dst: mbedtls_mpi_read_binary
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:181,1
    - Dst: mbedtls_mpi_write_string
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:189,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:184,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:190,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:193,1
    - Dst: mbedtls_mpi_write_string
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:193,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:195,1
    - Dst: mbedtls_mpi_free
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:201,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - mbedtls_x509_crt*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 203
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 203
    functionName: backend_x509_get_serial
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_mpi_init
    - msg
    - mbed_ok
    - gc_malloc
    - mbedtls_mpi_write_string
    - mbedtls_mpi_read_binary
    - mbedtls_mpi_free
    linkageType: ''
    returnType: char*
    signature: 'char *backend_x509_get_serial(mbedtls_x509_crt *cert, struct gc_arena
      *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:135,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:142,1
    - Dst: MBEDTLS_OID_SIZE
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:143,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:160,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:165,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 4
    argNames:
    - cn
    - cn_len
    - x509_username_field
    - cert
    argTypes:
    - char*
    - int
    - char*
    - mbedtls_x509_crt*
    constantsTouched: []
    func_position:
      end: 170
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 170
    functionName: backend_x509_get_username
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - memcmp
    - memcpy
    - MBEDTLS_OID_SIZE
    - ASSERT
    linkageType: ''
    returnType: result_t
    signature: 'result_t backend_x509_get_username(char *cn, int cn_len, char *x509_username_field,
      mbedtls_x509_crt *cert) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:211,1
    - Dst: mbedtls_x509_serial_gets
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:213,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - mbedtls_x509_crt*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 219
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 219
    functionName: backend_x509_get_serial_hex
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_serial_gets
    - gc_malloc
    linkageType: ''
    returnType: char*
    signature: 'char *backend_x509_get_serial_hex(mbedtls_x509_crt *cert, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:260,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:262,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:261,1
    - Dst: mbedtls_md
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:262,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:263,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c:263,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 3
    argNames:
    - md_info
    - cert
    - gc
    argTypes:
    - mbedtls_md_info_t*
    - mbedtls_x509_crt*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 265
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 265
    functionName: x509_get_fingerprint
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_mbedtls.c
    functionUses: []
    functionsReached:
    - BPTR
    - mbedtls_md
    - ASSERT
    - mbedtls_md_get_size
    - buf_inc_len
    - alloc_buf_gc
    linkageType: ''
    returnType: struct buffer
    signature: 'static struct buffer x509_get_fingerprint(const mbedtls_md_info_t
      *md_info, mbedtls_x509_crt *cert, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_certificate_getCertificateBlob
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:49,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:56,1
    - Dst: calloc
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:56,1
    - Dst: pkcs11h_certificate_getCertificateBlob
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:57,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:52,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:60,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:64,1
    - Dst: mbedtls_x509_crt_parse
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:64,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:66,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:72,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 2
    argNames:
    - pkcs11_cert
    - cert
    argTypes:
    - pkcs11h_certificate_t
    - mbedtls_x509_crt*
    constantsTouched: []
    func_position:
      end: 74
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 74
    functionName: pkcs11_get_x509_cert
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - check_malloc_return
    - mbed_ok
    - free
    - pkcs11h_certificate_getCertificateBlob
    - mbedtls_x509_crt_parse
    - calloc
    linkageType: ''
    returnType: bool
    signature: 'static bool pkcs11_get_x509_cert(pkcs11h_certificate_t pkcs11_cert,
      mbedtls_x509_crt *cert) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:88,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:92,1
    - Dst: tls_ctx_use_external_signing_func
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:99,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:95,1
    - Dst: pkcs11_get_x509_cert
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:93,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:101,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 2
    argNames:
    - certificate
    - ssl_ctx
    argTypes:
    - pkcs11h_certificate_t
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 106
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 106
    functionName: pkcs11_init_tls_session
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_mbedtls.c
    functionUses: []
    functionsReached:
    - tls_ctx_use_external_signing_func
    - msg
    - ASSERT
    - ALLOC_OBJ_CLEAR
    - pkcs11_get_x509_cert
    linkageType: ''
    returnType: int
    signature: 'int pkcs11_init_tls_session(pkcs11h_certificate_t certificate, struct
      tls_root_ctx *const ssl_ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11_get_x509_cert
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:139,1
    - Dst: mbedtls_x509_crt_free
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:153,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:147,1
    - Dst: mbedtls_x509_serial_gets
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:145,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - cert
    - serial
    - serial_len
    argTypes:
    - pkcs11h_certificate_t
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 156
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 156
    functionName: pkcs11_certificate_serial
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_crt_free
    - msg
    - mbedtls_x509_serial_gets
    - pkcs11_get_x509_cert
    linkageType: ''
    returnType: int
    signature: 'int pkcs11_certificate_serial(pkcs11h_certificate_t cert, char *serial,
      size_t serial_len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11_get_x509_cert
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:114,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:122,1
    - Dst: mbedtls_x509_crt_free
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:127,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:116,1
    - Dst: x509_get_subject
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:120,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - pkcs11h_certificate_t
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 130
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 130
    functionName: pkcs11_certificate_dn
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - mbedtls_x509_crt_free
    - x509_get_subject
    - pkcs11_get_x509_cert
    linkageType: ''
    returnType: char*
    signature: 'char *pkcs11_certificate_dn(pkcs11h_certificate_t cert, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_certificate_signAny
      Src: /src/openvpn/src/openvpn/pkcs11_mbedtls.c:80,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 5
    argNames:
    - pkcs11_cert
    - src
    - src_len
    - dst
    - dst_len
    argTypes:
    - void*
    - void*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 82
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 82
    functionName: pkcs11_sign
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_mbedtls.c
    functionUses: []
    functionsReached:
    - pkcs11h_certificate_signAny
    linkageType: ''
    returnType: bool
    signature: 'static bool pkcs11_sign(void *pkcs11_cert, const void *src, size_t
      src_len, void *dst, size_t dst_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constrain_int
      Src: /src/openvpn/src/openvpn/shaper.h:75,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - s
    - bytes_per_second
    argTypes:
    - struct shaper*
    - int
    constantsTouched: []
    func_position:
      end: 82
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 82
    functionName: shaper_reset
    functionSourceFile: /src/openvpn/src/openvpn/shaper.h
    functionUses: []
    functionsReached:
    - constrain_int
    linkageType: ''
    returnType: void
    signature: 'static inline void shaper_reset(struct shaper *s, int bytes_per_second) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/shaper.h:161,1
    - Dst: shaper_reset
      Src: /src/openvpn/src/openvpn/shaper.h:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - s
    - pct
    argTypes:
    - struct shaper*
    - int
    constantsTouched: []
    func_position:
      end: 164
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 164
    functionName: shaper_change_pct
    functionSourceFile: /src/openvpn/src/openvpn/shaper.h
    functionUses: []
    functionsReached:
    - shaper_reset
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool shaper_change_pct(struct shaper *s, int pct) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/shaper.h:128,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/shaper.h:131,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/shaper.h:137,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/shaper.h:131,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/shaper.h:128,1
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/shaper.h:137,1
    - Dst: tv_add
      Src: /src/openvpn/src/openvpn/shaper.h:138,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/shaper.h:141,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - s
    - nbytes
    argTypes:
    - struct shaper*
    - int
    constantsTouched: []
    func_position:
      end: 148
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 148
    functionName: shaper_wrote_bytes
    functionSourceFile: /src/openvpn/src/openvpn/shaper.h
    functionUses: []
    functionsReached:
    - openvpn_gettimeofday
    - dmsg
    - max_int
    - min_int
    - tv_add
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static inline void shaper_wrote_bytes(struct shaper *s, int nbytes) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: shaper_reset
      Src: /src/openvpn/src/openvpn/shaper.h:87,1
    - Dst: shaper_reset_wakeup
      Src: /src/openvpn/src/openvpn/shaper.h:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - s
    - bytes_per_second
    argTypes:
    - struct shaper*
    - int
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: shaper_init
    functionSourceFile: /src/openvpn/src/openvpn/shaper.h
    functionUses: []
    functionsReached:
    - shaper_reset
    - shaper_reset_wakeup
    linkageType: ''
    returnType: void
    signature: 'static inline void shaper_init(struct shaper *s, int bytes_per_second) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tv_defined
      Src: /src/openvpn/src/openvpn/shaper.h:101,1
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/shaper.h:103,1
    - Dst: tv_subtract
      Src: /src/openvpn/src/openvpn/shaper.h:104,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/shaper.h:103,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/shaper.h:106,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct shaper*
    constantsTouched: []
    func_position:
      end: 111
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 111
    functionName: shaper_delay
    functionSourceFile: /src/openvpn/src/openvpn/shaper.h
    functionUses: []
    functionsReached:
    - openvpn_gettimeofday
    - dmsg
    - tv_defined
    - ASSERT
    - tv_subtract
    linkageType: ''
    returnType: int
    signature: 'static inline int shaper_delay(struct shaper *s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/run_command.h:91,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/run_command.h:93,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 4
    argNames:
    - a
    - es
    - flags
    - hook
    argTypes:
    - struct argv*
    - struct env_set*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 94
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 94
    functionName: openvpn_run_script
    functionSourceFile: /src/openvpn/src/openvpn/run_command.h
    functionUses: []
    functionsReached:
    - snprintf
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'static inline int openvpn_run_script(const struct argv *a, const struct
      env_set *es, const unsigned int flags, const char *hook) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/fragment.c:45,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/fragment.c:45,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - list
    - frame
    argTypes:
    - struct fragment_list*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 47
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 47
    functionName: fragment_list_buf_init
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - BUF_SIZE
    - alloc_buf
    linkageType: ''
    returnType: void
    signature: 'static void fragment_list_buf_init(struct fragment_list *list, const
      struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fragment_list_buf_free
      Src: /src/openvpn/src/openvpn/fragment.c:114,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/fragment.c:115,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/fragment.c:117,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/fragment.c:116,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - f
    argTypes:
    - struct fragment_master*
    constantsTouched: []
    func_position:
      end: 118
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 118
    functionName: fragment_free
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - fragment_list_buf_free
    - free_buf
    - free
    linkageType: ''
    returnType: void
    signature: 'void fragment_free(struct fragment_master *f) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abs
      Src: /src/openvpn/src/openvpn/fragment.c:67,1
    - Dst: modulo_subtract
      Src: /src/openvpn/src/openvpn/fragment.c:67,1
    - Dst: modulo_add
      Src: /src/openvpn/src/openvpn/fragment.c:84,1
    - Dst: modulo_add
      Src: /src/openvpn/src/openvpn/fragment.c:81,1
    - Dst: modulo_add
      Src: /src/openvpn/src/openvpn/fragment.c:80,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 2
    argNames:
    - list
    - seq_id
    argTypes:
    - struct fragment_list*
    - int
    constantsTouched: []
    func_position:
      end: 85
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 85
    functionName: fragment_list_get_buf
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - abs
    - modulo_add
    - modulo_subtract
    linkageType: ''
    returnType: struct fragment*
    signature: 'static struct fragment *fragment_list_get_buf(struct fragment_list
      *list, int seq_id) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/fragment.c:145,1
    - Dst: FRAG_ERR
      Src: /src/openvpn/src/openvpn/fragment.c:147,1
    - Dst: ntoh_fragment_header_type
      Src: /src/openvpn/src/openvpn/fragment.c:149,1
    - Dst: FRAG_ERR
      Src: /src/openvpn/src/openvpn/fragment.c:175,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/fragment.c:167,1
    - Dst: fragment_list_get_buf
      Src: /src/openvpn/src/openvpn/fragment.c:187,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/fragment.c:189,1
    - Dst: FRAG_ERR
      Src: /src/openvpn/src/openvpn/fragment.c:202,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:211,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/fragment.c:211,1
    - Dst: FRAG_ERR
      Src: /src/openvpn/src/openvpn/fragment.c:239,1
    - Dst: FRAG_ERR
      Src: /src/openvpn/src/openvpn/fragment.c:217,1
    - Dst: buf_copy_range
      Src: /src/openvpn/src/openvpn/fragment.c:215,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/fragment.c:252,1
    - Dst: FRAG_ERR
      Src: /src/openvpn/src/openvpn/fragment.c:243,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 73
    argCount: 3
    argNames:
    - f
    - buf
    - frame
    argTypes:
    - struct fragment_master*
    - struct buffer*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 256
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 256
    functionName: fragment_incoming
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - ntoh_fragment_header_type
    - buf_init
    - dmsg
    - msg
    - buf_read
    - FRAG_ERR
    - fragment_list_get_buf
    - ASSERT
    - buf_copy_range
    linkageType: ''
    returnType: void
    signature: 'void fragment_incoming(struct fragment_master *f, struct buffer *buf,
      const struct frame *frame) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/fragment.c:329,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/fragment.c:342,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:342,1
    - Dst: FRAG_ERR
      Src: /src/openvpn/src/openvpn/fragment.c:340,1
    - Dst: optimal_fragment_size
      Src: /src/openvpn/src/openvpn/fragment.c:337,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:343,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/fragment.c:343,1
    - Dst: modulo_add
      Src: /src/openvpn/src/openvpn/fragment.c:344,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:347,1
    - Dst: fragment_ready_to_send
      Src: /src/openvpn/src/openvpn/fragment.c:347,1
    - Dst: fragment_prepend_flags
      Src: /src/openvpn/src/openvpn/fragment.c:354,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/fragment.c:366,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 3
    argNames:
    - f
    - buf
    - frame
    argTypes:
    - struct fragment_master*
    - struct buffer*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 371
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 371
    functionName: fragment_outgoing
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - buf_copy
    - fragment_prepend_flags
    - buf_init
    - msg
    - FRAG_ERR
    - optimal_fragment_size
    - fragment_ready_to_send
    - modulo_add
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void fragment_outgoing(struct fragment_master *f, struct buffer *buf,
      const struct frame *frame) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fragment_outgoing_defined
      Src: /src/openvpn/src/openvpn/fragment.c:378,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/fragment.c:391,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:391,1
    - Dst: buf_copy_n
      Src: /src/openvpn/src/openvpn/fragment.c:392,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:392,1
    - Dst: fragment_prepend_flags
      Src: /src/openvpn/src/openvpn/fragment.c:395,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:401,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 3
    argNames:
    - f
    - buf
    - frame
    argTypes:
    - struct fragment_master*
    - struct buffer*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 409
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 409
    functionName: fragment_ready_to_send
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - buf_copy_n
    - fragment_prepend_flags
    - buf_init
    - fragment_outgoing_defined
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool fragment_ready_to_send(struct fragment_master *f, struct buffer
      *buf, const struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fragment_ttl_reap
      Src: /src/openvpn/src/openvpn/fragment.c:431,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - f
    - frame
    argTypes:
    - struct fragment_master*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 432
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 432
    functionName: fragment_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - fragment_ttl_reap
    linkageType: ''
    returnType: void
    signature: 'void fragment_wakeup(struct fragment_master *f, struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/fragment.c:94,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/fragment.c:104,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/fragment.c:106,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 1
    argNames:
    - frame
    argTypes:
    - struct frame*
    constantsTouched: []
    func_position:
      end: 109
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 109
    functionName: fragment_init
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - get_random
    - event_timeout_init
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct fragment_master*
    signature: 'struct fragment_master *fragment_init(struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/fragment.c:55,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - list
    argTypes:
    - struct fragment_list*
    constantsTouched: []
    func_position:
      end: 57
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 57
    functionName: fragment_list_buf_free
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - free_buf
    linkageType: ''
    returnType: void
    signature: 'static void fragment_list_buf_free(struct fragment_list *list) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fragment_list_buf_init
      Src: /src/openvpn/src/openvpn/fragment.c:123,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/fragment.c:124,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/fragment.c:125,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/fragment.c:124,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/fragment.c:125,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - f
    - frame
    argTypes:
    - struct fragment_master*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 126
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 126
    functionName: fragment_frame_init
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - BUF_SIZE
    - fragment_list_buf_init
    - alloc_buf
    linkageType: ''
    returnType: void
    signature: 'void fragment_frame_init(struct fragment_master *f, const struct frame
      *frame) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/fragment.c:420,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 1
    argNames:
    - f
    argTypes:
    - struct fragment_master*
    constantsTouched: []
    func_position:
      end: 424
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 424
    functionName: fragment_ttl_reap
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void fragment_ttl_reap(struct fragment_master *f) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/fragment.c:276,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fragment.c:292,1
    - Dst: hton_fragment_header_type
      Src: /src/openvpn/src/openvpn/fragment.c:291,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/fragment.c:292,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/fragment.c:285,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 5
    argNames:
    - buf
    - type
    - seq_id
    - frag_id
    - frag_size
    argTypes:
    - struct buffer*
    - int
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 293
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 293
    functionName: fragment_prepend_flags
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - buf_write_prepend
    - ASSERT
    - hton_fragment_header_type
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void fragment_prepend_flags(struct buffer *buf, int type, int
      seq_id, int frag_id, int frag_size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/fragment.c:309,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - len
    - max_frag_size
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 316
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 316
    functionName: optimal_fragment_size
    functionSourceFile: /src/openvpn/src/openvpn/fragment.c
    functionUses: []
    functionsReached:
    - min_int
    linkageType: ''
    returnType: int
    signature: 'static inline int optimal_fragment_size(int len, int max_frag_size) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/lladdr.c:29,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/lladdr.c:34,1
    - Dst: net_addr_ll_set
      Src: /src/openvpn/src/openvpn/lladdr.c:30,1
    - Dst: MAC_SCAN_ARG
      Src: /src/openvpn/src/openvpn/lladdr.c:29,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/lladdr.c:32,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/lladdr.c:39,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/lladdr.c:44,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/lladdr.c:49,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/lladdr.c:54,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/lladdr.c:57,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/lladdr.c:59,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/lladdr.c:58,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/lladdr.c:64,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 22
    argCount: 4
    argNames:
    - ctx
    - ifname
    - lladdr
    - es
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - char*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 68
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 68
    functionName: set_lladdr
    functionSourceFile: /src/openvpn/src/openvpn/lladdr.c
    functionUses: []
    functionsReached:
    - sscanf
    - argv_msg
    - argv_printf
    - net_addr_ll_set
    - msg
    - argv_free
    - argv_new
    - MAC_SCAN_ARG
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int set_lladdr(openvpn_net_ctx_t *ctx, const char *ifname, const char
      *lladdr, const struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:186,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:187,1
    - Dst: env_set_del_nolock
      Src: /src/openvpn/src/openvpn/env_set.c:188,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - es
    - str
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 190
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 190
    functionName: env_set_del
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - env_set_del_nolock
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool env_set_del(struct env_set *es, const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:195,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:196,1
    - Dst: env_set_add_nolock
      Src: /src/openvpn/src/openvpn/env_set.c:197,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - es
    - str
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 198
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 198
    functionName: env_set_add
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - env_set_add_nolock
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void env_set_add(struct env_set *es, const char *str) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:98,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/env_set.c:115,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/env_set.c:115,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:99,1
    - Dst: env_string_equal
      Src: /src/openvpn/src/openvpn/env_set.c:103,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/env_set.c:116,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/env_set.c:117,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 20
    argCount: 3
    argNames:
    - str
    - do_free
    - list
    argTypes:
    - char*
    - bool
    - struct env_item**
    constantsTouched: []
    func_position:
      end: 124
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 124
    functionName: remove_env_item
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - secure_memzero
    - ASSERT
    - env_string_equal
    - free
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'static bool remove_env_item(const char *str, const bool do_free, struct
      env_item **list) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/env_set.c:240,1
    - Dst: fputs
      Src: /src/openvpn/src/openvpn/env_set.c:252,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/env_set.c:258,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/env_set.c:243,1
    - Dst: fputc
      Src: /src/openvpn/src/openvpn/env_set.c:253,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 11
    argCount: 2
    argNames:
    - path
    - es
    argTypes:
    - char*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 259
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 259
    functionName: env_set_write_file
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - fclose
    - msg
    - fputc
    - platform_fopen
    - fputs
    linkageType: ''
    returnType: void
    signature: 'void env_set_write_file(const char *path, const struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/env_set.c:286,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/env_set.c:287,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 3
    argNames:
    - es
    - name
    - value
    argTypes:
    - struct env_set*
    - char*
    - counter_type
    constantsTouched: []
    func_position:
      end: 288
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 288
    functionName: setenv_counter
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - setenv_str
    - snprintf
    linkageType: ''
    returnType: void
    signature: 'void setenv_counter(struct env_set *es, const char *name, counter_type
      value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/env_set.c:302,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/env_set.c:303,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 3
    argNames:
    - es
    - name
    - value
    argTypes:
    - struct env_set*
    - char*
    - long long
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: setenv_long_long
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - setenv_str
    - snprintf
    linkageType: ''
    returnType: void
    signature: 'void setenv_long_long(struct env_set *es, const char *name, long long
      value) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/env_set.c:406,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/env_set.c:415,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/env_set.c:409,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/env_set.c:406,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/env_set.c:413,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 3
    argNames:
    - name
    - i
    - gc
    argTypes:
    - char*
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 416
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 416
    functionName: setenv_format_indexed_name
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - buf_printf
    - strlen
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *setenv_format_indexed_name(const char *name, const
      int i, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:131,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/env_set.c:134,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:132,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/env_set.c:135,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 4
    argNames:
    - str
    - do_alloc
    - list
    - gc
    argTypes:
    - char*
    - bool
    - struct env_item**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 138
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 138
    functionName: add_env_item
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - ASSERT
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static void add_env_item(char *str, const bool do_alloc, struct env_item
      **list, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:266,1
    - Dst: env_set_add_nolock
      Src: /src/openvpn/src/openvpn/env_set.c:273,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 2
    argNames:
    - es
    - src
    argTypes:
    - struct env_set*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 277
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 277
    functionName: env_set_inherit
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - env_set_add_nolock
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void env_set_inherit(struct env_set *es, const struct env_set *src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/env_set.c:294,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/env_set.c:295,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 3
    argNames:
    - es
    - name
    - value
    argTypes:
    - struct env_set*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 296
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 296
    functionName: setenv_int
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - setenv_str
    - snprintf
    linkageType: ''
    returnType: void
    signature: 'void setenv_int(struct env_set *es, const char *name, int value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str_ex
      Src: /src/openvpn/src/openvpn/env_set.c:309,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 3
    argNames:
    - es
    - name
    - value
    argTypes:
    - struct env_set*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: setenv_str
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - setenv_str_ex
    linkageType: ''
    returnType: void
    signature: 'void setenv_str(struct env_set *es, const char *name, const char *value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/env_set.c:421,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/env_set.c:423,1
    - Dst: setenv_format_indexed_name
      Src: /src/openvpn/src/openvpn/env_set.c:422,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/env_set.c:424,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 4
    argNames:
    - es
    - name
    - value
    - i
    argTypes:
    - struct env_set*
    - char*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 425
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 425
    functionName: setenv_int_i
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - setenv_format_indexed_name
    - gc_free
    - setenv_int
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void setenv_int_i(struct env_set *es, const char *name, const int
      value, const int i) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:354,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/env_set.c:355,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - es
    - name
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 356
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 356
    functionName: setenv_del
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - setenv_str
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void setenv_del(struct env_set *es, const char *name) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/env_set.c:369,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/env_set.c:373,1
    - Dst: string_mod_const
      Src: /src/openvpn/src/openvpn/env_set.c:379,1
    - Dst: string_mod_const
      Src: /src/openvpn/src/openvpn/env_set.c:375,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:373,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:382,1
    - Dst: construct_name_value
      Src: /src/openvpn/src/openvpn/env_set.c:386,1
    - Dst: env_set_add
      Src: /src/openvpn/src/openvpn/env_set.c:387,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/env_set.c:389,1
    - Dst: env_set_del
      Src: /src/openvpn/src/openvpn/env_set.c:394,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/env_set.c:397,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 19
    argCount: 9
    argNames:
    - es
    - name
    - value
    - name_include
    - name_exclude
    - name_replace
    - value_include
    - value_exclude
    - value_replace
    argTypes:
    - struct env_set*
    - char*
    - char*
    - unsigned int
    - unsigned int
    - char
    - unsigned int
    - unsigned int
    - char
    constantsTouched: []
    func_position:
      end: 398
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 398
    functionName: setenv_str_ex
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - construct_name_value
    - string_mod_const
    - msg
    - gc_new
    - env_set_add
    - gc_free
    - ASSERT
    - strlen
    - env_set_del
    linkageType: ''
    returnType: void
    signature: 'void setenv_str_ex(struct env_set *es, const char *name, const char
      *value, const unsigned int name_include, const unsigned int name_exclude, const
      char name_replace, const unsigned int value_include, const unsigned int value_exclude,
      const char value_replace) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/env_set.c:463,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:473,1
    - Dst: env_allowed
      Src: /src/openvpn/src/openvpn/env_set.c:471,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 23
    argCount: 3
    argNames:
    - es
    - check_allowed
    - gc
    argTypes:
    - struct env_set*
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 481
      start: 444
    functionDepth: 0
    functionLinenumber: 444
    functionLinenumberEnd: 481
    functionName: make_env_array
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - env_allowed
    - ALLOC_ARRAY_CLEAR_GC
    - ASSERT
    linkageType: ''
    returnType: char**
    signature: 'const char **make_env_array(const struct env_set *es, const bool check_allowed,
      struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:52,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/env_set.c:58,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/env_set.c:57,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/env_set.c:57,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/env_set.c:57,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/env_set.c:59,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 3
    argNames:
    - name
    - value
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 60
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 60
    functionName: construct_name_value
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - ASSERT
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static char *construct_name_value(const char *name, const char *value,
      struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: remove_env_item
      Src: /src/openvpn/src/openvpn/env_set.c:145,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - es
    - str
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 146
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 146
    functionName: env_set_del_nolock
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - remove_env_item
    linkageType: ''
    returnType: bool
    signature: 'static bool env_set_del_nolock(struct env_set *es, const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/env_set.c:159,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 163
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 163
    functionName: env_set_create
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct env_set*
    signature: 'struct env_set *env_set_create(struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: env_string_equal
      Src: /src/openvpn/src/openvpn/env_set.c:204,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 6
    argCount: 2
    argNames:
    - es
    - name
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 209
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 209
    functionName: env_set_get
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - env_string_equal
    linkageType: ''
    returnType: char*
    signature: 'const char *env_set_get(const struct env_set *es, const char *name) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/env_set.c:317,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/env_set.c:320,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/env_set.c:320,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/env_set.c:324,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/env_set.c:318,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 3
    argNames:
    - es
    - name
    - value
    argTypes:
    - struct env_set*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 326
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 326
    functionName: setenv_str_safe
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - msg
    - setenv_str
    - buf_set_write
    linkageType: ''
    returnType: void
    signature: 'void setenv_str_safe(struct env_set *es, const char *name, const char
      *value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/env_set.c:430,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/env_set.c:433,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/env_set.c:432,1
    - Dst: setenv_format_indexed_name
      Src: /src/openvpn/src/openvpn/env_set.c:431,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 4
    argNames:
    - es
    - name
    - value
    - i
    argTypes:
    - struct env_set*
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 434
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 434
    functionName: setenv_str_i
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - setenv_format_indexed_name
    - setenv_str
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void setenv_str_i(struct env_set *es, const char *name, const char
      *value, const int i) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:66,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:67,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 18
    argCount: 2
    argNames:
    - s1
    - s2
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 91
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 91
    functionName: env_string_equal
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static bool env_string_equal(const char *s1, const char *s2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: remove_env_item
      Src: /src/openvpn/src/openvpn/env_set.c:151,1
    - Dst: add_env_item
      Src: /src/openvpn/src/openvpn/env_set.c:152,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - es
    - str
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 153
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 153
    functionName: env_set_add_nolock
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - remove_env_item
    - add_env_item
    linkageType: ''
    returnType: void
    signature: 'static void env_set_add_nolock(struct env_set *es, const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/env_set.c:174,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/env_set.c:175,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/env_set.c:178,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 180
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 180
    functionName: env_set_destroy
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void env_set_destroy(struct env_set *es) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/env_set.c:214,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/env_set.c:228,1
    - Dst: env_safe_to_print
      Src: /src/openvpn/src/openvpn/env_set.c:226,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - msglevel
    - es
    argTypes:
    - int
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 235
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 235
    functionName: env_set_print
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - msg
    - env_safe_to_print
    - check_debug_level
    linkageType: ''
    returnType: void
    signature: 'void env_set_print(int msglevel, const struct env_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/env_set.c:332,1
    - Dst: env_set_get
      Src: /src/openvpn/src/openvpn/env_set.c:335,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/env_set.c:337,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/env_set.c:333,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/env_set.c:334,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/env_set.c:337,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/env_set.c:342,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/env_set.c:346,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/env_set.c:348,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 18
    argCount: 3
    argNames:
    - es
    - name
    - value
    argTypes:
    - struct env_set*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 349
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 349
    functionName: setenv_str_incr
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - gc_malloc
    - setenv_str
    - strcpy
    - ASSERT
    - free
    - strlen
    - env_set_get
    linkageType: ''
    returnType: void
    signature: 'void setenv_str_incr(struct env_set *es, const char *name, const char
      *value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/env_set.c:439,1
    - Dst: is_password_env_var
      Src: /src/openvpn/src/openvpn/env_set.c:439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 440
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 440
    functionName: env_allowed
    functionSourceFile: /src/openvpn/src/openvpn/env_set.c
    functionUses: []
    functionsReached:
    - script_security
    - is_password_env_var
    linkageType: ''
    returnType: bool
    signature: 'bool env_allowed(const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - info
    argTypes:
    - struct compress_options*
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: comp_non_stub_enabled
    functionSourceFile: /src/openvpn/src/openvpn/comp.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool comp_non_stub_enabled(const struct compress_options
      *info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - info
    argTypes:
    - struct compress_options*
    constantsTouched: []
    func_position:
      end: 216
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 216
    functionName: comp_enabled
    functionSourceFile: /src/openvpn/src/openvpn/comp.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool comp_enabled(const struct compress_options *info) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - x
    - y
    argTypes:
    - size_t
    - size_t
    constantsTouched: []
    func_position:
      end: 85
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 85
    functionName: min_size
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t min_size(size_t x, size_t y) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - x
    - y
    argTypes:
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 59
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 59
    functionName: max_uint
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int max_uint(unsigned int x, unsigned int y) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - x
    - y
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 111
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 111
    functionName: min_int
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int min_int(int x, int y) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/integer.h:163,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 3
    argNames:
    - x
    - y
    - mod
    argTypes:
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 173
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 173
    functionName: modulo_add
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static inline int modulo_add(int x, int y, int mod) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/integer.h:187,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - u
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 191
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 191
    functionName: adjust_power_of_2
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t adjust_power_of_2(size_t u) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - num
    - multiple
    argTypes:
    - size_t
    - size_t
    constantsTouched: []
    func_position:
      end: 214
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 214
    functionName: round_down_size
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t round_down_size(size_t num, size_t multiple) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/integer.h:41,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 43
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 43
    functionName: clamp_size_to_int
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static inline int clamp_size_to_int(size_t size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - x
    - y
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 98
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 98
    functionName: max_int
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int max_int(int x, int y) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - x
    - y
    argTypes:
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 72
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 72
    functionName: min_uint
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int min_uint(unsigned int x, unsigned int y) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 3
    argNames:
    - x
    - min
    - max
    argTypes:
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 132
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 132
    functionName: constrain_int
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int constrain_int(int x, int min, int max) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/integer.h:198,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 4
    argNames:
    - index
    - size
    - file
    - line
    argTypes:
    - int
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 205
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 205
    functionName: index_verify
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: int
    signature: 'static inline int index_verify(int index, int size, const char *file,
      int line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/integer.h:149,1
    - Dst: abs
      Src: /src/openvpn/src/openvpn/integer.h:150,1
    - Dst: abs
      Src: /src/openvpn/src/openvpn/integer.h:150,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - x
    - y
    - mod
    argTypes:
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 151
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 151
    functionName: modulo_subtract
    functionSourceFile: /src/openvpn/src/openvpn/integer.h
    functionUses: []
    functionsReached:
    - abs
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static inline int modulo_subtract(int x, int y, int mod) '
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 2
    argCount: 1
    argNames:
    - op
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 293
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 293
    functionName: packet_opcode_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *packet_opcode_name(int op) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 2
    argNames:
    - session
    - key_id
    argTypes:
    - struct tls_session*
    - int
    constantsTouched: []
    func_position:
      end: 319
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 319
    functionName: tls_session_get_tls_wrap
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct tls_wrap_ctx*
    signature: 'static inline struct tls_wrap_ctx *tls_session_get_tls_wrap(struct
      tls_session *session, int key_id) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: remap_signal
      Src: /src/openvpn/src/openvpn/openvpn.c:43,1
    - Dst: process_signal
      Src: /src/openvpn/src/openvpn/openvpn.c:44,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 45
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 45
    functionName: process_signal_p2p
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.c
    functionUses: []
    functionsReached:
    - remap_signal
    - process_signal
    linkageType: ''
    returnType: bool
    signature: 'static bool process_signal_p2p(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: crypto_unload_provider
      Src: /src/openvpn/src/openvpn/openvpn.c:132,1
    - Dst: net_ctx_free
      Src: /src/openvpn/src/openvpn/openvpn.c:135,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 136
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 136
    functionName: uninit_early
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.c
    functionUses: []
    functionsReached:
    - net_ctx_free
    - crypto_unload_provider
    linkageType: ''
    returnType: void
    signature: 'static void uninit_early(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_main
      Src: /src/openvpn/src/openvpn/openvpn.c:394,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 395
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 395
    functionName: main
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.c
    functionUses: []
    functionsReached:
    - openvpn_main
    linkageType: ''
    returnType: int
    signature: 'int main(int argc, char *argv[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_ctx_init
      Src: /src/openvpn/src/openvpn/openvpn.c:112,1
    - Dst: init_verb_mute
      Src: /src/openvpn/src/openvpn/openvpn.c:115,1
    - Dst: crypto_load_provider
      Src: /src/openvpn/src/openvpn/openvpn.c:123,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 125
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 125
    functionName: init_early
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.c
    functionUses: []
    functionsReached:
    - net_ctx_init
    - crypto_load_provider
    - init_verb_mute
    linkageType: ''
    returnType: void
    signature: 'void init_early(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/src/openvpn/openvpn.c:368,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/openvpn.c:377,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/openvpn.c:375,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/openvpn.c:376,1
    - Dst: openvpn_main
      Src: /src/openvpn/src/openvpn/openvpn.c:380,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/openvpn.c:384,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/openvpn.c:386,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 2
    argNames:
    - argc
    - wargv
    argTypes:
    - int
    - wchar_t*
    constantsTouched: []
    func_position:
      end: 389
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 389
    functionName: wmain
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.c
    functionUses: []
    functionsReached:
    - openvpn_main
    - WideCharToMultiByte
    - malloc
    - free
    - calloc
    linkageType: ''
    returnType: int
    signature: 'int wmain(int argc, wchar_t *wargv[]) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: parse_argv
      Src: /src/openvpn/src/openvpn/openvpn.c:216,1
    - Dst: open_plugins
      Src: /src/openvpn/src/openvpn/openvpn.c:222,1
    - Dst: print_openssl_info
      Src: /src/openvpn/src/openvpn/openvpn.c:233,1
    - Dst: pre_setup
      Src: /src/openvpn/src/openvpn/openvpn.c:266,1
    - Dst: write_pid_file
      Src: /src/openvpn/src/openvpn/openvpn.c:285,1
    - Dst: init_query_passwords
      Src: /src/openvpn/src/openvpn/openvpn.c:297,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/openvpn.c:336,1
    - Dst: uninit_early
      Src: /src/openvpn/src/openvpn/openvpn.c:341,1
    - Dst: uninit_static
      Src: /src/openvpn/src/openvpn/openvpn.c:354,1
    - Dst: possibly_become_daemon
      Src: /src/openvpn/src/openvpn/openvpn.c:284,1
    - Dst: gc_reset
      Src: /src/openvpn/src/openvpn/openvpn.c:340,1
    - Dst: SetConsoleOutputCP
      Src: /src/openvpn/src/openvpn/openvpn.c:171,1
    - Dst: pre_init_signal_catch
      Src: /src/openvpn/src/openvpn/openvpn.c:190,1
    - Dst: context_clear_all_except_first_time
      Src: /src/openvpn/src/openvpn/openvpn.c:193,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/openvpn.c:199,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/openvpn.c:202,1
    - Dst: set_win_sys_path_via_env
      Src: /src/openvpn/src/openvpn/openvpn.c:204,1
    - Dst: init_options_dev
      Src: /src/openvpn/src/openvpn/openvpn.c:230,1
    - Dst: do_genkey
      Src: /src/openvpn/src/openvpn/openvpn.c:239,1
    - Dst: do_persist_tuntap
      Src: /src/openvpn/src/openvpn/openvpn.c:245,1
    - Dst: show_windows_version
      Src: /src/openvpn/src/openvpn/openvpn.c:259,1
    - Dst: tunnel_point_to_point
      Src: /src/openvpn/src/openvpn/openvpn.c:313,1
    - Dst: tunnel_server
      Src: /src/openvpn/src/openvpn/openvpn.c:317,1
    - Dst: signal_restart_status
      Src: /src/openvpn/src/openvpn/openvpn.c:334,1
    - Dst: env_set_destroy
      Src: /src/openvpn/src/openvpn/openvpn.c:338,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/openvpn.c:166,1
    - Dst: init_static
      Src: /src/openvpn/src/openvpn/openvpn.c:181,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/openvpn.c:174,1
    - Dst: init_management
      Src: /src/openvpn/src/openvpn/openvpn.c:209,1
    - Dst: init_options
      Src: /src/openvpn/src/openvpn/openvpn.c:213,1
    - Dst: init_early
      Src: /src/openvpn/src/openvpn/openvpn.c:227,1
    - Dst: init_verb_mute
      Src: /src/openvpn/src/openvpn/openvpn.c:220,1
    - Dst: init_plugins
      Src: /src/openvpn/src/openvpn/openvpn.c:221,1
    - Dst: show_settings
      Src: /src/openvpn/src/openvpn/openvpn.c:254,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/openvpn.c:257,1
    - Dst: show_library_versions
      Src: /src/openvpn/src/openvpn/openvpn.c:261,1
    - Dst: open_management
      Src: /src/openvpn/src/openvpn/openvpn.c:290,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/openvpn.c:343,1
    - Dst: context_gc_free
      Src: /src/openvpn/src/openvpn/openvpn.c:346,1
    - Dst: context_init_1
      Src: /src/openvpn/src/openvpn/openvpn.c:305,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/openvpn.c:328,1
    - Dst: options_postprocess
      Src: /src/openvpn/src/openvpn/openvpn.c:251,1
    - Dst: show_dco_version
      Src: /src/openvpn/src/openvpn/openvpn.c:263,1
    - Dst: do_test_crypto
      Src: /src/openvpn/src/openvpn/openvpn.c:269,1
    - Dst: init_query_passwords
      Src: /src/openvpn/src/openvpn/openvpn.c:278,1
    - Dst: print_signal
      Src: /src/openvpn/src/openvpn/openvpn.c:330,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/openvpn.c:339,1
    - Dst: setenv_settings
      Src: /src/openvpn/src/openvpn/openvpn.c:302,1
    - Dst: close_management
      Src: /src/openvpn/src/openvpn/openvpn.c:350,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/openvpn.c:356,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/openvpn.c:321,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 76
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 358
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 358
    functionName: openvpn_main
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.c
    functionUses: []
    functionsReached:
    - context_clear_all_except_first_time
    - IS_SIG
    - context_gc_free
    - set_win_sys_path_via_env
    - msg
    - setenv_settings
    - init_management
    - gc_init
    - possibly_become_daemon
    - pre_init_signal_catch
    - do_persist_tuntap
    - openvpn_exit
    - init_plugins
    - do_genkey
    - print_openssl_info
    - uninit_options
    - init_options_dev
    - pre_setup
    - env_set_destroy
    - context_init_1
    - tunnel_server
    - init_options
    - env_set_create
    - show_settings
    - show_windows_version
    - signal_reset
    - open_plugins
    - close_management
    - print_signal
    - tunnel_point_to_point
    - CLEAR
    - fprintf
    - signal_restart_status
    - SetConsoleOutputCP
    - show_dco_version
    - init_query_passwords
    - do_test_crypto
    - uninit_static
    - gc_reset
    - init_verb_mute
    - init_early
    - write_pid_file
    - show_library_versions
    - parse_argv
    - ASSERT
    - options_postprocess
    - open_management
    - init_static
    - uninit_early
    linkageType: ''
    returnType: int
    signature: 'static int openvpn_main(int argc, char *argv[]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: context_clear_2
      Src: /src/openvpn/src/openvpn/openvpn.c:59,1
    - Dst: init_instance_handle_signals
      Src: /src/openvpn/src/openvpn/openvpn.c:66,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/openvpn.c:75,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/openvpn.c:67,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/openvpn.c:65,1
    - Dst: pre_select
      Src: /src/openvpn/src/openvpn/openvpn.c:78,1
    - Dst: P2P_CHECK_SIG
      Src: /src/openvpn/src/openvpn/openvpn.c:79,1
    - Dst: io_wait
      Src: /src/openvpn/src/openvpn/openvpn.c:82,1
    - Dst: p2p_iow_flags
      Src: /src/openvpn/src/openvpn/openvpn.c:82,1
    - Dst: P2P_CHECK_SIG
      Src: /src/openvpn/src/openvpn/openvpn.c:83,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/openvpn.c:88,1
    - Dst: close_instance
      Src: /src/openvpn/src/openvpn/openvpn.c:104,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/openvpn.c:96,1
    - Dst: process_io
      Src: /src/openvpn/src/openvpn/openvpn.c:93,1
    - Dst: uninit_management_callback
      Src: /src/openvpn/src/openvpn/openvpn.c:101,1
    - Dst: P2P_CHECK_SIG
      Src: /src/openvpn/src/openvpn/openvpn.c:94,1
    - Dst: persist_client_stats
      Src: /src/openvpn/src/openvpn/openvpn.c:99,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 105
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 105
    functionName: tunnel_point_to_point
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.c
    functionUses: []
    functionsReached:
    - io_wait
    - IS_SIG
    - uninit_management_callback
    - init_instance_handle_signals
    - perf_pop
    - close_instance
    - context_clear_2
    - strcmp
    - pre_select
    - p2p_iow_flags
    - persist_client_stats
    - process_io
    - P2P_CHECK_SIG
    - perf_push
    linkageType: ''
    returnType: void
    signature: 'static void tunnel_point_to_point(struct context *c) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: schedule_rotate_up
      Src: /src/openvpn/src/openvpn/schedule.c:257,1
    - Dst: schedule_detach_parent
      Src: /src/openvpn/src/openvpn/schedule.c:275,1
    - Dst: schedule_rotate_up
      Src: /src/openvpn/src/openvpn/schedule.c:266,1
    - Dst: schedule_rotate_up
      Src: /src/openvpn/src/openvpn/schedule.c:261,1
    - Dst: schedule_rotate_up
      Src: /src/openvpn/src/openvpn/schedule.c:271,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 2
    argNames:
    - s
    - e
    argTypes:
    - struct schedule*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 277
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 277
    functionName: schedule_remove_node
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - schedule_rotate_up
    - schedule_detach_parent
    linkageType: ''
    returnType: void
    signature: 'void schedule_remove_node(struct schedule *s, struct schedule_entry
      *e) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:525,1
    - Dst: schedule_debug_entry
      Src: /src/openvpn/src/openvpn/schedule.c:527,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 3
    argNames:
    - s
    - count
    - least
    argTypes:
    - struct schedule*
    - int*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 528
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 528
    functionName: schedule_debug
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - ASSERT
    - schedule_debug_entry
    linkageType: ''
    returnType: int
    signature: 'int schedule_debug(struct schedule *s, int *count, struct timeval
      *least) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:194,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:231,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 30
    argCount: 2
    argNames:
    - s
    - e
    argTypes:
    - struct schedule*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 238
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 238
    functionName: schedule_rotate_up
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void schedule_rotate_up(struct schedule *s, struct schedule_entry
      *e) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/schedule.c:54,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/schedule.c:64,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/schedule.c:67,1
    - Dst: tv_string_abs
      Src: /src/openvpn/src/openvpn/schedule.c:59,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/schedule.c:57,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - caller
    - e
    argTypes:
    - char*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 68
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 68
    functionName: schedule_entry_debug_info
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - gc_free
    - tv_string_abs
    - gc_new
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void schedule_entry_debug_info(const char *caller, const struct
      schedule_entry *e) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:147,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 2
    argNames:
    - s
    - e
    argTypes:
    - struct schedule*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 159
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 159
    functionName: schedule_detach_parent
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static inline void schedule_detach_parent(struct schedule *s, struct
      schedule_entry *e) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/schedule.c:422,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct schedule*
    constantsTouched: []
    func_position:
      end: 423
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 423
    functionName: schedule_free
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void schedule_free(struct schedule *s) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/schedule.c:562,1
    - Dst: schedule_find_earliest_wakeup
      Src: /src/openvpn/src/openvpn/schedule.c:575,1
    - Dst: schedule_debug
      Src: /src/openvpn/src/openvpn/schedule.c:573,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:579,1
    - Dst: tv_string
      Src: /src/openvpn/src/openvpn/schedule.c:586,1
    - Dst: tv_eq
      Src: /src/openvpn/src/openvpn/schedule.c:588,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:590,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:593,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/schedule.c:596,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/schedule.c:597,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct schedule*
    constantsTouched: []
    func_position:
      end: 598
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 598
    functionName: schedule_verify
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - tv_string
    - tv_eq
    - schedule_find_earliest_wakeup
    - gc_new
    - schedule_debug
    - CLEAR
    - gc_free
    - printf
    linkageType: ''
    returnType: void
    signature: 'void schedule_verify(struct schedule *s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: schedule_remove_node
      Src: /src/openvpn/src/openvpn/schedule.c:429,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - s
    - e
    argTypes:
    - struct schedule*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 430
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 430
    functionName: schedule_remove_entry
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - schedule_remove_node
    linkageType: ''
    returnType: void
    signature: 'void schedule_remove_entry(struct schedule *s, struct schedule_entry
      *e) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/schedule.c:606,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - array
    - size
    argTypes:
    - struct schedule_entry**
    - int
    constantsTouched: []
    func_position:
      end: 614
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 614
    functionName: schedule_randomize_array
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - get_random
    linkageType: ''
    returnType: void
    signature: 'void schedule_randomize_array(struct schedule_entry **array, int size) '
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 2
    argNames:
    - e1
    - e2
    argTypes:
    - struct schedule_entry*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 124
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 124
    functionName: schedule_entry_compare
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int schedule_entry_compare(const struct schedule_entry
      *e1, const struct schedule_entry *e2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: random
      Src: /src/openvpn/src/openvpn/schedule.c:535,1
    - Dst: random
      Src: /src/openvpn/src/openvpn/schedule.c:536,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - tv
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 537
      start: 532
    functionDepth: 0
    functionLinenumber: 532
    functionLinenumberEnd: 537
    functionName: tv_randomize
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - random
    linkageType: ''
    returnType: void
    signature: 'void tv_randomize(struct timeval *tv) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/schedule.c:346,1
    - Dst: schedule_entry_debug_info
      Src: /src/openvpn/src/openvpn/schedule.c:348,1
    - Dst: schedule_set_pri
      Src: /src/openvpn/src/openvpn/schedule.c:359,1
    - Dst: IN_TREE
      Src: /src/openvpn/src/openvpn/schedule.c:353,1
    - Dst: schedule_remove_node
      Src: /src/openvpn/src/openvpn/schedule.c:355,1
    - Dst: schedule_insert
      Src: /src/openvpn/src/openvpn/schedule.c:363,1
    - Dst: schedule_rotate_up
      Src: /src/openvpn/src/openvpn/schedule.c:375,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 2
    argNames:
    - s
    - e
    argTypes:
    - struct schedule*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 377
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 377
    functionName: schedule_add_modify
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - check_debug_level
    - schedule_remove_node
    - schedule_insert
    - schedule_entry_debug_info
    - schedule_rotate_up
    - schedule_set_pri
    - IN_TREE
    linkageType: ''
    returnType: void
    signature: 'void schedule_add_modify(struct schedule *s, struct schedule_entry
      *e) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/schedule.c:415,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 417
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 417
    functionName: schedule_init
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct schedule*
    signature: 'struct schedule *schedule_init(void) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/schedule.c:456,1
    - Dst: schedule_entry_compare
      Src: /src/openvpn/src/openvpn/schedule.c:472,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:480,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:478,1
    - Dst: tv_le
      Src: /src/openvpn/src/openvpn/schedule.c:483,1
    - Dst: schedule_debug_entry
      Src: /src/openvpn/src/openvpn/schedule.c:496,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:464,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:463,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:462,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:465,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:466,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:467,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:471,1
    - Dst: schedule_entry_compare
      Src: /src/openvpn/src/openvpn/schedule.c:479,1
    - Dst: tv_lt
      Src: /src/openvpn/src/openvpn/schedule.c:491,1
    - Dst: schedule_debug_entry
      Src: /src/openvpn/src/openvpn/schedule.c:502,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:473,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:472,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:484,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:483,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/schedule.c:479,1
    - Dst: tv_le
      Src: /src/openvpn/src/openvpn/schedule.c:484,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/schedule.c:508,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 58
    argCount: 6
    argNames:
    - e
    - depth
    - count
    - least
    - min
    - max
    argTypes:
    - struct schedule_entry*
    - int
    - int*
    - struct timeval*
    - struct timeval*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 510
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 510
    functionName: schedule_debug_entry
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - schedule_debug_entry
    - schedule_entry_compare
    - gc_new
    - gc_free
    - ASSERT
    - tv_lt
    - tv_le
    linkageType: ''
    returnType: int
    signature: 'int schedule_debug_entry(const struct schedule_entry *e, int depth,
      int *count, struct timeval *least, const struct timeval *min, const struct timeval
      *max) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/schedule.c:619,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:623,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:627,1
    - Dst: schedule_print_work
      Src: /src/openvpn/src/openvpn/schedule.c:634,1
    - Dst: tv_string
      Src: /src/openvpn/src/openvpn/schedule.c:628,1
    - Dst: schedule_print_work
      Src: /src/openvpn/src/openvpn/schedule.c:635,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:639,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/schedule.c:641,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 2
    argNames:
    - e
    - indent
    argTypes:
    - struct schedule_entry*
    - int
    constantsTouched: []
    func_position:
      end: 642
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 642
    functionName: schedule_print_work
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - tv_string
    - schedule_print_work
    - gc_new
    - gc_free
    - printf
    linkageType: ''
    returnType: void
    signature: 'void schedule_print_work(struct schedule_entry *e, int indent) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: random
      Src: /src/openvpn/src/openvpn/schedule.c:74,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - e
    argTypes:
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 79
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 79
    functionName: schedule_set_pri
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - random
    linkageType: ''
    returnType: void
    signature: 'static inline void schedule_set_pri(struct schedule_entry *e) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:647,1
    - Dst: schedule_print_work
      Src: /src/openvpn/src/openvpn/schedule.c:648,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct schedule*
    constantsTouched: []
    func_position:
      end: 649
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 649
    functionName: schedule_print
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - schedule_print_work
    - printf
    linkageType: ''
    returnType: void
    signature: 'void schedule_print(struct schedule *s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_ARRAY
      Src: /src/openvpn/src/openvpn/schedule.c:664,1
    - Dst: tv_randomize
      Src: /src/openvpn/src/openvpn/schedule.c:671,1
    - Dst: schedule_add_modify
      Src: /src/openvpn/src/openvpn/schedule.c:674,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:684,1
    - Dst: tv_randomize
      Src: /src/openvpn/src/openvpn/schedule.c:690,1
    - Dst: schedule_find_earliest_wakeup
      Src: /src/openvpn/src/openvpn/schedule.c:688,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/schedule.c:670,1
    - Dst: schedule_randomize_array
      Src: /src/openvpn/src/openvpn/schedule.c:677,1
    - Dst: schedule_add_modify
      Src: /src/openvpn/src/openvpn/schedule.c:692,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:709,1
    - Dst: schedule_verify
      Src: /src/openvpn/src/openvpn/schedule.c:707,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/schedule.c:715,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/schedule.c:717,1
    - Dst: schedule_init
      Src: /src/openvpn/src/openvpn/schedule.c:660,1
    - Dst: schedule_verify
      Src: /src/openvpn/src/openvpn/schedule.c:680,1
    - Dst: schedule_remove_node
      Src: /src/openvpn/src/openvpn/schedule.c:704,1
    - Dst: schedule_verify
      Src: /src/openvpn/src/openvpn/schedule.c:696,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/schedule.c:654,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/schedule.c:663,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/schedule.c:666,1
    - Dst: schedule_find_earliest_wakeup
      Src: /src/openvpn/src/openvpn/schedule.c:702,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/schedule.c:713,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/schedule.c:716,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 39
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 718
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 718
    functionName: schedule_test
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY
    - tv_randomize
    - schedule_verify
    - schedule_remove_node
    - gc_new
    - schedule_find_earliest_wakeup
    - schedule_init
    - CLEAR
    - gc_free
    - schedule_randomize_array
    - free
    - ALLOC_OBJ_CLEAR
    - schedule_add_modify
    - printf
    linkageType: ''
    returnType: void
    signature: 'void schedule_test(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: schedule_entry_compare
      Src: /src/openvpn/src/openvpn/schedule.c:289,1
    - Dst: schedule_set_pri
      Src: /src/openvpn/src/openvpn/schedule.c:330,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 20
    argCount: 2
    argNames:
    - s
    - e
    argTypes:
    - struct schedule*
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 336
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 336
    functionName: schedule_insert
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - schedule_set_pri
    - schedule_entry_compare
    linkageType: ''
    returnType: void
    signature: 'static void schedule_insert(struct schedule *s, struct schedule_entry
      *e) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/schedule.c:397,1
    - Dst: schedule_entry_debug_info
      Src: /src/openvpn/src/openvpn/schedule.c:399,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 1
    argNames:
    - e
    argTypes:
    - struct schedule_entry*
    constantsTouched: []
    func_position:
      end: 404
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 404
    functionName: schedule_find_least
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - schedule_entry_debug_info
    - check_debug_level
    linkageType: ''
    returnType: struct schedule_entry*
    signature: 'struct schedule_entry *schedule_find_least(struct schedule_entry *e) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: schedule_find_least
      Src: /src/openvpn/src/openvpn/schedule.c:441,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct schedule*
    constantsTouched: []
    func_position:
      end: 442
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 442
    functionName: schedule_find_earliest_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - schedule_find_least
    linkageType: ''
    returnType: struct schedule_entry*
    signature: 'static inline struct schedule_entry *schedule_find_earliest_wakeup(struct
      schedule *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/schedule.c:544,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/schedule.c:554,1
    - Dst: prng_bytes
      Src: /src/openvpn/src/openvpn/schedule.c:552,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/schedule.c:545,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - tv
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 555
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 555
    functionName: tv_randomize
    functionSourceFile: /src/openvpn/src/openvpn/schedule.c
    functionUses: []
    functionsReached:
    - get_random
    - gc_free
    - prng_bytes
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void tv_randomize(struct timeval *tv) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: datagram_overhead
      Src: /src/openvpn/src/openvpn/mss.c:251,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 2
    argNames:
    - options
    - lsi
    argTypes:
    - struct options*
    - struct link_socket_info*
    constantsTouched: []
    func_position:
      end: 252
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 252
    functionName: get_ip_encap_overhead
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - datagram_overhead
    linkageType: ''
    returnType: size_t
    signature: 'static size_t get_ip_encap_overhead(const struct options *options,
      const struct link_socket_info *lsi) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:91,1
    - Dst: verify_align_4
      Src: /src/openvpn/src/openvpn/mss.c:96,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/mss.c:102,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:102,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mss.c:97,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/mss.c:126,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:127,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mss.c:129,1
    - Dst: mss_fixup_dowork
      Src: /src/openvpn/src/openvpn/mss.c:132,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 25
    argCount: 2
    argNames:
    - buf
    - maxmss
    argTypes:
    - struct buffer*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 135
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 135
    functionName: mss_fixup_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - mss_fixup_dowork
    - ntohs
    - BPTR
    - BLEN
    - verify_align_4
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'void mss_fixup_ipv6(struct buffer *buf, uint16_t maxmss) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:151,1
    - Dst: verify_align_4
      Src: /src/openvpn/src/openvpn/mss.c:156,1
    - Dst: OPENVPN_TCPH_GET_DOFF
      Src: /src/openvpn/src/openvpn/mss.c:158,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:162,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mss.c:157,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/mss.c:197,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/mss.c:198,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/mss.c:201,1
    - Dst: ADJUST_CHECKSUM
      Src: /src/openvpn/src/openvpn/mss.c:202,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 54
    argCount: 2
    argNames:
    - buf
    - maxmss
    argTypes:
    - struct buffer*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 207
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 207
    functionName: mss_fixup_dowork
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - dmsg
    - BPTR
    - BLEN
    - OPENVPN_TCPH_GET_DOFF
    - verify_align_4
    - ADJUST_CHECKSUM
    - htons
    linkageType: ''
    returnType: void
    signature: 'void mss_fixup_dowork(struct buffer *buf, uint16_t maxmss) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: frame_calculate_protocol_header_size
      Src: /src/openvpn/src/openvpn/mss.c:300,1
    - Dst: get_ip_encap_overhead
      Src: /src/openvpn/src/openvpn/mss.c:316,1
    - Dst: adjust_payload_max_cbc
      Src: /src/openvpn/src/openvpn/mss.c:328,1
    - Dst: frame_calculate_payload_overhead
      Src: /src/openvpn/src/openvpn/mss.c:304,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 18
    argCount: 4
    argNames:
    - frame
    - kt
    - options
    - lsi
    argTypes:
    - struct frame*
    - struct key_type*
    - struct options*
    - struct link_socket_info*
    constantsTouched: []
    func_position:
      end: 331
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 331
    functionName: frame_calculate_mssfix
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - adjust_payload_max_cbc
    - get_ip_encap_overhead
    - frame_calculate_payload_overhead
    - frame_calculate_protocol_header_size
    linkageType: ''
    returnType: void
    signature: 'static void frame_calculate_mssfix(struct frame *frame, struct key_type
      *kt, const struct options *options, struct link_socket_info *lsi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/mss.c:356,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mss.c:383,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/src/openvpn/mss.c:375,1
    - Dst: datagram_overhead
      Src: /src/openvpn/src/openvpn/mss.c:363,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mss.c:370,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/src/openvpn/mss.c:388,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 23
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 392
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 392
    functionName: frame_adjust_path_mtu
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - msg
    - frame_calculate_dynamic
    - get_link_socket_info
    - datagram_overhead
    linkageType: ''
    returnType: void
    signature: 'void frame_adjust_path_mtu(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/mss.c:212,1
    - Dst: round_down_size
      Src: /src/openvpn/src/openvpn/mss.c:224,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/mss.c:223,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 2
    argNames:
    - kt
    - target
    argTypes:
    - struct key_type*
    - size_t
    constantsTouched: []
    func_position:
      end: 227
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 227
    functionName: adjust_payload_max_cbc
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - round_down_size
    - cipher_kt_mode_cbc
    - cipher_kt_block_size
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t adjust_payload_max_cbc(const struct key_type
      *kt, size_t target) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: frame_calculate_protocol_header_size
      Src: /src/openvpn/src/openvpn/mss.c:262,1
    - Dst: adjust_payload_max_cbc
      Src: /src/openvpn/src/openvpn/mss.c:274,1
    - Dst: get_ip_encap_overhead
      Src: /src/openvpn/src/openvpn/mss.c:266,1
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/mss.c:276,1
    - Dst: clamp_size_to_int
      Src: /src/openvpn/src/openvpn/mss.c:274,1
    - Dst: calc_packet_id_size_dc
      Src: /src/openvpn/src/openvpn/mss.c:280,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 4
    argNames:
    - frame
    - kt
    - options
    - lsi
    argTypes:
    - struct frame*
    - struct key_type*
    - struct options*
    - struct link_socket_info*
    constantsTouched: []
    func_position:
      end: 283
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 283
    functionName: frame_calculate_fragment
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - get_ip_encap_overhead
    - calc_packet_id_size_dc
    - cipher_kt_mode_cbc
    - clamp_size_to_int
    - adjust_payload_max_cbc
    - frame_calculate_protocol_header_size
    linkageType: ''
    returnType: void
    signature: 'static void frame_calculate_fragment(struct frame *frame, struct key_type
      *kt, const struct options *options, struct link_socket_info *lsi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: frame_calculate_fragment
      Src: /src/openvpn/src/openvpn/mss.c:340,1
    - Dst: frame_calculate_mssfix
      Src: /src/openvpn/src/openvpn/mss.c:345,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 7
    argCount: 4
    argNames:
    - frame
    - kt
    - options
    - lsi
    argTypes:
    - struct frame*
    - struct key_type*
    - struct options*
    - struct link_socket_info*
    constantsTouched: []
    func_position:
      end: 347
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 347
    functionName: frame_calculate_dynamic
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - frame_calculate_fragment
    - frame_calculate_mssfix
    linkageType: ''
    returnType: void
    signature: 'void frame_calculate_dynamic(struct frame *frame, struct key_type
      *kt, const struct options *options, struct link_socket_info *lsi) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:51,1
    - Dst: OPENVPN_IPH_GET_LEN
      Src: /src/openvpn/src/openvpn/mss.c:59,1
    - Dst: verify_align_4
      Src: /src/openvpn/src/openvpn/mss.c:56,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/mss.c:62,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mss.c:57,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:62,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/mss.c:63,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:64,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mss.c:65,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/mss.c:69,1
    - Dst: mss_fixup_dowork
      Src: /src/openvpn/src/openvpn/mss.c:74,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mss.c:71,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 32
    argCount: 2
    argNames:
    - buf
    - maxmss
    argTypes:
    - struct buffer*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 78
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 78
    functionName: mss_fixup_ipv4
    functionSourceFile: /src/openvpn/src/openvpn/mss.c
    functionUses: []
    functionsReached:
    - OPENVPN_IPH_GET_LEN
    - mss_fixup_dowork
    - BPTR
    - BLEN
    - buf_advance
    - verify_align_4
    - ntohs
    linkageType: ''
    returnType: void
    signature: 'void mss_fixup_ipv4(struct buffer *buf, uint16_t maxmss) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 145
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 145
    functionName: get_mute_cutoff
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int get_mute_cutoff(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - suppressed
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 151
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 151
    functionName: set_suppress_timestamps
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_suppress_timestamps(bool suppressed) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/error.c:461,1
    - Dst: exit
      Src: /src/openvpn/src/openvpn/error.c:462,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 463
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 463
    functionName: out_of_memory
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - exit
    - fprintf
    linkageType: ''
    returnType: void
    signature: 'void out_of_memory(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - cutoff
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 133
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 133
    functionName: set_mute_cutoff
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool set_mute_cutoff(const int cutoff) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/error.c:202,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 205
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 205
    functionName: msg_fp
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    linkageType: ''
    returnType: FILE*
    signature: 'FILE *msg_fp(const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/src/openvpn/error.c:215,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/error.c:217,1
    - Dst: x_msg_va
      Src: /src/openvpn/src/openvpn/error.c:216,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - flags
    - format
    - '...'
    argTypes:
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 218
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 218
    functionName: x_msg
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - va_end
    - x_msg_va
    - va_start
    linkageType: ''
    returnType: void
    signature: 'void x_msg(const unsigned int flags, const char *format, ...) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DECODE_MUTE_LEVEL
      Src: /src/openvpn/src/openvpn/error.c:411,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:428,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:416,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 438
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 438
    functionName: dont_mute
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - DECODE_MUTE_LEVEL
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool dont_mute(unsigned int flags) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/error.c:784,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/error.c:787,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/error.c:795,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/error.c:799,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/error.c:791,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/error.c:803,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/error.c:805,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 2
    argNames:
    - flags
    - gc
    argTypes:
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 806
      start: 781
    functionDepth: 0
    functionLinenumber: 781
    functionLinenumberEnd: 806
    functionName: msg_flags_string
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *msg_flags_string(const unsigned int flags, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: get_debug_level
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int get_debug_level(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/error.c:226,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/error.c:229,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - err
    - crt_error
    - gc
    argTypes:
    - int
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 230
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 230
    functionName: openvpn_strerror
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - strerror
    - strerror_win32
    linkageType: ''
    returnType: char*
    signature: 'static const char *openvpn_strerror(int err, bool crt_error, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _fileno
      Src: /src/openvpn/src/openvpn/error.c:509,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 510
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 510
    functionName: get_orig_stderr
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - _fileno
    linkageType: ''
    returnType: int
    signature: 'int get_orig_stderr(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 187
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 187
    functionName: errors_to_stderr
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void errors_to_stderr(void) '
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpn/error.c:271,1
    - Dst: openvpn_strerror
      Src: /src/openvpn/src/openvpn/error.c:277,1
    - Dst: msg_fp
      Src: /src/openvpn/src/openvpn/error.c:344,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/error.c:364,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:386,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/error.c:268,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/error.c:269,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/error.c:276,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/error.c:283,1
    - Dst: msg_get_prefix
      Src: /src/openvpn/src/openvpn/error.c:309,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/error.c:345,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/error.c:372,1
    - Dst: msg_test
      Src: /src/openvpn/src/openvpn/error.c:249,1
    - Dst: msg_get_virtual_output
      Src: /src/openvpn/src/openvpn/error.c:320,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/error.c:350,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/error.c:323,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/error.c:352,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/error.c:373,1
    - Dst: fflush
      Src: /src/openvpn/src/openvpn/error.c:379,1
    - Dst: usage_small
      Src: /src/openvpn/src/openvpn/error.c:396,1
    - Dst: openvpn_errno_maybe_crt
      Src: /src/openvpn/src/openvpn/error.c:255,1
    - Dst: dont_mute
      Src: /src/openvpn/src/openvpn/error.c:261,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/error.c:266,1
    - Dst: syslog
      Src: /src/openvpn/src/openvpn/error.c:336,1
    - Dst: virtual_output_print
      Src: /src/openvpn/src/openvpn/error.c:327,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/error.c:391,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/error.c:399,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 87
    argCount: 3
    argNames:
    - flags
    - format
    - arglist
    argTypes:
    - unsigned int
    - char*
    - va_list
    constantsTouched: []
    func_position:
      end: 400
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 400
    functionName: x_msg_va
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - msg
    - usage_small
    - gc_init
    - msg_fp
    - openvpn_exit
    - msg_get_prefix
    - vsnprintf
    - gc_free
    - openvpn_strerror
    - openvpn_errno_maybe_crt
    - virtual_output_print
    - fprintf
    - gettimeofday
    - msg_get_virtual_output
    - msg_test
    - fflush
    - time_string
    - check_debug_level
    - snprintf
    - gc_malloc
    - dont_mute
    - syslog
    linkageType: ''
    returnType: void
    signature: 'void x_msg_va(const unsigned int flags, const char *format, va_list
      arglist) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: tun_abort
      Src: /src/openvpn/src/openvpn/error.c:738,1
    - Dst: remove_pid_file
      Src: /src/openvpn/src/openvpn/error.c:743,1
    - Dst: plugin_abort
      Src: /src/openvpn/src/openvpn/error.c:748,1
    - Dst: uninit_win32
      Src: /src/openvpn/src/openvpn/error.c:741,1
    - Dst: close_syslog
      Src: /src/openvpn/src/openvpn/error.c:745,1
    - Dst: port_share_abort
      Src: /src/openvpn/src/openvpn/error.c:754,1
    - Dst: mstats_close
      Src: /src/openvpn/src/openvpn/error.c:759,1
    - Dst: abort
      Src: /src/openvpn/src/openvpn/error.c:765,1
    - Dst: perf_output_results
      Src: /src/openvpn/src/openvpn/error.c:771,1
    - Dst: exit
      Src: /src/openvpn/src/openvpn/error.c:775,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - status
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 776
      start: 733
    functionDepth: 0
    functionLinenumber: 733
    functionLinenumberEnd: 776
    functionName: openvpn_exit
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - close_syslog
    - uninit_win32
    - exit
    - perf_output_results
    - abort
    - mstats_close
    - plugin_abort
    - tun_abort
    - port_share_abort
    - remove_pid_file
    linkageType: ''
    returnType: void
    signature: 'void openvpn_exit(const int status) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - parsable
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 157
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 157
    functionName: set_machine_readable_output
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_machine_readable_output(bool parsable) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_errno_maybe_crt
      Src: /src/openvpn/src/openvpn/error.c:659,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/error.c:668,1
    - Dst: format_extended_socket_error
      Src: /src/openvpn/src/openvpn/error.c:674,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/error.c:662,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:661,1
    - Dst: tuntap_defined
      Src: /src/openvpn/src/openvpn/error.c:685,1
    - Dst: tap_win_getinfo
      Src: /src/openvpn/src/openvpn/error.c:687,1
    - Dst: ignore_sys_error
      Src: /src/openvpn/src/openvpn/error.c:691,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:695,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/error.c:696,1
    - Dst: platform_sleep_milliseconds
      Src: /src/openvpn/src/openvpn/error.c:710,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/error.c:713,1
    - Dst: openvpn_strerror
      Src: /src/openvpn/src/openvpn/error.c:704,1
    - Dst: openvpn_strerror
      Src: /src/openvpn/src/openvpn/error.c:697,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/error.c:703,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:702,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 34
    argCount: 4
    argNames:
    - status
    - description
    - sock
    - tt
    argTypes:
    - int
    - char*
    - struct link_socket*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 715
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 715
    functionName: x_check_status
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - tap_win_getinfo
    - msg
    - gc_new
    - ignore_sys_error
    - format_extended_socket_error
    - openvpn_strerror
    - gc_free
    - proto2ascii
    - openvpn_errno_maybe_crt
    - platform_sleep_milliseconds
    - tuntap_defined
    linkageType: ''
    returnType: void
    signature: 'void x_check_status(int status, const char *description, struct link_socket
      *sock, struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/error.c:173,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/error.c:176,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 181
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 181
    functionName: error_reset
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    - fopen
    linkageType: ''
    returnType: void
    signature: 'void error_reset(void) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/error.c:519,1
    - Dst: CreateFileW
      Src: /src/openvpn/src/openvpn/error.c:528,1
    - Dst: SetFilePointer
      Src: /src/openvpn/src/openvpn/error.c:547,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:549,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:557,1
    - Dst: _fdopen
      Src: /src/openvpn/src/openvpn/error.c:570,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:579,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/error.c:528,1
    - Dst: _fileno
      Src: /src/openvpn/src/openvpn/error.c:554,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/error.c:569,1
    - Dst: dup2
      Src: /src/openvpn/src/openvpn/error.c:597,1
    - Dst: dup2
      Src: /src/openvpn/src/openvpn/error.c:601,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/error.c:608,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:540,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/error.c:536,1
    - Dst: _fileno
      Src: /src/openvpn/src/openvpn/error.c:558,1
    - Dst: _dup2
      Src: /src/openvpn/src/openvpn/error.c:577,1
    - Dst: _dup2
      Src: /src/openvpn/src/openvpn/error.c:577,1
    - Dst: _open_osfhandle
      Src: /src/openvpn/src/openvpn/error.c:562,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/error.c:587,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:599,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:603,1
    - Dst: _dup
      Src: /src/openvpn/src/openvpn/error.c:554,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:573,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:565,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:593,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:615,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 72
    argCount: 2
    argNames:
    - file
    - append
    argTypes:
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 617
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 617
    functionName: redirect_stdout_stderr
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - msg
    - wide_string
    - gc_new
    - SetFilePointer
    - _dup
    - _fileno
    - _fdopen
    - gc_free
    - _dup2
    - ASSERT
    - dup2
    - _open_osfhandle
    - open
    - close
    - CreateFileW
    linkageType: ''
    returnType: void
    signature: 'void redirect_stdout_stderr(const char *file, bool append) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - info_level
    - verbose_level
    argTypes:
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 640
      start: 635
    functionDepth: 0
    functionLinenumber: 635
    functionLinenumberEnd: 640
    functionName: set_check_status
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_check_status(unsigned int info_level, unsigned int verbose_level) '
  - BBCount: 51
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/error.c:972,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/error.c:989,1
    - Dst: FormatMessageW
      Src: /src/openvpn/src/openvpn/error.c:973,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/error.c:981,1
    - Dst: utf16to8
      Src: /src/openvpn/src/openvpn/error.c:985,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/error.c:1002,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/error.c:1005,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 27
    argCount: 2
    argNames:
    - errnum
    - gc
    argTypes:
    - DWORD
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1007
      start: 810
    functionDepth: 0
    functionLinenumber: 810
    functionLinenumberEnd: 1007
    functionName: strerror_win32
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - FormatMessageW
    - buf_printf
    - BSTR
    - SIZE
    - utf16to8
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *strerror_win32(DWORD errnum, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: msg_forked
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void msg_forked(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:445,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:449,1
    - Dst: _exit
      Src: /src/openvpn/src/openvpn/error.c:451,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 3
    argNames:
    - filename
    - line
    - condition
    argTypes:
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 452
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 452
    functionName: assert_failed
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - msg
    - _exit
    linkageType: ''
    returnType: void
    signature: 'void assert_failed(const char *filename, int line, const char *condition) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/error.c:473,1
    - Dst: openlog
      Src: /src/openvpn/src/openvpn/error.c:474,1
    - Dst: set_std_files_to_null
      Src: /src/openvpn/src/openvpn/error.c:480,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/error.c:485,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - pgmname
    - stdio_to_null
    argTypes:
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 487
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 487
    functionName: open_syslog
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - openlog
    - msg
    - set_std_files_to_null
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void open_syslog(const char *pgmname, bool stdio_to_null) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: constrain_int
      Src: /src/openvpn/src/openvpn/error.c:115,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - level
    - flags
    argTypes:
    - int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 119
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 119
    functionName: set_debug_level
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - constrain_int
    linkageType: ''
    returnType: bool
    signature: 'bool set_debug_level(const int level, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: closelog
      Src: /src/openvpn/src/openvpn/error.c:495,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/error.c:497,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 501
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 501
    functionName: close_syslog
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached:
    - free
    - closelog
    linkageType: ''
    returnType: void
    signature: 'void close_syslog(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 633
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 633
    functionName: reset_check_status
    functionSourceFile: /src/openvpn/src/openvpn/error.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void reset_check_status(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: auth_token_kt
      Src: /src/openvpn/src/openvpn/auth_token.c:126,1
    - Dst: read_pem_key_file
      Src: /src/openvpn/src/openvpn/auth_token.c:133,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:145,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/auth_token.c:128,1
    - Dst: generate_ephemeral_key
      Src: /src/openvpn/src/openvpn/auth_token.c:139,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/auth_token.c:150,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:152,1
    - Dst: key_parameters_from_key
      Src: /src/openvpn/src/openvpn/auth_token.c:156,1
    - Dst: init_key_ctx
      Src: /src/openvpn/src/openvpn/auth_token.c:157,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/auth_token.c:159,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 19
    argCount: 3
    argNames:
    - key_ctx
    - key_file
    - key_inline
    argTypes:
    - struct key_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 160
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 160
    functionName: auth_token_init_secret
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - msg
    - buf_read
    - free_buf
    - alloc_buf
    - key_parameters_from_key
    - auth_token_kt
    - read_pem_key_file
    - init_key_ctx
    - generate_ephemeral_key
    linkageType: ''
    returnType: void
    signature: 'void auth_token_init_secret(struct key_ctx *key_ctx, const char *key_file,
      bool key_inline) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: is_auth_token
      Src: /src/openvpn/src/openvpn/auth_token.c:49,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/auth_token.c:83,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/auth_token.c:110,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:75,1
    - Dst: generate_auth_token
      Src: /src/openvpn/src/openvpn/auth_token.c:99,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:110,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/auth_token.c:113,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 39
    argCount: 3
    argNames:
    - session
    - multi
    - up
    argTypes:
    - struct tls_session*
    - struct tls_multi*
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 114
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 114
    functionName: add_session_token_env
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - memcpy
    - generate_auth_token
    - setenv_str
    - ASSERT
    - is_auth_token
    - strlen
    linkageType: ''
    returnType: void
    signature: 'void add_session_token_env(struct tls_session *session, struct tls_multi
      *multi, const struct user_pass *up) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:279,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:284,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/auth_token.c:283,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/auth_token.c:284,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/auth_token.c:279,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/auth_token.c:285,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/auth_token.c:286,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/auth_token.c:289,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 3
    argNames:
    - ctx
    - b64decoded
    - username
    argTypes:
    - hmac_ctx_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 290
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 290
    functionName: check_hmac_token
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - hmac_ctx_size
    - hmac_ctx_final
    - hmac_ctx_update
    - strlen
    - ASSERT
    - memcmp_constant_time
    - hmac_ctx_reset
    linkageType: ''
    returnType: bool
    signature: 'static bool check_hmac_token(hmac_ctx_t *ctx, const uint8_t *b64decoded,
      const char *username) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/auth_token.c:406,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/auth_token.c:407,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/auth_token.c:411,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:412,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:406,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/auth_token.c:413,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 418
      start: 399
    functionDepth: 0
    functionLinenumber: 399
    functionLinenumberEnd: 418
    functionName: wipe_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - strlen
    - secure_memzero
    - free
    linkageType: ''
    returnType: void
    signature: 'void wipe_auth_token(struct tls_multi *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: create_kt
      Src: /src/openvpn/src/openvpn/auth_token.c:33,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: auth_token_kt
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - create_kt
    linkageType: ''
    returnType: struct key_type
    signature: 'static struct key_type auth_token_kt(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:186,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:199,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/auth_token.c:214,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/auth_token.c:228,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/auth_token.c:231,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:239,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:241,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:242,1
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/auth_token.c:245,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/auth_token.c:245,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:248,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/auth_token.c:260,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/auth_token.c:258,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:248,1
    - Dst: htonll
      Src: /src/openvpn/src/openvpn/auth_token.c:167,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/auth_token.c:194,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/auth_token.c:196,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/auth_token.c:201,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:203,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/auth_token.c:239,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/auth_token.c:241,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/auth_token.c:242,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/auth_token.c:247,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:250,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:251,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:251,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:250,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/auth_token.c:184,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/auth_token.c:171,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:194,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/auth_token.c:232,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:240,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/auth_token.c:245,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/auth_token.c:251,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:252,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/auth_token.c:257,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/auth_token.c:252,1
    - Dst: strdup
      Src: /src/openvpn/src/openvpn/auth_token.c:269,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/auth_token.c:165,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:171,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:228,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/auth_token.c:224,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/auth_token.c:230,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/auth_token.c:199,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/auth_token.c:233,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/auth_token.c:236,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/auth_token.c:240,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/auth_token.c:250,1
    - Dst: strdup
      Src: /src/openvpn/src/openvpn/auth_token.c:258,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/auth_token.c:272,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/auth_token.c:254,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 79
    argCount: 2
    argNames:
    - up
    - multi
    argTypes:
    - struct user_pass*
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 273
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 273
    functionName: generate_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - hmac_ctx_size
    - memcpy
    - dmsg
    - msg
    - strdup
    - htonll
    - openvpn_base64_decode
    - BLEN
    - rand_bytes
    - free
    - buf_write_u8
    - openvpn_base64_encode
    - buf_write
    - BPTR
    - gc_new
    - gc_free
    - string_alloc
    - hmac_ctx_final
    - hmac_ctx_update
    - hmac_ctx_reset
    - strlen
    - alloc_buf_gc
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void generate_auth_token(const struct user_pass *up, struct tls_multi
      *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write_pem_key_file
      Src: /src/openvpn/src/openvpn/auth_token.c:119,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 120
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 120
    functionName: auth_token_write_server_key_file
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - write_pem_key_file
    linkageType: ''
    returnType: void
    signature: 'void auth_token_write_server_key_file(const char *filename) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/auth_token.c:302,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:302,1
    - Dst: ntohll
      Src: /src/openvpn/src/openvpn/auth_token.c:326,1
    - Dst: ntohll
      Src: /src/openvpn/src/openvpn/auth_token.c:329,1
    - Dst: check_hmac_token
      Src: /src/openvpn/src/openvpn/auth_token.c:332,1
    - Dst: check_hmac_token
      Src: /src/openvpn/src/openvpn/auth_token.c:336,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/auth_token.c:380,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/auth_token.c:325,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/auth_token.c:328,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:357,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:392,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:365,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.c:390,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:381,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/auth_token.c:300,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:311,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/auth_token.c:341,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:345,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/auth_token.c:389,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 57
    argCount: 3
    argNames:
    - up
    - multi
    - session
    argTypes:
    - struct user_pass*
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 397
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 397
    functionName: verify_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - memcpy
    - check_hmac_token
    - ntohll
    - msg
    - openvpn_base64_decode
    - strcpy
    - auth_set_client_reason
    - ASSERT
    - memcmp_constant_time
    - strlen
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int verify_auth_token(struct user_pass *up, struct tls_multi
      *multi, struct tls_session *session) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/auth_token.c:426,1
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/auth_token.c:427,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:446,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/auth_token.c:439,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/auth_token.c:451,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/auth_token.c:452,1
    - Dst: generate_auth_token
      Src: /src/openvpn/src/openvpn/auth_token.c:454,1
    - Dst: resend_auth_token_renegotiation
      Src: /src/openvpn/src/openvpn/auth_token.c:456,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 17
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 457
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 457
    functionName: check_send_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - msg
    - generate_auth_token
    - get_primary_key
    - strncpynt
    - CLEAR
    - resend_auth_token_renegotiation
    linkageType: ''
    returnType: void
    signature: 'void check_send_auth_token(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: send_push_reply_auth_token
      Src: /src/openvpn/src/openvpn/auth_token.c:477,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 2
    argNames:
    - multi
    - session
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 479
      start: 459
    functionDepth: 0
    functionLinenumber: 459
    functionLinenumberEnd: 479
    functionName: resend_auth_token_renegotiation
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.c
    functionUses: []
    functionsReached:
    - send_push_reply_auth_token
    linkageType: ''
    returnType: void
    signature: 'void resend_auth_token_renegotiation(struct tls_multi *multi, struct
      tls_session *session) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/comp-lz4.c:49,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    functionName: lz4v2_compress_init
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void lz4v2_compress_init(struct compress_context *compctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: compv2_escape_data_ifneeded
      Src: /src/openvpn/src/openvpn/comp-lz4.c:90,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 4
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 91
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 91
    functionName: lz4v2_compress
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached:
    - compv2_escape_data_ifneeded
    linkageType: ''
    returnType: void
    signature: 'static void lz4v2_compress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/comp-lz4.c:100,1
    - Dst: LZ4_decompress_safe
      Src: /src/openvpn/src/openvpn/comp-lz4.c:101,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/comp-lz4.c:100,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/comp-lz4.c:101,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/comp-lz4.c:101,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/comp-lz4.c:101,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/comp-lz4.c:104,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/comp-lz4.c:109,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/comp-lz4.c:109,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/comp-lz4.c:112,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 4
    argNames:
    - zlen_max
    - work
    - buf
    - compctx
    argTypes:
    - size_t
    - struct buffer*
    - struct buffer*
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 117
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 117
    functionName: do_lz4_decompress
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached:
    - buf_safe
    - BPTR
    - dmsg
    - BLEN
    - ASSERT
    - LZ4_decompress_safe
    linkageType: ''
    returnType: void
    signature: 'static void do_lz4_decompress(size_t zlen_max, struct buffer *work,
      struct buffer *buf, struct compress_context *compctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/comp-lz4.c:170,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/comp-lz4.c:173,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/comp-lz4.c:170,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/comp-lz4.c:192,1
    - Dst: do_lz4_decompress
      Src: /src/openvpn/src/openvpn/comp-lz4.c:193,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/comp-lz4.c:197,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/comp-lz4.c:201,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 23
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 204
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 204
    functionName: lz4v2_decompress
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached:
    - buf_init
    - BPTR
    - dmsg
    - ASSERT
    - buf_advance
    - do_lz4_decompress
    linkageType: ''
    returnType: void
    signature: 'static void lz4v2_decompress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/comp-lz4.c:42,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/comp-lz4.c:43,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 44
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 44
    functionName: lz4_compress_init
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached:
    - msg
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void lz4_compress_init(struct compress_context *compctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    functionName: lz4_compress_uninit
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void lz4_compress_uninit(struct compress_context *compctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/comp-lz4.c:132,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/comp-lz4.c:136,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/comp-lz4.c:139,1
    - Dst: do_lz4_decompress
      Src: /src/openvpn/src/openvpn/comp-lz4.c:144,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/comp-lz4.c:132,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/comp-lz4.c:152,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 18
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 155
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 155
    functionName: lz4_decompress
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached:
    - buf_init
    - BPTR
    - dmsg
    - ASSERT
    - BEND
    - do_lz4_decompress
    linkageType: ''
    returnType: void
    signature: 'static void lz4_decompress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/comp-lz4.c:69,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/comp-lz4.c:70,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/comp-lz4.c:71,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/comp-lz4.c:71,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 9
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 77
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 77
    functionName: lz4_compress
    functionSourceFile: /src/openvpn/src/openvpn/comp-lz4.c
    functionUses: []
    functionsReached:
    - buf_safe
    - BEND
    - ASSERT
    - BPTR
    linkageType: ''
    returnType: void
    signature: 'static void lz4_compress(struct buffer *buf, struct buffer work, struct
      compress_context *compctx, const struct frame *frame) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/mtcp.c:51,1
    - Dst: multi_create_instance
      Src: /src/openvpn/src/openvpn/mtcp.c:55,1
    - Dst: multi_assign_peer_id
      Src: /src/openvpn/src/openvpn/mtcp.c:63,1
    - Dst: hash_bucket
      Src: /src/openvpn/src/openvpn/mtcp.c:61,1
    - Dst: hash_value
      Src: /src/openvpn/src/openvpn/mtcp.c:60,1
    - Dst: hash_lookup_fast
      Src: /src/openvpn/src/openvpn/mtcp.c:65,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtcp.c:70,1
    - Dst: multi_close_instance
      Src: /src/openvpn/src/openvpn/mtcp.c:72,1
    - Dst: hash_add_fast
      Src: /src/openvpn/src/openvpn/mtcp.c:78,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/mtcp.c:87,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/mtcp.c:91,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/mtcp.c:95,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:96,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mtcp.c:87,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 29
    argCount: 2
    argNames:
    - m
    - sock
    argTypes:
    - struct multi_context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 98
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 98
    functionName: multi_create_instance_tcp
    functionSourceFile: /src/openvpn/src/openvpn/mtcp.c
    functionUses: []
    functionsReached:
    - hash_bucket
    - hash_value
    - dmsg
    - hash_lookup_fast
    - msg
    - multi_create_instance
    - gc_new
    - hash_add_fast
    - gc_free
    - multi_assign_peer_id
    - ASSERT
    - mroute_addr_print
    - multi_close_instance
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'struct multi_instance *multi_create_instance_tcp(struct multi_context
      *m, struct link_socket *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbuf_free
      Src: /src/openvpn/src/openvpn/mtcp.c:127,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 128
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 128
    functionName: multi_tcp_instance_specific_free
    functionSourceFile: /src/openvpn/src/openvpn/mtcp.c
    functionUses: []
    functionsReached:
    - mbuf_free
    linkageType: ''
    returnType: void
    signature: 'void multi_tcp_instance_specific_free(struct multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_del
      Src: /src/openvpn/src/openvpn/mtcp.c:145,1
    - Dst: socket_event_handle
      Src: /src/openvpn/src/openvpn/mtcp.c:145,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 2
    argNames:
    - multi_io
    - mi
    argTypes:
    - struct multi_io*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 149
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 149
    functionName: multi_tcp_dereference_instance
    functionSourceFile: /src/openvpn/src/openvpn/mtcp.c
    functionUses: []
    functionsReached:
    - socket_event_handle
    - event_del
    linkageType: ''
    returnType: void
    signature: 'void multi_tcp_dereference_instance(struct multi_io *multi_io, struct
      multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbuf_init
      Src: /src/openvpn/src/openvpn/mtcp.c:104,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:107,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:109,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:108,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:106,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:110,1
    - Dst: mroute_extract_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/mtcp.c:114,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtcp.c:118,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 122
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 122
    functionName: multi_tcp_instance_specific_init
    functionSourceFile: /src/openvpn/src/openvpn/mtcp.c
    functionUses: []
    functionsReached:
    - msg
    - mbuf_init
    - ASSERT
    - mroute_extract_openvpn_sockaddr
    linkageType: ''
    returnType: bool
    signature: 'bool multi_tcp_instance_specific_init(struct multi_context *m, struct
      multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_del
      Src: /src/openvpn/src/openvpn/mtcp.c:135,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - multi_io
    - event
    argTypes:
    - struct multi_io*
    - event_t
    constantsTouched: []
    func_position:
      end: 137
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 137
    functionName: multi_tcp_delete_event
    functionSourceFile: /src/openvpn/src/openvpn/mtcp.c
    functionUses: []
    functionsReached:
    - event_del
    linkageType: ''
    returnType: void
    signature: 'void multi_tcp_delete_event(struct multi_io *multi_io, event_t event) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:156,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/mtcp.c:161,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtcp.c:163,1
    - Dst: multi_process_outgoing_link_dowork
      Src: /src/openvpn/src/openvpn/mtcp.c:165,1
    - Dst: mbuf_extract_item
      Src: /src/openvpn/src/openvpn/mtcp.c:159,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/mtcp.c:170,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 3
    argNames:
    - m
    - mi
    - mpp_flags
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 173
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 173
    functionName: multi_tcp_process_outgoing_link_ready
    functionSourceFile: /src/openvpn/src/openvpn/mtcp.c
    functionUses: []
    functionsReached:
    - dmsg
    - mbuf_free_buf
    - mbuf_extract_item
    - ASSERT
    - multi_process_outgoing_link_dowork
    linkageType: ''
    returnType: bool
    signature: 'bool multi_tcp_process_outgoing_link_ready(struct multi_context *m,
      struct multi_instance *mi, const unsigned int mpp_flags) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: multi_process_outgoing_link_pre
      Src: /src/openvpn/src/openvpn/mtcp.c:178,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mtcp.c:188,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/mtcp.c:183,1
    - Dst: mbuf_alloc_buf
      Src: /src/openvpn/src/openvpn/mtcp.c:190,1
    - Dst: mbuf_defined
      Src: /src/openvpn/src/openvpn/mtcp.c:184,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/mtcp.c:193,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/mtcp.c:194,1
    - Dst: mbuf_add_item
      Src: /src/openvpn/src/openvpn/mtcp.c:197,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/mtcp.c:198,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/mtcp.c:199,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/mtcp.c:200,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/mtcp.c:205,1
    - Dst: multi_process_outgoing_link_dowork
      Src: /src/openvpn/src/openvpn/mtcp.c:210,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 32
    argCount: 3
    argNames:
    - m
    - defer
    - mpp_flags
    argTypes:
    - struct multi_context*
    - bool
    - unsigned int
    constantsTouched: []
    func_position:
      end: 218
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 218
    functionName: multi_tcp_process_outgoing_link
    functionSourceFile: /src/openvpn/src/openvpn/mtcp.c
    functionUses: []
    functionsReached:
    - multi_process_outgoing_link_pre
    - multi_process_post
    - mbuf_add_item
    - dmsg
    - mbuf_defined
    - BLEN
    - set_prefix
    - mbuf_free_buf
    - mbuf_alloc_buf
    - proto_is_dgram
    - multi_process_outgoing_link_dowork
    - clear_prefix
    - buf_reset
    linkageType: ''
    returnType: bool
    signature: 'bool multi_tcp_process_outgoing_link(struct multi_context *m, bool
      defer, const unsigned int mpp_flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: psa_crypto_init
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:64,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: mbedtls_compat_psa_crypto_init
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - psa_crypto_init
    - msg
    linkageType: ''
    returnType: void
    signature: 'static inline void mbedtls_compat_psa_crypto_init(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_ssl_conf_curves
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:168,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - conf
    - groups
    argTypes:
    - mbedtls_ssl_config*
    - mbedtls_compat_group_id*
    constantsTouched: []
    func_position:
      end: 169
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 169
    functionName: mbedtls_ssl_conf_groups
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - mbedtls_ssl_conf_curves
    linkageType: ''
    returnType: void
    signature: 'static inline void mbedtls_ssl_conf_groups(mbedtls_ssl_config *conf,
      mbedtls_compat_group_id *groups) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - mbedtls_cipher_info_t*
    constantsTouched: []
    func_position:
      end: 181
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 181
    functionName: mbedtls_cipher_info_get_iv_size
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t mbedtls_cipher_info_get_iv_size(const mbedtls_cipher_info_t
      *cipher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - mbedtls_cipher_info_t*
    constantsTouched: []
    func_position:
      end: 193
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 193
    functionName: mbedtls_cipher_info_get_mode
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: mbedtls_cipher_mode_t
    signature: 'static inline mbedtls_cipher_mode_t mbedtls_cipher_info_get_mode(const
      mbedtls_cipher_info_t *cipher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - mbedtls_cipher_info_t*
    constantsTouched: []
    func_position:
      end: 205
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 205
    functionName: mbedtls_cipher_info_get_type
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: mbedtls_cipher_type_t
    signature: 'static inline mbedtls_cipher_type_t mbedtls_cipher_info_get_type(const
      mbedtls_cipher_info_t *cipher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - curve_info
    argTypes:
    - mbedtls_ecp_curve_info*
    constantsTouched: []
    func_position:
      end: 81
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 81
    functionName: mbedtls_compat_get_group_id
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: mbedtls_compat_group_id
    signature: 'static inline mbedtls_compat_group_id mbedtls_compat_get_group_id(const
      mbedtls_ecp_curve_info *curve_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_ssl_conf_max_version
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:162,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - conf
    - tls_version
    argTypes:
    - mbedtls_ssl_config*
    - mbedtls_ssl_protocol_version
    constantsTouched: []
    func_position:
      end: 163
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 163
    functionName: mbedtls_ssl_conf_max_tls_version
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - mbedtls_ssl_conf_max_version
    linkageType: ''
    returnType: void
    signature: 'static inline void mbedtls_ssl_conf_max_tls_version(mbedtls_ssl_config
      *conf, mbedtls_ssl_protocol_version tls_version) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - mbedtls_cipher_info_t*
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: mbedtls_cipher_info_get_block_size
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t mbedtls_cipher_info_get_block_size(const mbedtls_cipher_info_t
      *cipher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - mbedtls_cipher_info_t*
    constantsTouched: []
    func_position:
      end: 187
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 187
    functionName: mbedtls_cipher_info_get_key_bitlen
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t mbedtls_cipher_info_get_key_bitlen(const mbedtls_cipher_info_t
      *cipher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - mbedtls_cipher_info_t*
    constantsTouched: []
    func_position:
      end: 199
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 199
    functionName: mbedtls_cipher_info_get_name
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *mbedtls_cipher_info_get_name(const mbedtls_cipher_info_t
      *cipher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_dhm_context*
    constantsTouched: []
    func_position:
      end: 211
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 211
    functionName: mbedtls_dhm_get_bitlen
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t mbedtls_dhm_get_bitlen(const mbedtls_dhm_context
      *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - ext_type
    argTypes:
    - mbedtls_x509_crt*
    - int
    constantsTouched: []
    func_position:
      end: 230
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 230
    functionName: mbedtls_x509_crt_has_ext_type
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int mbedtls_x509_crt_has_ext_type(const mbedtls_x509_crt
      *ctx, int ext_type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_ctr_drbg_update
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:97,1
    - Dst: mbedtls_ctr_drbg_update_ret
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:99,1
    - Dst: mbedtls_ctr_drbg_update
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:101,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 3
    argNames:
    - ctx
    - additional
    - add_len
    argTypes:
    - mbedtls_ctr_drbg_context*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 104
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 104
    functionName: mbedtls_compat_ctr_drbg_update
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - mbedtls_ctr_drbg_update_ret
    - mbedtls_ctr_drbg_update
    linkageType: ''
    returnType: int
    signature: 'static inline int mbedtls_compat_ctr_drbg_update(mbedtls_ctr_drbg_context
      *ctx, const unsigned char *additional, size_t add_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_pk_parse_key
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:124,1
    - Dst: mbedtls_pk_parse_key
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:126,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 7
    argNames:
    - ctx
    - key
    - keylen
    - pwd
    - pwdlen
    - (*f_rng)
    - p_rng
    argTypes:
    - mbedtls_pk_context*
    - unsigned char*
    - size_t
    - unsigned char*
    - size_t
    - int
    - void*
    constantsTouched: []
    func_position:
      end: 128
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 128
    functionName: mbedtls_compat_pk_parse_key
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - mbedtls_pk_parse_key
    linkageType: ''
    returnType: int
    signature: 'static inline int mbedtls_compat_pk_parse_key(mbedtls_pk_context *ctx,
      const unsigned char *key, size_t keylen, const unsigned char *pwd, size_t pwdlen,
      int (*f_rng)(void *, unsigned char *, size_t), void *p_rng) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: mbedtls_md_info_from_ctx
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: mbedtls_md_info_t*
    signature: 'static inline const mbedtls_md_info_t *mbedtls_md_info_from_ctx(const
      mbedtls_md_context_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_pk_check_pair
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:111,1
    - Dst: mbedtls_pk_check_pair
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:113,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 4
    argNames:
    - pub
    - prv
    - (*f_rng)
    - p_rng
    argTypes:
    - mbedtls_pk_context*
    - mbedtls_pk_context*
    - int
    - void*
    constantsTouched: []
    func_position:
      end: 115
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 115
    functionName: mbedtls_compat_pk_check_pair
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - mbedtls_pk_check_pair
    linkageType: ''
    returnType: int
    signature: 'static inline int mbedtls_compat_pk_check_pair(const mbedtls_pk_context
      *pub, const mbedtls_pk_context *prv, int (*f_rng)(void *, unsigned char *, size_t),
      void *p_rng) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_pk_parse_keyfile
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:136,1
    - Dst: mbedtls_pk_parse_keyfile
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:138,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 5
    argNames:
    - ctx
    - path
    - password
    - (*f_rng)
    - p_rng
    argTypes:
    - mbedtls_pk_context*
    - char*
    - char*
    - int
    - void*
    constantsTouched: []
    func_position:
      end: 140
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 140
    functionName: mbedtls_compat_pk_parse_keyfile
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - mbedtls_pk_parse_keyfile
    linkageType: ''
    returnType: int
    signature: 'static inline int mbedtls_compat_pk_parse_keyfile(mbedtls_pk_context
      *ctx, const char *path, const char *password, int (*f_rng)(void *, unsigned
      char *, size_t), void *p_rng) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_ssl_conf_min_version
      Src: /src/openvpn/src/openvpn/mbedtls_compat.h:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - conf
    - tls_version
    argTypes:
    - mbedtls_ssl_config*
    - mbedtls_ssl_protocol_version
    constantsTouched: []
    func_position:
      end: 155
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 155
    functionName: mbedtls_ssl_conf_min_tls_version
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached:
    - mbedtls_ssl_conf_min_version
    linkageType: ''
    returnType: void
    signature: 'static inline void mbedtls_ssl_conf_min_tls_version(mbedtls_ssl_config
      *conf, mbedtls_ssl_protocol_version tls_version) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - buf_size
    argTypes:
    - mbedtls_pem_context*
    - size_t*
    constantsTouched: []
    func_position:
      end: 224
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 224
    functionName: mbedtls_pem_get_buffer
    functionSourceFile: /src/openvpn/src/openvpn/mbedtls_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned char*
    signature: 'static inline const unsigned char *mbedtls_pem_get_buffer(const mbedtls_pem_context
      *ctx, size_t *buf_size) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options_util.c:35,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options_util.c:46,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options_util.c:38,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options_util.c:41,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/options_util.c:49,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options_util.c:52,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options_util.c:52,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options_util.c:54,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options_util.c:56,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options_util.c:60,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options_util.c:60,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options_util.c:63,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options_util.c:80,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/options_util.c:82,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options_util.c:97,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options_util.c:62,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options_util.c:72,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options_util.c:67,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 53
    argCount: 2
    argNames:
    - o
    - reason
    argTypes:
    - struct options*
    - char*
    constantsTouched: []
    func_position:
      end: 99
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 99
    functionName: parse_auth_failed_temp
    functionSourceFile: /src/openvpn/src/openvpn/options_util.c
    functionUses: []
    functionsReached:
    - sscanf
    - strstr
    - string_alloc
    - msg
    - gc_new
    - strlen
    - strcmp
    - gc_free
    - strtok
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'const char *parse_auth_failed_temp(struct options *o, const char *reason) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strtoll
      Src: /src/openvpn/src/openvpn/options_util.c:105,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 2
    argNames:
    - str
    - positive
    argTypes:
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 115
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 115
    functionName: valid_integer
    functionSourceFile: /src/openvpn/src/openvpn/options_util.c
    functionUses: []
    functionsReached:
    - strtoll
    linkageType: ''
    returnType: bool
    signature: 'bool valid_integer(const char *str, bool positive) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strtoll
      Src: /src/openvpn/src/openvpn/options_util.c:121,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options_util.c:125,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - str
    - msglevel
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 131
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 131
    functionName: positive_atoi
    functionSourceFile: /src/openvpn/src/openvpn/options_util.c
    functionUses: []
    functionsReached:
    - strtoll
    - msg
    linkageType: ''
    returnType: int
    signature: 'int positive_atoi(const char *str, int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strtoll
      Src: /src/openvpn/src/openvpn/options_util.c:137,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options_util.c:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - str
    - msglevel
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 146
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 146
    functionName: atoi_warn
    functionSourceFile: /src/openvpn/src/openvpn/options_util.c
    functionUses: []
    functionsReached:
    - strtoll
    - msg
    linkageType: ''
    returnType: int
    signature: 'int atoi_warn(const char *str, int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/misc.c:87,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:87,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/misc.c:90,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:91,1
    - Dst: prng_bytes
      Src: /src/openvpn/src/openvpn/misc.c:89,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/misc.c:92,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - hostname
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 94
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 94
    functionName: hostname_randomize
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - prng_bytes
    - format_hex_ex
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *hostname_randomize(const char *hostname, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/misc.c:597,1
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/misc.c:604,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:597,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/misc.c:606,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:598,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:606,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:607,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/misc.c:609,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/misc.c:610,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/misc.c:611,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/misc.c:614,1
    - Dst: skip_leading_whitespace
      Src: /src/openvpn/src/openvpn/misc.c:611,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 21
    argCount: 2
    argNames:
    - str
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 617
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 617
    functionName: make_inline_array
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - buf_parse
    - ASSERT
    - chomp
    - strlen
    - ALLOC_ARRAY_CLEAR_GC
    - skip_leading_whitespace
    - string_alloc
    linkageType: ''
    returnType: char**
    signature: 'static const char **make_inline_array(const char *str, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:794,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:796,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/misc.c:795,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:794,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:794,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/misc.c:797,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 3
    argNames:
    - dir
    - path
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 800
      start: 791
    functionDepth: 0
    functionLinenumber: 791
    functionLinenumberEnd: 800
    functionName: prepend_dir
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - buf_printf
    - strlen
    - ASSERT
    - alloc_buf_gc
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer prepend_dir(const char *dir, const char *path, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string_array_len
      Src: /src/openvpn/src/openvpn/misc.c:623,1
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/misc.c:628,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 8
    argCount: 2
    argNames:
    - p
    - gc
    argTypes:
    - char**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 636
      start: 619
    functionDepth: 0
    functionLinenumber: 619
    functionLinenumberEnd: 636
    functionName: make_arg_copy
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY_CLEAR_GC
    - string_array_len
    linkageType: ''
    returnType: char**
    signature: 'static const char **make_arg_copy(char **p, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: protect_buffer_win32
      Src: /src/openvpn/src/openvpn/misc.c:810,1
    - Dst: protect_buffer_win32
      Src: /src/openvpn/src/openvpn/misc.c:811,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:817,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - up
    argTypes:
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 820
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 820
    functionName: protect_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - protect_buffer_win32
    - purge_user_pass
    linkageType: ''
    returnType: void
    signature: 'void protect_user_pass(struct user_pass *up) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: open
      Src: /src/openvpn/src/openvpn/misc.c:59,1
    - Dst: dup2
      Src: /src/openvpn/src/openvpn/misc.c:65,1
    - Dst: dup2
      Src: /src/openvpn/src/openvpn/misc.c:61,1
    - Dst: dup2
      Src: /src/openvpn/src/openvpn/misc.c:64,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/misc.c:69,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - stdin_only
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 73
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 73
    functionName: set_std_files_to_null
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - open
    - close
    - dup2
    linkageType: ''
    returnType: void
    signature: 'void set_std_files_to_null(bool stdin_only) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: management_auth_failure
      Src: /src/openvpn/src/openvpn/misc.c:106,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:121,1
    - Dst: management_query_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:113,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 4
    argNames:
    - up
    - prefix
    - flags
    - auth_challenge
    argTypes:
    - struct user_pass*
    - char*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 125
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 125
    functionName: auth_user_pass_mgmt
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - msg
    - management_query_user_pass
    - management_auth_failure
    linkageType: ''
    returnType: bool
    signature: 'static bool auth_user_pass_mgmt(struct user_pass *up, const char *prefix,
      const unsigned int flags, const char *auth_challenge) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/misc.c:490,1
    - Dst: protect_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:495,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:502,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 2
    argNames:
    - up
    - force
    argTypes:
    - struct user_pass*
    - bool
    constantsTouched: []
    func_position:
      end: 506
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 506
    functionName: purge_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - secure_memzero
    - protect_user_pass
    - msg
    linkageType: ''
    returnType: void
    signature: 'void purge_user_pass(struct user_pass *up, const bool force) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:511,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/misc.c:514,1
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:513,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:520,1
    - Dst: protect_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:524,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - tk
    - token
    argTypes:
    - struct user_pass*
    - char*
    constantsTouched: []
    func_position:
      end: 526
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 526
    functionName: set_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - strlen
    - strncpynt
    - protect_user_pass
    - unprotect_user_pass
    linkageType: ''
    returnType: void
    signature: 'void set_auth_token(struct user_pass *tk, const char *token) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string_mod_const
      Src: /src/openvpn/src/openvpn/misc.c:558,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - str
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 559
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 559
    functionName: safe_print
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - string_mod_const
    linkageType: ''
    returnType: char*
    signature: 'const char *safe_print(const char *str, struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: isalnum
      Src: /src/openvpn/src/openvpn/misc.c:747,1
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/misc.c:758,1
    - Dst: isprint
      Src: /src/openvpn/src/openvpn/misc.c:758,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 28
    argCount: 1
    argNames:
    - line
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 767
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 767
    functionName: validate_peer_info_line
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - isprint
    - isspace
    - isalnum
    linkageType: ''
    returnType: bool
    signature: 'bool validate_peer_info_line(char *line) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:531,1
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:533,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/misc.c:537,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/misc.c:538,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:542,1
    - Dst: protect_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:544,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 2
    argNames:
    - tk
    - username
    argTypes:
    - struct user_pass*
    - char*
    constantsTouched: []
    func_position:
      end: 546
      start: 528
    functionDepth: 0
    functionLinenumber: 528
    functionLinenumberEnd: 546
    functionName: set_auth_token_user
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - msg
    - openvpn_base64_decode
    - CLEAR
    - unprotect_user_pass
    - strlen
    - protect_user_pass
    linkageType: ''
    returnType: void
    signature: 'void set_auth_token_user(struct user_pass *tk, const char *username) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/misc.c:570,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/misc.c:575,1
    - Dst: parse_line
      Src: /src/openvpn/src/openvpn/misc.c:580,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/misc.c:581,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 19
    argCount: 3
    argNames:
    - first
    - parms
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 586
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 586
    functionName: make_arg_array
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY_CLEAR_GC
    - ASSERT
    - parse_line
    - string_alloc
    linkageType: ''
    returnType: char**
    signature: 'const char **make_arg_array(const char *first, const char *parms,
      struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/misc.c:774,1
    - Dst: validate_peer_info_line
      Src: /src/openvpn/src/openvpn/misc.c:778,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:774,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:775,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/misc.c:777,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/misc.c:779,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/misc.c:779,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:781,1
    - Dst: env_set_add
      Src: /src/openvpn/src/openvpn/misc.c:782,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:786,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 18
    argCount: 2
    argNames:
    - es
    - peer_info
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 789
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 789
    functionName: output_peer_info_env
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - msg
    - validate_peer_info_line
    - buf_parse
    - env_set_add
    - chomp
    - strlen
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'void output_peer_info_env(struct env_set *es, const char *peer_info) '
  - BBCount: 34
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:261,1
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/misc.c:292,1
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/misc.c:443,1
    - Dst: query_user_exec
      Src: /src/openvpn/src/openvpn/misc.c:412,1
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/misc.c:444,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:387,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/misc.c:402,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:457,1
    - Dst: strncat
      Src: /src/openvpn/src/openvpn/misc.c:461,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:317,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/misc.c:435,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/misc.c:432,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:397,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:433,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:274,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:276,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:295,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:374,1
    - Dst: fgets
      Src: /src/openvpn/src/openvpn/misc.c:310,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/misc.c:377,1
    - Dst: fgets
      Src: /src/openvpn/src/openvpn/misc.c:301,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:303,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/misc.c:252,1
    - Dst: query_user_SINGLE
      Src: /src/openvpn/src/openvpn/misc.c:255,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/misc.c:263,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/misc.c:312,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:432,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/misc.c:382,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/misc.c:378,1
    - Dst: query_user_add
      Src: /src/openvpn/src/openvpn/misc.c:408,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:414,1
    - Dst: query_user_add
      Src: /src/openvpn/src/openvpn/misc.c:402,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:421,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:457,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:333,1
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:225,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:254,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/misc.c:255,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/misc.c:453,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/misc.c:468,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/misc.c:469,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/misc.c:435,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/misc.c:336,1
    - Dst: query_user_SINGLE
      Src: /src/openvpn/src/openvpn/misc.c:377,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/misc.c:377,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/misc.c:393,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/misc.c:448,1
    - Dst: string_clear
      Src: /src/openvpn/src/openvpn/misc.c:450,1
    - Dst: auth_user_pass_mgmt
      Src: /src/openvpn/src/openvpn/misc.c:240,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/misc.c:308,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:443,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:444,1
    - Dst: auth_user_pass_mgmt
      Src: /src/openvpn/src/openvpn/misc.c:334,1
    - Dst: query_user_clear
      Src: /src/openvpn/src/openvpn/misc.c:396,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:446,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/misc.c:437,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/misc.c:428,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:459,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:419,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/misc.c:408,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:228,1
    - Dst: parse_auth_challenge
      Src: /src/openvpn/src/openvpn/misc.c:367,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:380,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/misc.c:394,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:439,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/misc.c:402,1
    - Dst: string_clear
      Src: /src/openvpn/src/openvpn/misc.c:452,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/misc.c:255,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/misc.c:269,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:272,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/misc.c:346,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/misc.c:322,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:350,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/misc.c:375,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:398,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:373,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/misc.c:408,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:461,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/misc.c:220,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:258,1
    - Dst: query_user_SINGLE
      Src: /src/openvpn/src/openvpn/misc.c:435,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/misc.c:451,1
    - Dst: management_query_user_pass_enabled
      Src: /src/openvpn/src/openvpn/misc.c:237,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:348,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:383,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/misc.c:449,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:269,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/misc.c:216,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/misc.c:370,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/misc.c:373,1
    CyclomaticComplexity: 72
    EdgeCount: 72
    ICount: 201
    argCount: 5
    argNames:
    - up
    - auth_file
    - prefix
    - flags
    - auth_challenge
    argTypes:
    - struct user_pass*
    - char*
    - char*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 472
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 472
    functionName: get_user_pass_cr
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - management_query_user_pass_enabled
    - fgets
    - msg
    - BLEN
    - strncat
    - free
    - query_user_clear
    - string_mod
    - BOOL_CAST
    - openvpn_base64_encode
    - gc_new
    - parse_auth_challenge
    - platform_fopen
    - buf_set_write
    - query_user_SINGLE
    - strncpy
    - unprotect_user_pass
    - string_clear
    - streq
    - auth_user_pass_mgmt
    - buf_printf
    - fclose
    - query_user_add
    - buf_parse
    - strncpynt
    - strcpy
    - strlen
    - alloc_buf_gc
    - buf_set_read
    - BSTR
    - gc_malloc
    - chomp
    - query_user_exec
    linkageType: ''
    returnType: bool
    signature: 'bool get_user_pass_cr(struct user_pass *up, const char *auth_file,
      const char *prefix, const unsigned int flags, const char *auth_challenge) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: string_array_len
      Src: /src/openvpn/src/openvpn/misc.c:641,1
    - Dst: make_arg_array
      Src: /src/openvpn/src/openvpn/misc.c:648,1
    - Dst: make_arg_array
      Src: /src/openvpn/src/openvpn/misc.c:652,1
    - Dst: make_arg_array
      Src: /src/openvpn/src/openvpn/misc.c:656,1
    - Dst: make_inline_array
      Src: /src/openvpn/src/openvpn/misc.c:644,1
    - Dst: make_arg_copy
      Src: /src/openvpn/src/openvpn/misc.c:660,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 3
    argNames:
    - p
    - is_inline
    - gc
    argTypes:
    - char**
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 662
      start: 638
    functionDepth: 0
    functionLinenumber: 638
    functionLinenumberEnd: 662
    functionName: make_extended_arg_array
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - make_arg_array
    - make_arg_copy
    - string_array_len
    - make_inline_array
    linkageType: ''
    returnType: char**
    signature: 'const char **make_extended_arg_array(char **p, bool is_inline, struct
      gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: unprotect_buffer_win32
      Src: /src/openvpn/src/openvpn/misc.c:830,1
    - Dst: unprotect_buffer_win32
      Src: /src/openvpn/src/openvpn/misc.c:831,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/misc.c:837,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - up
    argTypes:
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 840
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 840
    functionName: unprotect_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - unprotect_buffer_win32
    - purge_user_pass
    linkageType: ''
    returnType: void
    signature: 'void unprotect_user_pass(struct user_pass *up) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/misc.c:142,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:145,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/misc.c:152,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/misc.c:150,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/misc.c:146,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:155,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/misc.c:159,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:165,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:183,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/misc.c:187,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/misc.c:198,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/misc.c:190,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/misc.c:195,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/misc.c:198,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:194,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/misc.c:194,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 40
    argCount: 2
    argNames:
    - auth_challenge
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 201
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 201
    functionName: parse_auth_challenge
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - BSTR
    - gc_malloc
    - openvpn_base64_decode
    - buf_parse
    - strcmp
    - ALLOC_OBJ_CLEAR_GC
    - ASSERT
    - strlen
    - string_alloc
    linkageType: ''
    returnType: struct auth_challenge_info*
    signature: 'static struct auth_challenge_info *parse_auth_challenge(const char
      *auth_challenge, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/misc.c:333,1
    - Dst: auth_user_pass_mgmt
      Src: /src/openvpn/src/openvpn/misc.c:334,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/misc.c:336,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - management_query_user_pass_enabled
    argTypes:
    - "management\n                     && (flags & GET_USER_PASS_MANAGEMENT)"
    constantsTouched: []
    func_position:
      end: 339
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 339
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - msg
    - fclose
    - auth_user_pass_mgmt
    linkageType: ''
    returnType: else
    signature: 'else if (management && (flags & GET_USER_PASS_MANAGEMENT) && management_query_user_pass_enabled(management)) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/misc.c:671,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/misc.c:683,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/misc.c:693,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/misc.c:688,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/misc.c:671,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/misc.c:694,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 2
    argNames:
    - src
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 726
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 726
    functionName: sanitize_control_message
    functionSourceFile: /src/openvpn/src/openvpn/misc.c
    functionUses: []
    functionsReached:
    - strlen
    - gc_malloc
    - check_debug_level
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'const char *sanitize_control_message(const char *src, struct gc_arena
      *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/tun.h:501,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - status
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 504
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 504
    functionName: tuntap_abort
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached:
    - GetLastError
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_abort(int status) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.h:511,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.h:522,1
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/tun.h:520,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.h:515,1
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/tun.h:513,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 533
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 533
    functionName: is_ip_packet_valid
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached:
    - BLEN
    - OPENVPN_IPH_GET_VER
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_ip_packet_valid(const struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - status
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 553
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 553
    functionName: tuntap_stop
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_stop(int status) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 570
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 570
    functionName: tun_standby
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tun_standby(struct tuntap *tt) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: tuntap_defined
      Src: /src/openvpn/src/openvpn/tun.h:608,1
    - Dst: tuntap_is_dco_win
      Src: /src/openvpn/src/openvpn/tun.h:608,1
    - Dst: tun_read_queue
      Src: /src/openvpn/src/openvpn/tun.h:625,1
    - Dst: tun_event_handle
      Src: /src/openvpn/src/openvpn/tun.h:616,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/tun.h:616,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 20
    argCount: 5
    argNames:
    - tt
    - es
    - rwflags
    - arg
    - persistent
    argTypes:
    - struct tuntap*
    - struct event_set*
    - unsigned int
    - void*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 630
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 630
    functionName: tun_set
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached:
    - tun_read_queue
    - tun_event_handle
    - event_ctl
    - tuntap_is_dco_win
    - tuntap_defined
    linkageType: ''
    returnType: void
    signature: 'static inline void tun_set(struct tuntap *tt, struct event_set *es,
      unsigned int rwflags, void *arg, unsigned int *persistent) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 639
      start: 635
    functionDepth: 0
    functionLinenumber: 635
    functionLinenumberEnd: 639
    functionName: is_tun_type_set
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_tun_type_set(const struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 256
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 256
    functionName: tuntap_defined
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_defined(const struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 3
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 380
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 380
    functionName: ifconfig_order
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int ifconfig_order(struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/tun.h:488,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - status
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 491
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 491
    functionName: tuntap_stop
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached:
    - GetLastError
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_stop(int status) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 398
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 398
    functionName: route_order
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int route_order(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 539
      start: 535
    functionDepth: 0
    functionLinenumber: 535
    functionLinenumberEnd: 539
    functionName: tuntap_is_dco_win
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_is_dco_win(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tuntap_is_dco_win
      Src: /src/openvpn/src/openvpn/tun.h:544,1
    - Dst: openvpn_errno
      Src: /src/openvpn/src/openvpn/tun.h:544,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - tt
    - status
    argTypes:
    - struct tuntap*
    - int
    constantsTouched: []
    func_position:
      end: 545
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 545
    functionName: tuntap_is_dco_win_timeout
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached:
    - tuntap_is_dco_win
    - openvpn_errno
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_is_dco_win_timeout(struct tuntap *tt, int
      status) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - status
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 559
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 559
    functionName: tuntap_abort
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_abort(int status) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 564
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 564
    functionName: tun_standby_init
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void tun_standby_init(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 577
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 577
    functionName: tuntap_is_dco_win
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_is_dco_win(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - tt
    - status
    argTypes:
    - struct tuntap*
    - int
    constantsTouched: []
    func_position:
      end: 583
      start: 579
    functionDepth: 0
    functionLinenumber: 579
    functionLinenumberEnd: 583
    functionName: tuntap_is_dco_win_timeout
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tuntap_is_dco_win_timeout(struct tuntap *tt, int
      status) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 599
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 599
    functionName: tun_event_handle
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: event_t
    signature: 'static inline event_t tun_event_handle(const struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.h:644,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 645
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 645
    functionName: open_tun_null
    functionSourceFile: /src/openvpn/src/openvpn/tun.h
    functionUses: []
    functionsReached:
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static inline void open_tun_null(struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/console_builtin.c:176,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - fp
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 178
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 178
    functionName: close_tty
    functionSourceFile: /src/openvpn/src/openvpn/console_builtin.c
    functionUses: []
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: 'static void close_tty(FILE *fp) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_console_input
      Src: /src/openvpn/src/openvpn/console_builtin.c:288,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 297
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 297
    functionName: query_user_exec_builtin
    functionSourceFile: /src/openvpn/src/openvpn/console_builtin.c
    functionUses: []
    functionsReached:
    - get_console_input
    linkageType: ''
    returnType: bool
    signature: 'bool query_user_exec_builtin(void) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: isatty
      Src: /src/openvpn/src/openvpn/console_builtin.c:212,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/console_builtin.c:217,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/console_builtin.c:222,1
    - Dst: open_tty
      Src: /src/openvpn/src/openvpn/console_builtin.c:230,1
    - Dst: fflush
      Src: /src/openvpn/src/openvpn/console_builtin.c:227,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/console_builtin.c:249,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console_builtin.c:197,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/console_builtin.c:214,1
    - Dst: close_tty
      Src: /src/openvpn/src/openvpn/console_builtin.c:228,1
    - Dst: fileno
      Src: /src/openvpn/src/openvpn/console_builtin.c:236,1
    - Dst: fileno
      Src: /src/openvpn/src/openvpn/console_builtin.c:232,1
    - Dst: tcsetattr
      Src: /src/openvpn/src/openvpn/console_builtin.c:236,1
    - Dst: fgets
      Src: /src/openvpn/src/openvpn/console_builtin.c:239,1
    - Dst: fileno
      Src: /src/openvpn/src/openvpn/console_builtin.c:247,1
    - Dst: close_tty
      Src: /src/openvpn/src/openvpn/console_builtin.c:253,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/console_builtin.c:255,1
    - Dst: isatty
      Src: /src/openvpn/src/openvpn/console_builtin.c:212,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console_builtin.c:198,1
    - Dst: get_console_input_win32
      Src: /src/openvpn/src/openvpn/console_builtin.c:203,1
    - Dst: open_tty
      Src: /src/openvpn/src/openvpn/console_builtin.c:225,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/console_builtin.c:226,1
    - Dst: tcgetattr
      Src: /src/openvpn/src/openvpn/console_builtin.c:232,1
    - Dst: fflush
      Src: /src/openvpn/src/openvpn/console_builtin.c:256,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/console_builtin.c:261,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console_builtin.c:199,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/console_builtin.c:241,1
    - Dst: tcsetattr
      Src: /src/openvpn/src/openvpn/console_builtin.c:247,1
    - Dst: open_tty
      Src: /src/openvpn/src/openvpn/console_builtin.c:254,1
    - Dst: close_tty
      Src: /src/openvpn/src/openvpn/console_builtin.c:259,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 60
    argCount: 4
    argNames:
    - prompt
    - echo
    - input
    - capacity
    argTypes:
    - char*
    - bool
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 264
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 264
    functionName: get_console_input
    functionSourceFile: /src/openvpn/src/openvpn/console_builtin.c
    functionUses: []
    functionsReached:
    - fflush
    - fgets
    - get_console_input_win32
    - chomp
    - msg
    - tcsetattr
    - fileno
    - open_tty
    - fprintf
    - ASSERT
    - close
    - isatty
    - close_tty
    - open
    - tcgetattr
    linkageType: ''
    returnType: bool
    signature: 'static bool get_console_input(const char *prompt, const bool echo,
      char *input, const int capacity) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console_builtin.c:64,1
    - Dst: win32_service_interrupt
      Src: /src/openvpn/src/openvpn/console_builtin.c:71,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/console_builtin.c:111,1
    - Dst: string_null_terminate
      Src: /src/openvpn/src/openvpn/console_builtin.c:119,1
    - Dst: _write
      Src: /src/openvpn/src/openvpn/console_builtin.c:124,1
    - Dst: win32_service_interrupt
      Src: /src/openvpn/src/openvpn/console_builtin.c:130,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/console_builtin.c:74,1
    - Dst: SetConsoleMode
      Src: /src/openvpn/src/openvpn/console_builtin.c:92,1
    - Dst: _write
      Src: /src/openvpn/src/openvpn/console_builtin.c:72,1
    - Dst: GetFileType
      Src: /src/openvpn/src/openvpn/console_builtin.c:78,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/console_builtin.c:112,1
    - Dst: ReadConsoleW
      Src: /src/openvpn/src/openvpn/console_builtin.c:110,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/console_builtin.c:104,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/console_builtin.c:120,1
    - Dst: SetConsoleMode
      Src: /src/openvpn/src/openvpn/console_builtin.c:128,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console_builtin.c:62,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console_builtin.c:63,1
    - Dst: GetStdHandle
      Src: /src/openvpn/src/openvpn/console_builtin.c:68,1
    - Dst: get_orig_stderr
      Src: /src/openvpn/src/openvpn/console_builtin.c:69,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/console_builtin.c:72,1
    - Dst: ReadFile
      Src: /src/openvpn/src/openvpn/console_builtin.c:116,1
    - Dst: GetConsoleMode
      Src: /src/openvpn/src/openvpn/console_builtin.c:85,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 53
    argCount: 4
    argNames:
    - prompt
    - echo
    - input
    - capacity
    argTypes:
    - char*
    - bool
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 136
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 136
    functionName: get_console_input_win32
    functionSourceFile: /src/openvpn/src/openvpn/console_builtin.c
    functionUses: []
    functionsReached:
    - SetConsoleMode
    - string_null_terminate
    - chomp
    - msg
    - ReadConsoleW
    - win32_service_interrupt
    - _write
    - GetStdHandle
    - free
    - ReadFile
    - ASSERT
    - get_orig_stderr
    - GetFileType
    - malloc
    - strlen
    - WideCharToMultiByte
    - GetConsoleMode
    linkageType: ''
    returnType: bool
    signature: 'static bool get_console_input_win32(const char *prompt, const bool
      echo, char *input, const int capacity) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/console_builtin.c:157,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - write
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 163
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 163
    functionName: open_tty
    functionSourceFile: /src/openvpn/src/openvpn/console_builtin.c
    functionUses: []
    functionsReached:
    - fopen
    linkageType: ''
    returnType: FILE*
    signature: 'static FILE *open_tty(const bool write) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:80,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 2
    argNames:
    - key
    - other
    argTypes:
    - struct key2*
    - struct key2*
    constantsTouched: []
    func_position:
      end: 94
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 94
    functionName: xor_key2
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void xor_key2(struct key2 *key, const struct key2 *other) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/tls_crypt.c:56,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: tls_crypt_buf_overhead
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - packet_id_size
    linkageType: ''
    returnType: int
    signature: 'int tls_crypt_buf_overhead(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:149,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:151,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/tls_crypt.c:152,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/tls_crypt.c:154,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:156,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:157,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:162,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:181,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/tls_crypt.c:185,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:192,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:202,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:201,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:202,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:157,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/tls_crypt.c:170,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:166,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:157,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:167,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:183,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:188,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:189,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:198,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:198,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:208,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:201,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:206,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/tls_crypt.c:151,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:167,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:170,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:167,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:172,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:182,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:183,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:183,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:192,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:200,1
    - Dst: crypto_clear_error
      Src: /src/openvpn/src/openvpn/tls_crypt.c:212,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:206,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:150,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:152,1
    - Dst: packet_id_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:160,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:182,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:182,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:185,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:186,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:198,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:199,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:200,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:201,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:206,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:214,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:199,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:205,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 66
    argCount: 3
    argNames:
    - src
    - dst
    - opt
    argTypes:
    - struct buffer*
    - struct buffer*
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 216
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 216
    functionName: tls_crypt_wrap
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - hmac_ctx_size
    - dmsg
    - crypto_clear_error
    - msg
    - BLEN
    - buf_write_alloc
    - gc_init
    - buf_inc_len
    - buf_safe
    - cipher_ctx_update
    - BPTR
    - gc_free
    - cipher_ctx_final
    - BEND
    - format_hex
    - hmac_ctx_final
    - hmac_ctx_update
    - hmac_ctx_reset
    - packet_id_initialized
    - ASSERT
    - packet_id_write
    - cipher_ctx_reset
    linkageType: ''
    returnType: bool
    signature: 'bool tls_crypt_wrap(const struct buffer *src, struct buffer *dst,
      struct crypto_options *opt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tls_crypt_kt
      Src: /src/openvpn/src/openvpn/tls_crypt.c:323,1
    - Dst: init_key_ctx_bi
      Src: /src/openvpn/src/openvpn/tls_crypt.c:328,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:326,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 3
    argNames:
    - key
    - key2
    - tls_server
    argTypes:
    - struct key_ctx_bi*
    - struct key2*
    - bool
    constantsTouched: []
    func_position:
      end: 330
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 330
    functionName: tls_crypt_v2_load_client_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - init_key_ctx_bi
    - msg
    - tls_crypt_kt
    linkageType: ''
    returnType: void
    signature: 'static inline void tls_crypt_v2_load_client_key(struct key_ctx_bi
      *key, const struct key2 *key2, bool tls_server) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:365,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:369,1
    - Dst: tls_crypt_kt
      Src: /src/openvpn/src/openvpn/tls_crypt.c:372,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:375,1
    - Dst: read_pem_key_file
      Src: /src/openvpn/src/openvpn/tls_crypt.c:366,1
    - Dst: key_parameters_from_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:379,1
    - Dst: init_key_ctx
      Src: /src/openvpn/src/openvpn/tls_crypt.c:381,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/tls_crypt.c:382,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 4
    argNames:
    - key_ctx
    - encrypt
    - key_file
    - key_inline
    argTypes:
    - struct key_ctx*
    - bool
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 383
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 383
    functionName: tls_crypt_v2_init_server_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - msg
    - secure_memzero
    - buf_set_write
    - tls_crypt_kt
    - key_parameters_from_key
    - init_key_ctx
    - read_pem_key_file
    linkageType: ''
    returnType: void
    signature: 'void tls_crypt_v2_init_server_key(struct key_ctx *key_ctx, bool encrypt,
      const char *key_file, bool key_inline) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:458,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:484,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:493,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:505,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:507,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:509,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:514,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:516,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:517,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:523,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:509,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:524,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:457,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:461,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:470,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:477,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:481,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:488,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:491,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:501,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:503,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:505,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:522,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:525,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:532,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/tls_crypt.c:549,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:498,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:526,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:521,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:499,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/tls_crypt.c:534,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:540,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:513,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tls_crypt.c:449,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:457,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:468,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:474,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:479,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/tls_crypt.c:480,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:480,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/tls_crypt.c:486,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:495,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:497,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/tls_crypt.c:538,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:515,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:550,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:534,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:457,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:456,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:463,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/tls_crypt.c:474,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/tls_crypt.c:477,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:472,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:503,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:530,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/tls_crypt.c:535,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:535,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/tls_crypt.c:547,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:515,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:497,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/tls_crypt.c:519,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 87
    argCount: 4
    argNames:
    - client_key
    - metadata
    - wrapped_client_key
    - server_key
    argTypes:
    - struct key2*
    - struct buffer*
    - struct buffer
    - struct key_ctx*
    constantsTouched: []
    func_position:
      end: 552
      start: 442
    functionDepth: 0
    functionLinenumber: 442
    functionLinenumberEnd: 552
    functionName: tls_crypt_v2_unwrap_client_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - buf_copy
    - memcpy
    - buf_clear
    - dmsg
    - CRYPT_ERROR
    - msg
    - BLEN
    - memcmp_constant_time
    - buf_inc_len
    - cipher_ctx_update
    - BPTR
    - gc_new
    - secure_memzero
    - gc_free
    - buf_set_write
    - cipher_ctx_final
    - BEND
    - format_hex
    - hmac_ctx_final
    - hmac_ctx_update
    - buf_len
    - hmac_ctx_reset
    - ntohs
    - cipher_ctx_reset
    - ASSERT
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_crypt_v2_unwrap_client_key(struct key2 *client_key,
      struct buffer *metadata, struct buffer wrapped_client_key, struct key_ctx *server_key) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:621,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:633,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:663,1
    - Dst: tls_crypt_v2_load_client_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:683,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:687,1
    - Dst: tls_crypt_v2_verify_metadata
      Src: /src/openvpn/src/openvpn/tls_crypt.c:691,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:640,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:642,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:663,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/tls_crypt.c:667,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:673,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:682,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:663,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:687,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:687,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:631,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:626,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:636,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/tls_crypt.c:639,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/tls_crypt.c:640,1
    - Dst: tls_crypt_v2_unwrap_client_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:668,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/tls_crypt.c:674,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/tls_crypt.c:636,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:659,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 45
    argCount: 4
    argNames:
    - buf
    - ctx
    - opt
    - initial_packet
    argTypes:
    - struct buffer*
    - struct tls_wrap_ctx*
    - struct tls_options*
    - bool
    constantsTouched: []
    func_position:
      end: 695
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 695
    functionName: tls_crypt_v2_extract_client_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - memcpy
    - tls_crypt_v2_unwrap_client_key
    - msg
    - BLEN
    - buf_advance
    - secure_memzero
    - tls_crypt_v2_load_client_key
    - ASSERT
    - alloc_buf
    - memset
    - BEND
    - buf_inc_len
    - tls_crypt_v2_verify_metadata
    - ntohs
    linkageType: ''
    returnType: bool
    signature: 'bool tls_crypt_v2_extract_client_key(struct buffer *buf, struct tls_wrap_ctx
      *ctx, const struct tls_options *opt, bool initial_packet) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: create_kt
      Src: /src/openvpn/src/openvpn/tls_crypt.c:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: tls_crypt_kt
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - create_kt
    linkageType: ''
    returnType: struct key_type
    signature: 'static struct key_type tls_crypt_kt(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tls_crypt_kt
      Src: /src/openvpn/src/openvpn/tls_crypt.c:65,1
    - Dst: crypto_read_openvpn_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:70,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:68,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 5
    argNames:
    - key
    - keydata
    - key_file
    - key_inline
    - tls_server
    argTypes:
    - struct key_ctx_bi*
    - struct key2*
    - char*
    - bool
    - bool
    constantsTouched: []
    func_position:
      end: 72
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 72
    functionName: tls_crypt_init_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - crypto_read_openvpn_key
    - msg
    - tls_crypt_kt
    linkageType: ''
    returnType: void
    signature: 'void tls_crypt_init_key(struct key_ctx_bi *key, struct key2 *keydata,
      const char *key_file, bool key_inline, bool tls_server) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: key_state_export_keying_material
      Src: /src/openvpn/src/openvpn/tls_crypt.c:100,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tls_crypt.c:101,1
    - Dst: packet_id_init
      Src: /src/openvpn/src/openvpn/tls_crypt.c:114,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/tls_crypt.c:111,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/tls_crypt.c:111,1
    - Dst: xor_key2
      Src: /src/openvpn/src/openvpn/tls_crypt.c:122,1
    - Dst: key_direction_state_init
      Src: /src/openvpn/src/openvpn/tls_crypt.c:129,1
    - Dst: tls_crypt_kt
      Src: /src/openvpn/src/openvpn/tls_crypt.c:131,1
    - Dst: init_key_ctx_bi
      Src: /src/openvpn/src/openvpn/tls_crypt.c:133,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/tls_crypt.c:135,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 1
    argNames:
    - session
    argTypes:
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 138
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 138
    functionName: tls_session_generate_dynamic_tls_crypt_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - BUF_SIZE
    - xor_key2
    - init_key_ctx_bi
    - secure_memzero
    - packet_id_init
    - alloc_buf
    - key_state_export_keying_material
    - strlen
    - tls_crypt_kt
    - key_direction_state_init
    linkageType: ''
    returnType: bool
    signature: 'bool tls_session_generate_dynamic_tls_crypt_key(struct tls_session
      *session) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/tls_crypt.c:226,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:229,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:231,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/tls_crypt.c:231,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:234,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:235,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:256,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:239,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:254,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:252,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:286,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/tls_crypt.c:299,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:261,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:307,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/tls_crypt.c:300,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:277,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:289,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:230,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:235,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:235,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:237,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:252,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:249,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:261,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:266,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:280,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:281,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:313,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:277,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:288,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:290,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:228,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/tls_crypt.c:247,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:257,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:257,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:264,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:266,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:281,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:281,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/tls_crypt.c:284,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:299,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:256,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:262,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:303,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:247,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:259,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:271,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:274,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:275,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:275,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:276,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:277,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:279,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:280,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:282,1
    - Dst: crypto_check_replay
      Src: /src/openvpn/src/openvpn/tls_crypt.c:301,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:300,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:287,1
    - Dst: crypto_clear_error
      Src: /src/openvpn/src/openvpn/tls_crypt.c:311,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:262,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 89
    argCount: 3
    argNames:
    - src
    - dst
    - opt
    argTypes:
    - struct buffer*
    - struct buffer*
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 315
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 315
    functionName: tls_crypt_unwrap
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - dmsg
    - crypto_clear_error
    - CRYPT_ERROR
    - BLEN
    - packet_id_read
    - gc_init
    - memcmp_constant_time
    - buf_inc_len
    - buf_safe
    - cipher_ctx_update
    - BPTR
    - gc_free
    - cipher_ctx_final
    - format_hex
    - hmac_ctx_final
    - buf_len
    - hmac_ctx_update
    - crypto_check_replay
    - hmac_ctx_reset
    - packet_id_initialized
    - ASSERT
    - cipher_ctx_reset
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'bool tls_crypt_unwrap(const struct buffer *src, struct buffer *dst,
      struct crypto_options *opt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/tls_crypt.c:337,1
    - Dst: read_pem_key_file
      Src: /src/openvpn/src/openvpn/tls_crypt.c:340,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/tls_crypt.c:347,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:343,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:349,1
    - Dst: tls_crypt_v2_load_client_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:352,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 14
    argCount: 5
    argNames:
    - key
    - original_key
    - wkc_buf
    - key_file
    - key_inline
    argTypes:
    - struct key_ctx_bi*
    - struct key2*
    - struct buffer*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 356
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 356
    functionName: tls_crypt_v2_init_client_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - msg
    - buf_read
    - tls_crypt_v2_load_client_key
    - alloc_buf
    - read_pem_key_file
    linkageType: ''
    returnType: void
    signature: 'void tls_crypt_v2_init_client_key(struct key_ctx_bi *key, struct key2
      *original_key, struct buffer *wkc_buf, const char *key_file, bool key_inline) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: htons
      Src: /src/openvpn/src/openvpn/tls_crypt.c:402,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:405,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:408,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tls_crypt.c:412,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/tls_crypt.c:415,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:419,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:411,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:437,1
    - Dst: cipher_ctx_block_size
      Src: /src/openvpn/src/openvpn/tls_crypt.c:393,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:407,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/tls_crypt.c:418,1
    - Dst: cipher_ctx_block_size
      Src: /src/openvpn/src/openvpn/tls_crypt.c:421,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:423,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:429,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:431,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:432,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:433,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:434,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:436,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tls_crypt.c:392,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/tls_crypt.c:396,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:399,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:406,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:409,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:429,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:432,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:435,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:435,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/tls_crypt.c:439,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:402,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:408,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:408,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:415,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:429,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:431,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/tls_crypt.c:432,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:433,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:434,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/tls_crypt.c:435,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:437,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:436,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 53
    argCount: 5
    argNames:
    - wkc
    - src_key
    - src_metadata
    - server_key
    - gc
    argTypes:
    - struct buffer*
    - struct key2*
    - struct buffer*
    - struct key_ctx*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 440
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 440
    functionName: tls_crypt_v2_wrap_client_key
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - buf_copy
    - dmsg
    - buf_forward_capacity
    - msg
    - BLEN
    - buf_write_alloc
    - buf_inc_len
    - htons
    - cipher_ctx_update
    - buf_write
    - BPTR
    - cipher_ctx_final
    - BEND
    - format_hex
    - hmac_ctx_final
    - hmac_ctx_update
    - hmac_ctx_reset
    - alloc_buf_gc
    - ASSERT
    - cipher_ctx_reset
    - cipher_ctx_block_size
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_crypt_v2_wrap_client_key(struct buffer *wkc, const
      struct key2 *src_key, const struct buffer *src_metadata, struct key_ctx *server_key,
      struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/tls_crypt.c:569,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tls_crypt.c:578,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/tls_crypt.c:586,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:605,1
    - Dst: buffer_write_file
      Src: /src/openvpn/src/openvpn/tls_crypt.c:571,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/tls_crypt.c:562,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:573,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/tls_crypt.c:580,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tls_crypt.c:581,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/tls_crypt.c:589,1
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/tls_crypt.c:594,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:565,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tls_crypt.c:582,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tls_crypt.c:585,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:601,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:609,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tls_crypt.c:559,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:596,1
    - Dst: argv_msg_prefix
      Src: /src/openvpn/src/openvpn/tls_crypt.c:587,1
    - Dst: env_set_destroy
      Src: /src/openvpn/src/openvpn/tls_crypt.c:592,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:591,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tls_crypt.c:583,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 35
    argCount: 2
    argNames:
    - ctx
    - opt
    argTypes:
    - struct tls_wrap_ctx*
    - struct tls_options*
    constantsTouched: []
    func_position:
      end: 611
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 611
    functionName: tls_crypt_v2_verify_metadata
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - argv_msg_prefix
    - openvpn_run_script
    - argv_parse_cmd
    - msg
    - snprintf
    - argv_free
    - env_set_destroy
    - gc_new
    - setenv_str
    - gc_free
    - env_set_create
    - argv_new
    - platform_unlink
    - buf_read_u8
    - platform_create_temp_file
    - buffer_write_file
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_crypt_v2_verify_metadata(const struct tls_wrap_ctx
      *ctx, const struct tls_options *opt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write_pem_key_file
      Src: /src/openvpn/src/openvpn/tls_crypt.c:700,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 701
      start: 697
    functionDepth: 0
    functionLinenumber: 697
    functionLinenumberEnd: 701
    functionName: tls_crypt_v2_write_server_key_file
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - write_pem_key_file
    linkageType: ''
    returnType: void
    signature: 'void tls_crypt_v2_write_server_key_file(const char *filename) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tls_crypt.c:709,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tls_crypt.c:712,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/tls_crypt.c:716,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tls_crypt.c:727,1
    - Dst: OPENVPN_BASE64_DECODED_LENGTH
      Src: /src/openvpn/src/openvpn/tls_crypt.c:727,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:728,1
    - Dst: htonll
      Src: /src/openvpn/src/openvpn/tls_crypt.c:748,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:750,1
    - Dst: tls_crypt_v2_init_server_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:753,1
    - Dst: tls_crypt_v2_wrap_client_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:755,1
    - Dst: crypto_pem_encode
      Src: /src/openvpn/src/openvpn/tls_crypt.c:763,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/tls_crypt.c:810,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/tls_crypt.c:805,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:721,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/tls_crypt.c:729,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/tls_crypt.c:730,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:738,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/tls_crypt.c:743,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:749,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tls_crypt.c:775,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:775,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tls_crypt.c:776,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:781,1
    - Dst: tls_crypt_v2_init_client_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:790,1
    - Dst: buffer_write_file
      Src: /src/openvpn/src/openvpn/tls_crypt.c:779,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/tls_crypt.c:729,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:733,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:728,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tls_crypt.c:775,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/src/openvpn/tls_crypt.c:792,1
    - Dst: tls_crypt_v2_init_server_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:799,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:801,1
    - Dst: tls_crypt_v2_unwrap_client_key
      Src: /src/openvpn/src/openvpn/tls_crypt.c:802,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/tls_crypt.c:804,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tls_crypt.c:813,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:789,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tls_crypt.c:795,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/tls_crypt.c:811,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:721,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:718,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tls_crypt.c:726,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tls_crypt.c:747,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:743,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/tls_crypt.c:749,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:750,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:758,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tls_crypt.c:766,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/tls_crypt.c:773,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/tls_crypt.c:809,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/tls_crypt.c:798,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/tls_crypt.c:808,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tls_crypt.c:802,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 79
    argCount: 4
    argNames:
    - filename
    - b64_metadata
    - server_key_file
    - server_key_inline
    argTypes:
    - char*
    - char*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 814
      start: 703
    functionDepth: 0
    functionLinenumber: 703
    functionLinenumberEnd: 814
    functionName: tls_crypt_v2_write_client_key_file
    functionSourceFile: /src/openvpn/src/openvpn/tls_crypt.c
    functionUses: []
    functionsReached:
    - buf_clear
    - msg
    - openvpn_base64_decode
    - htonll
    - BLEN
    - rand_bytes
    - tls_crypt_v2_unwrap_client_key
    - buf_inc_len
    - buffer_write_file
    - tls_crypt_v2_init_server_key
    - tls_crypt_v2_init_client_key
    - buf_write
    - BPTR
    - free_key_ctx_bi
    - gc_new
    - secure_memzero
    - gc_free
    - BEND
    - streq
    - free_key_ctx
    - OPENVPN_BASE64_DECODED_LENGTH
    - tls_crypt_v2_wrap_client_key
    - strlen
    - BCAP
    - alloc_buf_gc
    - crypto_pem_encode
    - free_buf
    - ASSERT
    - printf
    linkageType: ''
    returnType: void
    signature: 'void tls_crypt_v2_write_client_key_file(const char *filename, const
      char *b64_metadata, const char *server_key_file, bool server_key_inline) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/tun_afunix.h:70,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - devnode
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: is_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.h
    functionUses: []
    functionsReached:
    - strprefix
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_tun_afunix(const char *devnode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 932
      start: 924
    functionDepth: 0
    functionLinenumber: 924
    functionLinenumberEnd: 932
    functionName: dco_enabled
    functionSourceFile: /src/openvpn/src/openvpn/options.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_enabled(const struct options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/mtu.c:45,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/mtu.c:46,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/mtu.c:45,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtu.c:46,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mtu.c:48,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/mtu.c:48,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - buf
    - frame
    argTypes:
    - struct buffer*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 49
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 49
    functionName: alloc_buf_sock_tun
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - buf_safe
    - buf_init
    - BUF_SIZE
    - ASSERT
    - alloc_buf
    linkageType: ''
    returnType: void
    signature: 'void alloc_buf_sock_tun(struct buffer *buf, const struct frame *frame) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/mtu.c:73,1
    - Dst: calc_packet_id_size_dc
      Src: /src/openvpn/src/openvpn/mtu.c:90,1
    - Dst: calculate_crypto_overhead
      Src: /src/openvpn/src/openvpn/mtu.c:94,1
    - Dst: proto_is_tcp
      Src: /src/openvpn/src/openvpn/mtu.c:79,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 14
    argCount: 3
    argNames:
    - kt
    - options
    - occ
    argTypes:
    - struct key_type*
    - struct options*
    - bool
    constantsTouched: []
    func_position:
      end: 96
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 96
    functionName: frame_calculate_protocol_header_size
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - proto_is_udp
    - calc_packet_id_size_dc
    - calculate_crypto_overhead
    - proto_is_tcp
    linkageType: ''
    returnType: size_t
    signature: 'size_t frame_calculate_protocol_header_size(const struct key_type
      *kt, const struct options *options, bool occ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: frame_calculate_payload_overhead
      Src: /src/openvpn/src/openvpn/mtu.c:146,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 3
    argNames:
    - frame
    - options
    - kt
    argTypes:
    - struct frame*
    - struct options*
    - struct key_type*
    constantsTouched: []
    func_position:
      end: 148
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 148
    functionName: frame_calculate_payload_size
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - frame_calculate_payload_overhead
    linkageType: ''
    returnType: size_t
    signature: 'size_t frame_calculate_payload_size(const struct frame *frame, const
      struct options *options, const struct key_type *kt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/mtu.c:198,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:204,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:205,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/mtu.c:199,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:202,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:207,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:209,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:210,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:211,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:212,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:215,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:213,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:217,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/mtu.c:218,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:214,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 3
    argNames:
    - frame
    - level
    - prefix
    argTypes:
    - struct frame*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 219
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 219
    functionName: frame_print
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - buf_printf
    - msg
    - gc_new
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void frame_print(const struct frame *frame, int level, const char
      *prefix) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/mtu.c:232,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:235,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/mtu.c:243,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:253,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:246,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 3
    argNames:
    - sd
    - mtu_type
    - proto_af
    argTypes:
    - socket_descriptor_t
    - int
    - sa_family_t
    constantsTouched: []
    func_position:
      end: 257
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 257
    functionName: set_mtu_discover_type
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    linkageType: ''
    returnType: void
    signature: 'void set_mtu_discover_type(socket_descriptor_t sd, int mtu_type, sa_family_t
      proto_af) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/mtu.c:56,1
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/mtu.c:58,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 2
    argNames:
    - options
    - kt
    argTypes:
    - struct options*
    - struct key_type*
    constantsTouched: []
    func_position:
      end: 59
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 59
    functionName: calc_packet_id_size_dc
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_ofb_cfb
    - packet_id_size
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int calc_packet_id_size_dc(const struct options *options,
      const struct key_type *kt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/mtu.c:129,1
    - Dst: calc_packet_id_size_dc
      Src: /src/openvpn/src/openvpn/mtu.c:134,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 3
    argNames:
    - extra_tun
    - options
    - kt
    argTypes:
    - size_t
    - struct options*
    - struct key_type*
    constantsTouched: []
    func_position:
      end: 138
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 138
    functionName: frame_calculate_payload_overhead
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - calc_packet_id_size_dc
    - cipher_kt_mode_cbc
    linkageType: ''
    returnType: size_t
    signature: 'size_t frame_calculate_payload_overhead(size_t extra_tun, const struct
      options *options, const struct key_type *kt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/mtu.c:158,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/mtu.c:171,1
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/mtu.c:185,1
    - Dst: frame_calculate_payload_size
      Src: /src/openvpn/src/openvpn/mtu.c:159,1
    - Dst: frame_calculate_payload_size
      Src: /src/openvpn/src/openvpn/mtu.c:187,1
    - Dst: frame_calculate_protocol_header_size
      Src: /src/openvpn/src/openvpn/mtu.c:188,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 2
    argNames:
    - o
    - frame
    argTypes:
    - struct options*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 191
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 191
    functionName: calc_options_string_link_mtu
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - strcmp
    - init_key_type
    - frame_calculate_payload_size
    - frame_calculate_protocol_header_size
    linkageType: ''
    returnType: size_t
    signature: 'size_t calc_options_string_link_mtu(const struct options *o, const
      struct frame *frame) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/mtu.c:263,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/mtu.c:267,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/mtu.c:271,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:279,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:275,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 282
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 282
    functionName: translate_mtu_discover_type_name
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - strcmp
    - msg
    linkageType: ''
    returnType: int
    signature: 'int translate_mtu_discover_type_name(const char *name) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/mtu.c:302,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/mtu.c:345,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:362,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:371,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:387,1
    - Dst: buf_rmtail
      Src: /src/openvpn/src/openvpn/mtu.c:397,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/mtu.c:328,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/mtu.c:303,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/mtu.c:334,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:375,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/mtu.c:309,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:349,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:366,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:391,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:379,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/mtu.c:398,1
    - Dst: recvmsg
      Src: /src/openvpn/src/openvpn/mtu.c:320,1
    - Dst: CMSG_NXTHDR
      Src: /src/openvpn/src/openvpn/mtu.c:328,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:338,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:383,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mtu.c:355,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 56
    argCount: 3
    argNames:
    - fd
    - mtu
    - gc
    argTypes:
    - int
    - int*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 399
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 399
    functionName: format_extended_socket_error
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - CMSG_DATA
    - buf_rmtail
    - BSTR
    - CMSG_FIRSTHDR
    - buf_printf
    - gc_malloc
    - recvmsg
    - CMSG_NXTHDR
    - memset
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *format_extended_socket_error(int fd, int *mtu, struct
      gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/mtu.c:408,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:410,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mtu.c:419,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/mtu.c:417,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 2
    argNames:
    - sd
    - proto_af
    argTypes:
    - int
    - sa_family_t
    constantsTouched: []
    func_position:
      end: 422
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 422
    functionName: set_sock_extended_error_passing
    functionSourceFile: /src/openvpn/src/openvpn/mtu.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    linkageType: ''
    returnType: void
    signature: 'void set_sock_extended_error_passing(int sd, sa_family_t proto_af) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: nice
      Src: /src/openvpn/src/openvpn/platform.c:316,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:322,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:318,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:325,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - niceval
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 328
      start: 309
    functionDepth: 0
    functionLinenumber: 309
    functionLinenumberEnd: 328
    functionName: platform_nice
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - msg
    - nice
    linkageType: ''
    returnType: void
    signature: 'void platform_nice(int niceval) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WIFEXITED
      Src: /src/openvpn/src/openvpn/platform.c:418,1
    - Dst: WEXITSTATUS
      Src: /src/openvpn/src/openvpn/platform.c:418,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - stat
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 420
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 420
    functionName: platform_system_ok
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - WEXITSTATUS
    - WIFEXITED
    linkageType: ''
    returnType: bool
    signature: 'bool platform_system_ok(int stat) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: string_mod_const
      Src: /src/openvpn/src/openvpn/platform.c:608,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/platform.c:612,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/platform.c:611,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/platform.c:618,1
    - Dst: win_safe_filename
      Src: /src/openvpn/src/openvpn/platform.c:614,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/platform.c:618,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/platform.c:619,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/platform.c:627,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/platform.c:629,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/platform.c:631,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 31
    argCount: 3
    argNames:
    - directory
    - filename
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 637
      start: 592
    functionDepth: 0
    functionLinenumber: 592
    functionLinenumberEnd: 637
    functionName: platform_gen_path
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - win_safe_filename
    - BSTR
    - buf_printf
    - string_mod_const
    - strcmp
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *platform_gen_path(const char *directory, const char *filename,
      struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: isalpha
      Src: /src/openvpn/src/openvpn/platform.c:646,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - pathname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 655
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 655
    functionName: platform_absolute_pathname
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - isalpha
    linkageType: ''
    returnType: bool
    signature: 'bool platform_absolute_pathname(const char *pathname) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/platform.c:81,1
    - Dst: getpwnam
      Src: /src/openvpn/src/openvpn/platform.c:86,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:89,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:98,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 2
    argNames:
    - username
    - state
    argTypes:
    - char*
    - struct platform_state_user*
    constantsTouched: []
    func_position:
      end: 102
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 102
    functionName: platform_user_get
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - msg
    - CLEAR
    - getpwnam
    linkageType: ''
    returnType: bool
    signature: 'bool platform_user_get(const char *username, struct platform_state_user
      *state) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: need_keep_caps
      Src: /src/openvpn/src/openvpn/platform.c:220,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:249,1
    - Dst: capng_clear
      Src: /src/openvpn/src/openvpn/platform.c:245,1
    - Dst: capng_change_id
      Src: /src/openvpn/src/openvpn/platform.c:256,1
    - Dst: capng_update
      Src: /src/openvpn/src/openvpn/platform.c:246,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:261,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:266,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:267,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:272,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:279,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:295,1
    - Dst: platform_group_set
      Src: /src/openvpn/src/openvpn/platform.c:304,1
    - Dst: prctl
      Src: /src/openvpn/src/openvpn/platform.c:293,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:301,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:286,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:283,1
    - Dst: platform_user_set
      Src: /src/openvpn/src/openvpn/platform.c:305,1
    - Dst: prctl
      Src: /src/openvpn/src/openvpn/platform.c:293,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 53
    argCount: 3
    argNames:
    - user_state
    - group_state
    - c
    argTypes:
    - struct platform_state_user*
    - struct platform_state_group*
    - struct context*
    constantsTouched: []
    func_position:
      end: 306
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 306
    functionName: platform_user_group_set
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - capng_update
    - need_keep_caps
    - capng_clear
    - platform_group_set
    - msg
    - capng_change_id
    - prctl
    - platform_user_set
    linkageType: ''
    returnType: void
    signature: 'void platform_user_group_set(const struct platform_state_user *user_state,
      const struct platform_state_group *group_state, struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/platform.c:396,1
    - Dst: chdir
      Src: /src/openvpn/src/openvpn/platform.c:402,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/platform.c:398,1
    - Dst: _wchdir
      Src: /src/openvpn/src/openvpn/platform.c:397,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/platform.c:397,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - dir
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 407
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 407
    functionName: platform_chdir
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - _wchdir
    - chdir
    - wide_string
    - gc_new
    - gc_free
    linkageType: ''
    returnType: int
    signature: 'int platform_chdir(const char *dir) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/platform.c:503,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/platform.c:504,1
    - Dst: _wfopen
      Src: /src/openvpn/src/openvpn/platform.c:504,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/platform.c:505,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/platform.c:504,1
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/platform.c:508,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - path
    - mode
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 510
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 510
    functionName: platform_fopen
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - _wfopen
    - wide_string
    - gc_new
    - fopen
    - gc_free
    linkageType: ''
    returnType: FILE*
    signature: 'FILE *platform_fopen(const char *path, const char *mode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/platform.c:516,1
    - Dst: _wopen
      Src: /src/openvpn/src/openvpn/platform.c:517,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/platform.c:521,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/platform.c:518,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/platform.c:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - path
    - flags
    - mode
    argTypes:
    - char*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 523
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 523
    functionName: platform_open
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - wide_string
    - gc_new
    - gc_free
    - open
    - _wopen
    linkageType: ''
    returnType: int
    signature: 'int platform_open(const char *path, int flags, int mode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Sleep
      Src: /src/openvpn/src/openvpn/platform.c:476,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/platform.c:481,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - n
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 483
      start: 472
    functionDepth: 0
    functionLinenumber: 472
    functionLinenumberEnd: 483
    functionName: platform_sleep_milliseconds
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - Sleep
    - select
    linkageType: ''
    returnType: void
    signature: 'void platform_sleep_milliseconds(unsigned int n) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/platform.c:553,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:557,1
    - Dst: platform_gen_path
      Src: /src/openvpn/src/openvpn/platform.c:561,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/platform.c:554,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/platform.c:555,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:564,1
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/platform.c:570,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/platform.c:573,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:579,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:585,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 33
    argCount: 3
    argNames:
    - directory
    - prefix
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 587
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 587
    functionName: platform_create_temp_file
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - get_random
    - platform_gen_path
    - msg
    - snprintf
    - platform_open
    - close
    linkageType: ''
    returnType: char*
    signature: 'const char *platform_create_temp_file(const char *directory, const
      char *prefix, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/platform.c:664,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:674,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/platform.c:679,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/platform.c:667,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 684
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 684
    functionName: platform_test_file
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - platform_fopen
    - fclose
    - msg
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'bool platform_test_file(const char *filename) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - stat
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 434
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 434
    functionName: platform_ret_code
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int platform_ret_code(int stat) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/platform.c:529,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/platform.c:530,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/platform.c:531,1
    - Dst: stat
      Src: /src/openvpn/src/openvpn/platform.c:534,1
    - Dst: _wstat
      Src: /src/openvpn/src/openvpn/platform.c:530,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - path
    - buf
    argTypes:
    - char*
    - platform_stat_t*
    constantsTouched: []
    func_position:
      end: 536
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 536
    functionName: platform_stat
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - stat
    - _wstat
    - wide_string
    - gc_new
    - gc_free
    linkageType: ''
    returnType: int
    signature: 'int platform_stat(const char *path, platform_stat_t *buf) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: chroot
      Src: /src/openvpn/src/openvpn/platform.c:60,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:68,1
    - Dst: platform_chdir
      Src: /src/openvpn/src/openvpn/platform.c:64,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:62,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:66,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:70,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - path
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 73
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 73
    functionName: platform_chroot
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - msg
    - platform_chdir
    - chroot
    linkageType: ''
    returnType: void
    signature: 'void platform_chroot(const char *path) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/platform.c:125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:133,1
    - Dst: getgrnam
      Src: /src/openvpn/src/openvpn/platform.c:130,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:142,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 2
    argNames:
    - groupname
    - state
    argTypes:
    - char*
    - struct platform_state_group*
    constantsTouched: []
    func_position:
      end: 146
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 146
    functionName: platform_group_get
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - msg
    - getgrnam
    - CLEAR
    linkageType: ''
    returnType: bool
    signature: 'bool platform_group_get(const char *groupname, struct platform_state_group
      *state) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/platform.c:190,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 206
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 206
    functionName: need_keep_caps
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - dco_enabled
    linkageType: ''
    returnType: int
    signature: 'static int need_keep_caps(struct context *c) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: getrlimit
      Src: /src/openvpn/src/openvpn/platform.c:350,1
    - Dst: setrlimit
      Src: /src/openvpn/src/openvpn/platform.c:367,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:360,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:352,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:356,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:369,1
    - Dst: mlockall
      Src: /src/openvpn/src/openvpn/platform.c:375,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:377,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:381,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:384,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 1
    argNames:
    - print_msg
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 386
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 386
    functionName: platform_mlockall
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - msg
    - setrlimit
    - getrlimit
    - mlockall
    linkageType: ''
    returnType: void
    signature: 'void platform_mlockall(bool print_msg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/platform.c:460,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/platform.c:462,1
    - Dst: _waccess
      Src: /src/openvpn/src/openvpn/platform.c:461,1
    - Dst: access
      Src: /src/openvpn/src/openvpn/platform.c:465,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/platform.c:461,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - path
    - mode
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 467
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 467
    functionName: platform_access
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - wide_string
    - gc_new
    - access
    - _waccess
    - gc_free
    linkageType: ''
    returnType: int
    signature: 'int platform_access(const char *path, int mode) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: setuid
      Src: /src/openvpn/src/openvpn/platform.c:110,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:114,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:112,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - state
    argTypes:
    - struct platform_state_user*
    constantsTouched: []
    func_position:
      end: 117
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 117
    functionName: platform_user_set
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - msg
    - setuid
    linkageType: ''
    returnType: void
    signature: 'static void platform_user_set(const struct platform_state_user *state) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: setgid
      Src: /src/openvpn/src/openvpn/platform.c:154,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:156,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:165,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/platform.c:158,1
    - Dst: setgroups
      Src: /src/openvpn/src/openvpn/platform.c:163,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 1
    argNames:
    - state
    argTypes:
    - struct platform_state_group*
    constantsTouched: []
    func_position:
      end: 171
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 171
    functionName: platform_group_set
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - setgroups
    - msg
    - setgid
    linkageType: ''
    returnType: void
    signature: 'static void platform_group_set(const struct platform_state_group *state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetCurrentProcessId
      Src: /src/openvpn/src/openvpn/platform.c:335,1
    - Dst: getpid
      Src: /src/openvpn/src/openvpn/platform.c:337,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 339
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 339
    functionName: platform_getpid
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - GetCurrentProcessId
    - getpid
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int platform_getpid(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: WIFEXITED
      Src: /src/openvpn/src/openvpn/platform.c:439,1
    - Dst: WEXITSTATUS
      Src: /src/openvpn/src/openvpn/platform.c:444,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - stat
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 453
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 453
    functionName: platform_ret_code
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - WEXITSTATUS
    - WIFEXITED
    linkageType: ''
    returnType: int
    signature: 'int platform_ret_code(int stat) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/platform.c:490,1
    - Dst: DeleteFileW
      Src: /src/openvpn/src/openvpn/platform.c:491,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/platform.c:491,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/platform.c:492,1
    - Dst: unlink
      Src: /src/openvpn/src/openvpn/platform.c:495,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 497
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 497
    functionName: platform_unlink
    functionSourceFile: /src/openvpn/src/openvpn/platform.c
    functionUses: []
    functionsReached:
    - unlink
    - wide_string
    - gc_new
    - gc_free
    - DeleteFileW
    linkageType: ''
    returnType: bool
    signature: 'bool platform_unlink(const char *filename) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: GREMLIN_CORRUPT_LEVEL
      Src: /src/openvpn/src/openvpn/gremlin.c:185,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/gremlin.c:200,1
    - Dst: roll
      Src: /src/openvpn/src/openvpn/gremlin.c:194,1
    - Dst: flip
      Src: /src/openvpn/src/openvpn/gremlin.c:188,1
    - Dst: roll
      Src: /src/openvpn/src/openvpn/gremlin.c:195,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/gremlin.c:204,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/gremlin.c:208,1
    - Dst: roll
      Src: /src/openvpn/src/openvpn/gremlin.c:208,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/gremlin.c:212,1
    - Dst: roll
      Src: /src/openvpn/src/openvpn/gremlin.c:220,1
    - Dst: flip
      Src: /src/openvpn/src/openvpn/gremlin.c:229,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/gremlin.c:223,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 30
    argCount: 2
    argNames:
    - buf
    - flags
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 232
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 232
    functionName: corrupt_gremlin
    functionSourceFile: /src/openvpn/src/openvpn/gremlin.c
    functionUses: []
    functionsReached:
    - GREMLIN_CORRUPT_LEVEL
    - buf_write
    - BPTR
    - dmsg
    - flip
    - roll
    linkageType: ''
    returnType: void
    signature: 'void corrupt_gremlin(struct buffer *buf, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/gremlin.c:108,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/gremlin.c:109,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/gremlin.c:110,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - low
    - high
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 112
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 112
    functionName: roll
    functionSourceFile: /src/openvpn/src/openvpn/gremlin.c
    functionUses: []
    functionsReached:
    - get_random
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static int roll(int low, int high) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/gremlin.c:87,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - level
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: get_packet_flood_parms
    functionSourceFile: /src/openvpn/src/openvpn/gremlin.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: struct packet_flood_parms
    signature: 'struct packet_flood_parms get_packet_flood_parms(int level) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/gremlin.c:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 98
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 98
    functionName: flip
    functionSourceFile: /src/openvpn/src/openvpn/gremlin.c
    functionUses: []
    functionsReached:
    - get_random
    linkageType: ''
    returnType: bool
    signature: 'static bool flip(int n) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GREMLIN_UP_DOWN_LEVEL
      Src: /src/openvpn/src/openvpn/gremlin.c:124,1
    - Dst: roll
      Src: /src/openvpn/src/openvpn/gremlin.c:155,1
    - Dst: GREMLIN_DROP_LEVEL
      Src: /src/openvpn/src/openvpn/gremlin.c:125,1
    - Dst: roll
      Src: /src/openvpn/src/openvpn/gremlin.c:150,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/gremlin.c:159,1
    - Dst: flip
      Src: /src/openvpn/src/openvpn/gremlin.c:169,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/gremlin.c:171,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 1
    argNames:
    - flags
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 177
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 177
    functionName: ask_gremlin
    functionSourceFile: /src/openvpn/src/openvpn/gremlin.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - flip
    - GREMLIN_DROP_LEVEL
    - GREMLIN_UP_DOWN_LEVEL
    - roll
    linkageType: ''
    returnType: bool
    signature: 'bool ask_gremlin(int flags) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_get_id
      Src: /src/openvpn/src/openvpn/xkey_provider.c:102,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 3
    argCount: 1
    argNames:
    - key
    argTypes:
    - XKEY_KEYDATA*
    constantsTouched: []
    func_position:
      end: 118
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 118
    functionName: get_keytype
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_get_id
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *get_keytype(const XKEY_KEYDATA *key) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:173,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:186,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - key
    argTypes:
    - XKEY_KEYDATA*
    constantsTouched: []
    func_position:
      end: 189
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 189
    functionName: keydata_free
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - xkey_dmsg
    - OPENSSL_free
    linkageType: ''
    returnType: void
    signature: 'static void keydata_free(XKEY_KEYDATA *key) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:372,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - keydata
    - selection
    argTypes:
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 387
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 387
    functionName: keymgmt_has
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int keymgmt_has(const void *keydata, int selection) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:961,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:963,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 4
    argNames:
    - ctx
    - mdname
    - provkey
    - params
    argTypes:
    - void*
    - char*
    - void*
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 965
      start: 957
    functionDepth: 0
    functionLinenumber: 957
    functionLinenumberEnd: 965
    functionName: signature_digest_verify_init
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - msg
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int signature_digest_verify_init(void *ctx, const char *mdname,
      void *provkey, const OSSL_PARAM params[]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:985,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:989,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:991,1
    - Dst: keydata_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:995,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:990,1
    - Dst: get_keytype
      Src: /src/openvpn/src/openvpn/xkey_provider.c:999,1
    - Dst: signature_set_ctx_params
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1001,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1002,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1002,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1008,1
    - Dst: xkey_mdname
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1015,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1019,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 26
    argCount: 4
    argNames:
    - ctx
    - mdname
    - provkey
    - params
    argTypes:
    - void*
    - char*
    - void*
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 1022
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 1022
    functionName: signature_digest_sign_init
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_mdname
    - msg
    - xkey_dmsg
    - signature_set_ctx_params
    - strcmp
    - keydata_free
    - get_keytype
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static int signature_digest_sign_init(void *ctx, const char *mdname,
      void *provkey, const OSSL_PARAM params[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:194,1
    - Dst: keydata_new
      Src: /src/openvpn/src/openvpn/xkey_provider.c:196,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - provctx
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 203
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 203
    functionName: keymgmt_new
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - keydata_new
    linkageType: ''
    returnType: void*
    signature: 'static void *keymgmt_new(void *provctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_get_size
      Src: /src/openvpn/src/openvpn/xkey_provider.c:124,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - XKEY_KEYDATA*
    constantsTouched: []
    func_position:
      end: 125
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 125
    functionName: KEYSIZE
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_get_size
    linkageType: ''
    returnType: int
    signature: 'static int KEYSIZE(const XKEY_KEYDATA *key) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:395,1
    - Dst: EVP_PKEY_parameters_eq
      Src: /src/openvpn/src/openvpn/xkey_provider.c:409,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:404,1
    - Dst: EVP_PKEY_eq
      Src: /src/openvpn/src/openvpn/xkey_provider.c:403,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:410,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 17
    argCount: 3
    argNames:
    - keydata1
    - keydata2
    - selection
    argTypes:
    - void*
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 414
      start: 389
    functionDepth: 0
    functionLinenumber: 389
    functionLinenumberEnd: 414
    functionName: keymgmt_match
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_parameters_eq
    - xkey_dmsg
    - EVP_PKEY_eq
    linkageType: ''
    returnType: int
    signature: 'static int keymgmt_match(const void *keydata1, const void *keydata2,
      int selection) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1028,1
    - Dst: KEYSIZE
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1037,1
    - Dst: xkey_sign_dispatch
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1045,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1032,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1033,1
    - Dst: EVP_MD_fetch
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1051,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1054,1
    - Dst: EVP_Digest
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1061,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1063,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1064,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1067,1
    - Dst: signature_sign
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1069,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 23
    argCount: 6
    argNames:
    - ctx
    - sig
    - siglen
    - sigsize
    - tbs
    - tbslen
    argTypes:
    - void*
    - unsigned char*
    - size_t*
    - size_t
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 1070
      start: 1024
    functionDepth: 0
    functionLinenumber: 1024
    functionLinenumberEnd: 1070
    functionName: signature_digest_sign
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_Digest
    - signature_sign
    - msg
    - xkey_dmsg
    - EVP_MD_fetch
    - ASSERT
    - EVP_MD_free
    - xkey_sign_dispatch
    - KEYSIZE
    linkageType: ''
    returnType: int
    signature: 'static int signature_digest_sign(void *ctx, unsigned char *sig, size_t
      *siglen, size_t sigsize, const unsigned char *tbs, size_t tbslen) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1170,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1183,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 3
    argNames:
    - provctx
    - op
    - no_store
    argTypes:
    - void*
    - int
    - int*
    constantsTouched: []
    func_position:
      end: 1187
      start: 1167
    functionDepth: 0
    functionLinenumber: 1167
    functionLinenumberEnd: 1187
    functionName: query_operation
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    linkageType: ''
    returnType: OSSL_ALGORITHM*
    signature: 'static const OSSL_ALGORITHM *query_operation(void *provctx, int op,
      int *no_store) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:420,1
    - Dst: OSSL_PARAM_int
      Src: /src/openvpn/src/openvpn/xkey_provider.c:423,1
    - Dst: OSSL_PARAM_int
      Src: /src/openvpn/src/openvpn/xkey_provider.c:424,1
    - Dst: OSSL_PARAM_int
      Src: /src/openvpn/src/openvpn/xkey_provider.c:425,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - provctx
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 429
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 429
    functionName: keymgmt_gettable_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - OSSL_PARAM_int
    linkageType: ''
    returnType: OSSL_PARAM*
    signature: 'static const OSSL_PARAM *keymgmt_gettable_params(void *provctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:562,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 565
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 565
    functionName: rsa_keymgmt_name
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    linkageType: ''
    returnType: char*
    signature: 'static const char *rsa_keymgmt_name(int id) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:780,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_provider.c:795,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:807,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:789,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:803,1
    - Dst: OSSL_PARAM_get_int
      Src: /src/openvpn/src/openvpn/xkey_provider.c:813,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:826,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:829,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:833,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:836,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:847,1
    - Dst: xkey_mdname
      Src: /src/openvpn/src/openvpn/xkey_provider.c:839,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:844,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:861,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:865,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:869,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:840,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_provider.c:853,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 70
    argCount: 2
    argNames:
    - ctx
    - params
    argTypes:
    - void*
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 873
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 873
    functionName: signature_set_ctx_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_mdname
    - OSSL_PARAM_get_int
    - msg
    - xkey_dmsg
    - strcmp
    - OSSL_PARAM_locate_const
    linkageType: ''
    returnType: int
    signature: 'static int signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: xkey_native_sign
      Src: /src/openvpn/src/openvpn/xkey_provider.c:922,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:931,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:927,1
    - Dst: sign
      Src: /src/openvpn/src/openvpn/xkey_provider.c:926,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 5
    argNames:
    - sctx
    - sig
    - siglen
    - tbs
    - tbslen
    argTypes:
    - XKEY_SIGNATURE_CTX*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 935
      start: 913
    functionDepth: 0
    functionLinenumber: 913
    functionLinenumberEnd: 935
    functionName: xkey_sign_dispatch
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - sign
    - msg
    - xkey_native_sign
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int xkey_sign_dispatch(XKEY_SIGNATURE_CTX *sctx, unsigned char
      *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:159,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:164,1
    - Dst: OPENSSL_zalloc
      Src: /src/openvpn/src/openvpn/xkey_provider.c:161,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 168
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 168
    functionName: keydata_new
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - msg
    - xkey_dmsg
    - OPENSSL_zalloc
    linkageType: ''
    returnType: XKEY_KEYDATA*
    signature: 'static XKEY_KEYDATA *keydata_new(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:434,1
    - Dst: EVP_PKEY_get_params
      Src: /src/openvpn/src/openvpn/xkey_provider.c:442,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - keydata
    - params
    argTypes:
    - void*
    - OSSL_PARAM*
    constantsTouched: []
    func_position:
      end: 443
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 443
    functionName: keymgmt_get_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - EVP_PKEY_get_params
    linkageType: ''
    returnType: int
    signature: 'static int keymgmt_get_params(void *keydata, OSSL_PARAM *params) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:570,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:584,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - id
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 586
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 586
    functionName: ec_keymgmt_name
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - msg
    - xkey_dmsg
    linkageType: ''
    returnType: char*
    signature: 'static const char *ec_keymgmt_name(int id) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:878,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - provctx
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 883
      start: 875
    functionDepth: 0
    functionLinenumber: 875
    functionLinenumberEnd: 883
    functionName: signature_gettable_ctx_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    linkageType: ''
    returnType: OSSL_PARAM*
    signature: 'static const OSSL_PARAM *signature_gettable_ctx_params(void *ctx,
      void *provctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:941,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:945,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:944,1
    - Dst: xkey_sign_dispatch
      Src: /src/openvpn/src/openvpn/xkey_provider.c:954,1
    - Dst: KEYSIZE
      Src: /src/openvpn/src/openvpn/xkey_provider.c:949,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 6
    argNames:
    - ctx
    - sig
    - siglen
    - sigsize
    - tbs
    - tbslen
    argTypes:
    - void*
    - unsigned char*
    - size_t*
    - size_t
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 955
      start: 937
    functionDepth: 0
    functionLinenumber: 937
    functionLinenumberEnd: 955
    functionName: signature_sign
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_sign_dispatch
    - xkey_dmsg
    - ASSERT
    - KEYSIZE
    linkageType: ''
    returnType: int
    signature: 'static int signature_sign(void *ctx, unsigned char *sig, size_t *siglen,
      size_t sigsize, const unsigned char *tbs, size_t tbslen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:313,1
    - Dst: keymgmt_import
      Src: /src/openvpn/src/openvpn/xkey_provider.c:315,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 3
    argNames:
    - keydata
    - selection
    - params
    argTypes:
    - void*
    - int
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 316
      start: 310
    functionDepth: 0
    functionLinenumber: 310
    functionLinenumberEnd: 316
    functionName: rsa_keymgmt_import
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - keymgmt_import
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int rsa_keymgmt_import(void *keydata, int selection, const
      OSSL_PARAM params[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:329,1
    - Dst: keymgmt_import
      Src: /src/openvpn/src/openvpn/xkey_provider.c:331,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 3
    argNames:
    - keydata
    - selection
    - params
    argTypes:
    - void*
    - int
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 332
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 332
    functionName: ed448_keymgmt_import
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - keymgmt_import
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int ed448_keymgmt_import(void *keydata, int selection, const
      OSSL_PARAM params[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:350,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - selection
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 359
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 359
    functionName: keymgmt_import_types
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    linkageType: ''
    returnType: OSSL_PARAM*
    signature: 'static const OSSL_PARAM *keymgmt_import_types(int selection) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:539,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:541,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:554,1
    - Dst: EVP_PKEY_set_params
      Src: /src/openvpn/src/openvpn/xkey_provider.c:550,1
    - Dst: keymgmt_import_helper
      Src: /src/openvpn/src/openvpn/xkey_provider.c:545,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 2
    argNames:
    - keydata
    - params
    argTypes:
    - void*
    - OSSL_PARAM*
    constantsTouched: []
    func_position:
      end: 557
      start: 535
    functionDepth: 0
    functionLinenumber: 535
    functionLinenumberEnd: 557
    functionName: keymgmt_set_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_set_params
    - msg
    - xkey_dmsg
    - keymgmt_import_helper
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static int keymgmt_set_params(void *keydata, const OSSL_PARAM *params) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MD_get_type
      Src: /src/openvpn/src/openvpn/xkey_provider.c:721,1
    - Dst: EVP_get_digestbyname
      Src: /src/openvpn/src/openvpn/xkey_provider.c:721,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 728
      start: 711
    functionDepth: 0
    functionLinenumber: 711
    functionLinenumberEnd: 728
    functionName: xkey_mdname
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_get_digestbyname
    - EVP_MD_get_type
    linkageType: ''
    returnType: char*
    signature: 'static const char *xkey_mdname(const char *name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:753,1
    - Dst: keydata_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:757,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:759,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 760
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 760
    functionName: signature_freectx
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - keydata_free
    - OPENSSL_free
    linkageType: ''
    returnType: void
    signature: 'static void signature_freectx(void *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:888,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - params
    argTypes:
    - void*
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 890
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 890
    functionName: signature_get_ctx_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int signature_get_ctx_params(void *ctx, OSSL_PARAM params[]) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1089,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1097,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1080,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1124,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1118,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1078,1
    - Dst: EVP_PKEY_get_id
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1101,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1103,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1109,1
    - Dst: EVP_PKEY_sign_init_ex
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1122,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1130,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1085,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1104,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1105,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1107,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1112,1
    - Dst: EVP_PKEY_CTX_set_params
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1127,1
    - Dst: EVP_PKEY_CTX_new_from_pkey
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1114,1
    - Dst: EVP_PKEY_sign
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1129,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 36
    argCount: 6
    argNames:
    - key
    - sig
    - siglen
    - tbs
    - tbslen
    - sigalg
    argTypes:
    - XKEY_KEYDATA*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    - XKEY_SIGALG
    constantsTouched: []
    func_position:
      end: 1133
      start: 1074
    functionDepth: 0
    functionLinenumber: 1074
    functionLinenumberEnd: 1133
    functionName: xkey_native_sign
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - OSSL_PARAM_construct_end
    - msg
    - xkey_dmsg
    - EVP_PKEY_sign
    - EVP_PKEY_get_id
    - strcmp
    - EVP_PKEY_CTX_set_params
    - ASSERT
    - EVP_PKEY_CTX_new_from_pkey
    - EVP_PKEY_sign_init_ex
    - OSSL_PARAM_construct_utf8_string
    - EVP_PKEY_CTX_free
    linkageType: ''
    returnType: int
    signature: 'int xkey_native_sign(XKEY_KEYDATA *key, unsigned char *sig, size_t
      *siglen, const unsigned char *tbs, size_t tbslen, XKEY_SIGALG sigalg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:321,1
    - Dst: keymgmt_import
      Src: /src/openvpn/src/openvpn/xkey_provider.c:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 3
    argNames:
    - keydata
    - selection
    - params
    argTypes:
    - void*
    - int
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 324
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 324
    functionName: ec_keymgmt_import
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - keymgmt_import
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int ec_keymgmt_import(void *keydata, int selection, const OSSL_PARAM
      params[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:337,1
    - Dst: keymgmt_import
      Src: /src/openvpn/src/openvpn/xkey_provider.c:339,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 3
    argNames:
    - keydata
    - selection
    - params
    argTypes:
    - void*
    - int
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 340
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 340
    functionName: ed25519_keymgmt_import
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - keymgmt_import
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int ed25519_keymgmt_import(void *keydata, int selection, const
      OSSL_PARAM params[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:364,1
    - Dst: keydata_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:366,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - keydata
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 367
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 367
    functionName: keymgmt_free
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - keydata_free
    linkageType: ''
    returnType: void
    signature: 'static void keymgmt_free(void *keydata) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:733,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:740,1
    - Dst: OPENSSL_zalloc
      Src: /src/openvpn/src/openvpn/xkey_provider.c:737,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - provctx
    - propq
    argTypes:
    - void*
    - char*
    constantsTouched: []
    func_position:
      end: 748
      start: 730
    functionDepth: 0
    functionLinenumber: 730
    functionLinenumberEnd: 748
    functionName: signature_newctx
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - msg
    - xkey_dmsg
    - OPENSSL_zalloc
    linkageType: ''
    returnType: void*
    signature: 'static void *signature_newctx(void *provctx, const char *propq) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:765,1
    - Dst: OSSL_PARAM_utf8_string
      Src: /src/openvpn/src/openvpn/xkey_provider.c:768,1
    - Dst: OSSL_PARAM_utf8_string
      Src: /src/openvpn/src/openvpn/xkey_provider.c:770,1
    - Dst: OSSL_PARAM_utf8_string
      Src: /src/openvpn/src/openvpn/xkey_provider.c:769,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - ctx
    - provctx
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 775
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 775
    functionName: signature_settable_ctx_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - OSSL_PARAM_utf8_string
    - xkey_dmsg
    linkageType: ''
    returnType: OSSL_PARAM*
    signature: 'static const OSSL_PARAM *signature_settable_ctx_params(void *ctx,
      void *provctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:895,1
    - Dst: keydata_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:901,1
    - Dst: get_keytype
      Src: /src/openvpn/src/openvpn/xkey_provider.c:905,1
    - Dst: signature_set_ctx_params
      Src: /src/openvpn/src/openvpn/xkey_provider.c:907,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 3
    argNames:
    - ctx
    - provkey
    - params
    argTypes:
    - void*
    - void*
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 910
      start: 892
    functionDepth: 0
    functionLinenumber: 892
    functionLinenumberEnd: 910
    functionName: signature_sign_init
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - get_keytype
    - xkey_dmsg
    - keydata_free
    - signature_set_ctx_params
    linkageType: ''
    returnType: int
    signature: 'static int signature_sign_init(void *ctx, void *provkey, const OSSL_PARAM
      params[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1244,1
    - Dst: EVP_set_default_properties
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1258,1
    - Dst: OPENSSL_zalloc
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1246,1
    - Dst: OSSL_LIB_CTX_new_child
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1256,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1249,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 4
    argNames:
    - handle
    - in
    - out
    - provctx
    argTypes:
    - OSSL_CORE_HANDLE*
    - OSSL_DISPATCH*
    - OSSL_DISPATCH**
    - void**
    constantsTouched: []
    func_position:
      end: 1264
      start: 1238
    functionDepth: 0
    functionLinenumber: 1238
    functionLinenumberEnd: 1264
    functionName: xkey_provider_init
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - OSSL_LIB_CTX_new_child
    - msg
    - xkey_dmsg
    - EVP_set_default_properties
    - OPENSSL_zalloc
    linkageType: ''
    returnType: int
    signature: 'int xkey_provider_init(const OSSL_CORE_HANDLE *handle, const OSSL_DISPATCH
      *in, const OSSL_DISPATCH **out, void **provctx) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:451,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:478,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:458,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:473,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:456,1
    - Dst: EVP_PKEY_get_id
      Src: /src/openvpn/src/openvpn/xkey_provider.c:480,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:483,1
    - Dst: EVP_PKEY_dup
      Src: /src/openvpn/src/openvpn/xkey_provider.c:487,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:490,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:495,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:513,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:519,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:509,1
    - Dst: EVP_PKEY_get0_type_name
      Src: /src/openvpn/src/openvpn/xkey_provider.c:519,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:504,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:501,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 60
    argCount: 2
    argNames:
    - key
    - params
    argTypes:
    - XKEY_KEYDATA*
    - OSSL_PARAM*
    constantsTouched: []
    func_position:
      end: 522
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 522
    functionName: keymgmt_import_helper
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - msg
    - xkey_dmsg
    - EVP_PKEY_get_id
    - EVP_PKEY_get0_type_name
    - ASSERT
    - EVP_PKEY_dup
    - OSSL_PARAM_locate_const
    linkageType: ''
    returnType: int
    signature: 'static int keymgmt_import_helper(XKEY_KEYDATA *key, const OSSL_PARAM
      *params) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:248,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:265,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_provider.c:251,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:256,1
    - Dst: OSSL_PARAM_locate_const
      Src: /src/openvpn/src/openvpn/xkey_provider.c:261,1
    - Dst: keymgmt_import_helper
      Src: /src/openvpn/src/openvpn/xkey_provider.c:266,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:269,1
    - Dst: EVP_PKEY_CTX_new_from_name
      Src: /src/openvpn/src/openvpn/xkey_provider.c:275,1
    - Dst: EVP_PKEY_fromdata_init
      Src: /src/openvpn/src/openvpn/xkey_provider.c:277,1
    - Dst: EVP_PKEY_fromdata
      Src: /src/openvpn/src/openvpn/xkey_provider.c:278,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:304,1
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:306,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:280,1
    - Dst: EVP_PKEY_get0_type_name
      Src: /src/openvpn/src/openvpn/xkey_provider.c:306,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:283,1
    - Dst: EVP_PKEY_fromdata
      Src: /src/openvpn/src/openvpn/xkey_provider.c:298,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:287,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 43
    argCount: 4
    argNames:
    - keydata
    - selection
    - params
    - name
    argTypes:
    - void*
    - int
    - OSSL_PARAM
    - char*
    constantsTouched: []
    func_position:
      end: 308
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 308
    functionName: keymgmt_import
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - EVP_PKEY_CTX_new_from_name
    - EVP_PKEY_fromdata
    - msg
    - xkey_dmsg
    - EVP_PKEY_fromdata_init
    - EVP_PKEY_get0_type_name
    - keymgmt_import_helper
    - ASSERT
    - OSSL_PARAM_locate_const
    - EVP_PKEY_CTX_free
    linkageType: ''
    returnType: int
    signature: 'static int keymgmt_import(void *keydata, int selection, const OSSL_PARAM
      params[], const char *name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1192,1
    - Dst: OSSL_PARAM_DEFN
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1195,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - provctx
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 1200
      start: 1189
    functionDepth: 0
    functionLinenumber: 1189
    functionLinenumberEnd: 1200
    functionName: gettable_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - OSSL_PARAM_DEFN
    linkageType: ''
    returnType: OSSL_PARAM*
    signature: 'static const OSSL_PARAM *gettable_params(void *provctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1206,1
    - Dst: OSSL_PARAM_set_utf8_ptr
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1211,1
    - Dst: OSSL_PARAM_locate
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1208,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - provctx
    - params
    argTypes:
    - void*
    - OSSL_PARAM
    constantsTouched: []
    func_position:
      end: 1215
      start: 1201
    functionDepth: 0
    functionLinenumber: 1201
    functionLinenumberEnd: 1215
    functionName: get_params
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - OSSL_PARAM_locate
    - OSSL_PARAM_set_utf8_ptr
    linkageType: ''
    returnType: int
    signature: 'static int get_params(void *provctx, OSSL_PARAM params[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:208,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - reference
    - reference_sz
    argTypes:
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 211
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 211
    functionName: keymgmt_load
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    linkageType: ''
    returnType: void*
    signature: 'static void *keymgmt_load(const void *reference, size_t reference_sz) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:975,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:977,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 5
    argNames:
    - ctx
    - sig
    - siglen
    - tbs
    - tbslen
    argTypes:
    - void*
    - unsigned char*
    - size_t
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 979
      start: 971
    functionDepth: 0
    functionLinenumber: 971
    functionLinenumberEnd: 979
    functionName: signature_digest_verify
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - msg
    - xkey_dmsg
    linkageType: ''
    returnType: int
    signature: 'static int signature_digest_verify(void *ctx, const unsigned char
      *sig, size_t siglen, const unsigned char *tbs, size_t tbslen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: xkey_dmsg
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1220,1
    - Dst: OSSL_LIB_CTX_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1225,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/xkey_provider.c:1227,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - provctx
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 1228
      start: 1217
    functionDepth: 0
    functionLinenumber: 1217
    functionLinenumberEnd: 1228
    functionName: teardown
    functionSourceFile: /src/openvpn/src/openvpn/xkey_provider.c
    functionUses: []
    functionsReached:
    - xkey_dmsg
    - OSSL_LIB_CTX_free
    - OPENSSL_free
    linkageType: ''
    returnType: void
    signature: 'static void teardown(void *provctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:17,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:25,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:20,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:21,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:23,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:27,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:30,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:31,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:34,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 7
    argNames:
    - op
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - char*
    - in_addr_t*
    - int
    - in_addr_t*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 37
      start: 10
    functionDepth: 0
    functionLinenumber: 10
    functionLinenumberEnd: 37
    functionName: net_route_v4
    functionSourceFile: /src/openvpn/src/openvpn/networking_freebsd.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - ntohl
    - argv_new
    - inet_ntop
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'static int net_route_v4(const char *op, const in_addr_t *dst, int
      prefixlen, const in_addr_t *gw, const char *iface, uint32_t table, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_route_v6
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:77,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - struct in6_addr*
    - int
    - struct in6_addr*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 78
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 78
    functionName: net_route_v6_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_freebsd.c
    functionUses: []
    functionsReached:
    - net_route_v6
    linkageType: ''
    returnType: int
    signature: 'int net_route_v6_add(openvpn_net_ctx_t *ctx, const struct in6_addr
      *dst, int prefixlen, const struct in6_addr *gw, const char *iface, uint32_t
      table, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_route_v4
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:85,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - in_addr_t*
    - int
    - in_addr_t*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 86
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 86
    functionName: net_route_v4_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_freebsd.c
    functionUses: []
    functionsReached:
    - net_route_v4
    linkageType: ''
    returnType: int
    signature: 'int net_route_v4_del(openvpn_net_ctx_t *ctx, const in_addr_t *dst,
      int prefixlen, const in_addr_t *gw, const char *iface, uint32_t table, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:45,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:55,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:48,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:50,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:52,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:56,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:59,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 7
    argNames:
    - op
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - char*
    - struct in6_addr*
    - int
    - struct in6_addr*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 62
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 62
    functionName: net_route_v6
    functionSourceFile: /src/openvpn/src/openvpn/networking_freebsd.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - argv_new
    - inet_ntop
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'static int net_route_v6(const char *op, const struct in6_addr *dst,
      int prefixlen, const struct in6_addr *gw, const char *iface, uint32_t table,
      int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_route_v4
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:69,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - in_addr_t*
    - int
    - in_addr_t*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: net_route_v4_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_freebsd.c
    functionUses: []
    functionsReached:
    - net_route_v4
    linkageType: ''
    returnType: int
    signature: 'int net_route_v4_add(openvpn_net_ctx_t *ctx, const in_addr_t *dst,
      int prefixlen, const in_addr_t *gw, const char *iface, uint32_t table, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_route_v6
      Src: /src/openvpn/src/openvpn/networking_freebsd.c:93,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - struct in6_addr*
    - int
    - struct in6_addr*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 94
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 94
    functionName: net_route_v6_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_freebsd.c
    functionUses: []
    functionsReached:
    - net_route_v6
    linkageType: ''
    returnType: int
    signature: 'int net_route_v6_del(openvpn_net_ctx_t *ctx, const struct in6_addr
      *dst, int prefixlen, const struct in6_addr *gw, const char *iface, uint32_t
      table, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/list.c:45,1
    - Dst: adjust_power_of_2
      Src: /src/openvpn/src/openvpn/list.c:47,1
    - Dst: ALLOC_ARRAY
      Src: /src/openvpn/src/openvpn/list.c:52,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/list.c:46,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 16
    argCount: 4
    argNames:
    - n_buckets
    - iv
    - (*hash_function)
    - (*compare_function)
    argTypes:
    - int
    - uint32_t
    - uint32_t
    - bool
    constantsTouched: []
    func_position:
      end: 59
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 59
    functionName: hash_init
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - adjust_power_of_2
    - ALLOC_OBJ_CLEAR
    - ALLOC_ARRAY
    - ASSERT
    linkageType: ''
    returnType: struct hash*
    signature: 'struct hash *hash_init(const int n_buckets, const uint32_t iv, uint32_t
      (*hash_function)(const void *key, uint32_t iv), bool (*compare_function)(const
      void *key1, const void *key2)) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 13
    argCount: 4
    argNames:
    - hash
    - bucket
    - key
    - hv
    argTypes:
    - struct hash*
    - struct hash_bucket*
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 110
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 110
    functionName: hash_lookup_fast
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct hash_element*
    signature: 'struct hash_element *hash_lookup_fast(struct hash *hash, struct hash_bucket
      *bucket, const void *key, uint32_t hv) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hash_value
      Src: /src/openvpn/src/openvpn/list.c:153,1
    - Dst: hash_lookup_fast
      Src: /src/openvpn/src/openvpn/list.c:156,1
    - Dst: hash_add_fast
      Src: /src/openvpn/src/openvpn/list.c:166,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 14
    argCount: 4
    argNames:
    - hash
    - key
    - value
    - replace
    argTypes:
    - struct hash*
    - void*
    - void*
    - bool
    constantsTouched: []
    func_position:
      end: 171
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 171
    functionName: hash_add
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - hash_lookup_fast
    - hash_value
    - hash_add_fast
    linkageType: ''
    returnType: bool
    signature: 'bool hash_add(struct hash *hash, const void *key, void *value, bool
      replace) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/list.c:209,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 15
    argCount: 2
    argNames:
    - hash
    - bucket
    argTypes:
    - struct hash*
    - struct hash_bucket*
    constantsTouched: []
    func_position:
      end: 219
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 219
    functionName: hash_remove_marked
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void hash_remove_marked(struct hash *hash, struct hash_bucket
      *bucket) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash_iterator_init_range
      Src: /src/openvpn/src/openvpn/list.c:248,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - hash
    - hi
    argTypes:
    - struct hash*
    - struct hash_iterator*
    constantsTouched: []
    func_position:
      end: 249
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 249
    functionName: hash_iterator_init
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - hash_iterator_init_range
    linkageType: ''
    returnType: void
    signature: 'void hash_iterator_init(struct hash *hash, struct hash_iterator *hi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hash_remove_marked
      Src: /src/openvpn/src/openvpn/list.c:266,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - hi
    argTypes:
    - struct hash_iterator*
    constantsTouched: []
    func_position:
      end: 272
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 272
    functionName: hash_iterator_unlock
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - hash_remove_marked
    linkageType: ''
    returnType: void
    signature: 'static inline void hash_iterator_unlock(struct hash_iterator *hi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash_iterator_unlock
      Src: /src/openvpn/src/openvpn/list.c:284,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - hi
    argTypes:
    - struct hash_iterator*
    constantsTouched: []
    func_position:
      end: 285
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: hash_iterator_free
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - hash_iterator_unlock
    linkageType: ''
    returnType: void
    signature: 'void hash_iterator_free(struct hash_iterator *hi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/list.c:322,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - hi
    argTypes:
    - struct hash_iterator*
    constantsTouched: []
    func_position:
      end: 325
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 325
    functionName: hash_iterator_delete_element
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void hash_iterator_delete_element(struct hash_iterator *hi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/list.c:73,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/list.c:77,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/list.c:78,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 9
    argCount: 1
    argNames:
    - hash
    argTypes:
    - struct hash*
    constantsTouched: []
    func_position:
      end: 79
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 79
    functionName: hash_free
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void hash_free(struct hash *hash) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/list.c:135,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 14
    argCount: 4
    argNames:
    - hash
    - bucket
    - key
    - hv
    argTypes:
    - struct hash*
    - struct hash_bucket*
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 143
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 143
    functionName: hash_remove_fast
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: bool
    signature: 'bool hash_remove_fast(struct hash *hash, struct hash_bucket *bucket,
      const void *key, uint32_t hv) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/list.c:179,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/list.c:180,1
    - Dst: hash_iterator_delete_element
      Src: /src/openvpn/src/openvpn/list.c:184,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/list.c:187,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 2
    argNames:
    - hash
    - value
    argTypes:
    - struct hash*
    - void*
    constantsTouched: []
    func_position:
      end: 188
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 188
    functionName: hash_remove_by_value
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - hash_iterator_free
    - hash_iterator_init
    - hash_iterator_next
    - hash_iterator_delete_element
    linkageType: ''
    returnType: void
    signature: 'void hash_remove_by_value(struct hash *hash, void *value) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/list.c:232,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 4
    argNames:
    - hash
    - hi
    - start_bucket
    - end_bucket
    argTypes:
    - struct hash*
    - struct hash_iterator*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 242
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 242
    functionName: hash_iterator_init_range
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void hash_iterator_init_range(struct hash *hash, struct hash_iterator
      *hi, int start_bucket, int end_bucket) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - hi
    - b
    argTypes:
    - struct hash_iterator*
    - struct hash_bucket*
    constantsTouched: []
    func_position:
      end: 257
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 257
    functionName: hash_iterator_lock
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void hash_iterator_lock(struct hash_iterator *hi, struct
      hash_bucket *b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - hi
    argTypes:
    - struct hash_iterator*
    constantsTouched: []
    func_position:
      end: 279
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 279
    functionName: hash_iterator_advance
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void hash_iterator_advance(struct hash_iterator *hi) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: hash_iterator_advance
      Src: /src/openvpn/src/openvpn/list.c:294,1
    - Dst: hash_iterator_unlock
      Src: /src/openvpn/src/openvpn/list.c:301,1
    - Dst: hash_iterator_advance
      Src: /src/openvpn/src/openvpn/list.c:310,1
    - Dst: hash_iterator_lock
      Src: /src/openvpn/src/openvpn/list.c:305,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 15
    argCount: 1
    argNames:
    - hi
    argTypes:
    - struct hash_iterator*
    constantsTouched: []
    func_position:
      end: 317
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 317
    functionName: hash_iterator_next
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - hash_iterator_lock
    - hash_iterator_advance
    - hash_iterator_unlock
    linkageType: ''
    returnType: struct hash_element*
    signature: 'struct hash_element *hash_iterator_next(struct hash_iterator *hi) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: mix
      Src: /src/openvpn/src/openvpn/list.c:428,1
    - Dst: mix
      Src: /src/openvpn/src/openvpn/list.c:482,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 54
    argCount: 3
    argNames:
    - k
    - length
    - initval
    argTypes:
    - uint8_t*
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 485
      start: 406
    functionDepth: 0
    functionLinenumber: 406
    functionLinenumberEnd: 485
    functionName: hash_func
    functionSourceFile: /src/openvpn/src/openvpn/list.c
    functionUses: []
    functionsReached:
    - mix
    linkageType: ''
    returnType: uint32_t
    signature: 'uint32_t hash_func(const uint8_t *k, uint32_t length, uint32_t initval) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:1610,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/socket.c:1619,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1613,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:1614,1
    - Dst: openvpn_connect
      Src: /src/openvpn/src/openvpn/socket.c:1630,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/socket.c:1632,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1641,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:1642,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/socket.c:1642,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:1644,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/socket.c:1646,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1655,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1650,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:1651,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 21
    argCount: 4
    argNames:
    - sd
    - dest
    - connect_timeout
    - sig_info
    argTypes:
    - socket_descriptor_t*
    - struct sockaddr*
    - int
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 1656
      start: 1604
    functionDepth: 0
    functionLinenumber: 1604
    functionLinenumberEnd: 1656
    functionName: socket_connect
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - print_sockaddr
    - management_set_state
    - openvpn_close_socket
    - openvpn_connect
    - msg
    - gc_new
    - get_signal
    - strerror
    - register_signal
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void socket_connect(socket_descriptor_t *sd, const struct sockaddr
      *dest, const int connect_timeout, struct signal_info *sig_info) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:2060,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2078,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2079,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:2081,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/socket.c:2080,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2085,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/socket.c:2086,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2090,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/socket.c:2091,1
    - Dst: print_link_socket_actual_ex
      Src: /src/openvpn/src/openvpn/socket.c:2092,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:2096,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 2097
      start: 2057
    functionDepth: 0
    functionLinenumber: 2057
    functionLinenumberEnd: 2097
    functionName: linksock_print_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - print_link_socket_actual_ex
    - print_sockaddr
    - msg
    - gc_new
    - gc_free
    - ASSERT
    - proto2ascii
    linkageType: ''
    returnType: void
    signature: 'static void linksock_print_addr(struct link_socket *sock) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/socket.c:3226,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 3
    argNames:
    - proto
    - af
    - display_form
    argTypes:
    - int
    - sa_family_t
    - bool
    constantsTouched: []
    func_position:
      end: 3242
      start: 3223
    functionDepth: 0
    functionLinenumber: 3223
    functionLinenumberEnd: 3242
    functionName: proto2ascii
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - SIZE
    linkageType: ''
    returnType: char*
    signature: 'const char *proto2ascii(int proto, sa_family_t af, bool display_form) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 2
    argNames:
    - local
    - 'null'
    argTypes:
    - struct sockaddr_un*
    - char*
    constantsTouched: []
    func_position:
      end: 4091
      start: 4080
    functionDepth: 0
    functionLinenumber: 4080
    functionLinenumberEnd: 4091
    functionName: sockaddr_unix_name
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *sockaddr_unix_name(const struct sockaddr_un *local, const
      char *null) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2103,1
    - Dst: socket_listen_accept
      Src: /src/openvpn/src/openvpn/socket.c:2108,1
    - Dst: socket_do_listen
      Src: /src/openvpn/src/openvpn/socket.c:2118,1
    - Dst: socket_do_accept
      Src: /src/openvpn/src/openvpn/socket.c:2125,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:2128,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/socket.c:2130,1
    - Dst: tcp_connection_established
      Src: /src/openvpn/src/openvpn/socket.c:2133,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2137,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 14
    argCount: 3
    argNames:
    - sock
    - remote_dynamic
    - sig_info
    argTypes:
    - struct link_socket*
    - char*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 2139
      start: 2099
    functionDepth: 0
    functionLinenumber: 2099
    functionLinenumberEnd: 2139
    functionName: phase2_tcp_server
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - socket_do_listen
    - socket_listen_accept
    - register_signal
    - tcp_connection_established
    - ASSERT
    - socket_do_accept
    - socket_defined
    linkageType: ''
    returnType: void
    signature: 'static void phase2_tcp_server(struct link_socket *sock, const char
      *remote_dynamic, struct signal_info *sig_info) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/socket.c:3247,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/socket.c:3249,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:3257,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:3255,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:3253,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 3258
      start: 3244
    functionDepth: 0
    functionLinenumber: 3244
    functionLinenumberEnd: 3258
    functionName: proto2ascii_all
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_printf
    - SIZE
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *proto2ascii_all(struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/openvpn/src/openvpn/socket.c:4098,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:4100,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/socket.c:4105,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4108
      start: 4093
    functionDepth: 0
    functionLinenumber: 4093
    functionLinenumberEnd: 4108
    functionName: create_socket_unix
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - socket
    - set_cloexec
    linkageType: ''
    returnType: socket_descriptor_t
    signature: 'socket_descriptor_t create_socket_unix(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3287,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3304,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 22
    argCount: 2
    argNames:
    - proto
    - remote
    argTypes:
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 3306
      start: 3284
    functionDepth: 0
    functionLinenumber: 3284
    functionLinenumberEnd: 3306
    functionName: proto_remote
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: char*
    signature: 'const char *proto_remote(int proto, bool remote) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/socket.c:3559,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/socket.c:3576,1
    - Dst: sendmsg
      Src: /src/openvpn/src/openvpn/socket.c:3589,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/socket.c:3542,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:3528,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/socket.c:3541,1
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/socket.c:3553,1
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/socket.c:3554,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/socket.c:3556,1
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/socket.c:3572,1
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/socket.c:3574,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/socket.c:3581,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3587,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.c:3527,1
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/socket.c:3540,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/socket.c:3547,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/socket.c:3577,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3553,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/socket.c:3555,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3572,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 63
    argCount: 3
    argNames:
    - sock
    - buf
    - to
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 3590
      start: 3517
    functionDepth: 0
    functionLinenumber: 3517
    functionLinenumberEnd: 3590
    functionName: link_socket_write_udp_posix_sendmsg
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - CMSG_DATA
    - sendmsg
    - CMSG_SPACE
    - BPTR
    - CMSG_FIRSTHDR
    - BLEN
    - CMSG_LEN
    - ASSERT
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t link_socket_write_udp_posix_sendmsg(struct link_socket *sock,
      struct buffer *buf, struct link_socket_actual *to) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 1
    argNames:
    - af
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 461
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 461
    functionName: getaddrinfo_addr_family_name
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *getaddrinfo_addr_family_name(int af) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.c:3901,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/socket.c:3908,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/socket.c:3906,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socket.c:3910,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3908,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/socket.c:3911,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/socket.c:3916,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3918,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/socket.c:3918,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socket.c:3920,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3925,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/socket.c:3921,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 20
    argCount: 2
    argNames:
    - buf
    - dst
    argTypes:
    - struct buffer*
    - struct sockaddr*
    constantsTouched: []
    func_position:
      end: 3929
      start: 3896
    functionDepth: 0
    functionLinenumber: 3896
    functionLinenumberEnd: 3929
    functionName: read_sockaddr_from_packet
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - memcpy
    - BPTR
    - msg
    - buf_len
    - buf_advance
    linkageType: ''
    returnType: int
    signature: 'static int read_sockaddr_from_packet(struct buffer *buf, struct sockaddr
      *dst) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/socket.c:359,1
    - Dst: do_preresolve_host
      Src: /src/openvpn/src/openvpn/socket.c:381,1
    - Dst: do_preresolve_host
      Src: /src/openvpn/src/openvpn/socket.c:392,1
    - Dst: do_preresolve_host
      Src: /src/openvpn/src/openvpn/socket.c:431,1
    - Dst: do_preresolve_host
      Src: /src/openvpn/src/openvpn/socket.c:406,1
    - Dst: throw_signal_soft
      Src: /src/openvpn/src/openvpn/socket.c:444,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 445
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 445
    functionName: do_preresolve
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - do_preresolve_host
    - throw_signal_soft
    - proto_is_dgram
    linkageType: ''
    returnType: void
    signature: 'void do_preresolve(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: af_addr_size
      Src: /src/openvpn/src/openvpn/socket.c:3467,1
    - Dst: recvfrom
      Src: /src/openvpn/src/openvpn/socket.c:3481,1
    - Dst: addr_zero_host
      Src: /src/openvpn/src/openvpn/socket.c:3468,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3470,1
    - Dst: link_socket_read_udp_posix_recvmsg
      Src: /src/openvpn/src/openvpn/socket.c:3476,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.c:3481,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/socket.c:3481,1
    - Dst: bad_address_length
      Src: /src/openvpn/src/openvpn/socket.c:3487,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 22
    argCount: 3
    argNames:
    - sock
    - buf
    - from
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 3490
      start: 3461
    functionDepth: 0
    functionLinenumber: 3461
    functionLinenumberEnd: 3490
    functionName: link_socket_read_udp_posix
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - BPTR
    - buf_forward_capacity
    - bad_address_length
    - ASSERT
    - af_addr_size
    - addr_zero_host
    - link_socket_read_udp_posix_recvmsg
    - recvfrom
    linkageType: ''
    returnType: int
    signature: 'int link_socket_read_udp_posix(struct link_socket *sock, struct buffer
      *buf, struct link_socket_actual *from) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: bad_address_length
      Src: /src/openvpn/src/openvpn/socket.c:3867,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socket.c:3877,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:3883,1
    - Dst: af_addr_size
      Src: /src/openvpn/src/openvpn/socket.c:3867,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socket.c:3873,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 13
    argCount: 3
    argNames:
    - io
    - dst
    - overlapped_ret
    argTypes:
    - struct overlapped_io*
    - struct sockaddr*
    - int
    constantsTouched: []
    func_position:
      end: 3885
      start: 3846
    functionDepth: 0
    functionLinenumber: 3846
    functionLinenumberEnd: 3885
    functionName: read_sockaddr_from_overlapped
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - memcpy
    - CLEAR
    - bad_address_length
    - af_addr_size
    linkageType: ''
    returnType: void
    signature: 'void read_sockaddr_from_overlapped(struct overlapped_io *io, struct
      sockaddr *dst, int overlapped_ret) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:906,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:908,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - sd
    - size
    argTypes:
    - socket_descriptor_t
    - int
    constantsTouched: []
    func_position:
      end: 911
      start: 902
    functionDepth: 0
    functionLinenumber: 902
    functionLinenumberEnd: 911
    functionName: socket_set_sndbuf
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void socket_set_sndbuf(socket_descriptor_t sd, int size) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: create_socket_udp
      Src: /src/openvpn/src/openvpn/socket.c:1163,1
    - Dst: create_socket_tcp
      Src: /src/openvpn/src/openvpn/socket.c:1176,1
    - Dst: create_socket_tcp
      Src: /src/openvpn/src/openvpn/socket.c:1181,1
    - Dst: socket_set_buffers
      Src: /src/openvpn/src/openvpn/socket.c:1192,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1185,1
    - Dst: socket_set_mark
      Src: /src/openvpn/src/openvpn/socket.c:1195,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1200,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1201,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socket.c:1201,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1203,1
    - Dst: bind_local
      Src: /src/openvpn/src/openvpn/socket.c:1209,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 2
    argNames:
    - sock
    - addr
    argTypes:
    - struct link_socket*
    - struct addrinfo*
    constantsTouched: []
    func_position:
      end: 1210
      start: 1158
    functionDepth: 0
    functionLinenumber: 1158
    functionLinenumberEnd: 1210
    functionName: create_socket
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    - socket_set_buffers
    - create_socket_tcp
    - bind_local
    - socket_set_mark
    - ASSERT
    - strlen
    - create_socket_udp
    linkageType: ''
    returnType: void
    signature: 'static void create_socket(struct link_socket *sock, struct addrinfo
      *addr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: overlapped_io_init
      Src: /src/openvpn/src/openvpn/socket.c:1681,1
    - Dst: alloc_buf_sock_tun
      Src: /src/openvpn/src/openvpn/socket.c:1695,1
    - Dst: stream_buf_init
      Src: /src/openvpn/src/openvpn/socket.c:1690,1
    - Dst: overlapped_io_init
      Src: /src/openvpn/src/openvpn/socket.c:1682,1
    - Dst: link_socket_connection_oriented
      Src: /src/openvpn/src/openvpn/socket.c:1687,1
    - Dst: stream_buf_init
      Src: /src/openvpn/src/openvpn/socket.c:1697,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - frame
    - sock
    argTypes:
    - struct frame*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1703
      start: 1677
    functionDepth: 0
    functionLinenumber: 1677
    functionLinenumberEnd: 1703
    functionName: socket_frame_init
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - link_socket_connection_oriented
    - overlapped_io_init
    - stream_buf_init
    - alloc_buf_sock_tun
    linkageType: ''
    returnType: void
    signature: 'static void socket_frame_init(const struct frame *frame, struct link_socket
      *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2666,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/socket.c:2669,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - sb
    argTypes:
    - struct stream_buf*
    constantsTouched: []
    func_position:
      end: 2671
      start: 2663
    functionDepth: 0
    functionLinenumber: 2663
    functionLinenumberEnd: 2671
    functionName: stream_buf_reset
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_reset
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static inline void stream_buf_reset(struct stream_buf *sb) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getsockopt
      Src: /src/openvpn/src/openvpn/socket.c:921,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - sd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 928
      start: 913
    functionDepth: 0
    functionLinenumber: 913
    functionLinenumberEnd: 928
    functionName: socket_get_rcvbuf
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - getsockopt
    linkageType: ''
    returnType: int
    signature: 'static int socket_get_rcvbuf(socket_descriptor_t sd) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:1708,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1738,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/socket.c:1717,1
    - Dst: get_cached_dns_entry
      Src: /src/openvpn/src/openvpn/socket.c:1723,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:1732,1
    - Dst: gai_strerror
      Src: /src/openvpn/src/openvpn/socket.c:1740,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1758,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 22
    argCount: 2
    argNames:
    - sock
    - af
    argTypes:
    - struct link_socket*
    - sa_family_t
    constantsTouched: []
    func_position:
      end: 1759
      start: 1705
    functionDepth: 0
    functionLinenumber: 1705
    functionLinenumberEnd: 1759
    functionName: resolve_bind_local
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - get_cached_dns_entry
    - gc_new
    - gai_strerror
    - gc_free
    - openvpn_getaddrinfo
    - proto_is_dgram
    linkageType: ''
    returnType: void
    signature: 'static void resolve_bind_local(struct link_socket *sock, const sa_family_t
      af) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/socket.c:2629,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2643,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2634,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2637,1
    - Dst: overlapped_io_state_ascii
      Src: /src/openvpn/src/openvpn/socket.c:2638,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2646,1
    - Dst: overlapped_io_state_ascii
      Src: /src/openvpn/src/openvpn/socket.c:2647,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2653,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:2655,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 3
    argNames:
    - s
    - rwflags
    - gc
    argTypes:
    - struct link_socket*
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2656
      start: 2626
    functionDepth: 0
    functionLinenumber: 2626
    functionLinenumberEnd: 2656
    functionName: socket_stat
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_printf
    - overlapped_io_state_ascii
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *socket_stat(const struct link_socket *s, unsigned int
      rwflags, struct gc_arena *gc) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1088,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1102,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1093,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1089,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/socket.c:1091,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1105,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1108,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1111,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1120,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1123,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1126,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/socket.c:1133,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 30
    argCount: 2
    argNames:
    - addrinfo
    - flags
    argTypes:
    - struct addrinfo*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1136
      start: 1083
    functionDepth: 0
    functionLinenumber: 1083
    functionLinenumberEnd: 1136
    functionName: create_socket_udp
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - socket
    - set_cloexec
    - msg
    - ASSERT
    linkageType: ''
    returnType: socket_descriptor_t
    signature: 'static socket_descriptor_t create_socket_udp(struct addrinfo *addrinfo,
      const unsigned int flags) '
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:1768,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/socket.c:1779,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1813,1
    - Dst: sf2gaf
      Src: /src/openvpn/src/openvpn/socket.c:1775,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1818,1
    - Dst: get_cached_dns_entry
      Src: /src/openvpn/src/openvpn/socket.c:1822,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:1829,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:1838,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/socket.c:1855,1
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/socket.c:1863,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1865,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:1874,1
    - Dst: set_actual_address
      Src: /src/openvpn/src/openvpn/socket.c:1877,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1883,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/socket.c:1866,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 61
    argCount: 4
    argNames:
    - sock
    - phase
    - remote_dynamic
    - sig_info
    argTypes:
    - struct link_socket*
    - int
    - char**
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 1884
      start: 1761
    functionDepth: 0
    functionLinenumber: 1761
    functionLinenumberEnd: 1884
    functionName: resolve_remote
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - get_cached_dns_entry
    - link_socket_actual_defined
    - gc_new
    - register_signal
    - print_link_socket_actual
    - sf2gaf
    - openvpn_getaddrinfo
    - ASSERT
    - CLEAR
    - proto_is_dgram
    - set_actual_address
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void resolve_remote(struct link_socket *sock, int phase, const
      char **remote_dynamic, struct signal_info *sig_info) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2732,1
    - Dst: stream_buf_added
      Src: /src/openvpn/src/openvpn/socket.c:2734,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/socket.c:2733,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2733,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/socket.c:2732,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2735,1
    - Dst: stream_buf_set_next
      Src: /src/openvpn/src/openvpn/socket.c:2742,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 2745
      start: 2727
    functionDepth: 0
    functionLinenumber: 2727
    functionLinenumberEnd: 2745
    functionName: stream_buf_read_setup_dowork
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_copy
    - buf_init
    - stream_buf_set_next
    - dmsg
    - stream_buf_added
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool stream_buf_read_setup_dowork(struct link_socket *sock) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 1
    argNames:
    - af
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 3270
      start: 3260
    functionDepth: 0
    functionLinenumber: 3260
    functionLinenumberEnd: 3270
    functionName: addr_family_name
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *addr_family_name(int af) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2751,1
    - Dst: is_openvpn_protocol
      Src: /src/openvpn/src/openvpn/socket.c:2766,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2768,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2780,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/socket.c:2780,1
    - Dst: ntohps
      Src: /src/openvpn/src/openvpn/socket.c:2781,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2785,1
    - Dst: stream_buf_reset
      Src: /src/openvpn/src/openvpn/socket.c:2786,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2796,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/socket.c:2796,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:2803,1
    - Dst: stream_buf_set_next
      Src: /src/openvpn/src/openvpn/socket.c:2809,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2799,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:2802,1
    - Dst: buf_copy_excess
      Src: /src/openvpn/src/openvpn/socket.c:2799,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2801,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2808,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 46
    argCount: 2
    argNames:
    - sb
    - length_added
    argTypes:
    - struct stream_buf*
    - int
    constantsTouched: []
    func_position:
      end: 2812
      start: 2747
    functionDepth: 0
    functionLinenumber: 2747
    functionLinenumberEnd: 2812
    functionName: stream_buf_added
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_copy_excess
    - buf_init
    - stream_buf_set_next
    - dmsg
    - is_openvpn_protocol
    - msg
    - buf_read
    - BLEN
    - ntohps
    - stream_buf_reset
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static bool stream_buf_added(struct stream_buf *sb, int length_added) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/socket.c:2942,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2943,1
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.c:2943,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:2954,1
    - Dst: addr_defined_ipi
      Src: /src/openvpn/src/openvpn/socket.c:2947,1
    - Dst: if_indextoname
      Src: /src/openvpn/src/openvpn/socket.c:2958,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2965,1
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.c:2966,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:2975,1
    - Dst: if_indextoname
      Src: /src/openvpn/src/openvpn/socket.c:2978,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2982,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:2993,1
    - Dst: getnameinfo
      Src: /src/openvpn/src/openvpn/socket.c:2979,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2986,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 33
    argCount: 4
    argNames:
    - act
    - separator
    - flags
    - gc
    argTypes:
    - struct link_socket_actual*
    - char*
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2999
      start: 2934
    functionDepth: 0
    functionLinenumber: 2934
    functionLinenumberEnd: 2999
    functionName: print_link_socket_actual_ex
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - getnameinfo
    - if_indextoname
    - BSTR
    - buf_printf
    - print_sockaddr_ex
    - CLEAR
    - addr_defined_ipi
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *print_link_socket_actual_ex(const struct link_socket_actual
      *act, const char *separator, const unsigned int flags, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket_bind
      Src: /src/openvpn/src/openvpn/socket.c:1146,1
    - Dst: socket_bind
      Src: /src/openvpn/src/openvpn/socket.c:1151,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - sock
    - ai_family
    argTypes:
    - struct link_socket*
    - sa_family_t
    constantsTouched: []
    func_position:
      end: 1156
      start: 1138
    functionDepth: 0
    functionLinenumber: 1138
    functionLinenumberEnd: 1156
    functionName: bind_local
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - socket_bind
    linkageType: ''
    returnType: void
    signature: 'static void bind_local(struct link_socket *sock, const sa_family_t
      ai_family) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:1893,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1900
      start: 1888
    functionDepth: 0
    functionLinenumber: 1888
    functionLinenumberEnd: 1900
    functionName: link_socket_new
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct link_socket*
    signature: 'struct link_socket *link_socket_new(void) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1102,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1111,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1120,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1108,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1105,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1123,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1126,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 1
    argNames:
    - SF_USE_IP_PKTINFO
    argTypes:
    - flags
    constantsTouched: []
    func_position:
      end: 1128
      start: 1096
    functionDepth: 0
    functionLinenumber: 1096
    functionLinenumberEnd: 1128
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (flags & SF_USE_IP_PKTINFO) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_addr_generic
      Src: /src/openvpn/src/openvpn/socket.c:228,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 4
    argNames:
    - hostname
    - network
    - netbits
    - msglevel
    argTypes:
    - char*
    - struct in6_addr*
    - unsigned int*
    - int
    constantsTouched: []
    func_position:
      end: 235
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 235
    functionName: get_ipv6_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - get_addr_generic
    linkageType: ''
    returnType: bool
    signature: 'bool get_ipv6_addr(const char *hostname, struct in6_addr *network,
      unsigned int *netbits, int msglevel) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: stream_buf_read_setup
      Src: /src/openvpn/src/openvpn/socket.c:4036,1
    - Dst: socket_recv_queue
      Src: /src/openvpn/src/openvpn/socket.c:4045,1
    - Dst: socket_event_handle
      Src: /src/openvpn/src/openvpn/socket.c:4052,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/socket.c:4052,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:4038,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 23
    argCount: 5
    argNames:
    - s
    - es
    - rwflags
    - arg
    - persistent
    argTypes:
    - struct link_socket*
    - struct event_set*
    - unsigned int
    - void*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 4062
      start: 4027
    functionDepth: 0
    functionLinenumber: 4027
    functionLinenumberEnd: 4062
    functionName: socket_set
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - event_ctl
    - socket_event_handle
    - stream_buf_read_setup
    - ASSERT
    - socket_recv_queue
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int socket_set(struct link_socket *s, struct event_set *es,
      unsigned int rwflags, void *arg, unsigned int *persistent) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/socket.c:250,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 252
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 252
    functionName: streqnull
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - streq
    linkageType: ''
    returnType: bool
    signature: 'static inline bool streqnull(const char *a, const char *b) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3746,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:3742,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/socket.c:3739,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/socket.c:3758,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3809,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3801,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3831,1
    - Dst: WSASendTo
      Src: /src/openvpn/src/openvpn/socket.c:3773,1
    - Dst: socket_get_last_error
      Src: /src/openvpn/src/openvpn/socket.c:3819,1
    - Dst: WSASend
      Src: /src/openvpn/src/openvpn/socket.c:3789,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3813,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3739,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:3743,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3746,1
    - Dst: WriteFile
      Src: /src/openvpn/src/openvpn/socket.c:3751,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3825,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:3830,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3809,1
    - Dst: proto_is_tcp
      Src: /src/openvpn/src/openvpn/socket.c:3784,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3831,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:3839,1
    - Dst: socket_is_dco_win
      Src: /src/openvpn/src/openvpn/socket.c:3749,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3835,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/socket.c:3837,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 66
    argCount: 3
    argNames:
    - sock
    - buf
    - to
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 3844
      start: 3728
    functionDepth: 0
    functionLinenumber: 3728
    functionLinenumberEnd: 3844
    functionName: socket_send_queue
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_copy
    - WSASendTo
    - WSASend
    - SetEvent
    - BSTR
    - dmsg
    - socket_get_last_error
    - BLEN
    - gc_new
    - strerror_win32
    - proto_is_udp
    - gc_free
    - ASSERT
    - WriteFile
    - socket_is_dco_win
    - proto_is_tcp
    - ResetEvent
    linkageType: ''
    returnType: int
    signature: 'int socket_send_queue(struct link_socket *sock, struct buffer *buf,
      const struct link_socket_actual *to) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:4067,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:4069,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - sd
    argTypes:
    - socket_descriptor_t*
    constantsTouched: []
    func_position:
      end: 4072
      start: 4064
    functionDepth: 0
    functionLinenumber: 4064
    functionLinenumberEnd: 4072
    functionName: sd_close
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - socket_defined
    - openvpn_close_socket
    linkageType: ''
    returnType: void
    signature: 'void sd_close(socket_descriptor_t *sd) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: defined_net_event_win32
      Src: /src/openvpn/src/openvpn/socket.c:2829,1
    - Dst: init_net_event_win32
      Src: /src/openvpn/src/openvpn/socket.c:2831,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 2837
      start: 2825
    functionDepth: 0
    functionLinenumber: 2825
    functionLinenumberEnd: 2837
    functionName: socket_listen_event_handle
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - init_net_event_win32
    - defined_net_event_win32
    linkageType: ''
    returnType: event_t
    signature: 'event_t socket_listen_event_handle(struct link_socket *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/socket.c:3009,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/socket.c:3014,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/socket.c:3016,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:3013,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 3
    argNames:
    - addr
    - flags
    - gc
    argTypes:
    - in_addr_t
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 3019
      start: 3005
    functionDepth: 0
    functionLinenumber: 3005
    functionLinenumberEnd: 3019
    functionName: print_in_addr_t
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - inet_ntop
    - CLEAR
    - gc_malloc
    - htonl
    linkageType: ''
    returnType: char*
    signature: 'const char *print_in_addr_t(in_addr_t addr, unsigned int flags, struct
      gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3401,1
    - Dst: buf_forward_capacity_total
      Src: /src/openvpn/src/openvpn/socket.c:3404,1
    - Dst: recvmsg
      Src: /src/openvpn/src/openvpn/socket.c:3411,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/socket.c:3416,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.c:3403,1
    - Dst: CMSG_NXTHDR
      Src: /src/openvpn/src/openvpn/socket.c:3418,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/socket.c:3422,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/socket.c:3426,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/socket.c:3432,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/socket.c:3436,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/socket.c:3445,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3453,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/socket.c:3447,1
    - Dst: CMSG_NXTHDR
      Src: /src/openvpn/src/openvpn/socket.c:3442,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 60
    argCount: 3
    argNames:
    - sock
    - buf
    - from
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 3458
      start: 3391
    functionDepth: 0
    functionLinenumber: 3391
    functionLinenumberEnd: 3458
    functionName: link_socket_read_udp_posix_recvmsg
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_forward_capacity_total
    - CMSG_DATA
    - BPTR
    - CMSG_FIRSTHDR
    - msg
    - recvmsg
    - CMSG_NXTHDR
    - CMSG_LEN
    - ASSERT
    linkageType: ''
    returnType: socklen_t
    signature: 'static socklen_t link_socket_read_udp_posix_recvmsg(struct link_socket
      *sock, struct buffer *buf, struct link_socket_actual *from) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/socket.c:2817,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - sb
    argTypes:
    - struct stream_buf*
    constantsTouched: []
    func_position:
      end: 2818
      start: 2814
    functionDepth: 0
    functionLinenumber: 2814
    functionLinenumberEnd: 2818
    functionName: stream_buf_close
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - free_buf
    linkageType: ''
    returnType: void
    signature: 'static void stream_buf_close(struct stream_buf *sb) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/socket.c:2682,1
    - Dst: stream_buf_reset
      Src: /src/openvpn/src/openvpn/socket.c:2689,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2691,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 4
    argNames:
    - sb
    - buf
    - sockflags
    - proto
    argTypes:
    - struct stream_buf*
    - struct buffer*
    - unsigned int
    - int
    constantsTouched: []
    func_position:
      end: 2692
      start: 2673
    functionDepth: 0
    functionLinenumber: 2673
    functionLinenumberEnd: 2692
    functionName: stream_buf_init
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - stream_buf_reset
    - dmsg
    - alloc_buf
    linkageType: ''
    returnType: void
    signature: 'static void stream_buf_init(struct stream_buf *sb, struct buffer *buf,
      const unsigned int sockflags, const int proto) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socket.c:745,1
    - Dst: openvpn_inet_aton
      Src: /src/openvpn/src/openvpn/socket.c:781,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 1
    argNames:
    - dotted_quad
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 783
      start: 735
    functionDepth: 0
    functionLinenumber: 735
    functionLinenumberEnd: 783
    functionName: ip_addr_dotted_quad_safe
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - strlen
    - openvpn_inet_aton
    linkageType: ''
    returnType: bool
    signature: 'bool ip_addr_dotted_quad_safe(const char *dotted_quad) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/socket.c:3147,1
    - Dst: setenv_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:3153,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:3150,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 4
    argNames:
    - es
    - name_prefix
    - addr
    - flags
    argTypes:
    - struct env_set*
    - char*
    - struct in6_addr*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3155
      start: 3141
    functionDepth: 0
    functionLinenumber: 3141
    functionLinenumberEnd: 3155
    functionName: setenv_in6_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - IN6_IS_ADDR_UNSPECIFIED
    - setenv_sockaddr
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void setenv_in6_addr(struct env_set *es, const char *name_prefix,
      const struct in6_addr *addr, const unsigned int flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socket.c:795,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/socket.c:803,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - ipv6_text_addr
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 805
      start: 785
    functionDepth: 0
    functionLinenumber: 785
    functionLinenumberEnd: 805
    functionName: ipv6_addr_safe
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - strlen
    - inet_pton
    linkageType: ''
    returnType: bool
    signature: 'bool ipv6_addr_safe(const char *ipv6_text_addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2701,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/socket.c:2706,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2706,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2705,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - sb
    argTypes:
    - struct stream_buf*
    constantsTouched: []
    func_position:
      end: 2707
      start: 2694
    functionDepth: 0
    functionLinenumber: 2694
    functionLinenumberEnd: 2707
    functionName: stream_buf_set_next
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_safe
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static inline void stream_buf_set_next(struct stream_buf *sb) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:3163,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 4
    argNames:
    - es
    - name_prefix
    - act
    - flags
    argTypes:
    - struct env_set*
    - char*
    - struct link_socket_actual*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3164
      start: 3157
    functionDepth: 0
    functionLinenumber: 3157
    functionLinenumberEnd: 3164
    functionName: setenv_link_socket_actual
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setenv_sockaddr
    linkageType: ''
    returnType: void
    signature: 'void setenv_link_socket_actual(struct env_set *es, const char *name_prefix,
      const struct link_socket_actual *act, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/socket.c:3028,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/socket.c:3030,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/socket.c:3033,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 3
    argNames:
    - a6
    - flags
    - gc
    argTypes:
    - struct in6_addr
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 3036
      start: 3025
    functionDepth: 0
    functionLinenumber: 3025
    functionLinenumberEnd: 3036
    functionName: print_in6_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - memcmp
    - inet_ntop
    - gc_malloc
    linkageType: ''
    returnType: char*
    signature: 'const char *print_in6_addr(struct in6_addr a6, unsigned int flags,
      struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: streqnull
      Src: /src/openvpn/src/openvpn/socket.c:274,1
    - Dst: streqnull
      Src: /src/openvpn/src/openvpn/socket.c:275,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 15
    argCount: 6
    argNames:
    - dns_cache
    - hostname
    - servname
    - ai_family
    - resolve_flags
    - ai
    argTypes:
    - struct cached_dns_entry*
    - char*
    - char*
    - int
    - int
    - struct addrinfo**
    constantsTouched: []
    func_position:
      end: 284
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 284
    functionName: get_cached_dns_entry
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - streqnull
    linkageType: ''
    returnType: int
    signature: 'static int get_cached_dns_entry(struct cached_dns_entry *dns_cache,
      const char *hostname, const char *servname, int ai_family, int resolve_flags,
      struct addrinfo **ai) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socket.c:848,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 27
    argCount: 1
    argNames:
    - mac_addr
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 883
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 883
    functionName: mac_addr_safe
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'bool mac_addr_safe(const char *mac_addr) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1056,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1061,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1068,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/socket.c:1059,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1057,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1071,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/socket.c:1078,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - addrinfo
    argTypes:
    - struct addrinfo*
    constantsTouched: []
    func_position:
      end: 1081
      start: 1051
    functionDepth: 0
    functionLinenumber: 1051
    functionLinenumberEnd: 1081
    functionName: create_socket_tcp
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - socket
    - set_cloexec
    - msg
    - ASSERT
    linkageType: ''
    returnType: socket_descriptor_t
    signature: 'socket_descriptor_t create_socket_tcp(struct addrinfo *addrinfo) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1907,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1988,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1978,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1979,1
    - Dst: resolve_bind_local
      Src: /src/openvpn/src/openvpn/socket.c:2032,1
    - Dst: resolve_remote
      Src: /src/openvpn/src/openvpn/socket.c:2034,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 79
    argCount: 3
    argNames:
    - c
    - sock_index
    - mode
    argTypes:
    - struct context*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 2036
      start: 1902
    functionDepth: 0
    functionLinenumber: 1902
    functionLinenumberEnd: 2036
    functionName: link_socket_init_phase1
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - resolve_remote
    - resolve_bind_local
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void link_socket_init_phase1(struct context *c, int sock_index, int
      mode) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: socket_connect
      Src: /src/openvpn/src/openvpn/socket.c:2148,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/socket.c:2150,1
    - Dst: establish_http_proxy_passthru
      Src: /src/openvpn/src/openvpn/socket.c:2160,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:2179,1
    - Dst: establish_socks_proxy_passthru
      Src: /src/openvpn/src/openvpn/socket.c:2170,1
    - Dst: create_socket_tcp
      Src: /src/openvpn/src/openvpn/socket.c:2180,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 14
    argCount: 2
    argNames:
    - sock
    - sig_info
    argTypes:
    - struct link_socket*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 2185
      start: 2142
    functionDepth: 0
    functionLinenumber: 2142
    functionLinenumberEnd: 2185
    functionName: phase2_tcp_client
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - openvpn_close_socket
    - socket_connect
    - establish_socks_proxy_passthru
    - create_socket_tcp
    - establish_http_proxy_passthru
    - get_server_poll_remaining_time
    linkageType: ''
    returnType: void
    signature: 'static void phase2_tcp_client(struct link_socket *sock, struct signal_info
      *sig_info) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_cached_dns_entry
      Src: /src/openvpn/src/openvpn/socket.c:297,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:308,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/socket.c:315,1
    - Dst: gc_addspecial
      Src: /src/openvpn/src/openvpn/socket.c:335,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 22
    argCount: 5
    argNames:
    - c
    - hostname
    - servname
    - af
    - flags
    argTypes:
    - struct context*
    - char*
    - char*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 339
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 339
    functionName: do_preresolve_host
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    - get_cached_dns_entry
    - openvpn_getaddrinfo
    - gc_addspecial
    linkageType: ''
    returnType: int
    signature: 'static int do_preresolve_host(struct context *c, const char *hostname,
      const char *servname, const int af, const int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getsockopt
      Src: /src/openvpn/src/openvpn/socket.c:893,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - sd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 900
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 900
    functionName: socket_get_sndbuf
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - getsockopt
    linkageType: ''
    returnType: int
    signature: 'static int socket_get_sndbuf(socket_descriptor_t sd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: socket_set_flags
      Src: /src/openvpn/src/openvpn/socket.c:2042,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/socket.c:2045,1
    - Dst: set_mtu_discover_type
      Src: /src/openvpn/src/openvpn/socket.c:2048,1
    - Dst: set_sock_extended_error_passing
      Src: /src/openvpn/src/openvpn/socket.c:2052,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 2054
      start: 2038
    functionDepth: 0
    functionLinenumber: 2038
    functionLinenumberEnd: 2054
    functionName: phase2_set_socket_flags
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - set_mtu_discover_type
    - set_sock_extended_error_passing
    - socket_set_flags
    - set_nonblock
    linkageType: ''
    returnType: void
    signature: 'static void phase2_set_socket_flags(struct link_socket *sock) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket_connect
      Src: /src/openvpn/src/openvpn/socket.c:2190,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:2217,1
    - Dst: establish_socks_proxy_udpassoc
      Src: /src/openvpn/src/openvpn/socket.c:2200,1
    - Dst: addr_zero_host
      Src: /src/openvpn/src/openvpn/socket.c:2214,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/socket.c:2192,1
    - Dst: resolve_remote
      Src: /src/openvpn/src/openvpn/socket.c:2222,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 2
    argNames:
    - sock
    - sig_info
    argTypes:
    - struct link_socket*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 2223
      start: 2187
    functionDepth: 0
    functionLinenumber: 2187
    functionLinenumberEnd: 2223
    functionName: phase2_socks_client
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - resolve_remote
    - socket_connect
    - establish_socks_proxy_udpassoc
    - addr_zero_host
    - freeaddrinfo
    - get_server_poll_remaining_time
    linkageType: ''
    returnType: void
    signature: 'static void phase2_socks_client(struct link_socket *sock, struct signal_info
      *sig_info) '
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: socket_frame_init
      Src: /src/openvpn/src/openvpn/socket.c:2295,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2286,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/socket.c:2312,1
    - Dst: create_socket
      Src: /src/openvpn/src/openvpn/socket.c:2320,1
    - Dst: resolve_remote
      Src: /src/openvpn/src/openvpn/socket.c:2308,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/socket.c:2291,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2335,1
    - Dst: addr_family_name
      Src: /src/openvpn/src/openvpn/socket.c:2336,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2346,1
    - Dst: create_socket
      Src: /src/openvpn/src/openvpn/socket.c:2339,1
    - Dst: phase2_set_socket_flags
      Src: /src/openvpn/src/openvpn/socket.c:2380,1
    - Dst: phase2_socks_client
      Src: /src/openvpn/src/openvpn/socket.c:2367,1
    - Dst: throw_signal
      Src: /src/openvpn/src/openvpn/socket.c:2389,1
    - Dst: phase2_tcp_server
      Src: /src/openvpn/src/openvpn/socket.c:2358,1
    - Dst: phase2_tcp_client
      Src: /src/openvpn/src/openvpn/socket.c:2362,1
    - Dst: linksock_print_addr
      Src: /src/openvpn/src/openvpn/socket.c:2381,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2285,1
    - Dst: create_socket_dco_win
      Src: /src/openvpn/src/openvpn/socket.c:2314,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/socket.c:2347,1
    - Dst: protect_fd_nonlocal
      Src: /src/openvpn/src/openvpn/socket.c:2372,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/socket.c:2393,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 57
    argCount: 2
    argNames:
    - c
    - sock
    argTypes:
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 2396
      start: 2275
    functionDepth: 0
    functionLinenumber: 2275
    functionLinenumberEnd: 2396
    functionName: link_socket_init_phase2
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - resolve_remote
    - create_socket_dco_win
    - socket_frame_init
    - msg
    - create_socket
    - dco_enabled
    - protect_fd_nonlocal
    - phase2_set_socket_flags
    - register_signal
    - throw_signal
    - phase2_socks_client
    - phase2_tcp_server
    - linksock_print_addr
    - addr_family_name
    - ASSERT
    - signal_reset
    - phase2_tcp_client
    linkageType: ''
    returnType: void
    signature: 'void link_socket_init_phase2(struct context *c, struct link_socket
      *sock) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:1038,1
    - Dst: socket_set_buffers
      Src: /src/openvpn/src/openvpn/socket.c:1042,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 3
    argNames:
    - sock
    - rcvbuf
    - sndbuf
    argTypes:
    - struct link_socket*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 1044
      start: 1035
    functionDepth: 0
    functionLinenumber: 1035
    functionLinenumberEnd: 1044
    functionName: link_socket_update_buffer_sizes
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - socket_defined
    - socket_set_buffers
    linkageType: ''
    returnType: void
    signature: 'void link_socket_update_buffer_sizes(struct link_socket *sock, int
      rcvbuf, int sndbuf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:980,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:991,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:987,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:982,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - sd
    - state
    argTypes:
    - socket_descriptor_t
    - int
    constantsTouched: []
    func_position:
      end: 994
      start: 976
    functionDepth: 0
    functionLinenumber: 976
    functionLinenumberEnd: 994
    functionName: socket_set_tcp_nodelay
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'static bool socket_set_tcp_nodelay(socket_descriptor_t sd, int state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3453,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames:
    - cmsg
    - '!= NULL'
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3454
      start: 3451
    functionDepth: 0
    functionLinenumber: 3451
    functionLinenumberEnd: 3454
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (cmsg != NULL) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/socket.c:4165,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - local
    - path
    argTypes:
    - struct sockaddr_un*
    - char*
    constantsTouched: []
    func_position:
      end: 4166
      start: 4161
    functionDepth: 0
    functionLinenumber: 4161
    functionLinenumberEnd: 4166
    functionName: sockaddr_unix_init
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - strncpynt
    linkageType: ''
    returnType: void
    signature: 'void sockaddr_unix_init(struct sockaddr_un *local, const char *path) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1000,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1002,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - sd
    - mark
    argTypes:
    - socket_descriptor_t
    - int
    constantsTouched: []
    func_position:
      end: 1005
      start: 996
    functionDepth: 0
    functionLinenumber: 996
    functionLinenumberEnd: 1005
    functionName: socket_set_mark
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    linkageType: ''
    returnType: void
    signature: 'static inline void socket_set_mark(socket_descriptor_t sd, int mark) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:1439,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1463,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1471,1
    - Dst: addr_family_name
      Src: /src/openvpn/src/openvpn/socket.c:1464,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1450,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:1472,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1474,1
    - Dst: bind
      Src: /src/openvpn/src/openvpn/socket.c:1477,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1479,1
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.c:1481,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1483,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 5
    argNames:
    - sd
    - local
    - ai_family
    - prefix
    - ipv6only
    argTypes:
    - socket_descriptor_t
    - struct addrinfo*
    - int
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1484
      start: 1432
    functionDepth: 0
    functionLinenumber: 1432
    functionLinenumberEnd: 1484
    functionName: socket_bind
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    - bind
    - print_sockaddr_ex
    - gc_new
    - gc_free
    - addr_family_name
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void socket_bind(socket_descriptor_t sd, struct addrinfo *local, int
      ai_family, const char *prefix, bool ipv6only) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sockaddr_unix_name
      Src: /src/openvpn/src/openvpn/socket.c:4171,1
    - Dst: unlink
      Src: /src/openvpn/src/openvpn/socket.c:4174,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socket.c:4172,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - local
    argTypes:
    - struct sockaddr_un*
    constantsTouched: []
    func_position:
      end: 4176
      start: 4168
    functionDepth: 0
    functionLinenumber: 4168
    functionLinenumberEnd: 4176
    functionName: socket_delete_unix
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - strlen
    - unlink
    - sockaddr_unix_name
    linkageType: ''
    returnType: void
    signature: 'void socket_delete_unix(const struct sockaddr_un *local) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1218,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1226,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1230,1
    - Dst: addr_local
      Src: /src/openvpn/src/openvpn/socket.c:1224,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/socket.c:1232,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - addr
    argTypes:
    - int
    - struct sockaddr*
    constantsTouched: []
    func_position:
      end: 1233
      start: 1213
    functionDepth: 0
    functionLinenumber: 1213
    functionLinenumberEnd: 1233
    functionName: protect_fd_nonlocal
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - management_android_control
    - addr_local
    linkageType: ''
    returnType: void
    signature: 'static void protect_fd_nonlocal(int fd, const struct sockaddr *addr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_set_tcp_nodelay
      Src: /src/openvpn/src/openvpn/socket.c:1013,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - sd
    - sockflags
    argTypes:
    - socket_descriptor_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1019
      start: 1007
    functionDepth: 0
    functionLinenumber: 1007
    functionLinenumberEnd: 1019
    functionName: socket_set_flags
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - socket_set_tcp_nodelay
    linkageType: ''
    returnType: bool
    signature: 'static bool socket_set_flags(socket_descriptor_t sd, unsigned int
      sockflags) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: GREMLIN_CONNECTION_FLOOD_LEVEL
      Src: /src/openvpn/src/openvpn/socket.c:2404,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:2417,1
    - Dst: close_net_event_win32
      Src: /src/openvpn/src/openvpn/socket.c:2412,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:2409,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2416,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2419,1
    - Dst: overlapped_io_close
      Src: /src/openvpn/src/openvpn/socket.c:2426,1
    - Dst: overlapped_io_close
      Src: /src/openvpn/src/openvpn/socket.c:2427,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:2432,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:2434,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2436,1
    - Dst: stream_buf_close
      Src: /src/openvpn/src/openvpn/socket.c:2441,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/socket.c:2442,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/socket.c:2445,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 30
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 2448
      start: 2398
    functionDepth: 0
    functionLinenumber: 2398
    functionLinenumberEnd: 2448
    functionName: link_socket_close
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - openvpn_close_socket
    - close_net_event_win32
    - msg
    - free_buf
    - overlapped_io_close
    - stream_buf_close
    - free
    - GREMLIN_CONNECTION_FLOOD_LEVEL
    - socket_defined
    linkageType: ''
    returnType: void
    signature: 'void link_socket_close(struct link_socket *sock) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:1024,1
    - Dst: socket_set_flags
      Src: /src/openvpn/src/openvpn/socket.c:1027,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - sockflags
    argTypes:
    - struct link_socket*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1033
      start: 1021
    functionDepth: 0
    functionLinenumber: 1021
    functionLinenumberEnd: 1033
    functionName: link_socket_update_flags
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - socket_defined
    - socket_set_flags
    linkageType: ''
    returnType: bool
    signature: 'bool link_socket_update_flags(struct link_socket *sock, unsigned int
      sockflags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_link_socket_actual
      Src: /src/openvpn/src/openvpn/socket.c:2453,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - es
    - info
    argTypes:
    - struct env_set*
    - struct link_socket_info*
    constantsTouched: []
    func_position:
      end: 2454
      start: 2450
    functionDepth: 0
    functionLinenumber: 2450
    functionLinenumberEnd: 2454
    functionName: setenv_trusted
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setenv_link_socket_actual
    linkageType: ''
    returnType: void
    signature: 'void setenv_trusted(struct env_set *es, const struct link_socket_info
      *info) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: getpeereid
      Src: /src/openvpn/src/openvpn/socket.c:4184,1
    - Dst: getsockopt
      Src: /src/openvpn/src/openvpn/socket.c:4200,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 3
    argNames:
    - sd
    - uid
    - gid
    argTypes:
    - socket_descriptor_t
    - int*
    - int*
    constantsTouched: []
    func_position:
      end: 4216
      start: 4178
    functionDepth: 0
    functionLinenumber: 4178
    functionLinenumberEnd: 4216
    functionName: unix_socket_get_peer_uid_gid
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - getsockopt
    - getpeereid
    linkageType: ''
    returnType: bool
    signature: 'bool unix_socket_get_peer_uid_gid(const socket_descriptor_t sd, int
      *uid, int *gid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:3503,1
    - Dst: htonps
      Src: /src/openvpn/src/openvpn/socket.c:3506,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3505,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3507,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3504,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/socket.c:3507,1
    - Dst: link_socket_write_win32
      Src: /src/openvpn/src/openvpn/socket.c:3509,1
    - Dst: link_socket_write_tcp_posix
      Src: /src/openvpn/src/openvpn/socket.c:3511,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 3
    argNames:
    - sock
    - buf
    - to
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 3513
      start: 3498
    functionDepth: 0
    functionLinenumber: 3498
    functionLinenumberEnd: 3513
    functionName: link_socket_write_tcp
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - dmsg
    - BLEN
    - link_socket_write_tcp_posix
    - ASSERT
    - link_socket_write_win32
    - buf_write_prepend
    - htonps
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t link_socket_write_tcp(struct link_socket *sock, struct buffer
      *buf, struct link_socket_actual *to) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socket.c:812,1
    - Dst: string_class
      Src: /src/openvpn/src/openvpn/socket.c:813,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - addr
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 819
      start: 807
    functionDepth: 0
    functionLinenumber: 807
    functionLinenumberEnd: 819
    functionName: dns_addr_safe
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - string_class
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'static bool dns_addr_safe(const char *addr) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:1245,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1249,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1248,1
    - Dst: listen
      Src: /src/openvpn/src/openvpn/socket.c:1251,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:1250,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1253,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/socket.c:1260,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1263,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 4
    argNames:
    - sd
    - local
    - do_listen
    - do_set_nonblock
    argTypes:
    - socket_descriptor_t
    - struct addrinfo*
    - bool
    - bool
    constantsTouched: []
    func_position:
      end: 1264
      start: 1239
    functionDepth: 0
    functionLinenumber: 1239
    functionLinenumberEnd: 1264
    functionName: socket_do_listen
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - print_sockaddr
    - set_nonblock
    - msg
    - listen
    - gc_new
    - gc_free
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void socket_do_listen(socket_descriptor_t sd, const struct
      addrinfo *local, bool do_listen, bool do_set_nonblock) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:2528,1
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.c:2539,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2543,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/socket.c:2537,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2535,1
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.c:2544,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:2549,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 13
    argCount: 3
    argNames:
    - buf
    - info
    - from_addr
    argTypes:
    - struct buffer*
    - struct link_socket_info*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 2550
      start: 2523
    functionDepth: 0
    functionLinenumber: 2523
    functionLinenumberEnd: 2550
    functionName: link_socket_bad_incoming_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - print_sockaddr_ex
    - gc_new
    - print_link_socket_actual
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void link_socket_bad_incoming_addr(struct buffer *buf, const struct
      link_socket_info *info, const struct link_socket_actual *from_addr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_is_dco_win
      Src: /src/openvpn/src/openvpn/socket.c:3603,1
    - Dst: WSAGetLastError
      Src: /src/openvpn/src/openvpn/socket.c:3608,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/socket.c:3605,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 3609
      start: 3600
    functionDepth: 0
    functionLinenumber: 3600
    functionLinenumberEnd: 3609
    functionName: socket_get_last_error
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - GetLastError
    - socket_is_dco_win
    - WSAGetLastError
    linkageType: ''
    returnType: int
    signature: 'static int socket_get_last_error(const struct link_socket *sock) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ip_addr_dotted_quad_safe
      Src: /src/openvpn/src/openvpn/socket.c:824,1
    - Dst: dns_addr_safe
      Src: /src/openvpn/src/openvpn/socket.c:830,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - addr
    - allow_fqdn
    argTypes:
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 836
      start: 821
    functionDepth: 0
    functionLinenumber: 821
    functionLinenumberEnd: 836
    functionName: ip_or_dns_addr_safe
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - dns_addr_safe
    - ip_addr_dotted_quad_safe
    linkageType: ''
    returnType: bool
    signature: 'bool ip_or_dns_addr_safe(const char *addr, const bool allow_fqdn) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: af_addr_size
      Src: /src/openvpn/src/openvpn/socket.c:1275,1
    - Dst: getpeername
      Src: /src/openvpn/src/openvpn/socket.c:1283,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:1285,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1287,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:1279,1
    - Dst: accept
      Src: /src/openvpn/src/openvpn/socket.c:1296,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:1310,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1312,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1317,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:1318,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/socket.c:1325,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 3
    argNames:
    - sd
    - act
    - nowait
    argTypes:
    - socket_descriptor_t
    - struct link_socket_actual*
    - bool
    constantsTouched: []
    func_position:
      end: 1328
      start: 1266
    functionDepth: 0
    functionLinenumber: 1266
    functionLinenumberEnd: 1328
    functionName: socket_do_accept
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - openvpn_close_socket
    - set_cloexec
    - accept
    - msg
    - CLEAR
    - getpeername
    - af_addr_size
    - socket_defined
    linkageType: ''
    returnType: socket_descriptor_t
    signature: 'socket_descriptor_t socket_do_accept(socket_descriptor_t sd, struct
      link_socket_actual *act, const bool nowait) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2555,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2556
      start: 2552
    functionDepth: 0
    functionLinenumber: 2552
    functionLinenumberEnd: 2556
    functionName: link_socket_bad_outgoing_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void link_socket_bad_outgoing_addr(void) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3630,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:3638,1
    - Dst: socket_is_dco_win
      Src: /src/openvpn/src/openvpn/socket.c:3644,1
    - Dst: af_addr_size
      Src: /src/openvpn/src/openvpn/socket.c:3687,1
    - Dst: WSARecv
      Src: /src/openvpn/src/openvpn/socket.c:3669,1
    - Dst: WSARecvFrom
      Src: /src/openvpn/src/openvpn/socket.c:3655,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3698,1
    - Dst: socket_get_last_error
      Src: /src/openvpn/src/openvpn/socket.c:3704,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3718,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/socket.c:3720,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/socket.c:3620,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3638,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3641,1
    - Dst: bad_address_length
      Src: /src/openvpn/src/openvpn/socket.c:3690,1
    - Dst: proto_is_tcp
      Src: /src/openvpn/src/openvpn/socket.c:3666,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3695,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3709,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:3714,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3715,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:3634,1
    - Dst: proto_is_tcp
      Src: /src/openvpn/src/openvpn/socket.c:3624,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:3635,1
    - Dst: stream_buf_get_next
      Src: /src/openvpn/src/openvpn/socket.c:3626,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3641,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3681,1
    - Dst: ReadFile
      Src: /src/openvpn/src/openvpn/socket.c:3646,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/socket.c:3651,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3695,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3715,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:3721,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 71
    argCount: 2
    argNames:
    - sock
    - maxsize
    argTypes:
    - struct link_socket*
    - int
    constantsTouched: []
    func_position:
      end: 3726
      start: 3611
    functionDepth: 0
    functionLinenumber: 3611
    functionLinenumberEnd: 3726
    functionName: socket_recv_queue
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - dmsg
    - BLEN
    - proto_is_udp
    - ResetEvent
    - WSARecv
    - socket_get_last_error
    - gc_new
    - gc_free
    - af_addr_size
    - stream_buf_get_next
    - BSTR
    - strerror_win32
    - bad_address_length
    - ASSERT
    - ReadFile
    - socket_is_dco_win
    - proto_is_tcp
    - SetEvent
    - WSARecvFrom
    linkageType: ''
    returnType: int
    signature: 'int socket_recv_queue(struct link_socket *sock, int maxsize) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:1584,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1585,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:1599,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - actual
    - ai
    argTypes:
    - struct link_socket_actual*
    - struct addrinfo*
    constantsTouched: []
    func_position:
      end: 1602
      start: 1581
    functionDepth: 0
    functionLinenumber: 1581
    functionLinenumberEnd: 1602
    functionName: set_actual_address
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - CLEAR
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void set_actual_address(struct link_socket_actual *actual, struct
      addrinfo *ai) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: SocketHandleGetOverlappedResult
      Src: /src/openvpn/src/openvpn/socket.c:3944,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3954,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3954,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3956,1
    - Dst: SocketHandleGetLastError
      Src: /src/openvpn/src/openvpn/socket.c:3962,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3966,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3966,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3967,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:3974,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/socket.c:3974,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3980,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3990,1
    - Dst: SocketHandleSetInvalError
      Src: /src/openvpn/src/openvpn/socket.c:3995,1
    - Dst: read_sockaddr_from_packet
      Src: /src/openvpn/src/openvpn/socket.c:4006,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:3997,1
    - Dst: read_sockaddr_from_overlapped
      Src: /src/openvpn/src/openvpn/socket.c:4011,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:4001,1
    - Dst: SocketHandleSetLastError
      Src: /src/openvpn/src/openvpn/socket.c:3978,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 52
    argCount: 4
    argNames:
    - sh
    - io
    - buf
    - from
    argTypes:
    - sockethandle_t
    - struct overlapped_io*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 4019
      start: 3932
    functionDepth: 0
    functionLinenumber: 3932
    functionLinenumberEnd: 4019
    functionName: sockethandle_finalize
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - SocketHandleSetInvalError
    - dmsg
    - msg
    - read_sockaddr_from_overlapped
    - SocketHandleGetLastError
    - ASSERT
    - SocketHandleGetOverlappedResult
    - SocketHandleSetLastError
    - ResetEvent
    - read_sockaddr_from_packet
    linkageType: ''
    returnType: int
    signature: 'int sockethandle_finalize(sockethandle_t sh, struct overlapped_io
      *io, struct buffer *buf, struct link_socket_actual *from) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - getaddr_flags
    - sockflags
    argTypes:
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 74
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 74
    functionName: sf2gaf
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static unsigned int sf2gaf(const unsigned int getaddr_flags, const
      unsigned int sockflags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.c:934,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:936,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - sd
    - size
    argTypes:
    - socket_descriptor_t
    - int
    constantsTouched: []
    func_position:
      end: 941
      start: 930
    functionDepth: 0
    functionLinenumber: 930
    functionLinenumberEnd: 941
    functionName: socket_set_rcvbuf
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setsockopt
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool socket_set_rcvbuf(socket_descriptor_t sd, int size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.c:2459,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/socket.c:2462,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/socket.c:2467,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/socket.c:2463,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 4
    argNames:
    - include_cmd
    - argv
    - info
    - gc
    argTypes:
    - bool
    - struct argv*
    - struct link_socket_info*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2470
      start: 2456
    functionDepth: 0
    functionLinenumber: 2456
    functionLinenumberEnd: 2470
    functionName: ipchange_fmt
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - argv_printf_cat
    - print_sockaddr_ex
    - argv_printf
    - argv_parse_cmd
    linkageType: ''
    returnType: void
    signature: 'static void ipchange_fmt(const bool include_cmd, struct argv *argv,
      const struct link_socket_info *info, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:4138,1
    - Dst: accept
      Src: /src/openvpn/src/openvpn/socket.c:4139,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/socket.c:4144,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - sd
    - remote
    argTypes:
    - socket_descriptor_t
    - struct sockaddr_un*
    constantsTouched: []
    func_position:
      end: 4147
      start: 4131
    functionDepth: 0
    functionLinenumber: 4131
    functionLinenumberEnd: 4147
    functionName: socket_accept_unix
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - accept
    - CLEAR
    - set_cloexec
    linkageType: ''
    returnType: socket_descriptor_t
    signature: 'socket_descriptor_t socket_accept_unix(socket_descriptor_t sd, struct
      sockaddr_un *remote) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket_get_sndbuf
      Src: /src/openvpn/src/openvpn/socket.c:949,1
    - Dst: socket_get_rcvbuf
      Src: /src/openvpn/src/openvpn/socket.c:950,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:964,1
    - Dst: socket_set_sndbuf
      Src: /src/openvpn/src/openvpn/socket.c:955,1
    - Dst: socket_set_rcvbuf
      Src: /src/openvpn/src/openvpn/socket.c:961,1
    - Dst: socket_get_rcvbuf
      Src: /src/openvpn/src/openvpn/socket.c:966,1
    - Dst: socket_get_sndbuf
      Src: /src/openvpn/src/openvpn/socket.c:968,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 3
    argNames:
    - fd
    - sbs
    - reduce_size
    argTypes:
    - socket_descriptor_t
    - struct socket_buffer_size*
    - bool
    constantsTouched: []
    func_position:
      end: 970
      start: 943
    functionDepth: 0
    functionLinenumber: 943
    functionLinenumberEnd: 970
    functionName: socket_set_buffers
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - socket_set_sndbuf
    - socket_get_rcvbuf
    - socket_set_rcvbuf
    - socket_get_sndbuf
    linkageType: ''
    returnType: void
    signature: 'void socket_set_buffers(socket_descriptor_t fd, const struct socket_buffer_size
      *sbs, bool reduce_size) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:2478,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2489,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2491,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/socket.c:2491,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/socket.c:2496,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2505,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/socket.c:2516,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/socket.c:2513,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:2520,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/socket.c:2486,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/socket.c:2514,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:2492,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:2492,1
    - Dst: ipchange_fmt
      Src: /src/openvpn/src/openvpn/socket.c:2515,1
    - Dst: setenv_trusted
      Src: /src/openvpn/src/openvpn/socket.c:2481,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/socket.c:2499,1
    - Dst: ipchange_fmt
      Src: /src/openvpn/src/openvpn/socket.c:2502,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/socket.c:2507,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/socket.c:2503,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/socket.c:2501,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/socket.c:2517,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 30
    argCount: 4
    argNames:
    - info
    - act
    - common_name
    - es
    argTypes:
    - struct link_socket_info*
    - struct link_socket_actual*
    - char*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 2521
      start: 2472
    functionDepth: 0
    functionLinenumber: 2472
    functionLinenumberEnd: 2521
    functionName: link_socket_connection_initiated
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - openvpn_run_script
    - BSTR
    - buf_printf
    - msg
    - plugin_call
    - argv_free
    - gc_new
    - print_link_socket_actual
    - setenv_str
    - gc_free
    - argv_new
    - ipchange_fmt
    - plugin_defined
    - setenv_trusted
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void link_socket_connection_initiated(struct link_socket_info *info,
      const struct link_socket_actual *act, const char *common_name, struct env_set
      *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:4115,1
    - Dst: sockaddr_unix_name
      Src: /src/openvpn/src/openvpn/socket.c:4124,1
    - Dst: umask
      Src: /src/openvpn/src/openvpn/socket.c:4116,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:4120,1
    - Dst: bind
      Src: /src/openvpn/src/openvpn/socket.c:4118,1
    - Dst: umask
      Src: /src/openvpn/src/openvpn/socket.c:4127,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:4128,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 3
    argNames:
    - sd
    - local
    - prefix
    argTypes:
    - socket_descriptor_t
    - struct sockaddr_un*
    - char*
    constantsTouched: []
    func_position:
      end: 4129
      start: 4110
    functionDepth: 0
    functionLinenumber: 4110
    functionLinenumberEnd: 4129
    functionName: socket_bind_unix
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - bind
    - gc_new
    - sockaddr_unix_name
    - gc_free
    - umask
    linkageType: ''
    returnType: void
    signature: 'void socket_bind_unix(socket_descriptor_t sd, struct sockaddr_un *local,
      const char *prefix) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: connect
      Src: /src/openvpn/src/openvpn/socket.c:4153,1
    - Dst: openvpn_errno
      Src: /src/openvpn/src/openvpn/socket.c:4156,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - sd
    - remote
    argTypes:
    - socket_descriptor_t
    - struct sockaddr_un*
    constantsTouched: []
    func_position:
      end: 4159
      start: 4149
    functionDepth: 0
    functionLinenumber: 4149
    functionLinenumberEnd: 4159
    functionName: socket_connect_unix
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - openvpn_errno
    - connect
    linkageType: ''
    returnType: int
    signature: 'int socket_connect_unix(socket_descriptor_t sd, struct sockaddr_un
      *remote) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: sockets_read_residual
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool sockets_read_residual(const struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - base
    - add
    argTypes:
    - struct in6_addr
    - uint32_t
    constantsTouched: []
    func_position:
      end: 3072
      start: 3052
    functionDepth: 0
    functionLinenumber: 3052
    functionLinenumberEnd: 3072
    functionName: add_in6_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct in6_addr
    signature: 'struct in6_addr add_in6_addr( struct in6_addr base, uint32_t add ) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:2240,1
    - Dst: dco_mp_start_vpn
      Src: /src/openvpn/src/openvpn/socket.c:2256,1
    - Dst: dco_p2p_new_peer
      Src: /src/openvpn/src/openvpn/socket.c:2260,1
    - Dst: tun_open_device
      Src: /src/openvpn/src/openvpn/socket.c:2246,1
    - Dst: static_assert
      Src: /src/openvpn/src/openvpn/socket.c:2249,1
    - Dst: linksock_print_addr
      Src: /src/openvpn/src/openvpn/socket.c:2270,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 23
    argCount: 3
    argNames:
    - c
    - sock
    - sig_info
    argTypes:
    - struct context*
    - struct link_socket*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 2271
      start: 2226
    functionDepth: 0
    functionLinenumber: 2226
    functionLinenumberEnd: 2271
    functionName: create_socket_dco_win
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - dco_p2p_new_peer
    - tun_open_device
    - dco_mp_start_vpn
    - linksock_print_addr
    - static_assert
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void create_socket_dco_win(struct context *c, struct link_socket
      *sock, struct signal_info *sig_info) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:93,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/socket.c:131,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:111,1
    - Dst: strdup
      Src: /src/openvpn/src/openvpn/socket.c:122,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:125,1
    - Dst: strtoul
      Src: /src/openvpn/src/openvpn/socket.c:134,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:137,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:144,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/socket.c:159,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:170,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/socket.c:188,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:187,1
    CyclomaticComplexity: 40
    EdgeCount: 40
    ICount: 54
    argCount: 8
    argNames:
    - af
    - flags
    - hostname
    - network
    - netbits
    - resolve_retry_seconds
    - sig_info
    - msglevel
    argTypes:
    - sa_family_t
    - unsigned int
    - char*
    - void*
    - unsigned int*
    - int
    - struct signal_info*
    - int
    constantsTouched: []
    func_position:
      end: 191
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 191
    functionName: get_addr_generic
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - strdup
    - strtoul
    - ntohl
    - strchr
    - openvpn_getaddrinfo
    - free
    - freeaddrinfo
    linkageType: ''
    returnType: int
    signature: 'static int get_addr_generic(sa_family_t af, unsigned int flags, const
      char *hostname, void *network, unsigned int *netbits, int resolve_retry_seconds,
      struct signal_info *sig_info, int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:1333,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1336,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1334,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/socket.c:1335,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - act
    argTypes:
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 1337
      start: 1330
    functionDepth: 0
    functionLinenumber: 1330
    functionLinenumberEnd: 1337
    functionName: tcp_connection_established
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    - print_link_socket_actual
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void tcp_connection_established(const struct link_socket_actual
      *act) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2712,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2714,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/socket.c:2713,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/socket.c:2714,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - sb
    - buf
    argTypes:
    - struct stream_buf*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 2716
      start: 2709
    functionDepth: 0
    functionLinenumber: 2709
    functionLinenumberEnd: 2716
    functionName: stream_buf_get_final
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_defined
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static inline void stream_buf_get_final(struct stream_buf *sb, struct
      buffer *buf) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/socket.c:2849,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2887,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/socket.c:2861,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/socket.c:2873,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/socket.c:2870,1
    - Dst: getnameinfo
      Src: /src/openvpn/src/openvpn/socket.c:2890,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:2895,1
    - Dst: gai_strerror
      Src: /src/openvpn/src/openvpn/socket.c:2895,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:2896,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/socket.c:2903,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/socket.c:2907,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/socket.c:2915,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/socket.c:2918,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:2921,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 46
    argCount: 4
    argNames:
    - sa
    - separator
    - flags
    - gc
    argTypes:
    - struct sockaddr*
    - char*
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2922
      start: 2843
    functionDepth: 0
    functionLinenumber: 2843
    functionLinenumberEnd: 2922
    functionName: print_sockaddr_ex
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - getnameinfo
    - BSTR
    - buf_printf
    - gai_strerror
    - ASSERT
    - buf_puts
    - IN6_IS_ADDR_UNSPECIFIED
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *print_sockaddr_ex(const struct sockaddr *sa, const char
      *separator, const unsigned int flags, struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/socket.c:3086,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/socket.c:3094,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/socket.c:3090,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/socket.c:3098,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/socket.c:3093,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/socket.c:3099,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/socket.c:3099,1
    - Dst: IN6_IS_ADDR_V4MAPPED
      Src: /src/openvpn/src/openvpn/socket.c:3104,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socket.c:3107,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/socket.c:3109,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/socket.c:3114,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/socket.c:3122,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/socket.c:3117,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/socket.c:3121,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/socket.c:3122,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/socket.c:3110,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/socket.c:3115,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 30
    argCount: 4
    argNames:
    - es
    - name_prefix
    - addr
    - flags
    argTypes:
    - struct env_set*
    - char*
    - struct openvpn_sockaddr*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3126
      start: 3075
    functionDepth: 0
    functionLinenumber: 3075
    functionLinenumberEnd: 3126
    functionName: setenv_sockaddr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - memcpy
    - snprintf
    - IN6_IS_ADDR_V4MAPPED
    - setenv_str
    - setenv_int
    - inet_ntop
    - ntohs
    linkageType: ''
    returnType: void
    signature: 'void setenv_sockaddr(struct env_set *es, const char *name_prefix,
      const struct openvpn_sockaddr *addr, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/socket.c:3200,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/socket.c:3202,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - proto_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 3208
      start: 3197
    functionDepth: 0
    functionLinenumber: 3197
    functionLinenumberEnd: 3208
    functionName: ascii2proto
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - strcmp
    - SIZE
    linkageType: ''
    returnType: int
    signature: 'int ascii2proto(const char *proto_name) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_addr_generic
      Src: /src/openvpn/src/openvpn/socket.c:203,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 5
    argNames:
    - flags
    - hostname
    - resolve_retry_seconds
    - succeeded
    - sig_info
    argTypes:
    - unsigned int
    - char*
    - int
    - bool*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 222
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 222
    functionName: getaddr
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - get_addr_generic
    linkageType: ''
    returnType: in_addr_t
    signature: 'in_addr_t getaddr(unsigned int flags, const char *hostname, int resolve_retry_seconds,
      bool *succeeded, struct signal_info *sig_info) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:1353,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1400,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/socket.c:1402,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:1394,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1423,1
    - Dst: FD_ZERO
      Src: /src/openvpn/src/openvpn/socket.c:1362,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/socket.c:1389,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1405,1
    - Dst: socket_do_accept
      Src: /src/openvpn/src/openvpn/socket.c:1387,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1428,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/socket.c:1363,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/socket.c:1367,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:1378,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/socket.c:1383,1
    - Dst: addrlist_match
      Src: /src/openvpn/src/openvpn/socket.c:1398,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:1403,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:1413,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/socket.c:1421,1
    - Dst: tcp_connection_established
      Src: /src/openvpn/src/openvpn/socket.c:1426,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:1348,1
    - Dst: socket_do_listen
      Src: /src/openvpn/src/openvpn/socket.c:1354,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/socket.c:1369,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:1372,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:1407,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/socket.c:1418,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 49
    argCount: 7
    argNames:
    - sd
    - act
    - remote_dynamic
    - local
    - do_listen
    - nowait
    - signal_received
    argTypes:
    - socket_descriptor_t
    - struct link_socket_actual*
    - char*
    - struct addrinfo*
    - bool
    - bool
    - int*
    constantsTouched: []
    func_position:
      end: 1430
      start: 1339
    functionDepth: 0
    functionLinenumber: 1339
    functionLinenumberEnd: 1430
    functionName: socket_listen_accept
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - socket_do_listen
    - openvpn_close_socket
    - management_sleep
    - msg
    - openvpn_fd_set
    - gc_new
    - get_signal
    - tcp_connection_established
    - print_link_socket_actual
    - CLEAR
    - gc_free
    - openvpn_getaddrinfo
    - FD_ZERO
    - freeaddrinfo
    - socket_do_accept
    - socket_defined
    - select
    - addrlist_match
    linkageType: ''
    returnType: socket_descriptor_t
    signature: 'static socket_descriptor_t socket_listen_accept(socket_descriptor_t
      sd, struct link_socket_actual *act, const char *remote_dynamic, const struct
      addrinfo *local, bool do_listen, bool nowait, volatile int *signal_received) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:2721,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/socket.c:2722,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:2723,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/socket.c:2723,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - sb
    - buf
    argTypes:
    - struct stream_buf*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 2725
      start: 2718
    functionDepth: 0
    functionLinenumber: 2718
    functionLinenumberEnd: 2725
    functionName: stream_buf_get_next
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_defined
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static inline void stream_buf_get_next(struct stream_buf *sb, struct
      buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print_link_socket_actual_ex
      Src: /src/openvpn/src/openvpn/socket.c:2927,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 2
    argNames:
    - act
    - gc
    argTypes:
    - struct link_socket_actual*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2928
      start: 2924
    functionDepth: 0
    functionLinenumber: 2924
    functionLinenumberEnd: 2928
    functionName: print_link_socket_actual
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - print_link_socket_actual_ex
    linkageType: ''
    returnType: char*
    signature: 'const char *print_link_socket_actual(const struct link_socket_actual
      *act, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:3134,1
    - Dst: setenv_sockaddr
      Src: /src/openvpn/src/openvpn/socket.c:3137,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/socket.c:3136,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 4
    argNames:
    - es
    - name_prefix
    - addr
    - flags
    argTypes:
    - struct env_set*
    - char*
    - in_addr_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3139
      start: 3128
    functionDepth: 0
    functionLinenumber: 3128
    functionLinenumberEnd: 3139
    functionName: setenv_in_addr_t
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - setenv_sockaddr
    - CLEAR
    - htonl
    linkageType: ''
    returnType: void
    signature: 'void setenv_in_addr_t(struct env_set *es, const char *name_prefix,
      in_addr_t addr, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/socket.c:3213,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/socket.c:3215,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - proto_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 3221
      start: 3210
    functionDepth: 0
    functionLinenumber: 3210
    functionLinenumberEnd: 3221
    functionName: ascii2af
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - strcmp
    - SIZE
    linkageType: ''
    returnType: sa_family_t
    signature: 'sa_family_t ascii2af(const char *proto_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - actual
    - expected
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 3318
      start: 3312
    functionDepth: 0
    functionLinenumber: 3312
    functionLinenumberEnd: 3318
    functionName: bad_address_length
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void bad_address_length(int actual, int expected) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/socket.c:3044,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/socket.c:3045,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/socket.c:3046,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - port
    - gc
    argTypes:
    - in_port_t
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 3047
      start: 3041
    functionDepth: 0
    functionLinenumber: 3041
    functionLinenumberEnd: 3047
    functionName: print_in_port_t
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *print_in_port_t(in_port_t port, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:716,1
    - Dst: string_class
      Src: /src/openvpn/src/openvpn/socket.c:725,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/socket.c:717,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/socket.c:721,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 25
    argCount: 2
    argNames:
    - dotted_quad
    - addr
    argTypes:
    - char*
    - struct in_addr*
    constantsTouched: []
    func_position:
      end: 733
      start: 711
    functionDepth: 0
    functionLinenumber: 711
    functionLinenumberEnd: 733
    functionName: openvpn_inet_aton
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - string_class
    - sscanf
    - CLEAR
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int openvpn_inet_aton(const char *dotted_quad, struct in_addr *addr) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/socket.c:2578,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/socket.c:2584,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/socket.c:2580,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 1
    argNames:
    - info
    argTypes:
    - struct link_socket_info*
    constantsTouched: []
    func_position:
      end: 2591
      start: 2558
    functionDepth: 0
    functionLinenumber: 2558
    functionLinenumberEnd: 2591
    functionName: link_socket_current_remote
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - link_socket_actual_defined
    - ntohl
    linkageType: ''
    returnType: in_addr_t
    signature: 'in_addr_t link_socket_current_remote(const struct link_socket_info
      *info) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/socket.c:2609,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 7
    argCount: 1
    argNames:
    - info
    argTypes:
    - struct link_socket_info*
    constantsTouched: []
    func_position:
      end: 2621
      start: 2593
    functionDepth: 0
    functionLinenumber: 2593
    functionLinenumberEnd: 2621
    functionName: link_socket_current_remote_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - link_socket_actual_defined
    linkageType: ''
    returnType: struct in6_addr*
    signature: 'const struct in6_addr *link_socket_current_remote_ipv6(const struct
      link_socket_info *info) '
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:486,1
    - Dst: hostname_randomize
      Src: /src/openvpn/src/openvpn/socket.c:551,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/socket.c:584,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/socket.c:617,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:484,1
    - Dst: getaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:534,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:574,1
    - Dst: gai_strerror
      Src: /src/openvpn/src/openvpn/socket.c:575,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:619,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:653,1
    - Dst: getaddrinfo_addr_family_name
      Src: /src/openvpn/src/openvpn/socket.c:657,1
    - Dst: gai_strerror
      Src: /src/openvpn/src/openvpn/socket.c:658,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:668,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:682,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:628,1
    - Dst: res_init
      Src: /src/openvpn/src/openvpn/socket.c:602,1
    - Dst: getaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:609,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/socket.c:613,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/socket.c:665,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socket.c:703,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socket.c:480,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.c:487,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socket.c:510,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/socket.c:606,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/socket.c:629,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:700,1
    CyclomaticComplexity: 48
    EdgeCount: 48
    ICount: 118
    argCount: 7
    argNames:
    - flags
    - hostname
    - servname
    - resolve_retry_seconds
    - sig_info
    - ai_family
    - res
    argTypes:
    - unsigned int
    - char*
    - char*
    - int
    - struct signal_info*
    - int
    - struct addrinfo**
    constantsTouched: []
    func_position:
      end: 705
      start: 467
    functionDepth: 0
    functionLinenumber: 467
    functionLinenumberEnd: 705
    functionName: openvpn_getaddrinfo
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - res_init
    - hostname_randomize
    - management_set_state
    - management_sleep
    - dmsg
    - msg
    - getaddrinfo
    - gc_new
    - get_signal
    - gai_strerror
    - CLEAR
    - getaddrinfo_addr_family_name
    - ASSERT
    - gc_free
    - freeaddrinfo
    - signal_reset
    linkageType: ''
    returnType: int
    signature: 'int openvpn_getaddrinfo(unsigned int flags, const char *hostname,
      const char *servname, int resolve_retry_seconds, struct signal_info *sig_info,
      int ai_family, struct addrinfo **res) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.c:3339,1
    - Dst: stream_buf_get_next
      Src: /src/openvpn/src/openvpn/socket.c:3349,1
    - Dst: recv
      Src: /src/openvpn/src/openvpn/socket.c:3350,1
    - Dst: sockethandle_finalize
      Src: /src/openvpn/src/openvpn/socket.c:3346,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.c:3350,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.c:3350,1
    - Dst: stream_buf_added
      Src: /src/openvpn/src/openvpn/socket.c:3364,1
    - Dst: stream_buf_get_final
      Src: /src/openvpn/src/openvpn/socket.c:3366,1
    - Dst: stream_buf_reset
      Src: /src/openvpn/src/openvpn/socket.c:3367,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - sock
    - buf
    argTypes:
    - struct link_socket*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 3374
      start: 3324
    functionDepth: 0
    functionLinenumber: 3324
    functionLinenumberEnd: 3374
    functionName: link_socket_read_tcp
    functionSourceFile: /src/openvpn/src/openvpn/socket.c
    functionUses: []
    functionsReached:
    - recv
    - sockethandle_finalize
    - BPTR
    - msg
    - BLEN
    - stream_buf_get_final
    - stream_buf_added
    - stream_buf_reset
    - stream_buf_get_next
    linkageType: ''
    returnType: int
    signature: 'int link_socket_read_tcp(struct link_socket *sock, struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: prng_bytes
      Src: /src/openvpn/src/openvpn/session_id.c:50,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - sid
    argTypes:
    - struct session_id*
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: session_id_random
    functionSourceFile: /src/openvpn/src/openvpn/session_id.c
    functionUses: []
    functionsReached:
    - prng_bytes
    linkageType: ''
    returnType: void
    signature: 'void session_id_random(struct session_id *sid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/session_id.c:56,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 2
    argNames:
    - sid
    - gc
    argTypes:
    - struct session_id*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: session_id_print
    functionSourceFile: /src/openvpn/src/openvpn/session_id.c
    functionUses: []
    functionsReached:
    - format_hex
    linkageType: ''
    returnType: char*
    signature: 'const char *session_id_print(const struct session_id *sid, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/fdmisc.h:42,1
    - Dst: FD_SET
      Src: /src/openvpn/src/openvpn/fdmisc.h:44,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - setp
    argTypes:
    - socket_descriptor_t
    - fd_set*
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: openvpn_fd_set
    functionSourceFile: /src/openvpn/src/openvpn/fdmisc.h
    functionUses: []
    functionsReached:
    - ASSERT
    - FD_SET
    linkageType: ''
    returnType: void
    signature: 'static inline void openvpn_fd_set(socket_descriptor_t fd, fd_set *setp) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct mbuf_set*
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 82
    functionName: mbuf_defined
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool mbuf_defined(const struct mbuf_set *ms) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct mbuf_set*
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: mbuf_len
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int mbuf_len(const struct mbuf_set *ms) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct mbuf_set*
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: mbuf_maximum_queued
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int mbuf_maximum_queued(const struct mbuf_set *ms) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbuf_defined
      Src: /src/openvpn/src/openvpn/mbuf.h:101,1
    - Dst: mbuf_peek_dowork
      Src: /src/openvpn/src/openvpn/mbuf.h:103,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct mbuf_set*
    constantsTouched: []
    func_position:
      end: 109
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 109
    functionName: mbuf_peek
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.h
    functionUses: []
    functionsReached:
    - mbuf_defined
    - mbuf_peek_dowork
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static inline struct multi_instance *mbuf_peek(struct mbuf_set *ms) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - vo
    - flags
    - str
    argTypes:
    - struct virtual_output*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: virtual_output_print
    functionSourceFile: /src/openvpn/src/openvpn/status.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void virtual_output_print(const struct virtual_output
      *vo, const unsigned int flags, const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - so
    argTypes:
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 102
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 102
    functionName: status_rw_flags
    functionSourceFile: /src/openvpn/src/openvpn/status.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int status_rw_flags(const struct status_output
      *so) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: proxy_entry_close_sd
      Src: /src/openvpn/src/openvpn/ps.c:278,1
    - Dst: unlink
      Src: /src/openvpn/src/openvpn/ps.c:285,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ps.c:279,1
    - Dst: proxy_entry_mark_for_close
      Src: /src/openvpn/src/openvpn/ps.c:291,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ps.c:286,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 16
    argCount: 2
    argNames:
    - pc
    - es
    argTypes:
    - struct proxy_connection*
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 294
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 294
    functionName: proxy_entry_mark_for_close
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - unlink
    - free_buf
    - proxy_entry_close_sd
    - free
    - proxy_entry_mark_for_close
    linkageType: ''
    returnType: void
    signature: 'static void proxy_entry_mark_for_close(struct proxy_connection *pc,
      struct event_set *es) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ps.c:710,1
    - Dst: proxy_connection_io_status
      Src: /src/openvpn/src/openvpn/ps.c:715,1
    - Dst: proxy_connection_io_xfer
      Src: /src/openvpn/src/openvpn/ps.c:714,1
    - Dst: proxy_connection_io_xfer
      Src: /src/openvpn/src/openvpn/ps.c:722,1
    - Dst: proxy_connection_io_status
      Src: /src/openvpn/src/openvpn/ps.c:723,1
    - Dst: proxy_connection_io_requeue
      Src: /src/openvpn/src/openvpn/ps.c:728,1
    - Dst: proxy_connection_io_requeue
      Src: /src/openvpn/src/openvpn/ps.c:729,1
    - Dst: proxy_entry_mark_for_close
      Src: /src/openvpn/src/openvpn/ps.c:734,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 20
    argCount: 3
    argNames:
    - pc
    - rwflags
    - es
    argTypes:
    - struct proxy_connection*
    - int
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 736
      start: 700
    functionDepth: 0
    functionLinenumber: 700
    functionLinenumberEnd: 736
    functionName: proxy_connection_io_dispatch
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - proxy_connection_io_status
    - proxy_connection_io_requeue
    - ASSERT
    - proxy_entry_mark_for_close
    - proxy_connection_io_xfer
    linkageType: ''
    returnType: int
    signature: 'static int proxy_connection_io_dispatch(struct proxy_connection *pc,
      const int rwflags, struct event_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/ps.c:91,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - sd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 95
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 95
    functionName: close_socket_if_defined
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - socket_defined
    - openvpn_close_socket
    linkageType: ''
    returnType: void
    signature: 'static inline void close_socket_if_defined(const socket_descriptor_t
      sd) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/ps.c:257,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:264,1
    - Dst: event_del
      Src: /src/openvpn/src/openvpn/ps.c:262,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:259,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 2
    argNames:
    - pc
    - es
    argTypes:
    - struct proxy_connection*
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 267
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 267
    functionName: proxy_entry_close_sd
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - socket_defined
    - event_del
    - openvpn_close_socket
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void proxy_entry_close_sd(struct proxy_connection *pc, struct
      event_set *es) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: cmsg_size
      Src: /src/openvpn/src/openvpn/ps.c:518,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ps.c:509,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ps.c:520,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/ps.c:524,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ps.c:528,1
    - Dst: recvmsg
      Src: /src/openvpn/src/openvpn/ps.c:530,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/ps.c:528,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/ps.c:514,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/ps.c:523,1
    - Dst: proxy_entry_new
      Src: /src/openvpn/src/openvpn/ps.c:549,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:565,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ps.c:572,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ps.c:500,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ps.c:513,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ps.c:519,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ps.c:556,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:544,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:566,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ps.c:571,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/ps.c:543,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:538,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/ps.c:534,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ps.c:543,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:560,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 63
    argCount: 6
    argNames:
    - sd_control
    - list
    - es
    - server_addr
    - max_initial_buf
    - journal_dir
    argTypes:
    - socket_descriptor_t
    - struct proxy_connection**
    - struct event_set*
    - struct openvpn_sockaddr
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 574
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 574
    functionName: control_message_from_parent
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - memcpy
    - CMSG_DATA
    - openvpn_close_socket
    - BPTR
    - CMSG_FIRSTHDR
    - msg
    - dmsg
    - check_malloc_return
    - recvmsg
    - free_buf
    - free
    - CMSG_LEN
    - CLEAR
    - cmsg_size
    - malloc
    - alloc_buf
    - proxy_entry_new
    - BCAP
    linkageType: ''
    returnType: bool
    signature: 'static bool control_message_from_parent(const socket_descriptor_t
      sd_control, struct proxy_connection **list, struct event_set *es, const struct
      openvpn_sockaddr server_addr, const int max_initial_buf, const char *journal_dir) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:691,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 3
    argNames:
    - status
    - rwflags_pc
    - rwflags_cp
    argTypes:
    - int
    - int*
    - int*
    constantsTouched: []
    func_position:
      end: 694
      start: 669
    functionDepth: 0
    functionLinenumber: 669
    functionLinenumberEnd: 694
    functionName: proxy_connection_io_status
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool proxy_connection_io_status(const int status, int *rwflags_pc,
      int *rwflags_cp) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: closelog
      Src: /src/openvpn/src/openvpn/ps.c:111,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:116,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - keep
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 119
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 119
    functionName: close_fds_except
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - openvpn_close_socket
    - closelog
    linkageType: ''
    returnType: void
    signature: 'static void close_fds_except(int keep) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/openvpn/ps.c:145,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 154
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 154
    functionName: recv_control
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'static int recv_control(const socket_descriptor_t fd) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/ps.c:313,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 13
    argCount: 1
    argNames:
    - list
    argTypes:
    - struct proxy_connection**
    constantsTouched: []
    func_position:
      end: 330
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 330
    functionName: proxy_list_housekeeping
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void proxy_list_housekeeping(struct proxy_connection **list) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: proxy_entry_mark_for_close
      Src: /src/openvpn/src/openvpn/ps.c:388,1
    - Dst: proxy_list_housekeeping
      Src: /src/openvpn/src/openvpn/ps.c:391,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 1
    argNames:
    - list
    argTypes:
    - struct proxy_connection**
    constantsTouched: []
    func_position:
      end: 393
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 393
    functionName: proxy_list_close
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - proxy_entry_mark_for_close
    - proxy_list_housekeeping
    linkageType: ''
    returnType: void
    signature: 'static void proxy_list_close(struct proxy_connection **list) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: send_control
      Src: /src/openvpn/src/openvpn/ps.c:970,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:971,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - ps
    argTypes:
    - struct port_share*
    constantsTouched: []
    func_position:
      end: 975
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 975
    functionName: port_share_abort
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - send_control
    - openvpn_close_socket
    linkageType: ''
    returnType: void
    signature: 'void port_share_abort(struct port_share *ps) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/openvpn/src/openvpn/ps.c:160,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - fd
    - code
    argTypes:
    - socket_descriptor_t
    - int
    constantsTouched: []
    func_position:
      end: 169
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 169
    functionName: send_control
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'static int send_control(const socket_descriptor_t fd, int code) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/ps.c:398,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/ps.c:401,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 3
    argNames:
    - pc
    - rwflags_new
    - es
    argTypes:
    - struct proxy_connection*
    - int
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 404
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 404
    functionName: proxy_connection_io_requeue
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - event_ctl
    - socket_defined
    linkageType: ''
    returnType: void
    signature: 'static inline void proxy_connection_io_requeue(struct proxy_connection
      *pc, const int rwflags_new, struct event_set *es) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: send_control
      Src: /src/openvpn/src/openvpn/ps.c:747,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:756,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/ps.c:759,1
    - Dst: event_wait
      Src: /src/openvpn/src/openvpn/ps.c:768,1
    - Dst: event_set_init
      Src: /src/openvpn/src/openvpn/ps.c:758,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/ps.c:768,1
    - Dst: time
      Src: /src/openvpn/src/openvpn/ps.c:770,1
    - Dst: control_message_from_parent
      Src: /src/openvpn/src/openvpn/ps.c:779,1
    - Dst: proxy_connection_io_dispatch
      Src: /src/openvpn/src/openvpn/ps.c:789,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:796,1
    - Dst: proxy_list_close
      Src: /src/openvpn/src/openvpn/ps.c:806,1
    - Dst: event_free
      Src: /src/openvpn/src/openvpn/ps.c:807,1
    - Dst: proxy_list_housekeeping
      Src: /src/openvpn/src/openvpn/ps.c:800,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:809,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 39
    argCount: 4
    argNames:
    - hostaddr
    - sd_control
    - max_initial_buf
    - journal_dir
    argTypes:
    - struct openvpn_sockaddr
    - socket_descriptor_t
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 810
      start: 741
    functionDepth: 0
    functionLinenumber: 741
    functionLinenumberEnd: 810
    functionName: port_share_proxy
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - dmsg
    - proxy_list_close
    - msg
    - SIZE
    - proxy_connection_io_dispatch
    - event_set_init
    - event_free
    - event_wait
    - send_control
    - control_message_from_parent
    - event_ctl
    - time
    - proxy_list_housekeeping
    linkageType: ''
    returnType: void
    signature: 'static void port_share_proxy(const struct openvpn_sockaddr hostaddr,
      const socket_descriptor_t sd_control, const int max_initial_buf, const char
      *journal_dir) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ps.c:839,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/ps.c:842,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ps.c:849,1
    - Dst: recv_control
      Src: /src/openvpn/src/openvpn/ps.c:884,1
    - Dst: set_signals
      Src: /src/openvpn/src/openvpn/ps.c:906,1
    - Dst: port_share_proxy
      Src: /src/openvpn/src/openvpn/ps.c:923,1
    - Dst: port_share_close
      Src: /src/openvpn/src/openvpn/ps.c:932,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ps.c:829,1
    - Dst: msg_test
      Src: /src/openvpn/src/openvpn/ps.c:844,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:847,1
    - Dst: close_fds_except
      Src: /src/openvpn/src/openvpn/ps.c:917,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/ps.c:920,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:925,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/ps.c:837,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ps.c:840,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ps.c:841,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:878,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/ps.c:881,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:896,1
    - Dst: socketpair
      Src: /src/openvpn/src/openvpn/ps.c:856,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/ps.c:889,1
    - Dst: msg_forked
      Src: /src/openvpn/src/openvpn/ps.c:909,1
    - Dst: exit
      Src: /src/openvpn/src/openvpn/ps.c:927,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ps.c:846,1
    - Dst: print_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/ps.c:848,1
    - Dst: fork
      Src: /src/openvpn/src/openvpn/ps.c:865,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:858,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 47
    argCount: 4
    argNames:
    - host
    - port
    - max_initial_buf
    - journal_dir
    argTypes:
    - char*
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 934
      start: 816
    functionDepth: 0
    functionLinenumber: 816
    functionLinenumberEnd: 934
    functionName: port_share_open
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - memcpy
    - openvpn_close_socket
    - dmsg
    - msg
    - openvpn_getaddrinfo
    - gc_new
    - gc_free
    - freeaddrinfo
    - ALLOC_OBJ_CLEAR
    - port_share_close
    - exit
    - set_cloexec
    - set_nonblock
    - recv_control
    - fork
    - msg_forked
    - msg_test
    - close_fds_except
    - print_openvpn_sockaddr
    - set_signals
    - socketpair
    - ASSERT
    - port_share_proxy
    linkageType: ''
    returnType: struct port_share*
    signature: 'struct port_share *port_share_open(const char *host, const char *port,
      const int max_initial_buf, const char *journal_dir) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: port_share_sendmsg
      Src: /src/openvpn/src/openvpn/ps.c:944,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:947,1
    - Dst: waitpid
      Src: /src/openvpn/src/openvpn/ps.c:950,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:952,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:954,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ps.c:958,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - ps
    argTypes:
    - struct port_share*
    constantsTouched: []
    func_position:
      end: 960
      start: 936
    functionDepth: 0
    functionLinenumber: 936
    functionLinenumberEnd: 960
    functionName: port_share_close
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - port_share_sendmsg
    - openvpn_close_socket
    - dmsg
    - waitpid
    - free
    linkageType: ''
    returnType: void
    signature: 'void port_share_close(struct port_share *ps) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/openvpn/src/openvpn/ps.c:128,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/ps.c:130,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/ps.c:131,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/ps.c:133,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/ps.c:132,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/ps.c:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 135
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 135
    functionName: set_signals
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - signal
    linkageType: ''
    returnType: void
    signature: 'static void set_signals(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ps.c:339,1
    - Dst: print_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/ps.c:351,1
    - Dst: print_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/ps.c:352,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ps.c:354,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ps.c:355,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:363,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ps.c:374,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/ps.c:365,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ps.c:371,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ps.c:356,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:370,1
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/ps.c:358,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:357,1
    - Dst: getpeername
      Src: /src/openvpn/src/openvpn/ps.c:348,1
    - Dst: getsockname
      Src: /src/openvpn/src/openvpn/ps.c:349,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ps.c:353,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ps.c:353,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/ps.c:361,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ps.c:361,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ps.c:361,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 43
    argCount: 3
    argNames:
    - journal_dir
    - pc
    - cp
    argTypes:
    - char*
    - struct proxy_connection*
    - struct proxy_connection*
    constantsTouched: []
    func_position:
      end: 375
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 375
    functionName: journal_add
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - print_openvpn_sockaddr
    - snprintf
    - gc_new
    - getsockname
    - free
    - gc_free
    - getpeername
    - write
    - malloc
    - close
    - strlen
    - platform_open
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'static void journal_add(const char *journal_dir, struct proxy_connection
      *pc, struct proxy_connection *cp) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ps.c:985,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ps.c:986,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1026
      start: 982
    functionDepth: 0
    functionLinenumber: 982
    functionLinenumberEnd: 1026
    functionName: is_openvpn_protocol
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - BLEN
    - BSTR
    linkageType: ''
    returnType: bool
    signature: 'bool is_openvpn_protocol(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: port_share_sendmsg
      Src: /src/openvpn/src/openvpn/ps.c:1038,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 3
    argNames:
    - ps
    - head
    - sd
    argTypes:
    - struct port_share*
    - struct buffer*
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 1040
      start: 1033
    functionDepth: 0
    functionLinenumber: 1033
    functionLinenumberEnd: 1040
    functionName: port_share_redirect
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - port_share_sendmsg
    linkageType: ''
    returnType: void
    signature: 'void port_share_redirect(struct port_share *ps, const struct buffer
      *head, socket_descriptor_t sd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/ps.c:82,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ps.c:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: headc
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - strncpy
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *headc(const struct buffer *buf) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ps.c:201,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ps.c:203,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ps.c:213,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ps.c:221,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ps.c:222,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/ps.c:228,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/ps.c:237,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:243,1
    - Dst: sendmsg
      Src: /src/openvpn/src/openvpn/ps.c:240,1
    - Dst: close_socket_if_defined
      Src: /src/openvpn/src/openvpn/ps.c:248,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/ps.c:225,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/ps.c:230,1
    - Dst: socketpair
      Src: /src/openvpn/src/openvpn/ps.c:236,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ps.c:232,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:199,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ps.c:214,1
    - Dst: cmsg_size
      Src: /src/openvpn/src/openvpn/ps.c:220,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ps.c:237,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/ps.c:232,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ps.c:250,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/ps.c:190,1
    - Dst: close_socket_if_defined
      Src: /src/openvpn/src/openvpn/ps.c:249,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 46
    argCount: 4
    argNames:
    - sd
    - command
    - head
    - sd_send
    argTypes:
    - socket_descriptor_t
    - char
    - struct buffer*
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 252
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 252
    functionName: port_share_sendmsg
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - memcpy
    - CMSG_DATA
    - sendmsg
    - BPTR
    - dmsg
    - CMSG_FIRSTHDR
    - msg
    - BLEN
    - socketpair
    - CMSG_LEN
    - CLEAR
    - cmsg_size
    - malloc
    - free
    - close_socket_if_defined
    - socket_defined
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'static void port_share_sendmsg(const socket_descriptor_t sd, const
      char command, const struct buffer *head, const socket_descriptor_t sd_send) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/openvpn/src/openvpn/ps.c:427,1
    - Dst: openvpn_connect
      Src: /src/openvpn/src/openvpn/ps.c:432,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:429,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ps.c:435,1
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/ps.c:436,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:439,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/ps.c:441,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/ps.c:442,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ps.c:445,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ps.c:446,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:475,1
    - Dst: proxy_connection_io_requeue
      Src: /src/openvpn/src/openvpn/ps.c:478,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ps.c:461,1
    - Dst: proxy_connection_io_requeue
      Src: /src/openvpn/src/openvpn/ps.c:479,1
    - Dst: journal_add
      Src: /src/openvpn/src/openvpn/ps.c:472,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 39
    argCount: 6
    argNames:
    - list
    - es
    - server_addr
    - sd_client
    - initial_data
    - journal_dir
    argTypes:
    - struct proxy_connection**
    - struct event_set*
    - struct openvpn_sockaddr
    - socket_descriptor_t
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 482
      start: 413
    functionDepth: 0
    functionLinenumber: 413
    functionLinenumberEnd: 482
    functionName: proxy_entry_new
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - socket
    - openvpn_close_socket
    - dmsg
    - openvpn_connect
    - msg
    - set_nonblock
    - journal_add
    - proxy_connection_io_requeue
    - alloc_buf
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: bool
    signature: 'static bool proxy_entry_new(struct proxy_connection **list, struct
      event_set *es, const struct openvpn_sockaddr server_addr, const socket_descriptor_t
      sd_client, struct buffer *initial_data, const char *journal_dir) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: recv
      Src: /src/openvpn/src/openvpn/ps.c:580,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ps.c:580,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:591,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/ps.c:580,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - pc
    argTypes:
    - struct proxy_connection*
    constantsTouched: []
    func_position:
      end: 595
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 595
    functionName: proxy_connection_io_recv
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - recv
    - dmsg
    - BCAP
    - BPTR
    linkageType: ''
    returnType: int
    signature: 'static int proxy_connection_io_recv(struct proxy_connection *pc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ps.c:645,1
    - Dst: proxy_connection_io_recv
      Src: /src/openvpn/src/openvpn/ps.c:647,1
    - Dst: proxy_connection_io_send
      Src: /src/openvpn/src/openvpn/ps.c:656,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ps.c:654,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 2
    argNames:
    - pc
    - max_transfer
    argTypes:
    - struct proxy_connection*
    - int
    constantsTouched: []
    func_position:
      end: 664
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 664
    functionName: proxy_connection_io_xfer
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - BLEN
    - proxy_connection_io_send
    - proxy_connection_io_recv
    linkageType: ''
    returnType: int
    signature: 'static int proxy_connection_io_xfer(struct proxy_connection *pc, const
      int max_transfer) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: send
      Src: /src/openvpn/src/openvpn/ps.c:601,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ps.c:614,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ps.c:601,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:613,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ps.c:601,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ps.c:619,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ps.c:628,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ps.c:629,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - pc
    - bytes_sent
    argTypes:
    - struct proxy_connection*
    - int*
    constantsTouched: []
    func_position:
      end: 633
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 633
    functionName: proxy_connection_io_send
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - dmsg
    - BPTR
    - send
    - BLEN
    - free_buf
    - alloc_buf
    - buf_advance
    linkageType: ''
    returnType: int
    signature: 'static int proxy_connection_io_send(struct proxy_connection *pc, int
      *bytes_sent) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/ps.c:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: cmsg_size
    functionSourceFile: /src/openvpn/src/openvpn/ps.c
    functionUses: []
    functionsReached:
    - CMSG_SPACE
    linkageType: ''
    returnType: int
    signature: 'static int cmsg_size(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/helper.c:40,1
    - Dst: netbits_to_netmask
      Src: /src/openvpn/src/openvpn/helper.c:41,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/helper.c:45,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:43,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:43,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - netbits
    - gc
    argTypes:
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 46
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 46
    functionName: print_netmask
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - netbits_to_netmask
    - BSTR
    - buf_printf
    - print_in_addr_t
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_netmask(int netbits, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/helper.c:89,1
    - Dst: print_topology
      Src: /src/openvpn/src/openvpn/helper.c:91,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/helper.c:93,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:91,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 2
    argNames:
    - topology
    - gc
    argTypes:
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 94
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 94
    functionName: print_opt_topology
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - buf_printf
    - print_topology
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_opt_topology(const int topology, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/helper.c:60,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:61,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/helper.c:62,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 63
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 63
    functionName: print_opt_route_gateway_dhcp
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_opt_route_gateway_dhcp(struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/helper.c:107,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:108,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/helper.c:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 2
    argNames:
    - str
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 110
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 110
    functionName: print_str
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_str(const char *str, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/helper.c:149,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 162
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 162
    functionName: helper_setdefault_topology
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - dev_type_enum
    linkageType: ''
    returnType: void
    signature: 'void helper_setdefault_topology(struct options *o) '
  - BBCount: 38
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:208,1
    - Dst: add_in6_addr
      Src: /src/openvpn/src/openvpn/helper.c:216,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/helper.c:218,1
    - Dst: helper_add_route
      Src: /src/openvpn/src/openvpn/helper.c:348,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:372,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:383,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:360,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:387,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:397,1
    - Dst: print_opt_route_gateway
      Src: /src/openvpn/src/openvpn/helper.c:415,1
    - Dst: print_netmask
      Src: /src/openvpn/src/openvpn/helper.c:398,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/helper.c:380,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:470,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:460,1
    - Dst: verify_common_subnet
      Src: /src/openvpn/src/openvpn/helper.c:480,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/helper.c:222,1
    - Dst: netmask_to_netbits
      Src: /src/openvpn/src/openvpn/helper.c:298,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:295,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:285,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:311,1
    - Dst: print_netmask
      Src: /src/openvpn/src/openvpn/helper.c:312,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:321,1
    - Dst: print_netmask
      Src: /src/openvpn/src/openvpn/helper.c:322,1
    - Dst: print_opt_route
      Src: /src/openvpn/src/openvpn/helper.c:351,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:355,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:403,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:465,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:404,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:499,1
    - Dst: print_opt_route
      Src: /src/openvpn/src/openvpn/helper.c:355,1
    - Dst: ifconfig_pool_verify_range
      Src: /src/openvpn/src/openvpn/helper.c:493,1
    - Dst: print_opt_route_gateway
      Src: /src/openvpn/src/openvpn/helper.c:495,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:415,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/helper.c:173,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:204,1
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/helper.c:178,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/helper.c:216,1
    - Dst: add_in6_addr
      Src: /src/openvpn/src/openvpn/helper.c:218,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:275,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:306,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:338,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:361,1
    - Dst: print_opt_route_gateway
      Src: /src/openvpn/src/openvpn/helper.c:372,1
    - Dst: verify_common_subnet
      Src: /src/openvpn/src/openvpn/helper.c:482,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:375,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:475,1
    - Dst: print_opt_topology
      Src: /src/openvpn/src/openvpn/helper.c:383,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:199,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:280,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:301,1
    - Dst: add_in6_addr
      Src: /src/openvpn/src/openvpn/helper.c:230,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:234,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:290,1
    - Dst: helper_setdefault_topology
      Src: /src/openvpn/src/openvpn/helper.c:333,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:337,1
    - Dst: ifconfig_pool_verify_range
      Src: /src/openvpn/src/openvpn/helper.c:345,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:351,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:495,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/helper.c:519,1
    - Dst: ifconfig_pool_verify_range
      Src: /src/openvpn/src/openvpn/helper.c:411,1
    - Dst: ifconfig_pool_verify_range
      Src: /src/openvpn/src/openvpn/helper.c:368,1
    - Dst: verify_common_subnet
      Src: /src/openvpn/src/openvpn/helper.c:481,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/helper.c:419,1
    - Dst: print_opt_route_gateway_dhcp
      Src: /src/openvpn/src/openvpn/helper.c:499,1
    CyclomaticComplexity: 51
    EdgeCount: 51
    ICount: 215
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 520
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 520
    functionName: helper_client_server
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - msg
    - ifconfig_pool_verify_range
    - print_opt_route
    - netmask_to_netbits
    - dev_type_enum
    - print_opt_route_gateway_dhcp
    - gc_new
    - print_in6_addr
    - gc_free
    - verify_common_subnet
    - print_opt_route_gateway
    - print_netmask
    - print_in_addr_t
    - helper_add_route
    - add_in6_addr
    - print_opt_topology
    - push_option
    - ASSERT
    - helper_setdefault_topology
    linkageType: ''
    returnType: void
    signature: 'void helper_client_server(struct options *o) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:606,1
    - Dst: print_str
      Src: /src/openvpn/src/openvpn/helper.c:606,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 613
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 613
    functionName: helper_tcp_nodelay
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - push_option
    - print_str
    linkageType: ''
    returnType: void
    signature: 'void helper_tcp_nodelay(struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/helper.c:68,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/helper.c:69,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:74,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:73,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:75,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:79,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:80,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/helper.c:83,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - network
    - netmask
    - gc
    argTypes:
    - in_addr_t
    - in_addr_t
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 84
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 84
    functionName: print_opt_route
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - print_in_addr_t
    - ASSERT
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_opt_route(const in_addr_t network, const
      in_addr_t netmask, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/helper.c:51,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:53,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/helper.c:54,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/helper.c:52,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:53,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - route_gateway
    - gc
    argTypes:
    - in_addr_t
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 55
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 55
    functionName: print_opt_route_gateway
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - print_in_addr_t
    - ASSERT
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_opt_route_gateway(const in_addr_t route_gateway,
      struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/helper.c:99,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/helper.c:100,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/helper.c:101,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 3
    argNames:
    - str
    - i
    - gc
    argTypes:
    - char*
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 102
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 102
    functionName: print_str_int
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_str_int(const char *str, const int i, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rol_check_alloc
      Src: /src/openvpn/src/openvpn/helper.c:115,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:118,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:117,1
    - Dst: add_route_to_option_list
      Src: /src/openvpn/src/openvpn/helper.c:116,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 3
    argNames:
    - network
    - netmask
    - o
    argTypes:
    - in_addr_t
    - in_addr_t
    - struct options*
    constantsTouched: []
    func_position:
      end: 121
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 121
    functionName: helper_add_route
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - add_route_to_option_list
    - rol_check_alloc
    - print_in_addr_t
    linkageType: ''
    returnType: void
    signature: 'static void helper_add_route(const in_addr_t network, const in_addr_t
      netmask, struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/helper.c:126,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:133,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:131,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/helper.c:132,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:129,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/helper.c:135,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 4
    argNames:
    - opt
    - a
    - b
    - subnet
    argTypes:
    - char*
    - in_addr_t
    - in_addr_t
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 136
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 136
    functionName: verify_common_subnet
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void verify_common_subnet(const char *opt, const in_addr_t
      a, const in_addr_t b, const in_addr_t subnet) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:549,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:559,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/helper.c:553,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:576,1
    - Dst: print_str_int
      Src: /src/openvpn/src/openvpn/helper.c:576,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/helper.c:577,1
    - Dst: print_str_int
      Src: /src/openvpn/src/openvpn/helper.c:577,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/helper.c:581,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 584
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 584
    functionName: helper_keepalive
    functionSourceFile: /src/openvpn/src/openvpn/helper.c
    functionUses: []
    functionsReached:
    - msg
    - push_option
    - print_str_int
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void helper_keepalive(struct options *o) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/interval.h:82,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 1
    argNames:
    - top
    argTypes:
    - struct interval*
    constantsTouched: []
    func_position:
      end: 90
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 90
    functionName: interval_test
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached:
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'static inline bool interval_test(struct interval *top) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/interval.h:126,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - top
    argTypes:
    - struct interval*
    constantsTouched: []
    func_position:
      end: 129
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 129
    functionName: interval_action
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached:
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static inline void interval_action(struct interval *top) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 3
    argNames:
    - et
    - n
    - last
    argTypes:
    - struct event_timeout*
    - interval_t
    - time_t
    constantsTouched: []
    func_position:
      end: 178
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 178
    functionName: event_timeout_init
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_timeout_init(struct event_timeout *et, interval_t
      n, const time_t last) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - et
    - n
    argTypes:
    - struct event_timeout*
    - interval_t
    constantsTouched: []
    func_position:
      end: 211
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 211
    functionName: event_timeout_modify_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_timeout_modify_wakeup(struct event_timeout
      *et, interval_t n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - et
    argTypes:
    - struct event_timeout*
    constantsTouched: []
    func_position:
      end: 221
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 221
    functionName: event_timeout_remaining
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: interval_t
    signature: 'static inline interval_t event_timeout_remaining(struct event_timeout
      *et) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/interval.h:279,1
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/interval.h:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - obj
    argTypes:
    - struct usec_timer*
    constantsTouched: []
    func_position:
      end: 281
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 281
    functionName: usec_timer_start
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached:
    - CLEAR
    - openvpn_gettimeofday
    linkageType: ''
    returnType: void
    signature: 'static inline void usec_timer_start(struct usec_timer *obj) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - struct usec_timer*
    constantsTouched: []
    func_position:
      end: 295
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 295
    functionName: usec_timer_interval_defined
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool usec_timer_interval_defined(struct usec_timer *obj) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: interval_earliest_wakeup
      Src: /src/openvpn/src/openvpn/interval.h:96,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/interval.h:99,1
    - Dst: interval_earliest_wakeup
      Src: /src/openvpn/src/openvpn/interval.h:97,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - top
    - wakeup
    argTypes:
    - struct interval*
    - interval_t*
    constantsTouched: []
    func_position:
      end: 101
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 101
    functionName: interval_schedule_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached:
    - interval_earliest_wakeup
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static inline void interval_schedule_wakeup(struct interval *top,
      interval_t *wakeup) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - et
    argTypes:
    - struct event_timeout*
    constantsTouched: []
    func_position:
      end: 146
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 146
    functionName: event_timeout_defined
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool event_timeout_defined(const struct event_timeout
      *et) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/interval.h:286,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - struct usec_timer*
    constantsTouched: []
    func_position:
      end: 287
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 287
    functionName: usec_timer_end
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached:
    - openvpn_gettimeofday
    linkageType: ''
    returnType: void
    signature: 'static inline void usec_timer_end(struct usec_timer *obj) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tv_subtract
      Src: /src/openvpn/src/openvpn/interval.h:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - struct usec_timer*
    constantsTouched: []
    func_position:
      end: 301
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 301
    functionName: usec_timer_interval
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached:
    - tv_subtract
    linkageType: ''
    returnType: int
    signature: 'static inline int usec_timer_interval(struct usec_timer *obj) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/interval.h:112,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - top
    - wakeup
    argTypes:
    - struct interval*
    - interval_t
    constantsTouched: []
    func_position:
      end: 116
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 116
    functionName: interval_future_trigger
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached:
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static inline void interval_future_trigger(struct interval *top, interval_t
      wakeup) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - et
    argTypes:
    - struct event_timeout*
    constantsTouched: []
    func_position:
      end: 159
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 159
    functionName: event_timeout_clear
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_timeout_clear(struct event_timeout *et) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - et
    argTypes:
    - struct event_timeout*
    constantsTouched: []
    func_position:
      end: 194
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 194
    functionName: event_timeout_reset
    functionSourceFile: /src/openvpn/src/openvpn/interval.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_timeout_reset(struct event_timeout *et) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_util.c:63,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/ssl_util.c:67,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - peer_info
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 74
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 74
    functionName: extract_iv_proto
    functionSourceFile: /src/openvpn/src/openvpn/ssl_util.c
    functionUses: []
    functionsReached:
    - sscanf
    - strstr
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int extract_iv_proto(const char *peer_info) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_util.c:39,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_util.c:54,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:46,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:51,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_util.c:47,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 17
    argCount: 3
    argNames:
    - peer_info
    - var
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 58
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 58
    functionName: extract_var_peer_info
    functionSourceFile: /src/openvpn/src/openvpn/ssl_util.c
    functionUses: []
    functionsReached:
    - strlen
    - string_alloc
    - strstr
    linkageType: ''
    returnType: char*
    signature: 'char *extract_var_peer_info(const char *peer_info, const char *var,
      struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:285,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_util.c:287,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - string
    - delimiter
    argTypes:
    - char*
    - char
    constantsTouched: []
    func_position:
      end: 300
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 300
    functionName: get_num_elements
    functionSourceFile: /src/openvpn/src/openvpn/ssl_util.c
    functionUses: []
    functionsReached:
    - strlen
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int get_num_elements(const char *string, char delimiter) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_util.c:88,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:103,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/ssl_util.c:96,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:103,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_util.c:103,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_util.c:105,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl_util.c:108,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:110,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl_util.c:112,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_util.c:114,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 26
    argCount: 2
    argNames:
    - options
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 115
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 115
    functionName: options_string_compat_lzo
    functionSourceFile: /src/openvpn/src/openvpn/ssl_util.c
    functionUses: []
    functionsReached:
    - sscanf
    - buf_write
    - strstr
    - buf_printf
    - BSTR
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *options_string_compat_lzo(const char *options, struct
      gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:270,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/ssl_util.c:270,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/ssl_util.c:271,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_util.c:271,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 2
    argNames:
    - cipher_name
    - len
    argTypes:
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 280
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 280
    functionName: tls_get_cipher_name_pair
    functionSourceFile: /src/openvpn/src/openvpn/ssl_util.c
    functionUses: []
    functionsReached:
    - strlen
    - memcmp
    linkageType: ''
    returnType: tls_cipher_name_pair*
    signature: 'const tls_cipher_name_pair *tls_get_cipher_name_pair(const char *cipher_name,
      size_t len) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ping.c:49,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ping.c:53,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ping.c:59,1
    - Dst: format_common_name
      Src: /src/openvpn/src/openvpn/ping.c:54,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/ping.c:55,1
    - Dst: format_common_name
      Src: /src/openvpn/src/openvpn/ping.c:60,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/ping.c:61,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ping.c:65,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ping.c:67,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 68
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 68
    functionName: trigger_ping_timeout_signal
    functionSourceFile: /src/openvpn/src/openvpn/ping.c
    functionUses: []
    functionsReached:
    - format_common_name
    - msg
    - gc_new
    - register_signal
    - gc_free
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void trigger_ping_timeout_signal(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ping.c:77,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ping.c:78,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/ping.c:77,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ping.c:79,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/ping.c:78,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ping.c:79,1
    - Dst: encrypt_sign
      Src: /src/openvpn/src/openvpn/ping.c:85,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ping.c:88,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 89
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 89
    functionName: check_ping_send_dowork
    functionSourceFile: /src/openvpn/src/openvpn/ping.c
    functionUses: []
    functionsReached:
    - buf_safe
    - buf_init
    - buf_write
    - dmsg
    - encrypt_sign
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void check_ping_send_dowork(struct context *c) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:114,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 10
    argCount: 1
    argNames:
    - md_type
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 118
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 118
    functionName: cng_hash_algo
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: wchar_t*
    signature: 'static const wchar_t *cng_hash_algo(int md_type) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: isxdigit
      Src: /src/openvpn/src/openvpn/cryptoapi.c:171,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/cryptoapi.c:172,1
    - Dst: isxdigit
      Src: /src/openvpn/src/openvpn/cryptoapi.c:171,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 3
    argNames:
    - p
    - arr
    - capacity
    argTypes:
    - char*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 178
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 178
    functionName: parse_hexstring
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - sscanf
    - isxdigit
    linkageType: ''
    returnType: int
    signature: 'int parse_hexstring(const char *p, unsigned char *arr, size_t capacity) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CryptFindOIDInfo
      Src: /src/openvpn/src/openvpn/cryptoapi.c:209,1
    - Dst: CryptFindOIDInfo
      Src: /src/openvpn/src/openvpn/cryptoapi.c:214,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - keytype
    - key
    - groupid
    argTypes:
    - DWORD
    - void*
    - DWORD
    constantsTouched: []
    func_position:
      end: 218
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 218
    functionName: find_oid
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - CryptFindOIDInfo
    linkageType: ''
    returnType: CRYPT_OID_INFO*
    signature: 'static const CRYPT_OID_INFO *find_oid(DWORD keytype, const void *key,
      DWORD groupid) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/cryptoapi.c:277,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/cryptoapi.c:282,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:279,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/cryptoapi.c:287,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:285,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:290,1
    - Dst: parse_hexstring
      Src: /src/openvpn/src/openvpn/cryptoapi.c:295,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:298,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:302,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:310,1
    - Dst: CertFindCertificateInStore
      Src: /src/openvpn/src/openvpn/cryptoapi.c:318,1
    - Dst: test_certificate_template
      Src: /src/openvpn/src/openvpn/cryptoapi.c:326,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:335,1
    - Dst: CertVerifyTimeValidity
      Src: /src/openvpn/src/openvpn/cryptoapi.c:330,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:340,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 55
    argCount: 2
    argNames:
    - cert_prop
    - cert_store
    argTypes:
    - char*
    - HCERTSTORE
    constantsTouched: []
    func_position:
      end: 342
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 342
    functionName: find_certificate_in_store
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - msg
    - parse_hexstring
    - CertFindCertificateInStore
    - wide_string
    - CertVerifyTimeValidity
    - gc_new
    - gc_free
    - test_certificate_template
    - strncmp
    linkageType: ''
    returnType: CERT_CONTEXT*
    signature: 'static const CERT_CONTEXT *find_certificate_in_store(const char *cert_prop,
      HCERTSTORE cert_store) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:444,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/cryptoapi.c:448,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/cryptoapi.c:449,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/cryptoapi.c:447,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/cryptoapi.c:452,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:455,1
    - Dst: xkey_digest
      Src: /src/openvpn/src/openvpn/cryptoapi.c:457,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:465,1
    - Dst: xkey_cng_ec_sign
      Src: /src/openvpn/src/openvpn/cryptoapi.c:467,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:469,1
    - Dst: xkey_cng_rsa_sign
      Src: /src/openvpn/src/openvpn/cryptoapi.c:471,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 23
    argCount: 6
    argNames:
    - handle
    - sig
    - siglen
    - tbs
    - tbslen
    - sigalg
    argTypes:
    - void*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    - XKEY_SIGALG
    constantsTouched: []
    func_position:
      end: 477
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 477
    functionName: xkey_cng_sign
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - _countof
    - dmsg
    - xkey_cng_rsa_sign
    - xkey_cng_ec_sign
    - strcmp
    - ASSERT
    - xkey_digest
    linkageType: ''
    returnType: int
    signature: 'static int xkey_cng_sign(void *handle, unsigned char *sig, size_t
      *siglen, const unsigned char *tbs, size_t tbslen, XKEY_SIGALG sigalg) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CertGetNameStringW
      Src: /src/openvpn/src/openvpn/cryptoapi.c:482,1
    - Dst: utf16to8
      Src: /src/openvpn/src/openvpn/cryptoapi.c:492,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/cryptoapi.c:486,1
    - Dst: CertGetNameStringW
      Src: /src/openvpn/src/openvpn/cryptoapi.c:488,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 2
    argNames:
    - cc
    - gc
    argTypes:
    - CERT_CONTEXT*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 495
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 495
    functionName: get_cert_name
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - gc_malloc
    - utf16to8
    - CertGetNameStringW
    linkageType: ''
    returnType: char*
    signature: 'static char *get_cert_name(const CERT_CONTEXT *cc, struct gc_arena
      *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: NCryptFreeObject
      Src: /src/openvpn/src/openvpn/cryptoapi.c:131,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:144,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:142,1
    - Dst: CertFreeCertificateContext
      Src: /src/openvpn/src/openvpn/cryptoapi.c:140,1
    - Dst: CryptReleaseContext
      Src: /src/openvpn/src/openvpn/cryptoapi.c:135,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 1
    argNames:
    - cd
    argTypes:
    - CAPI_DATA*
    constantsTouched: []
    func_position:
      end: 145
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 145
    functionName: CAPI_DATA_free
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - CertFreeCertificateContext
    - CryptReleaseContext
    - free
    - NCryptFreeObject
    linkageType: ''
    returnType: void
    signature: 'static void CAPI_DATA_free(CAPI_DATA *cd) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CryptDecodeObject
      Src: /src/openvpn/src/openvpn/cryptoapi.c:186,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/cryptoapi.c:193,1
    - Dst: CryptDecodeObject
      Src: /src/openvpn/src/openvpn/cryptoapi.c:194,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 5
    argNames:
    - gc
    - struct_type
    - val
    - flags
    - cb
    argTypes:
    - struct gc_arena*
    - LPCSTR
    - CRYPT_OBJID_BLOB*
    - DWORD
    - DWORD*
    constantsTouched: []
    func_position:
      end: 201
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 201
    functionName: decode_object
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - gc_malloc
    - CryptDecodeObject
    linkageType: ''
    returnType: void*
    signature: 'static void *decode_object(struct gc_arena *gc, LPCSTR struct_type,
      const CRYPT_OBJID_BLOB *val, DWORD flags, DWORD *cb) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/cryptoapi.c:227,1
    - Dst: decode_object
      Src: /src/openvpn/src/openvpn/cryptoapi.c:234,1
    - Dst: stricmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:238,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/cryptoapi.c:228,1
    - Dst: CertFindExtension
      Src: /src/openvpn/src/openvpn/cryptoapi.c:231,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:241,1
    - Dst: find_oid
      Src: /src/openvpn/src/openvpn/cryptoapi.c:245,1
    - Dst: stricmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:247,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:250,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:257,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 22
    argCount: 2
    argNames:
    - cert_prop
    - cert_ctx
    argTypes:
    - char*
    - CERT_CONTEXT*
    constantsTouched: []
    func_position:
      end: 259
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 259
    functionName: test_certificate_template
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - decode_object
    - CertFindExtension
    - find_oid
    - wide_string
    - stricmp
    - gc_new
    - gc_free
    linkageType: ''
    returnType: bool
    signature: 'static bool test_certificate_template(const char *cert_prop, const
      CERT_CONTEXT *cert_ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Load_CryptoAPI_certificate
      Src: /src/openvpn/src/openvpn/cryptoapi.c:596,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/openvpn/src/openvpn/cryptoapi.c:600,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:609,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/openvpn/src/openvpn/cryptoapi.c:601,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/cryptoapi.c:603,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:610,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 2
    argNames:
    - ssl_ctx
    - cert_prop
    argTypes:
    - SSL_CTX*
    - char*
    constantsTouched: []
    func_position:
      end: 612
      start: 589
    functionDepth: 0
    functionLinenumber: 589
    functionLinenumberEnd: 612
    functionName: SSL_CTX_use_CryptoAPI_certificate
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - SSL_CTX_use_PrivateKey
    - EVP_PKEY_free
    - SSL_CTX_use_certificate
    - Load_CryptoAPI_certificate
    - X509_free
    - crypto_print_openssl_errors
    linkageType: ''
    returnType: int
    signature: 'int SSL_CTX_use_CryptoAPI_certificate(SSL_CTX *ssl_ctx, const char
      *cert_prop) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:60,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - ssl_ctx
    - cert_prop
    argTypes:
    - SSL_CTX*
    - char*
    constantsTouched: []
    func_position:
      end: 62
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 62
    functionName: SSL_CTX_use_CryptoAPI_certificate
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: int
    signature: 'int SSL_CTX_use_CryptoAPI_certificate(SSL_CTX *ssl_ctx, const char
      *cert_prop) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:351,1
    - Dst: NCryptSignHash
      Src: /src/openvpn/src/openvpn/cryptoapi.c:353,1
    - Dst: ecdsa_bin2der
      Src: /src/openvpn/src/openvpn/cryptoapi.c:363,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:358,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpn/cryptoapi.c:357,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 5
    argNames:
    - cd
    - sig
    - siglen
    - tbs
    - tbslen
    argTypes:
    - CAPI_DATA*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 370
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 370
    functionName: xkey_cng_ec_sign
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - msg
    - ecdsa_bin2der
    - SetLastError
    - NCryptSignHash
    linkageType: ''
    returnType: int
    signature: 'static int xkey_cng_ec_sign(CAPI_DATA *cd, unsigned char *sig, size_t
      *siglen, const unsigned char *tbs, size_t tbslen) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:377,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:390,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:394,1
    - Dst: NCryptSignHash
      Src: /src/openvpn/src/openvpn/cryptoapi.c:399,1
    - Dst: cng_hash_algo
      Src: /src/openvpn/src/openvpn/cryptoapi.c:386,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/cryptoapi.c:381,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:396,1
    - Dst: xkey_max_saltlen
      Src: /src/openvpn/src/openvpn/cryptoapi.c:407,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:424,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:405,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:410,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:415,1
    - Dst: EVP_PKEY_bits
      Src: /src/openvpn/src/openvpn/cryptoapi.c:407,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:402,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/cryptoapi.c:380,1
    - Dst: wcscmp
      Src: /src/openvpn/src/openvpn/cryptoapi.c:388,1
    - Dst: NCryptSignHash
      Src: /src/openvpn/src/openvpn/cryptoapi.c:419,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpn/cryptoapi.c:430,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:431,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/cryptoapi.c:379,1
    - Dst: OBJ_sn2nid
      Src: /src/openvpn/src/openvpn/cryptoapi.c:386,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 44
    argCount: 6
    argNames:
    - cd
    - sig
    - siglen
    - tbs
    - tbslen
    - sigalg
    argTypes:
    - CAPI_DATA*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    - XKEY_SIGALG
    constantsTouched: []
    func_position:
      end: 437
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 437
    functionName: xkey_cng_rsa_sign
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_bits
    - dmsg
    - msg
    - xkey_max_saltlen
    - SetLastError
    - NCryptSignHash
    - strcmp
    - ASSERT
    - cng_hash_algo
    - wcscmp
    - OBJ_sn2nid
    linkageType: ''
    returnType: int
    signature: 'static int xkey_cng_rsa_sign(CAPI_DATA *cd, unsigned char *sig, size_t
      *siglen, const unsigned char *tbs, size_t tbslen, XKEY_SIGALG sigalg) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:568,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:580,1
    - Dst: calloc
      Src: /src/openvpn/src/openvpn/cryptoapi.c:508,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:513,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:521,1
    - Dst: CertOpenStore
      Src: /src/openvpn/src/openvpn/cryptoapi.c:517,1
    - Dst: CertOpenStore
      Src: /src/openvpn/src/openvpn/cryptoapi.c:528,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:532,1
    - Dst: CryptAcquireCertificatePrivateKey
      Src: /src/openvpn/src/openvpn/cryptoapi.c:564,1
    - Dst: d2i_X509
      Src: /src/openvpn/src/openvpn/cryptoapi.c:552,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:570,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:548,1
    - Dst: X509_get_pubkey
      Src: /src/openvpn/src/openvpn/cryptoapi.c:575,1
    - Dst: CAPI_DATA_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:584,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/cryptoapi.c:509,1
    - Dst: find_certificate_in_store
      Src: /src/openvpn/src/openvpn/cryptoapi.c:524,1
    - Dst: CertCloseStore
      Src: /src/openvpn/src/openvpn/cryptoapi.c:525,1
    - Dst: find_certificate_in_store
      Src: /src/openvpn/src/openvpn/cryptoapi.c:535,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:539,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/cryptoapi.c:556,1
    - Dst: get_cert_name
      Src: /src/openvpn/src/openvpn/cryptoapi.c:545,1
    - Dst: CertCloseStore
      Src: /src/openvpn/src/openvpn/cryptoapi.c:536,1
    - Dst: xkey_load_generic_key
      Src: /src/openvpn/src/openvpn/cryptoapi.c:578,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/cryptoapi.c:585,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 55
    argCount: 3
    argNames:
    - cert_prop
    - cert
    - privkey
    argTypes:
    - char*
    - X509**
    - EVP_PKEY**
    constantsTouched: []
    func_position:
      end: 587
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 587
    functionName: Load_CryptoAPI_certificate
    functionSourceFile: /src/openvpn/src/openvpn/cryptoapi.c
    functionUses: []
    functionsReached:
    - CertCloseStore
    - get_cert_name
    - X509_get_pubkey
    - CertOpenStore
    - msg
    - CryptAcquireCertificatePrivateKey
    - gc_new
    - X509_free
    - gc_free
    - CAPI_DATA_free
    - find_certificate_in_store
    - xkey_load_generic_key
    - calloc
    - d2i_X509
    linkageType: ''
    returnType: int
    signature: 'static int Load_CryptoAPI_certificate(const char *cert_prop, X509
      **cert, EVP_PKEY **privkey) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_openssl_getX509
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:72,1
    - Dst: OBJ_sn2nid
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:81,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:75,1
    - Dst: EVP_get_digestbyname
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:90,1
    - Dst: X509_get0_pubkey
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:73,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:93,1
    - Dst: EVP_MD_get_size
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:97,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:100,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:104,1
    - Dst: xkey_max_saltlen
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:106,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:111,1
    - Dst: EVP_PKEY_get_bits
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:106,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:117,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - pss_params
    - sigalg
    - cert
    argTypes:
    - CK_RSA_PKCS_PSS_PARAMS*
    - XKEY_SIGALG
    - pkcs11h_certificate_t
    constantsTouched: []
    func_position:
      end: 128
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 128
    functionName: set_pss_params
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - EVP_get_digestbyname
    - msg
    - xkey_max_saltlen
    - pkcs11h_openssl_getX509
    - EVP_MD_get_size
    - X509_get0_pubkey
    - strcmp
    - EVP_PKEY_get_bits
    - X509_free
    - OBJ_sn2nid
    linkageType: ''
    returnType: int
    signature: 'static int set_pss_params(CK_RSA_PKCS_PSS_PARAMS *pss_params, XKEY_SIGALG
      sigalg, pkcs11h_certificate_t cert) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:175,1
    - Dst: xkey_digest
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:178,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:177,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:190,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:192,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:195,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:197,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:199,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:203,1
    - Dst: set_pss_params
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:207,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:228,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:241,1
    - Dst: encode_pkcs1
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:219,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:233,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:215,1
    - Dst: ecdsa_bin2der
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:247,1
    - Dst: pkcs11h_certificate_signAny_ex
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:236,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 55
    argCount: 6
    argNames:
    - handle
    - sig
    - siglen
    - tbs
    - tbslen
    - sigalg
    argTypes:
    - void*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    - XKEY_SIGALG
    constantsTouched: []
    func_position:
      end: 256
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 256
    functionName: xkey_pkcs11h_sign
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - set_pss_params
    - msg
    - strcmp
    - ecdsa_bin2der
    - ASSERT
    - pkcs11h_certificate_signAny_ex
    - xkey_digest
    - encode_pkcs1
    linkageType: ''
    returnType: int
    signature: 'static int xkey_pkcs11h_sign(void *handle, unsigned char *sig, size_t
      *siglen, const unsigned char *tbs, size_t tbslen, XKEY_SIGALG sigalg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:147,1
    - Dst: pkcs11h_certificate_signAny
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:151,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 6
    argNames:
    - cert
    - mech
    - tbs
    - tbslen
    - sig
    - siglen
    argTypes:
    - pkcs11h_certificate_t
    - CK_MECHANISM*
    - unsigned char*
    - size_t
    - unsigned char*
    - size_t*
    constantsTouched: []
    func_position:
      end: 152
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 152
    functionName: pkcs11h_certificate_signAny_ex
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - msg
    - pkcs11h_certificate_signAny
    linkageType: ''
    returnType: CK_RV
    signature: 'static CK_RV pkcs11h_certificate_signAny_ex(const pkcs11h_certificate_t
      cert, const CK_MECHANISM *mech, const unsigned char *tbs, size_t tbslen, unsigned
      char *sig, size_t *siglen) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: xkey_load_from_pkcs11h
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:334,1
    - Dst: pkcs11h_openssl_createSession
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:342,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:355,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:344,1
    - Dst: pkcs11h_openssl_session_getEVP
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:353,1
    - Dst: pkcs11h_openssl_session_getX509
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:359,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:361,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:365,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:367,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:371,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:394,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:397,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:373,1
    - Dst: pkcs11h_openssl_freeSession
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:402,1
    - Dst: pkcs11h_certificate_freeCertificate
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:386,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:374,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 41
    argCount: 2
    argNames:
    - certificate
    - ssl_ctx
    argTypes:
    - pkcs11h_certificate_t
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 407
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 407
    functionName: pkcs11_init_tls_session
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_use_PrivateKey
    - EVP_PKEY_free
    - xkey_load_from_pkcs11h
    - pkcs11h_openssl_session_getEVP
    - msg
    - SSL_CTX_use_certificate
    - pkcs11h_openssl_createSession
    - pkcs11h_certificate_freeCertificate
    - pkcs11h_openssl_session_getX509
    - X509_free
    - crypto_print_openssl_errors
    - pkcs11h_openssl_freeSession
    linkageType: ''
    returnType: int
    signature: 'int pkcs11_init_tls_session(pkcs11h_certificate_t certificate, struct
      tls_root_ctx *const ssl_ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_openssl_getX509
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:416,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:418,1
    - Dst: x509_get_subject
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:422,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:425,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - certificate
    - gc
    argTypes:
    - pkcs11h_certificate_t
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 429
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 429
    functionName: pkcs11_certificate_dn
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - X509_free
    - msg
    - pkcs11h_openssl_getX509
    - x509_get_subject
    linkageType: ''
    returnType: char*
    signature: 'char *pkcs11_certificate_dn(pkcs11h_certificate_t certificate, struct
      gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_openssl_getX509
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:440,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:448,1
    - Dst: BIO_s_mem
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:446,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:442,1
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:446,1
    - Dst: i2a_ASN1_INTEGER
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:452,1
    - Dst: X509_get_serialNumber
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:452,1
    - Dst: BIO_read
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:453,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:467,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 3
    argNames:
    - certificate
    - serial
    - serial_len
    argTypes:
    - pkcs11h_certificate_t
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 471
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 471
    functionName: pkcs11_certificate_serial
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - BIO_new
    - msg
    - BIO_s_mem
    - pkcs11h_openssl_getX509
    - X509_get_serialNumber
    - i2a_ASN1_INTEGER
    - X509_free
    - BIO_read
    linkageType: ''
    returnType: int
    signature: 'int pkcs11_certificate_serial(pkcs11h_certificate_t certificate, char
      *serial, size_t serial_len) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_openssl_getX509
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:282,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:285,1
    - Dst: xkey_load_generic_key
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:294,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:297,1
    - Dst: X509_get0_pubkey
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:289,1
    - Dst: SSL_CTX_use_cert_and_key
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:303,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:305,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:306,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:314,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:318,1
    - Dst: pkcs11h_certificate_freeCertificate
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:322,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 23
    argCount: 2
    argNames:
    - certificate
    - ctx
    argTypes:
    - pkcs11h_certificate_t
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 325
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 325
    functionName: xkey_load_from_pkcs11h
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - msg
    - SSL_CTX_use_cert_and_key
    - pkcs11h_openssl_getX509
    - pkcs11h_certificate_freeCertificate
    - X509_get0_pubkey
    - X509_free
    - xkey_load_generic_key
    - crypto_print_openssl_errors
    linkageType: ''
    returnType: int
    signature: 'static int xkey_load_from_pkcs11h(pkcs11h_certificate_t certificate,
      struct tls_root_ctx *const ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_certificate_freeCertificate
      Src: /src/openvpn/src/openvpn/pkcs11_openssl.c:262,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - handle
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 263
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 263
    functionName: xkey_handle_free
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11_openssl.c
    functionUses: []
    functionsReached:
    - pkcs11h_certificate_freeCertificate
    linkageType: ''
    returnType: void
    signature: 'static void xkey_handle_free(void *handle) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_persist*
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 88
    functionName: packet_id_persist_init
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void packet_id_persist_init(struct packet_id_persist
      *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - cas
    argTypes:
    - enum multi_status
    constantsTouched: []
    func_position:
      end: 213
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: is_cas_pending
    functionSourceFile: /src/openvpn/src/openvpn/openvpn.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_cas_pending(enum multi_status cas) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 32
    argCount: 2
    argNames:
    - HASH
    - Bin
    - HASHHEX
    - Hex
    argTypes:
    - IN
    - OUT
    constantsTouched: []
    func_position:
      end: 65
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 65
    functionName: CvtHex
    functionSourceFile: /src/openvpn/src/openvpn/httpdigest.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void CvtHex( IN HASH Bin, OUT HASHHEX Hex ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:126,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:131,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:141,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:139,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:145,1
    - Dst: md_ctx_init
      Src: /src/openvpn/src/openvpn/httpdigest.c:138,1
    - Dst: CvtHex
      Src: /src/openvpn/src/openvpn/httpdigest.c:135,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:145,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:152,1
    - Dst: md_ctx_free
      Src: /src/openvpn/src/openvpn/httpdigest.c:155,1
    - Dst: md_ctx_new
      Src: /src/openvpn/src/openvpn/httpdigest.c:122,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:127,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:128,1
    - Dst: strcasecmp
      Src: /src/openvpn/src/openvpn/httpdigest.c:129,1
    - Dst: md_ctx_final
      Src: /src/openvpn/src/openvpn/httpdigest.c:134,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:146,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:147,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:147,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:150,1
    - Dst: md_ctx_cleanup
      Src: /src/openvpn/src/openvpn/httpdigest.c:154,1
    - Dst: md_ctx_init
      Src: /src/openvpn/src/openvpn/httpdigest.c:125,1
    - Dst: CvtHex
      Src: /src/openvpn/src/openvpn/httpdigest.c:156,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:126,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:128,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:132,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:142,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:140,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:141,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:148,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:149,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:149,1
    - Dst: md_ctx_final
      Src: /src/openvpn/src/openvpn/httpdigest.c:153,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 36
    argCount: 9
    argNames:
    - HASHHEX
    - HA1
    - /* H(A1) */
    - pszNonce
    - /* nonce from server */
    - pszNonceCount
    - /* 8 hex digits */
    - pszCNonce
    - /* client nonce */
    - pszQop
    - '/* qop-value: "", "auth", "auth-int" */'
    - pszMethod
    - /* method from the request */
    - pszDigestUri
    - /* requested URL */
    - HASHHEX
    - HEntity
    - /* H(entity body) if qop="auth-int" */
    - Response
    - /* request-digest or response-digest */
    argTypes:
    - IN
    - IN*
    - IN*
    - IN*
    - IN*
    - IN*
    - IN*
    - IN
    - OUT
    constantsTouched: []
    func_position:
      end: 157
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 157
    functionName: DigestCalcResponse
    functionSourceFile: /src/openvpn/src/openvpn/httpdigest.c
    functionUses: []
    functionsReached:
    - md_ctx_update
    - strcasecmp
    - md_ctx_free
    - CvtHex
    - md_ctx_init
    - md_ctx_new
    - strlen
    - md_ctx_cleanup
    - md_ctx_final
    linkageType: ''
    returnType: void
    signature: 'void DigestCalcResponse( IN HASHHEX HA1, /* H(A1) */ IN char *pszNonce,
      /* nonce from server */ IN char *pszNonceCount, /* 8 hex digits */ IN char *pszCNonce,
      /* client nonce */ IN char *pszQop, /* qop-value: "", "auth", "auth-int" */
      IN char *pszMethod, /* method from the request */ IN char *pszDigestUri, /*
      requested URL */ IN HASHHEX HEntity, /* H(entity body) if qop="auth-int" */
      OUT HASHHEX Response /* request-digest or response-digest */ ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: md_ctx_new
      Src: /src/openvpn/src/openvpn/httpdigest.c:80,1
    - Dst: md_ctx_free
      Src: /src/openvpn/src/openvpn/httpdigest.c:100,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:87,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:87,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:94,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:94,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:95,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:96,1
    - Dst: strcasecmp
      Src: /src/openvpn/src/openvpn/httpdigest.c:89,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:96,1
    - Dst: md_ctx_init
      Src: /src/openvpn/src/openvpn/httpdigest.c:82,1
    - Dst: md_ctx_init
      Src: /src/openvpn/src/openvpn/httpdigest.c:91,1
    - Dst: md_ctx_final
      Src: /src/openvpn/src/openvpn/httpdigest.c:88,1
    - Dst: md_ctx_final
      Src: /src/openvpn/src/openvpn/httpdigest.c:97,1
    - Dst: CvtHex
      Src: /src/openvpn/src/openvpn/httpdigest.c:101,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:84,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:83,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:83,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:85,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/httpdigest.c:85,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:86,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:93,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/httpdigest.c:92,1
    - Dst: md_ctx_cleanup
      Src: /src/openvpn/src/openvpn/httpdigest.c:99,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 7
    argNames:
    - pszAlg
    - pszUserName
    - pszRealm
    - pszPassword
    - pszNonce
    - pszCNonce
    - SessionKey
    argTypes:
    - IN*
    - IN*
    - IN*
    - IN*
    - IN*
    - IN*
    - OUT
    constantsTouched: []
    func_position:
      end: 102
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 102
    functionName: DigestCalcHA1
    functionSourceFile: /src/openvpn/src/openvpn/httpdigest.c
    functionUses: []
    functionsReached:
    - md_ctx_update
    - strcasecmp
    - md_ctx_free
    - CvtHex
    - md_ctx_init
    - md_ctx_new
    - strlen
    - md_ctx_cleanup
    - md_ctx_final
    linkageType: ''
    returnType: void
    signature: 'void DigestCalcHA1( IN char *pszAlg, IN char *pszUserName, IN char
      *pszRealm, IN char *pszPassword, IN char *pszNonce, IN char *pszCNonce, OUT
      HASHHEX SessionKey ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: verify_align_4
      Src: /src/openvpn/src/openvpn/mroute.h:187,1
    - Dst: mroute_extract_addr_ip
      Src: /src/openvpn/src/openvpn/mroute.h:199,1
    - Dst: mroute_extract_addr_ether
      Src: /src/openvpn/src/openvpn/mroute.h:203,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 5
    argNames:
    - src
    - dest
    - vid
    - buf
    - tunnel_type
    argTypes:
    - struct mroute_addr*
    - struct mroute_addr*
    - uint16_t
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 206
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 206
    functionName: mroute_extract_addr_from_packet
    functionSourceFile: /src/openvpn/src/openvpn/mroute.h
    functionUses: []
    functionsReached:
    - verify_align_4
    - mroute_extract_addr_ip
    - mroute_extract_addr_ether
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int mroute_extract_addr_from_packet(struct
      mroute_addr *src, struct mroute_addr *dest, uint16_t vid, const struct buffer
      *buf, int tunnel_type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 235
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 235
    functionName: mroute_addr_hash_ptr
    functionSourceFile: /src/openvpn/src/openvpn/mroute.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline const uint8_t *mroute_addr_hash_ptr(const struct mroute_addr
      *a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/mroute.h:249,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct mroute_addr*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 250
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 250
    functionName: mroute_extract_in_addr_t
    functionSourceFile: /src/openvpn/src/openvpn/mroute.h
    functionUses: []
    functionsReached:
    - htonl
    linkageType: ''
    returnType: void
    signature: 'static inline void mroute_extract_in_addr_t(struct mroute_addr *dest,
      const in_addr_t src) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/mroute.h:227,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - a1
    - a2
    argTypes:
    - struct mroute_addr*
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 228
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 228
    functionName: mroute_addr_equal
    functionSourceFile: /src/openvpn/src/openvpn/mroute.h
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: bool
    signature: 'static inline bool mroute_addr_equal(const struct mroute_addr *a1,
      const struct mroute_addr *a2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 241
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 241
    functionName: mroute_addr_hash_len
    functionSourceFile: /src/openvpn/src/openvpn/mroute.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t mroute_addr_hash_len(const struct mroute_addr
      *a) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/mroute.h:257,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - addr
    argTypes:
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 263
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 263
    functionName: in_addr_t_from_mroute_addr
    functionSourceFile: /src/openvpn/src/openvpn/mroute.h
    functionUses: []
    functionsReached:
    - ntohl
    linkageType: ''
    returnType: in_addr_t
    signature: 'static inline in_addr_t in_addr_t_from_mroute_addr(const struct mroute_addr
      *addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ma
    argTypes:
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 270
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 270
    functionName: mroute_addr_reset
    functionSourceFile: /src/openvpn/src/openvpn/mroute.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void mroute_addr_reset(struct mroute_addr *ma) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/auth_token.h:128,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/auth_token.h:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - password
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 130
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 130
    functionName: is_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/auth_token.h
    functionUses: []
    functionsReached:
    - strlen
    - memcmp_constant_time
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_auth_token(const char *password) '
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 24
    argCount: 2
    argNames:
    - dhcp
    - optlen
    argTypes:
    - struct dhcp*
    - int
    constantsTouched: []
    func_position:
      end: 73
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 73
    functionName: get_dhcp_message_type
    functionSourceFile: /src/openvpn/src/openvpn/dhcp.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int get_dhcp_message_type(const struct dhcp *dhcp, const int
      optlen) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/dhcp.c:150,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/dhcp.c:151,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/dhcp.c:156,1
    - Dst: get_dhcp_message_type
      Src: /src/openvpn/src/openvpn/dhcp.c:159,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/dhcp.c:155,1
    - Dst: do_extract
      Src: /src/openvpn/src/openvpn/dhcp.c:163,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/dhcp.c:167,1
    - Dst: ip_checksum
      Src: /src/openvpn/src/openvpn/dhcp.c:167,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dhcp.c:177,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dhcp.c:178,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/dhcp.c:178,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dhcp.c:179,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 37
    argCount: 1
    argNames:
    - ipbuf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 187
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 187
    functionName: dhcp_extract_router_msg
    functionSourceFile: /src/openvpn/src/openvpn/dhcp.c
    functionUses: []
    functionsReached:
    - BPTR
    - msg
    - print_in_addr_t
    - BLEN
    - ip_checksum
    - gc_new
    - get_dhcp_message_type
    - gc_free
    - do_extract
    - htons
    linkageType: ''
    returnType: in_addr_t
    signature: 'in_addr_t dhcp_extract_router_msg(struct buffer *ipbuf) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/dhcp.c:104,1
    - Dst: memmove
      Src: /src/openvpn/src/openvpn/dhcp.c:116,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/dhcp.c:105,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/dhcp.c:118,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 50
    argCount: 2
    argNames:
    - dhcp
    - optlen
    argTypes:
    - struct dhcp*
    - int
    constantsTouched: []
    func_position:
      end: 145
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 145
    functionName: do_extract
    functionSourceFile: /src/openvpn/src/openvpn/dhcp.c
    functionUses: []
    functionsReached:
    - memset
    - memcpy
    - ntohl
    - memmove
    linkageType: ''
    returnType: in_addr_t
    signature: 'static in_addr_t do_extract(struct dhcp *dhcp, int optlen) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: send
      Src: /src/openvpn/src/openvpn/socks.c:206,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:209,1
    - Dst: FD_ZERO
      Src: /src/openvpn/src/openvpn/socks.c:221,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/socks.c:222,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/socks.c:223,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/socks.c:226,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/socks.c:228,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:237,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:244,1
    - Dst: recv
      Src: /src/openvpn/src/openvpn/socks.c:249,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:254,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:285,1
    - Dst: socks_username_password_auth
      Src: /src/openvpn/src/openvpn/socks.c:290,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:272,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:265,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:298,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 50
    argCount: 4
    argNames:
    - p
    - sd
    - server_poll_timeout
    - signal_received
    argTypes:
    - struct socks_proxy_info*
    - socket_descriptor_t
    - struct event_timeout*
    - int*
    constantsTouched: []
    func_position:
      end: 303
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 303
    functionName: socks_handshake
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - recv
    - socks_username_password_auth
    - send
    - msg
    - openvpn_fd_set
    - get_signal
    - FD_ZERO
    - select
    - get_server_poll_remaining_time
    linkageType: ''
    returnType: bool
    signature: 'static bool socks_handshake(struct socks_proxy_info *p, socket_descriptor_t
      sd, struct event_timeout *server_poll_timeout, volatile int *signal_received) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/socks.c:82,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - sp
    argTypes:
    - struct socks_proxy_info*
    constantsTouched: []
    func_position:
      end: 83
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 83
    functionName: socks_proxy_close
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void socks_proxy_close(struct socks_proxy_info *sp) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/socks.c:437,1
    - Dst: getservbyname
      Src: /src/openvpn/src/openvpn/socks.c:444,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - servname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 451
      start: 433
    functionDepth: 0
    functionLinenumber: 433
    functionLinenumberEnd: 451
    functionName: port_from_servname
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - getservbyname
    - atoi
    linkageType: ''
    returnType: int
    signature: 'static int port_from_servname(const char *servname) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socks_handshake
      Src: /src/openvpn/src/openvpn/socks.c:522,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:536,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socks.c:542,1
    - Dst: send
      Src: /src/openvpn/src/openvpn/socks.c:531,1
    - Dst: recv_socks_reply
      Src: /src/openvpn/src/openvpn/socks.c:543,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/socks.c:552,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 15
    argCount: 5
    argNames:
    - p
    - ctrl_sd
    - /* already open to proxy */
    - relay_addr
    - server_poll_timeout
    - sig_info
    argTypes:
    - struct socks_proxy_info*
    - socket_descriptor_t
    - struct openvpn_sockaddr*
    - struct event_timeout*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 554
      start: 515
    functionDepth: 0
    functionLinenumber: 515
    functionLinenumberEnd: 554
    functionName: establish_socks_proxy_udpassoc
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - socks_handshake
    - send
    - msg
    - register_signal
    - CLEAR
    - recv_socks_reply
    linkageType: ''
    returnType: void
    signature: 'void establish_socks_proxy_udpassoc(struct socks_proxy_info *p, socket_descriptor_t
      ctrl_sd, /* already open to proxy */ struct openvpn_sockaddr *relay_addr, struct
      event_timeout *server_poll_timeout, struct signal_info *sig_info) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/socks.c:57,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socks.c:59,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/socks.c:62,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/socks.c:67,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socks.c:60,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 3
    argNames:
    - server
    - port
    - authfile
    argTypes:
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 77
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 77
    functionName: socks_proxy_new
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - strncpynt
    - ALLOC_OBJ_CLEAR
    - ASSERT
    linkageType: ''
    returnType: struct socks_proxy_info*
    signature: 'struct socks_proxy_info *socks_proxy_new(const char *server, const
      char *port, const char *authfile) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: htons
      Src: /src/openvpn/src/openvpn/socks.c:320,1
    - Dst: recv
      Src: /src/openvpn/src/openvpn/socks.c:359,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:398,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/socks.c:426,1
    - Dst: FD_ZERO
      Src: /src/openvpn/src/openvpn/socks.c:331,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/socks.c:336,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:354,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:364,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:414,1
    - Dst: print_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/socks.c:425,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:424,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/socks.c:332,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/socks.c:333,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/socks.c:338,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:347,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socks.c:422,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socks.c:421,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/socks.c:319,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/socks.c:423,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:369,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 70
    argCount: 4
    argNames:
    - sd
    - addr
    - server_poll_timeout
    - signal_received
    argTypes:
    - socket_descriptor_t
    - struct openvpn_sockaddr*
    - struct event_timeout*
    - int*
    constantsTouched: []
    func_position:
      end: 431
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 431
    functionName: recv_socks_reply
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - recv
    - memcpy
    - msg
    - print_openvpn_sockaddr
    - openvpn_fd_set
    - gc_new
    - get_signal
    - gc_free
    - FD_ZERO
    - select
    - get_server_poll_remaining_time
    - htonl
    - htons
    linkageType: ''
    returnType: bool
    signature: 'static bool recv_socks_reply(socket_descriptor_t sd, struct openvpn_sockaddr
      *addr, struct event_timeout *server_poll_timeout, volatile int *signal_received) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/socks.c:99,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socks.c:114,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socks.c:120,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/socks.c:139,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socks.c:118,1
    - Dst: FD_ZERO
      Src: /src/openvpn/src/openvpn/socks.c:134,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:157,1
    - Dst: recv
      Src: /src/openvpn/src/openvpn/socks.c:162,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/socks.c:185,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socks.c:105,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/socks.c:113,1
    - Dst: send
      Src: /src/openvpn/src/openvpn/socks.c:118,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/socks.c:136,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/socks.c:135,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/socks.c:141,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:167,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socks.c:115,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:122,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:150,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:178,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/socks.c:184,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/socks.c:98,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socks.c:105,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:101,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:107,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socks.c:116,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 61
    argCount: 4
    argNames:
    - p
    - sd
    - server_poll_timeout
    - signal_received
    argTypes:
    - struct socks_proxy_info*
    - socket_descriptor_t
    - struct event_timeout*
    - int*
    constantsTouched: []
    func_position:
      end: 187
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 187
    functionName: socks_username_password_auth
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - recv
    - msg
    - snprintf
    - send
    - openvpn_fd_set
    - get_signal
    - secure_memzero
    - CLEAR
    - ASSERT
    - get_user_pass
    - FD_ZERO
    - strlen
    - select
    - get_server_poll_remaining_time
    linkageType: ''
    returnType: bool
    signature: 'static bool socks_username_password_auth(struct socks_proxy_info *p,
      socket_descriptor_t sd, struct event_timeout *server_poll_timeout, volatile
      int *signal_received) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: socks_handshake
      Src: /src/openvpn/src/openvpn/socks.c:464,1
    - Dst: port_from_servname
      Src: /src/openvpn/src/openvpn/socks.c:481,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/socks.c:475,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:484,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/socks.c:479,1
    - Dst: send
      Src: /src/openvpn/src/openvpn/socks.c:492,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socks.c:495,1
    - Dst: recv_socks_reply
      Src: /src/openvpn/src/openvpn/socks.c:502,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/socks.c:511,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 44
    argCount: 6
    argNames:
    - p
    - sd
    - /* already open to proxy */
    - host
    - /* openvpn server remote */
    - servname
    - /* openvpn server port */
    - server_poll_timeout
    - sig_info
    argTypes:
    - struct socks_proxy_info*
    - socket_descriptor_t
    - char*
    - char*
    - struct event_timeout*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 513
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 513
    functionName: establish_socks_proxy_passthru
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - socks_handshake
    - memcpy
    - msg
    - send
    - register_signal
    - port_from_servname
    - strlen
    - recv_socks_reply
    linkageType: ''
    returnType: void
    signature: 'void establish_socks_proxy_passthru(struct socks_proxy_info *p, socket_descriptor_t
      sd, /* already open to proxy */ const char *host, /* openvpn server remote */
      const char *servname, /* openvpn server port */ struct event_timeout *server_poll_timeout,
      struct signal_info *sig_info) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socks.c:568,1
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/socks.c:573,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/socks.c:574,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/socks.c:579,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/socks.c:585,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/socks.c:586,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 2
    argNames:
    - buf
    - from
    argTypes:
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 592
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 592
    functionName: socks_process_incoming_udp
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - buf_read_u8
    - buf_read
    - BLEN
    - buf_read_u16
    linkageType: ''
    returnType: void
    signature: 'void socks_process_incoming_udp(struct buffer *buf, struct link_socket_actual
      *from) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_sub
      Src: /src/openvpn/src/openvpn/socks.c:610,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/socks.c:615,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/socks.c:616,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socks.c:613,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/socks.c:613,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/socks.c:617,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/socks.c:618,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/socks.c:619,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 2
    argNames:
    - buf
    - to
    argTypes:
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 622
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 622
    functionName: socks_process_outgoing_udp
    functionSourceFile: /src/openvpn/src/openvpn/socks.c
    functionUses: []
    functionsReached:
    - buf_sub
    - buf_write
    - ASSERT
    - buf_write_u8
    - buf_defined
    - buf_write_u16
    linkageType: ''
    returnType: int
    signature: 'int socks_process_outgoing_udp(struct buffer *buf, const struct link_socket_actual
      *to) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IN_TREE
      Src: /src/openvpn/src/openvpn/schedule.h:102,1
    - Dst: schedule_add_modify
      Src: /src/openvpn/src/openvpn/schedule.h:105,1
    - Dst: tv_within_sigma
      Src: /src/openvpn/src/openvpn/schedule.h:102,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 4
    argNames:
    - s
    - e
    - tv
    - sigma
    argTypes:
    - struct schedule*
    - struct schedule_entry*
    - struct timeval*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 108
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 108
    functionName: schedule_add_entry
    functionSourceFile: /src/openvpn/src/openvpn/schedule.h
    functionUses: []
    functionsReached:
    - tv_within_sigma
    - IN_TREE
    - schedule_add_modify
    linkageType: ''
    returnType: void
    signature: 'static inline void schedule_add_entry(struct schedule *s, struct schedule_entry
      *e, const struct timeval *tv, unsigned int sigma) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: schedule_find_least
      Src: /src/openvpn/src/openvpn/schedule.h:125,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 8
    argCount: 2
    argNames:
    - s
    - wakeup
    argTypes:
    - struct schedule*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 134
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 134
    functionName: schedule_get_earliest_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/schedule.h
    functionUses: []
    functionsReached:
    - schedule_find_least
    linkageType: ''
    returnType: struct schedule_entry*
    signature: 'static inline struct schedule_entry *schedule_get_earliest_wakeup(struct
      schedule *s, struct timeval *wakeup) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/vlan.c:270,1
    - Dst: vlanhdr_get_vid
      Src: /src/openvpn/src/openvpn/vlan.c:284,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/vlan.c:276,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/vlan.c:278,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 13
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 292
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 292
    functionName: vlan_is_tagged
    functionSourceFile: /src/openvpn/src/openvpn/vlan.c
    functionUses: []
    functionsReached:
    - vlanhdr_get_vid
    - BLEN
    - ntohs
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'bool vlan_is_tagged(const struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htons
      Src: /src/openvpn/src/openvpn/vlan.c:56,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - hdr
    - vid
    argTypes:
    - struct openvpn_8021qhdr*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 57
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 57
    functionName: vlanhdr_set_vid
    functionSourceFile: /src/openvpn/src/openvpn/vlan.c
    functionUses: []
    functionsReached:
    - htons
    linkageType: ''
    returnType: void
    signature: 'static void vlanhdr_set_vid(struct openvpn_8021qhdr *hdr, const uint16_t
      vid) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: vlan_encapsulate
      Src: /src/openvpn/src/openvpn/vlan.c:322,1
    - Dst: vlan_encapsulate
      Src: /src/openvpn/src/openvpn/vlan.c:328,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 330
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 330
    functionName: vlan_process_outgoing_tun
    functionSourceFile: /src/openvpn/src/openvpn/vlan.c
    functionUses: []
    functionsReached:
    - vlan_encapsulate
    linkageType: ''
    returnType: void
    signature: 'void vlan_process_outgoing_tun(struct multi_context *m, struct multi_instance
      *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/vlan.c:43,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - hdr
    argTypes:
    - struct openvpn_8021qhdr*
    constantsTouched: []
    func_position:
      end: 44
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 44
    functionName: vlanhdr_get_vid
    functionSourceFile: /src/openvpn/src/openvpn/vlan.c
    functionUses: []
    functionsReached:
    - ntohs
    linkageType: ''
    returnType: uint16_t
    signature: 'static uint16_t vlanhdr_get_vid(const struct openvpn_8021qhdr *hdr) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/vlan.c:88,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/vlan.c:94,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/vlan.c:93,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/vlan.c:99,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/vlan.c:101,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/vlan.c:106,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/vlan.c:108,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/vlan.c:114,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/vlan.c:119,1
    - Dst: vlanhdr_get_vid
      Src: /src/openvpn/src/openvpn/vlan.c:120,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/vlan.c:129,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/vlan.c:151,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/vlan.c:160,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/vlan.c:164,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/vlan.c:128,1
    - Dst: memmove
      Src: /src/openvpn/src/openvpn/vlan.c:164,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/vlan.c:153,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 37
    argCount: 2
    argNames:
    - c
    - buf
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 174
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 174
    functionName: vlan_decapsulate
    functionSourceFile: /src/openvpn/src/openvpn/vlan.c
    functionUses: []
    functionsReached:
    - BPTR
    - memmove
    - msg
    - BLEN
    - buf_advance
    - vlanhdr_get_vid
    - ntohs
    - htons
    linkageType: ''
    returnType: int16_t
    signature: 'int16_t vlan_decapsulate(const struct context *c, struct buffer *buf) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/vlan.c:190,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/vlan.c:196,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/vlan.c:208,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/vlan.c:203,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/vlan.c:195,1
    - Dst: vlanhdr_get_vid
      Src: /src/openvpn/src/openvpn/vlan.c:211,1
    - Dst: buf_reverse_capacity
      Src: /src/openvpn/src/openvpn/vlan.c:222,1
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/vlan.c:227,1
    - Dst: memmove
      Src: /src/openvpn/src/openvpn/vlan.c:238,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/vlan.c:239,1
    - Dst: vlanhdr_set_vid
      Src: /src/openvpn/src/openvpn/vlan.c:245,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/vlan.c:247,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 31
    argCount: 2
    argNames:
    - c
    - buf
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 254
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 254
    functionName: vlan_encapsulate
    functionSourceFile: /src/openvpn/src/openvpn/vlan.c
    functionUses: []
    functionsReached:
    - buf_reverse_capacity
    - BPTR
    - memmove
    - msg
    - BLEN
    - buf_prepend
    - vlanhdr_set_vid
    - vlanhdr_get_vid
    - htons
    linkageType: ''
    returnType: void
    signature: 'void vlan_encapsulate(const struct context *c, struct buffer *buf) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_common.h:738,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 3
    argCount: 2
    argNames:
    - multi
    - index
    argTypes:
    - struct tls_multi*
    - int
    constantsTouched: []
    func_position:
      end: 741
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 741
    functionName: get_key_scan
    functionSourceFile: /src/openvpn/src/openvpn/ssl_common.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: struct key_state*
    signature: 'static inline struct key_state *get_key_scan(struct tls_multi *multi,
      int index) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 750
      start: 746
    functionDepth: 0
    functionLinenumber: 746
    functionLinenumberEnd: 750
    functionName: get_primary_key
    functionSourceFile: /src/openvpn/src/openvpn/ssl_common.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct key_state*
    signature: 'static inline const struct key_state *get_primary_key(const struct
      tls_multi *multi) '
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned
    constantsTouched: []
    func_position:
      end: 162
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 162
    functionName: _pkcs11_msg_openvpn2pkcs11
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned
    signature: 'static unsigned _pkcs11_msg_openvpn2pkcs11( const unsigned flags ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:198,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11.c:223,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/pkcs11.c:211,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/pkcs11.c:203,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/pkcs11.c:200,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 4
    argNames:
    - global_data
    - user_data
    - token
    - retry
    argTypes:
    - void*
    - void*
    - pkcs11h_token_id_t
    - unsigned
    constantsTouched: []
    func_position:
      end: 225
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 225
    functionName: _pkcs11_openvpn_token_prompt
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - snprintf
    - strcmp
    - CLEAR
    - ASSERT
    - get_user_pass
    linkageType: ''
    returnType: PKCS11H_BOOL
    signature: 'static PKCS11H_BOOL _pkcs11_openvpn_token_prompt( void *const global_data,
      void *const user_data, const pkcs11h_token_id_t token, const unsigned retry
      ) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:288,1
    - Dst: pkcs11h_setLogLevel
      Src: /src/openvpn/src/openvpn/pkcs11.c:311,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:321,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:321,1
    - Dst: get_debug_level
      Src: /src/openvpn/src/openvpn/pkcs11.c:311,1
    - Dst: pkcs11h_setTokenPromptHook
      Src: /src/openvpn/src/openvpn/pkcs11.c:319,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:346,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:350,1
    - Dst: pkcs11h_setPINCachePeriod
      Src: /src/openvpn/src/openvpn/pkcs11.c:337,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:295,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:295,1
    - Dst: pkcs11h_engine_setSystem
      Src: /src/openvpn/src/openvpn/pkcs11.c:293,1
    - Dst: _pkcs11_msg_openvpn2pkcs11
      Src: /src/openvpn/src/openvpn/pkcs11.c:311,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:327,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:333,1
    - Dst: pkcs11h_initialize
      Src: /src/openvpn/src/openvpn/pkcs11.c:299,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:301,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:301,1
    - Dst: pkcs11h_setLogHook
      Src: /src/openvpn/src/openvpn/pkcs11.c:305,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:307,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:307,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:315,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:315,1
    - Dst: pkcs11h_setPINPromptHook
      Src: /src/openvpn/src/openvpn/pkcs11.c:325,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:327,1
    - Dst: pkcs11h_setForkMode
      Src: /src/openvpn/src/openvpn/pkcs11.c:313,1
    - Dst: pkcs11h_setProtectedAuthentication
      Src: /src/openvpn/src/openvpn/pkcs11.c:331,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:333,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:339,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:339,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 57
    argCount: 2
    argNames:
    - protected_auth
    - nPINCachePeriod
    argTypes:
    - bool
    - int
    constantsTouched: []
    func_position:
      end: 354
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 354
    functionName: pkcs11_initialize
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - pkcs11h_setTokenPromptHook
    - pkcs11h_initialize
    - get_debug_level
    - dmsg
    - msg
    - pkcs11h_setPINPromptHook
    - pkcs11h_engine_setSystem
    - pkcs11h_setLogLevel
    - pkcs11h_setPINCachePeriod
    - pkcs11h_setProtectedAuthentication
    - pkcs11h_setLogHook
    - pkcs11h_getMessage
    - pkcs11h_setForkMode
    - _pkcs11_msg_openvpn2pkcs11
    linkageType: ''
    returnType: bool
    signature: 'bool pkcs11_initialize( const bool protected_auth, const int nPINCachePeriod
      ) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/pkcs11.c:407,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:431,1
    - Dst: pkcs11h_addProvider
      Src: /src/openvpn/src/openvpn/pkcs11.c:437,1
    - Dst: pkcs11h_initializeProvider
      Src: /src/openvpn/src/openvpn/pkcs11.c:429,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:431,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:452,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:456,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:382,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:384,1
    - Dst: pkcs11h_setProviderProperty
      Src: /src/openvpn/src/openvpn/pkcs11.c:415,1
    - Dst: platform_absolute_pathname
      Src: /src/openvpn/src/openvpn/pkcs11.c:422,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:448,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:448,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:391,1
    - Dst: pkcs11h_registerProvider
      Src: /src/openvpn/src/openvpn/pkcs11.c:398,1
    - Dst: pkcs11h_setProviderProperty
      Src: /src/openvpn/src/openvpn/pkcs11.c:407,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:400,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:400,1
    - Dst: pkcs11h_setProviderProperty
      Src: /src/openvpn/src/openvpn/pkcs11.c:411,1
    - Dst: pkcs11h_setProviderProperty
      Src: /src/openvpn/src/openvpn/pkcs11.c:425,1
    - Dst: pkcs11h_setProviderProperty
      Src: /src/openvpn/src/openvpn/pkcs11.c:419,1
    - Dst: pkcs11h_removeProvider
      Src: /src/openvpn/src/openvpn/pkcs11.c:432,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 60
    argCount: 4
    argNames:
    - provider
    - protected_auth
    - private_mode
    - cert_private
    argTypes:
    - char*
    - bool
    - unsigned
    - bool
    constantsTouched: []
    func_position:
      end: 460
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 460
    functionName: pkcs11_addProvider
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - pkcs11h_initializeProvider
    - pkcs11h_addProvider
    - dmsg
    - msg
    - platform_absolute_pathname
    - pkcs11h_removeProvider
    - ASSERT
    - strlen
    - pkcs11h_getMessage
    - pkcs11h_setProviderProperty
    - pkcs11h_registerProvider
    linkageType: ''
    returnType: bool
    signature: 'bool pkcs11_addProvider( const char *const provider, const bool protected_auth,
      const unsigned private_mode, const bool cert_private ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:476,1
    - Dst: pkcs11h_certificate_enumCertificateIds
      Src: /src/openvpn/src/openvpn/pkcs11.c:482,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:491,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:491,1
    - Dst: pkcs11h_certificate_freeCertificateIdList
      Src: /src/openvpn/src/openvpn/pkcs11.c:502,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:505,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 512
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 512
    functionName: pkcs11_management_id_count
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - pkcs11h_certificate_freeCertificateIdList
    - pkcs11h_getMessage
    - pkcs11h_certificate_enumCertificateIds
    linkageType: ''
    returnType: int
    signature: 'int pkcs11_management_id_count(void) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:706,1
    - Dst: pkcs11h_certificate_deserializeCertificateId
      Src: /src/openvpn/src/openvpn/pkcs11.c:741,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:747,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:747,1
    - Dst: pkcs11h_certificate_deserializeCertificateId
      Src: /src/openvpn/src/openvpn/pkcs11.c:754,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:760,1
    - Dst: pkcs11h_certificate_create
      Src: /src/openvpn/src/openvpn/pkcs11.c:766,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:760,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:703,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:704,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/pkcs11.c:718,1
    - Dst: pkcs11_init_tls_session
      Src: /src/openvpn/src/openvpn/pkcs11.c:780,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:808,1
    - Dst: pkcs11h_certificate_freeCertificate
      Src: /src/openvpn/src/openvpn/pkcs11.c:798,1
    - Dst: pkcs11h_certificate_freeCertificateId
      Src: /src/openvpn/src/openvpn/pkcs11.c:804,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/pkcs11.c:722,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:775,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:775,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/pkcs11.c:729,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 50
    argCount: 3
    argNames:
    - ssl_ctx
    - pkcs11_id_management
    - pkcs11_id
    argTypes:
    - struct tls_root_ctx*
    - bool
    - char*
    constantsTouched: []
    func_position:
      end: 816
      start: 690
    functionDepth: 0
    functionLinenumber: 690
    functionLinenumberEnd: 816
    functionName: tls_ctx_use_pkcs11
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - pkcs11h_certificate_freeCertificateId
    - dmsg
    - pkcs11_init_tls_session
    - msg
    - snprintf
    - pkcs11h_certificate_deserializeCertificateId
    - pkcs11h_certificate_freeCertificate
    - CLEAR
    - ASSERT
    - get_user_pass
    - pkcs11h_certificate_create
    - pkcs11h_getMessage
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_use_pkcs11( struct tls_root_ctx *const ssl_ctx, bool pkcs11_id_management,
      const char *const pkcs11_id ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_time
      Src: /src/openvpn/src/openvpn/pkcs11.c:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 47
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 47
    functionName: __mytime
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - openvpn_time
    linkageType: ''
    returnType: time_t
    signature: 'static time_t __mytime(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Sleep
      Src: /src/openvpn/src/openvpn/pkcs11.c:63,1
    - Dst: usleep
      Src: /src/openvpn/src/openvpn/pkcs11.c:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - usec
    argTypes:
    - unsigned long
    constantsTouched: []
    func_position:
      end: 67
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 67
    functionName: __mysleep
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - Sleep
    - usleep
    linkageType: ''
    returnType: void
    signature: 'static void __mysleep(const unsigned long usec) '
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned
    constantsTouched: []
    func_position:
      end: 122
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 122
    functionName: _pkcs11_msg_pkcs112openvpn
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned
    signature: 'static unsigned _pkcs11_msg_pkcs112openvpn( const unsigned flags ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpn/pkcs11.c:177,1
    - Dst: _pkcs11_msg_pkcs112openvpn
      Src: /src/openvpn/src/openvpn/pkcs11.c:180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:180,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 4
    argNames:
    - global_data
    - flags
    - szFormat
    - args
    argTypes:
    - void*
    - unsigned
    - char*
    - va_list
    constantsTouched: []
    func_position:
      end: 181
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 181
    functionName: _pkcs11_openvpn_log
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - msg
    - vsnprintf
    - _pkcs11_msg_pkcs112openvpn
    linkageType: ''
    returnType: void
    signature: 'static void _pkcs11_openvpn_log( void *const global_data, unsigned
      flags, const char *const szFormat, va_list args ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/pkcs11.c:240,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/pkcs11.c:248,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/pkcs11.c:254,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:246,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/pkcs11.c:266,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/pkcs11.c:267,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/pkcs11.c:269,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 6
    argNames:
    - global_data
    - user_data
    - token
    - retry
    - pin
    - pin_max
    argTypes:
    - void*
    - void*
    - pkcs11h_token_id_t
    - unsigned
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 278
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 278
    functionName: _pkcs11_openvpn_pin_prompt
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - snprintf
    - purge_user_pass
    - strncpynt
    - CLEAR
    - ASSERT
    - get_user_pass
    - strlen
    linkageType: ''
    returnType: PKCS11H_BOOL
    signature: 'static PKCS11H_BOOL _pkcs11_openvpn_pin_prompt( void *const global_data,
      void *const user_data, const pkcs11h_token_id_t token, const unsigned retry,
      char *const pin, const size_t pin_max ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:359,1
    - Dst: pkcs11h_terminate
      Src: /src/openvpn/src/openvpn/pkcs11.c:364,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 370
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 370
    functionName: pkcs11_terminate
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - pkcs11h_terminate
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void pkcs11_terminate(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11h_logout
      Src: /src/openvpn/src/openvpn/pkcs11.c:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 466
      start: 462
    functionDepth: 0
    functionLinenumber: 462
    functionLinenumberEnd: 466
    functionName: pkcs11_logout
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - pkcs11h_logout
    linkageType: ''
    returnType: int
    signature: 'int pkcs11_logout(void) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:558,1
    - Dst: pkcs11h_certificate_enumCertificateIds
      Src: /src/openvpn/src/openvpn/pkcs11.c:549,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:558,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:620,1
    - Dst: pkcs11h_certificate_create
      Src: /src/openvpn/src/openvpn/pkcs11.c:611,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:638,1
    - Dst: pkcs11h_certificate_getCertificateBlob
      Src: /src/openvpn/src/openvpn/pkcs11.c:643,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:650,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:650,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pkcs11.c:671,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:536,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:572,1
    - Dst: pkcs11h_certificate_serializeCertificateId
      Src: /src/openvpn/src/openvpn/pkcs11.c:581,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:588,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:588,1
    - Dst: pkcs11h_certificate_freeCertificateIdList
      Src: /src/openvpn/src/openvpn/pkcs11.c:668,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:539,1
    - Dst: pkcs11h_certificate_serializeCertificateId
      Src: /src/openvpn/src/openvpn/pkcs11.c:599,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:606,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:606,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/pkcs11.c:592,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:620,1
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/pkcs11.c:654,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pkcs11.c:677,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/pkcs11.c:680,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:537,1
    - Dst: pkcs11h_certificate_getCertificateBlob
      Src: /src/openvpn/src/openvpn/pkcs11.c:625,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:594,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:632,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:632,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/pkcs11.c:636,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:656,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pkcs11.c:674,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 82
    argCount: 3
    argNames:
    - index
    - id
    - base64
    argTypes:
    - int
    - char**
    - char**
    constantsTouched: []
    func_position:
      end: 688
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 688
    functionName: pkcs11_management_id_get
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - openvpn_base64_encode
    - dmsg
    - msg
    - pkcs11h_certificate_freeCertificateIdList
    - free
    - pkcs11h_certificate_serializeCertificateId
    - ASSERT
    - malloc
    - pkcs11h_certificate_create
    - pkcs11h_certificate_getCertificateBlob
    - pkcs11h_getMessage
    - pkcs11h_certificate_enumCertificateIds
    linkageType: ''
    returnType: bool
    signature: 'bool pkcs11_management_id_get( const int index, char **id, char **base64
      ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/pkcs11.c:829,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/pkcs11.c:830,1
    - Dst: query_user_SINGLE
      Src: /src/openvpn/src/openvpn/pkcs11.c:839,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pkcs11.c:836,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/pkcs11.c:838,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/pkcs11.c:839,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/pkcs11.c:839,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:842,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/pkcs11.c:845,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pkcs11.c:847,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 6
    argNames:
    - global_data
    - user_data
    - token
    - retry
    - pin
    - pin_max
    argTypes:
    - void*
    - void*
    - pkcs11h_token_id_t
    - unsigned
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 855
      start: 818
    functionDepth: 0
    functionLinenumber: 818
    functionLinenumberEnd: 855
    functionName: _pkcs11_openvpn_show_pkcs11_ids_pin_prompt
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - msg
    - BLEN
    - gc_new
    - strcmp
    - gc_free
    - ASSERT
    - query_user_SINGLE
    - alloc_buf_gc
    linkageType: ''
    returnType: PKCS11H_BOOL
    signature: 'static PKCS11H_BOOL _pkcs11_openvpn_show_pkcs11_ids_pin_prompt( void
      *const global_data, void *const user_data, const pkcs11h_token_id_t token, const
      unsigned retry, char *const pin, const size_t pin_max ) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/pkcs11.c:863,1
    - Dst: pkcs11h_setProtectedAuthentication
      Src: /src/openvpn/src/openvpn/pkcs11.c:882,1
    - Dst: pkcs11h_certificate_create
      Src: /src/openvpn/src/openvpn/pkcs11.c:965,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:999,1
    - Dst: pkcs11h_terminate
      Src: /src/openvpn/src/openvpn/pkcs11.c:1029,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:939,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pkcs11.c:1021,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:870,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:870,1
    - Dst: pkcs11h_initialize
      Src: /src/openvpn/src/openvpn/pkcs11.c:868,1
    - Dst: pkcs11h_setLogLevel
      Src: /src/openvpn/src/openvpn/pkcs11.c:880,1
    - Dst: get_debug_level
      Src: /src/openvpn/src/openvpn/pkcs11.c:880,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:890,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:890,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:896,1
    - Dst: pkcs11h_setPINPromptHook
      Src: /src/openvpn/src/openvpn/pkcs11.c:888,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:914,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:939,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/pkcs11.c:945,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/pkcs11.c:1030,1
    - Dst: _pkcs11_msg_openvpn2pkcs11
      Src: /src/openvpn/src/openvpn/pkcs11.c:880,1
    - Dst: pkcs11h_certificate_serializeCertificateId
      Src: /src/openvpn/src/openvpn/pkcs11.c:953,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:960,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:960,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:974,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:974,1
    - Dst: pkcs11_certificate_serial
      Src: /src/openvpn/src/openvpn/pkcs11.c:989,1
    - Dst: pkcs11h_certificate_freeCertificateIdList
      Src: /src/openvpn/src/openvpn/pkcs11.c:1026,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:948,1
    - Dst: pkcs11h_certificate_freeCertificate
      Src: /src/openvpn/src/openvpn/pkcs11.c:1017,1
    - Dst: pkcs11h_setLogHook
      Src: /src/openvpn/src/openvpn/pkcs11.c:874,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:876,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:876,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:884,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:884,1
    - Dst: pkcs11h_certificate_enumCertificateIds
      Src: /src/openvpn/src/openvpn/pkcs11.c:901,1
    - Dst: pkcs11_addProvider
      Src: /src/openvpn/src/openvpn/pkcs11.c:894,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pkcs11.c:910,1
    - Dst: pkcs11h_getMessage
      Src: /src/openvpn/src/openvpn/pkcs11.c:910,1
    - Dst: pkcs11h_certificate_serializeCertificateId
      Src: /src/openvpn/src/openvpn/pkcs11.c:932,1
    - Dst: pkcs11_certificate_dn
      Src: /src/openvpn/src/openvpn/pkcs11.c:979,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 89
    argCount: 2
    argNames:
    - provider
    - cert_private
    argTypes:
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1031
      start: 857
    functionDepth: 0
    functionLinenumber: 857
    functionLinenumberEnd: 1031
    functionName: show_pkcs11_ids
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - msg
    - pkcs11h_setPINPromptHook
    - pkcs11_addProvider
    - pkcs11h_certificate_serializeCertificateId
    - pkcs11h_certificate_create
    - free
    - pkcs11h_setLogHook
    - _pkcs11_msg_openvpn2pkcs11
    - pkcs11h_terminate
    - gc_new
    - gc_free
    - pkcs11h_certificate_enumCertificateIds
    - pkcs11_certificate_serial
    - pkcs11h_initialize
    - pkcs11h_certificate_freeCertificate
    - pkcs11h_certificate_freeCertificateIdList
    - get_debug_level
    - pkcs11h_setLogLevel
    - malloc
    - pkcs11h_setProtectedAuthentication
    - pkcs11h_getMessage
    - pkcs11_certificate_dn
    linkageType: ''
    returnType: void
    signature: 'void show_pkcs11_ids( const char *const provider, bool cert_private
      ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/pkcs11.c:54,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - tv
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 55
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 55
    functionName: __mygettimeofday
    functionSourceFile: /src/openvpn/src/openvpn/pkcs11.c
    functionUses: []
    functionsReached:
    - gettimeofday
    linkageType: ''
    returnType: int
    signature: 'static int __mygettimeofday(struct timeval *tv) '
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:3403,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:3422,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3479,1
    - Dst: net_route_v4_best_gw
      Src: /src/openvpn/src/openvpn/route.c:3378,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3405,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/route.c:3419,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:3477,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/route.c:3472,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:3458,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:3495,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:3370,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3398,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:3443,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/route.c:3476,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/route.c:3493,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/route.c:3396,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3375,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3374,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:3416,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/route.c:3435,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:3441,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:3454,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/route.c:3482,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 81
    argCount: 3
    argNames:
    - rgi
    - dest
    - ctx
    argTypes:
    - struct route_gateway_info*
    - in_addr_t
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3496
      start: 3367
    functionDepth: 0
    functionLinenumber: 3367
    functionLinenumberEnd: 3496
    functionName: get_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - socket
    - memcpy
    - msg
    - ioctl
    - ntohl
    - gc_new
    - strcmp
    - strncpynt
    - CLEAR
    - gc_free
    - memset
    - close
    - net_route_v4_best_gw
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway(struct route_gateway_info *rgi, in_addr_t
      dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 3
    argNames:
    - is_local_route
    - flags
    - rgi
    argTypes:
    - int
    - unsigned int
    - struct route_gateway_info*
    constantsTouched: []
    func_position:
      end: 1562
      start: 1558
    functionDepth: 0
    functionLinenumber: 1558
    functionLinenumberEnd: 1562
    functionName: is_on_link
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_on_link(const int is_local_route, const unsigned
      int flags, const struct route_gateway_info *rgi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2750,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/route.c:2757,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2756,1
    - Dst: GetBestInterfaceEx
      Src: /src/openvpn/src/openvpn/route.c:2753,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2762,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2766,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2768,1
    - Dst: GetBestRoute2
      Src: /src/openvpn/src/openvpn/route.c:2769,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2773,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/route.c:2774,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 3
    argNames:
    - gc
    - dest
    - best_route
    argTypes:
    - struct gc_arena*
    - SOCKADDR_INET*
    - MIB_IPFORWARD_ROW2*
    constantsTouched: []
    func_position:
      end: 2781
      start: 2744
    functionDepth: 0
    functionLinenumber: 2744
    functionLinenumberEnd: 2781
    functionName: get_best_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - GetBestRoute2
    - msg
    - strerror_win32
    - CLEAR
    - GetBestInterfaceEx
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD get_best_route(struct gc_arena *gc, SOCKADDR_INET *dest,
      MIB_IPFORWARD_ROW2 *best_route) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2696,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:2706,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:2711,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:2707,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2713,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2714,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:2727,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2729,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 21
    argCount: 1
    argNames:
    - routes
    argTypes:
    - MIB_IPFORWARDTABLE*
    constantsTouched: []
    func_position:
      end: 2731
      start: 2693
    functionDepth: 0
    functionLinenumber: 2693
    functionLinenumberEnd: 2731
    functionName: get_default_gateway_row
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - dmsg
    - print_in_addr_t
    - ntohl
    - gc_new
    - gc_free
    linkageType: ''
    returnType: MIB_IPFORWARDROW*
    signature: 'static const MIB_IPFORWARDROW *get_default_gateway_row(const MIB_IPFORWARDTABLE
      *routes) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 2
    argNames:
    - r6
    - host
    argTypes:
    - struct route_ipv6*
    - struct in6_addr*
    constantsTouched: []
    func_position:
      end: 786
      start: 752
    functionDepth: 0
    functionLinenumber: 752
    functionLinenumberEnd: 786
    functionName: route_ipv6_match_host
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool route_ipv6_match_host( const struct route_ipv6 *r6, const
      struct in6_addr *host ) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: delete_route
      Src: /src/openvpn/src/openvpn/route.c:1264,1
    - Dst: clear_route_list
      Src: /src/openvpn/src/openvpn/route.c:1273,1
    - Dst: undo_redirect_default_route_to_vpn
      Src: /src/openvpn/src/openvpn/route.c:1269,1
    - Dst: clear_route_ipv6_list
      Src: /src/openvpn/src/openvpn/route.c:1288,1
    - Dst: delete_route_ipv6
      Src: /src/openvpn/src/openvpn/route.c:1281,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 24
    argCount: 6
    argNames:
    - rl
    - rl6
    - tt
    - flags
    - es
    - ctx
    argTypes:
    - struct route_list*
    - struct route_ipv6_list*
    - struct tuntap*
    - unsigned int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1290
      start: 1254
    functionDepth: 0
    functionLinenumber: 1254
    functionLinenumberEnd: 1290
    functionName: delete_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - clear_route_ipv6_list
    - delete_route
    - undo_redirect_default_route_to_vpn
    - delete_route_ipv6
    - clear_route_list
    linkageType: ''
    returnType: void
    signature: 'void delete_routes(struct route_list *rl, struct route_ipv6_list *rl6,
      const struct tuntap *tt, unsigned int flags, const struct env_set *es, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:3029,1
    - Dst: windows_route_find_if_index
      Src: /src/openvpn/src/openvpn/route.c:3032,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3037,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:3039,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:3040,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:3042,1
    - Dst: DeleteIpForwardEntry
      Src: /src/openvpn/src/openvpn/route.c:3045,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3053,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/route.c:3054,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:3058,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - r
    - tt
    argTypes:
    - struct route_ipv4*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3060
      start: 3026
    functionDepth: 0
    functionLinenumber: 3026
    functionLinenumberEnd: 3060
    functionName: del_route_ipapi
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - strerror_win32
    - CLEAR
    - gc_free
    - windows_route_find_if_index
    - DeleteIpForwardEntry
    - htonl
    linkageType: ''
    returnType: bool
    signature: 'static bool del_route_ipapi(const struct route_ipv4 *r, const struct
      tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: test_local_addr
      Src: /src/openvpn/src/openvpn/route.c:4166,1
    - Dst: add_bypass_address
      Src: /src/openvpn/src/openvpn/route.c:4168,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 2
    argNames:
    - rb
    - addr
    argTypes:
    - struct route_bypass*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 4170
      start: 4163
    functionDepth: 0
    functionLinenumber: 4163
    functionLinenumberEnd: 4170
    functionName: add_host_route_if_nonlocal
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - add_bypass_address
    - test_local_addr
    linkageType: ''
    returnType: void
    signature: 'static void add_host_route_if_nonlocal(struct route_bypass *rb, const
      in_addr_t addr) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3839,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3852,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3850,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/route.c:3893,1
    - Dst: ADVANCE
      Src: /src/openvpn/src/openvpn/route.c:3926,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/route.c:3887,1
    - Dst: IN6_IS_ADDR_LINKLOCAL
      Src: /src/openvpn/src/openvpn/route.c:3947,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3895,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3890,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/route.c:3979,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3851,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3853,1
    - Dst: getrtable
      Src: /src/openvpn/src/openvpn/route.c:3860,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/route.c:3867,1
    - Dst: NEXTADDR
      Src: /src/openvpn/src/openvpn/route.c:3882,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/route.c:3901,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/route.c:3905,1
    - Dst: getpid
      Src: /src/openvpn/src/openvpn/route.c:3842,1
    - Dst: NEXTADDR
      Src: /src/openvpn/src/openvpn/route.c:3881,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/route.c:3953,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/route.c:3970,1
    CyclomaticComplexity: 52
    EdgeCount: 52
    ICount: 101
    argCount: 3
    argNames:
    - rgi6
    - dest
    - ctx
    argTypes:
    - struct route_ipv6_gateway_info*
    - struct in6_addr*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3981
      start: 3825
    functionDepth: 0
    functionLinenumber: 3825
    functionLinenumberEnd: 3981
    functionName: get_default_gateway_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - socket
    - memcpy
    - NEXTADDR
    - getpid
    - msg
    - bzero
    - IN6_IS_ADDR_LINKLOCAL
    - CLEAR
    - getrtable
    - write
    - read
    - IN6_IS_ADDR_UNSPECIFIED
    - ADVANCE
    - close
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,
      const struct in6_addr *dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/route.c:4178,1
    - Dst: add_host_route_if_nonlocal
      Src: /src/openvpn/src/openvpn/route.c:4181,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - rb
    - iplist
    argTypes:
    - struct route_bypass*
    - IP_ADDR_STRING*
    constantsTouched: []
    func_position:
      end: 4185
      start: 4172
    functionDepth: 0
    functionLinenumber: 4172
    functionLinenumberEnd: 4185
    functionName: add_host_route_array
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - add_host_route_if_nonlocal
    - getaddr
    linkageType: ''
    returnType: void
    signature: 'static void add_host_route_array(struct route_bypass *rb, const IP_ADDR_STRING
      *iplist) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: add_block_local_routes
      Src: /src/openvpn/src/openvpn/route.c:704,1
    - Dst: gc_addspecial
      Src: /src/openvpn/src/openvpn/route.c:739,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:732,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:744,1
    - Dst: clear_route_list
      Src: /src/openvpn/src/openvpn/route.c:641,1
    - Dst: print_default_gateway
      Src: /src/openvpn/src/openvpn/route.c:662,1
    - Dst: test_local_addr
      Src: /src/openvpn/src/openvpn/route.c:672,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/route.c:678,1
    - Dst: setenv_route_addr
      Src: /src/openvpn/src/openvpn/route.c:689,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:694,1
    - Dst: get_bypass_addresses
      Src: /src/openvpn/src/openvpn/route.c:706,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:638,1
    - Dst: get_default_gateway
      Src: /src/openvpn/src/openvpn/route.c:657,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:730,1
    - Dst: print_bypass_addresses
      Src: /src/openvpn/src/openvpn/route.c:708,1
    - Dst: init_route
      Src: /src/openvpn/src/openvpn/route.c:720,1
    - Dst: setenv_route_addr
      Src: /src/openvpn/src/openvpn/route.c:660,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:667,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:675,1
    - Dst: block_local_needed
      Src: /src/openvpn/src/openvpn/route.c:702,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 65
    argCount: 7
    argNames:
    - rl
    - opt
    - remote_endpoint
    - default_metric
    - remote_host
    - es
    - ctx
    argTypes:
    - struct route_list*
    - struct route_option_list*
    - char*
    - int
    - in_addr_t
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 746
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 746
    functionName: init_route_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - get_bypass_addresses
    - block_local_needed
    - print_bypass_addresses
    - add_block_local_routes
    - get_default_gateway
    - ntohl
    - gc_new
    - gc_free
    - clear_route_list
    - setenv_route_addr
    - ALLOC_OBJ_GC
    - is_route_parm_defined
    - getaddr
    - test_local_addr
    - print_default_gateway
    - gc_addspecial
    - init_route
    linkageType: ''
    returnType: bool
    signature: 'bool init_route_list(struct route_list *rl, const struct route_option_list
      *opt, const char *remote_endpoint, int default_metric, in_addr_t remote_host,
      struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: local_route
      Src: /src/openvpn/src/openvpn/route.c:4278,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 2
    argNames:
    - addr
    - rgi
    argTypes:
    - in_addr_t
    - struct route_gateway_info*
    constantsTouched: []
    func_position:
      end: 4288
      start: 4273
    functionDepth: 0
    functionLinenumber: 4273
    functionLinenumberEnd: 4288
    functionName: test_local_addr
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - local_route
    linkageType: ''
    returnType: int
    signature: 'int test_local_addr(const in_addr_t addr, const struct route_gateway_info
      *rgi) /* PLATFORM-SPECIFIC */ '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: do_route_ipv6_service
      Src: /src/openvpn/src/openvpn/route.c:3278,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - r
    - tt
    argTypes:
    - struct route_ipv6*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3279
      start: 3275
    functionDepth: 0
    functionLinenumber: 3275
    functionLinenumberEnd: 3279
    functionName: del_route_ipv6_service
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - do_route_ipv6_service
    linkageType: ''
    returnType: bool
    signature: 'static bool del_route_ipv6_service(const struct route_ipv6 *r, const
      struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 3
    argNames:
    - dest
    - src
    - a
    argTypes:
    - struct route_ipv6_option_list*
    - struct route_ipv6_option_list*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 185
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 185
    functionName: copy_route_ipv6_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void copy_route_ipv6_option_list(struct route_ipv6_option_list *dest,
      const struct route_ipv6_option_list *src, struct gc_arena *a) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:818,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:830,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:917,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:797,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:817,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:876,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:878,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/route.c:835,1
    - Dst: route_ipv6_match_host
      Src: /src/openvpn/src/openvpn/route.c:873,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:877,1
    - Dst: init_route_ipv6
      Src: /src/openvpn/src/openvpn/route.c:858,1
    - Dst: get_default_gateway_ipv6
      Src: /src/openvpn/src/openvpn/route.c:820,1
    - Dst: clear_route_ipv6_list
      Src: /src/openvpn/src/openvpn/route.c:801,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/route.c:823,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:823,1
    - Dst: print_default_gateway
      Src: /src/openvpn/src/openvpn/route.c:825,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:833,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/route.c:892,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:842,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:913,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:857,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 75
    argCount: 7
    argNames:
    - rl6
    - opt6
    - remote_endpoint
    - default_metric
    - remote_host_ipv6
    - es
    - ctx
    argTypes:
    - struct route_ipv6_list*
    - struct route_ipv6_option_list*
    - char*
    - int
    - struct in6_addr*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 919
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 919
    functionName: init_route_ipv6_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - route_ipv6_match_host
    - clear_route_ipv6_list
    - dmsg
    - msg
    - gc_new
    - is_route_parm_defined
    - print_in6_addr
    - inet_pton
    - setenv_str
    - ALLOC_OBJ_CLEAR_GC
    - gc_free
    - get_default_gateway_ipv6
    - print_default_gateway
    - init_route_ipv6
    linkageType: ''
    returnType: bool
    signature: 'bool init_route_ipv6_list(struct route_ipv6_list *rl6, const struct
      route_ipv6_option_list *opt6, const char *remote_endpoint, int default_metric,
      const struct in6_addr *remote_host_ipv6, struct env_set *es, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:3284,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:3288,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:3286,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:3285,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:3287,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:3300,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - r
    - gc
    argTypes:
    - MIB_IPFORWARDROW*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 3301
      start: 3281
    functionDepth: 0
    functionLinenumber: 3281
    functionLinenumberEnd: 3301
    functionName: format_route_entry
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - buf_printf
    - print_in_addr_t
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *format_route_entry(const MIB_IPFORWARDROW *r, struct
      gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:190,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:192,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:193,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:191,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:194,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:198,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:200,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - r
    - gc
    argTypes:
    - struct route_ipv4*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 201
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 201
    functionName: route_string
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - buf_printf
    - print_in_addr_t
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *route_string(const struct route_ipv4 *r, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:932,1
    - Dst: add_route
      Src: /src/openvpn/src/openvpn/route.c:937,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 8
    argNames:
    - network
    - netmask
    - gateway
    - tt
    - flags
    - rgi
    - es
    - ctx
    argTypes:
    - in_addr_t
    - in_addr_t
    - in_addr_t
    - struct tuntap*
    - unsigned int
    - struct route_gateway_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 938
      start: 921
    functionDepth: 0
    functionLinenumber: 921
    functionLinenumberEnd: 938
    functionName: add_route3
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - CLEAR
    - add_route
    linkageType: ''
    returnType: bool
    signature: 'static bool add_route3(in_addr_t network, in_addr_t netmask, in_addr_t
      gateway, const struct tuntap *tt, unsigned int flags, const struct route_gateway_info
      *rgi, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:3068,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/route.c:3070,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/route.c:3081,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:3090,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3080,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 4
    argNames:
    - add
    - rt
    - size
    - pipe
    argTypes:
    - bool
    - route_message_t*
    - size_t
    - HANDLE
    constantsTouched: []
    func_position:
      end: 3092
      start: 3063
    functionDepth: 0
    functionLinenumber: 3063
    functionLinenumberEnd: 3092
    functionName: do_route_service
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - gc_free
    linkageType: ''
    returnType: int
    signature: 'static int do_route_service(const bool add, const route_message_t
      *rt, const size_t size, HANDLE pipe) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/route.c:210,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - parm
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 215
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 215
    functionName: is_route_parm_defined
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: bool
    signature: 'static bool is_route_parm_defined(const char *parm) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/route.c:244,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:254,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/route.c:282,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:273,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/route.c:263,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:292,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 36
    argCount: 4
    argNames:
    - rl
    - string
    - out
    - status
    argTypes:
    - struct route_list*
    - char*
    - in_addr_t*
    - bool*
    constantsTouched: []
    func_position:
      end: 302
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 302
    functionName: get_special_addr
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - strcmp
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool get_special_addr(const struct route_list *rl, const char
      *string, in_addr_t *out, bool *status) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/route.c:560,1
    - Dst: setenv_route_addr
      Src: /src/openvpn/src/openvpn/route.c:563,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - rl
    - es
    - addr
    argTypes:
    - struct route_list*
    - struct env_set*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 564
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 564
    functionName: route_list_add_vpn_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ASSERT
    - setenv_route_addr
    linkageType: ''
    returnType: void
    signature: 'void route_list_add_vpn_gateway(struct route_list *rl, struct env_set
      *es, const in_addr_t addr) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: windows_route_find_if_index
      Src: /src/openvpn/src/openvpn/route.c:3098,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:3111,1
    - Dst: netmask_to_netbits
      Src: /src/openvpn/src/openvpn/route.c:3117,1
    - Dst: do_route_service
      Src: /src/openvpn/src/openvpn/route.c:3123,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:3112,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 3
    argNames:
    - add
    - r
    - tt
    argTypes:
    - bool
    - struct route_ipv4*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3124
      start: 3095
    functionDepth: 0
    functionLinenumber: 3095
    functionLinenumberEnd: 3124
    functionName: do_route_ipv4_service
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - netmask_to_netbits
    - htonl
    - do_route_service
    - windows_route_find_if_index
    linkageType: ''
    returnType: int
    signature: 'static int do_route_ipv4_service(const bool add, const struct route_ipv4
      *r, const struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:220,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:221,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:228,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:224,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/route.c:230,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:230,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:230,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:231,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 4
    argNames:
    - es
    - key
    - addr
    - i
    argTypes:
    - struct env_set*
    - char*
    - in_addr_t
    - int
    constantsTouched: []
    func_position:
      end: 232
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 232
    functionName: setenv_route_addr
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - print_in_addr_t
    - gc_new
    - setenv_str
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void setenv_route_addr(struct env_set *es, const char *key,
      const in_addr_t addr, int i) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_special_addr
      Src: /src/openvpn/src/openvpn/route.c:309,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - addr_str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 315
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 315
    functionName: is_special_addr
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - get_special_addr
    linkageType: ''
    returnType: bool
    signature: 'bool is_special_addr(const char *addr_str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:576,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:577,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 22
    argCount: 3
    argNames:
    - rl
    - gateway
    - target
    argTypes:
    - struct route_list*
    - struct route_gateway_address*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 593
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 593
    functionName: add_block_local_item
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    linkageType: ''
    returnType: void
    signature: 'static void add_block_local_item(struct route_list *rl, const struct
      route_gateway_address *gateway, in_addr_t target) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: do_route_ipv4_service
      Src: /src/openvpn/src/openvpn/route.c:3259,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - r
    - tt
    argTypes:
    - struct route_ipv4*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3260
      start: 3256
    functionDepth: 0
    functionLinenumber: 3256
    functionLinenumberEnd: 3260
    functionName: add_route_service
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - do_route_ipv4_service
    linkageType: ''
    returnType: int
    signature: 'static int add_route_service(const struct route_ipv4 *r, const struct
      tuntap *tt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:4246,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:4258,1
    - Dst: get_windows_routing_table
      Src: /src/openvpn/src/openvpn/route.c:4251,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:4267,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:4257,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 2
    argNames:
    - addr
    - rgi
    argTypes:
    - in_addr_t
    - struct route_gateway_info*
    constantsTouched: []
    func_position:
      end: 4269
      start: 4243
    functionDepth: 0
    functionLinenumber: 4243
    functionLinenumberEnd: 4269
    functionName: test_local_addr
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ntohl
    - gc_free
    - get_windows_routing_table
    - gc_new
    linkageType: ''
    returnType: int
    signature: 'int test_local_addr(const in_addr_t addr, const struct route_gateway_info
      *rgi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:516,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 5
    argNames:
    - l
    - network
    - netmask
    - gateway
    - metric
    argTypes:
    - struct route_option_list*
    - char*
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 524
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 524
    functionName: add_route_to_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    linkageType: ''
    returnType: void
    signature: 'void add_route_to_option_list(struct route_option_list *l, const char
      *network, const char *netmask, const char *gateway, const char *metric) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: netbits_to_netmask
      Src: /src/openvpn/src/openvpn/route.c:4116,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 3
    argNames:
    - network
    - netmask
    - netbits
    argTypes:
    - in_addr_t
    - in_addr_t
    - int*
    constantsTouched: []
    func_position:
      end: 4132
      start: 4106
    functionDepth: 0
    functionLinenumber: 4106
    functionLinenumberEnd: 4132
    functionName: netmask_to_netbits
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - netbits_to_netmask
    linkageType: ''
    returnType: bool
    signature: 'bool netmask_to_netbits(const in_addr_t network, const in_addr_t netmask,
      int *netbits) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: netbits_to_netmask
      Src: /src/openvpn/src/openvpn/route.c:4145,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - netmask
    argTypes:
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 4152
      start: 4137
    functionDepth: 0
    functionLinenumber: 4137
    functionLinenumberEnd: 4152
    functionName: netmask_to_netbits2
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - netbits_to_netmask
    linkageType: ''
    returnType: int
    signature: 'int netmask_to_netbits2(in_addr_t netmask) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:533,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 4
    argNames:
    - l
    - prefix
    - gateway
    - metric
    argTypes:
    - struct route_ipv6_option_list*
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 539
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 539
    functionName: add_route_ipv6_to_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    linkageType: ''
    returnType: void
    signature: 'void add_route_ipv6_to_option_list(struct route_ipv6_option_list *l,
      const char *prefix, const char *gateway, const char *metric) '
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3620,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3631,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3633,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3634,1
    - Dst: getrtable
      Src: /src/openvpn/src/openvpn/route.c:3641,1
    - Dst: NEXTADDR
      Src: /src/openvpn/src/openvpn/route.c:3653,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3667,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/route.c:3770,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3785,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/route.c:3796,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/route.c:3665,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/route.c:3659,1
    - Dst: ADVANCE
      Src: /src/openvpn/src/openvpn/route.c:3695,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/route.c:3720,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/route.c:3741,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/route.c:3748,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/route.c:3760,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/route.c:3777,1
    - Dst: getifaddrs
      Src: /src/openvpn/src/openvpn/route.c:3783,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/route.c:3793,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:3608,1
    - Dst: bzero
      Src: /src/openvpn/src/openvpn/route.c:3632,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3662,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:3743,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:3751,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3763,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3773,1
    - Dst: freeifaddrs
      Src: /src/openvpn/src/openvpn/route.c:3801,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/route.c:3808,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:3810,1
    - Dst: LLADDR
      Src: /src/openvpn/src/openvpn/route.c:3796,1
    - Dst: getpid
      Src: /src/openvpn/src/openvpn/route.c:3623,1
    - Dst: NEXTADDR
      Src: /src/openvpn/src/openvpn/route.c:3654,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/route.c:3672,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/route.c:3674,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:3708,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/route.c:3732,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3735,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3739,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3745,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:3771,1
    CyclomaticComplexity: 65
    EdgeCount: 65
    ICount: 140
    argCount: 3
    argNames:
    - rgi
    - dest
    - ctx
    argTypes:
    - struct route_gateway_info*
    - in_addr_t
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3811
      start: 3605
    functionDepth: 0
    functionLinenumber: 3605
    functionLinenumberEnd: 3811
    functionName: get_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - socket
    - memcpy
    - msg
    - LLADDR
    - read
    - freeifaddrs
    - ADVANCE
    - strncmp
    - NEXTADDR
    - ntohl
    - bzero
    - gc_new
    - gc_free
    - getrtable
    - write
    - close
    - getifaddrs
    - strncpynt
    - CLEAR
    - getpid
    - ioctl
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway(struct route_gateway_info *rgi, in_addr_t
      dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:3135,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/route.c:3137,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/route.c:3160,1
    - Dst: ConvertInterfaceAliasToLuid
      Src: /src/openvpn/src/openvpn/route.c:3163,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/route.c:3156,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/route.c:3163,1
    - Dst: CreateIpForwardEntry2
      Src: /src/openvpn/src/openvpn/route.c:3174,1
    - Dst: DeleteIpForwardEntry2
      Src: /src/openvpn/src/openvpn/route.c:3178,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3187,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/route.c:3188,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3198,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3193,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:3201,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 51
    argCount: 3
    argNames:
    - add
    - r
    - tt
    argTypes:
    - bool
    - struct route_ipv6*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3203
      start: 3129
    functionDepth: 0
    functionLinenumber: 3129
    functionLinenumberEnd: 3203
    functionName: route_ipv6_ipapi
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - CreateIpForwardEntry2
    - msg
    - gc_malloc
    - wide_string
    - inet_pton
    - gc_new
    - strerror_win32
    - gc_free
    - DeleteIpForwardEntry2
    - ConvertInterfaceAliasToLuid
    - strlen
    linkageType: ''
    returnType: int
    signature: 'static int route_ipv6_ipapi(const bool add, const struct route_ipv6
      *r, const struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: del_route3
      Src: /src/openvpn/src/openvpn/route.c:994,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 7
    argCount: 7
    argNames:
    - rb
    - gateway
    - tt
    - flags
    - rgi
    - es
    - ctx
    argTypes:
    - struct route_bypass*
    - in_addr_t
    - struct tuntap*
    - unsigned int
    - struct route_gateway_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1004
      start: 980
    functionDepth: 0
    functionLinenumber: 980
    functionLinenumberEnd: 1004
    functionName: del_bypass_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - del_route3
    linkageType: ''
    returnType: void
    signature: 'static void del_bypass_routes(struct route_bypass *rb, in_addr_t gateway,
      const struct tuntap *tt, unsigned int flags, const struct route_gateway_info
      *rgi, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - rb
    - flags
    argTypes:
    - struct route_bypass*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4228
      start: 4225
    functionDepth: 0
    functionLinenumber: 4225
    functionLinenumberEnd: 4228
    functionName: get_bypass_addresses
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void get_bypass_addresses(struct route_bypass *rb, const unsigned
      int flags) /* PLATFORM-SPECIFIC */ '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1020,1
    - Dst: add_route3
      Src: /src/openvpn/src/openvpn/route.c:1059,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1031,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:1042,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:1047,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:1069,1
    - Dst: add_bypass_routes
      Src: /src/openvpn/src/openvpn/route.c:1075,1
    - Dst: add_route3
      Src: /src/openvpn/src/openvpn/route.c:1083,1
    - Dst: add_route3
      Src: /src/openvpn/src/openvpn/route.c:1087,1
    - Dst: del_route3
      Src: /src/openvpn/src/openvpn/route.c:1096,1
    - Dst: add_route3
      Src: /src/openvpn/src/openvpn/route.c:1101,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 67
    argCount: 5
    argNames:
    - rl
    - tt
    - flags
    - es
    - ctx
    argTypes:
    - struct route_list*
    - struct tuntap*
    - unsigned int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1111
      start: 1006
    functionDepth: 0
    functionLinenumber: 1006
    functionLinenumberEnd: 1111
    functionName: redirect_default_route_to_vpn
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - del_route3
    - add_route3
    - dmsg
    - msg
    - add_bypass_routes
    linkageType: ''
    returnType: bool
    signature: 'static bool redirect_default_route_to_vpn(struct route_list *rl, const
      struct tuntap *tt, unsigned int flags, const struct env_set *es, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/route.c:3236,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/route.c:3241,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3248,1
    - Dst: do_route_service
      Src: /src/openvpn/src/openvpn/route.c:3245,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 3
    argNames:
    - add
    - r
    - tt
    argTypes:
    - bool
    - struct route_ipv6*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3253
      start: 3206
    functionDepth: 0
    functionLinenumber: 3206
    functionLinenumberEnd: 3253
    functionName: do_route_ipv6_service
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - strncpy
    - do_route_service
    - msg
    - inet_pton
    linkageType: ''
    returnType: int
    signature: 'static int do_route_ipv6_service(const bool add, const struct route_ipv6
      *r, const struct tuntap *tt) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:328,1
    - Dst: get_special_addr
      Src: /src/openvpn/src/openvpn/route.c:342,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/route.c:350,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:333,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:348,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/route.c:351,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/route.c:356,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:369,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/route.c:371,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:390,1
    - Dst: get_special_addr
      Src: /src/openvpn/src/openvpn/route.c:392,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/route.c:426,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:447,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:429,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:416,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/route.c:394,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:424,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 64
    argCount: 4
    argNames:
    - r
    - network_list
    - ro
    - rl
    argTypes:
    - struct route_ipv4*
    - struct addrinfo**
    - struct route_option*
    - struct route_list*
    constantsTouched: []
    func_position:
      end: 450
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 450
    functionName: init_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - atoi
    - msg
    - get_special_addr
    - is_route_parm_defined
    - CLEAR
    - openvpn_getaddrinfo
    - getaddr
    - inet_ntop
    - htonl
    linkageType: ''
    returnType: bool
    signature: 'static bool init_route(struct route_ipv4 *r, struct addrinfo **network_list,
      const struct route_option *ro, const struct route_list *rl) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:1411,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:1416,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1414,1
    - Dst: route_string
      Src: /src/openvpn/src/openvpn/route.c:1414,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - r
    - level
    argTypes:
    - struct route_ipv4*
    - int
    constantsTouched: []
    func_position:
      end: 1417
      start: 1408
    functionDepth: 0
    functionLinenumber: 1408
    functionLinenumberEnd: 1417
    functionName: print_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - route_string
    - msg
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void print_route(const struct route_ipv4 *r, int level) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2648,1
    - Dst: test_route_helper
      Src: /src/openvpn/src/openvpn/route.c:2671,1
    - Dst: get_adapter_info_list
      Src: /src/openvpn/src/openvpn/route.c:2649,1
    - Dst: is_adapter_up
      Src: /src/openvpn/src/openvpn/route.c:2657,1
    - Dst: test_route_helper
      Src: /src/openvpn/src/openvpn/route.c:2676,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2681,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2689,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 21
    argCount: 2
    argNames:
    - rl
    - tt
    argTypes:
    - struct route_list*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 2691
      start: 2645
    functionDepth: 0
    functionLinenumber: 2645
    functionLinenumberEnd: 2691
    functionName: test_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - test_route_helper
    - is_adapter_up
    - gc_new
    - get_adapter_info_list
    - gc_free
    linkageType: ''
    returnType: bool
    signature: 'bool test_routes(const struct route_list *rl, const struct tuntap
      *tt) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:457,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:465,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/route.c:459,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:469,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/route.c:467,1
    - Dst: is_route_parm_defined
      Src: /src/openvpn/src/openvpn/route.c:480,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/route.c:482,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:485,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:503,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 29
    argCount: 3
    argNames:
    - r6
    - r6o
    - rl6
    argTypes:
    - struct route_ipv6*
    - struct route_ipv6_option*
    - struct route_ipv6_list*
    constantsTouched: []
    func_position:
      end: 506
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 506
    functionName: init_route_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - atoi
    - msg
    - inet_pton
    - is_route_parm_defined
    - CLEAR
    linkageType: ''
    returnType: bool
    signature: 'static bool init_route_ipv6(struct route_ipv6 *r6, const struct route_ipv6_option
      *r6o, const struct route_ipv6_list *rl6 ) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:1338,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1342,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1345,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1363,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:1403,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1349,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:1341,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:1349,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1358,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1376,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1401,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:1377,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1380,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:1375,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1377,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1394,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:1401,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1353,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:1353,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1370,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1368,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/route.c:1368,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:1370,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1384,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1389,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1399,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/route.c:1399,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 55
    argCount: 3
    argNames:
    - msglevel
    - rgi
    - rgi6
    argTypes:
    - int
    - struct route_gateway_info*
    - struct route_ipv6_gateway_info*
    constantsTouched: []
    func_position:
      end: 1404
      start: 1333
    functionDepth: 0
    functionLinenumber: 1333
    functionLinenumberEnd: 1404
    functionName: print_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - print_in_addr_t
    - msg
    - gc_new
    - format_hex_ex
    - print_in6_addr
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void print_default_gateway(const int msglevel, const struct route_gateway_info
      *rgi, const struct route_ipv6_gateway_info *rgi6) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print_route
      Src: /src/openvpn/src/openvpn/route.c:1425,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - rl
    - level
    argTypes:
    - struct route_list*
    - int
    constantsTouched: []
    func_position:
      end: 1427
      start: 1419
    functionDepth: 0
    functionLinenumber: 1419
    functionLinenumberEnd: 1427
    functionName: print_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - print_route
    linkageType: ''
    returnType: void
    signature: 'void print_routes(const struct route_list *rl, int level) '
  - BBCount: 23
    BranchProfiles: []
    Callsites:
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:1585,1
    - Dst: is_on_link
      Src: /src/openvpn/src/openvpn/route.c:1602,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/route.c:1613,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/route.c:1631,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1643,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1651,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/route.c:1637,1
    - Dst: is_on_link
      Src: /src/openvpn/src/openvpn/route.c:1653,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/route.c:1644,1
    - Dst: add_route_ipapi
      Src: /src/openvpn/src/openvpn/route.c:1682,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1688,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1710,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1806,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1819,1
    - Dst: net_ctx_reset
      Src: /src/openvpn/src/openvpn/route.c:1884,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1837,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/route.c:1881,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1771,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1812,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1727,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1761,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:1587,1
    - Dst: local_route
      Src: /src/openvpn/src/openvpn/route.c:1592,1
    - Dst: net_route_v4_add
      Src: /src/openvpn/src/openvpn/route.c:1613,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1659,1
    - Dst: add_route_service
      Src: /src/openvpn/src/openvpn/route.c:1664,1
    - Dst: netcmd_semaphore_release
      Src: /src/openvpn/src/openvpn/route.c:1677,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1686,1
    - Dst: netcmd_semaphore_lock
      Src: /src/openvpn/src/openvpn/route.c:1687,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1731,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1743,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1863,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1869,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:1582,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:1589,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1622,1
    - Dst: add_route_ipapi
      Src: /src/openvpn/src/openvpn/route.c:1668,1
    - Dst: netcmd_semaphore_lock
      Src: /src/openvpn/src/openvpn/route.c:1673,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1674,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/route.c:1697,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1701,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1730,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1747,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/route.c:1844,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1864,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1829,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1799,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:1882,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1713,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1836,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/route.c:1581,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1617,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/route.c:1635,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1656,1
    - Dst: netcmd_semaphore_release
      Src: /src/openvpn/src/openvpn/route.c:1691,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1754,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1755,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1767,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1778,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1779,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1845,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:1848,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1791,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1849,1
    - Dst: is_on_link
      Src: /src/openvpn/src/openvpn/route.c:1795,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1785,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:1825,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1857,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:1737,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:1813,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 155
    argCount: 6
    argNames:
    - r
    - tt
    - flags
    - rgi
    - /* may be NULL */
    - es
    - ctx
    argTypes:
    - struct route_ipv4*
    - struct tuntap*
    - unsigned int
    - struct route_gateway_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1887
      start: 1565
    functionDepth: 0
    functionLinenumber: 1565
    functionLinenumberEnd: 1887
    functionName: add_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - add_route_ipapi
    - netcmd_semaphore_release
    - msg
    - management_android_control
    - is_on_link
    - netcmd_semaphore_lock
    - netmask_to_netbits2
    - argv_msg
    - gc_new
    - gc_free
    - openvpn_execve_check
    - argv_printf
    - print_in_addr_t
    - net_route_v4_add
    - argv_new
    - local_route
    - net_ctx_reset
    - get_win_sys_path
    - argv_free
    - snprintf
    - add_route_service
    - ASSERT
    - argv_printf_cat
    linkageType: ''
    returnType: bool
    signature: 'bool add_route(struct route_ipv4 *r, const struct tuntap *tt, unsigned
      int flags, const struct route_gateway_info *rgi, /* may be NULL */ const struct
      env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: test_route
      Src: /src/openvpn/src/openvpn/route.c:2627,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 6
    argNames:
    - ret
    - count
    - good
    - ambig
    - adapters
    - gateway
    argTypes:
    - bool*
    - int*
    - int*
    - int*
    - IP_ADAPTER_INFO*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 2640
      start: 2616
    functionDepth: 0
    functionLinenumber: 2616
    functionLinenumberEnd: 2640
    functionName: test_route_helper
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - test_route
    linkageType: ''
    returnType: void
    signature: 'static void test_route_helper(bool *ret, int *count, int *good, int
      *ambig, const IP_ADAPTER_INFO *adapters, const in_addr_t gateway) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - rb
    - a
    argTypes:
    - struct route_bypass*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 126
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 126
    functionName: add_bypass_address
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool add_bypass_address(struct route_bypass *rb, const in_addr_t
      a) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:3309,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3313,1
    - Dst: format_route_entry
      Src: /src/openvpn/src/openvpn/route.c:3318,1
    - Dst: get_windows_routing_table
      Src: /src/openvpn/src/openvpn/route.c:3311,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3318,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:3321,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - msglev
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 3322
      start: 3306
    functionDepth: 0
    functionLinenumber: 3306
    functionLinenumberEnd: 3322
    functionName: show_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - get_windows_routing_table
    - format_route_entry
    - msg
    - gc_new
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void show_routes(int msglev) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/route.c:132,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 135
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 135
    functionName: new_route_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct route_option_list*
    signature: 'struct route_option_list *new_route_option_list(struct gc_arena *a) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3515,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/route.c:3520,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/route.c:3525,1
    - Dst: net_route_v6_best_gw
      Src: /src/openvpn/src/openvpn/route.c:3517,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 3
    argNames:
    - rgi6
    - dest
    - ctx
    argTypes:
    - struct route_ipv6_gateway_info*
    - struct in6_addr*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3541
      start: 3509
    functionDepth: 0
    functionLinenumber: 3509
    functionLinenumberEnd: 3541
    functionName: get_default_gateway_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - strlen
    - IN6_IS_ADDR_UNSPECIFIED
    - CLEAR
    - net_route_v6_best_gw
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,
      const struct in6_addr *dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:166,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 3
    argCount: 2
    argNames:
    - src
    - a
    argTypes:
    - struct route_ipv6_option_list*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 169
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 169
    functionName: clone_route_ipv6_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    linkageType: ''
    returnType: struct route_ipv6_option_list*
    signature: 'struct route_ipv6_option_list *clone_route_ipv6_option_list(const
      struct route_ipv6_option_list *src, struct gc_arena *a) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1471,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:1471,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:1480,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1481,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:1476,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:1468,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:1473,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:1482,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:1463,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1470,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:1467,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:1466,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/route.c:1473,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:1473,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/route.c:1482,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/route.c:1476,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:1485,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1475,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:1476,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 24
    argCount: 3
    argNames:
    - es
    - r6
    - i
    argTypes:
    - struct env_set*
    - struct route_ipv6*
    - int
    constantsTouched: []
    func_position:
      end: 1486
      start: 1460
    functionDepth: 0
    functionLinenumber: 1460
    functionLinenumberEnd: 1486
    functionName: setenv_route_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - gc_new
    - print_in6_addr
    - setenv_str
    - gc_free
    - setenv_int
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void setenv_route_ipv6(struct env_set *es, const struct route_ipv6
      *r6, int i) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 3
    argNames:
    - dest
    - src
    - a
    argTypes:
    - struct route_option_list*
    - struct route_option_list*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 176
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 176
    functionName: copy_route_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void copy_route_option_list(struct route_option_list *dest, const
      struct route_option_list *src, struct gc_arena *a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_route_ipv6
      Src: /src/openvpn/src/openvpn/route.c:1494,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 2
    argNames:
    - es
    - rl6
    argTypes:
    - struct env_set*
    - struct route_ipv6_list*
    constantsTouched: []
    func_position:
      end: 1496
      start: 1487
    functionDepth: 0
    functionLinenumber: 1487
    functionLinenumberEnd: 1496
    functionName: setenv_routes_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - setenv_route_ipv6
    linkageType: ''
    returnType: void
    signature: 'void setenv_routes_ipv6(struct env_set *es, const struct route_ipv6_list
      *rl6) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/route.c:157,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 3
    argCount: 2
    argNames:
    - src
    - a
    argTypes:
    - struct route_option_list*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 160
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 160
    functionName: clone_route_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    linkageType: ''
    returnType: struct route_option_list*
    signature: 'struct route_option_list *clone_route_option_list(const struct route_option_list
      *src, struct gc_arena *a) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:1432,1
    - Dst: setenv_route_addr
      Src: /src/openvpn/src/openvpn/route.c:1437,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/route.c:1441,1
    - Dst: setenv_route_addr
      Src: /src/openvpn/src/openvpn/route.c:1435,1
    - Dst: setenv_route_addr
      Src: /src/openvpn/src/openvpn/route.c:1436,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/route.c:1442,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/route.c:1443,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/route.c:1443,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:1446,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 3
    argNames:
    - es
    - r
    - i
    argTypes:
    - struct env_set*
    - struct route_ipv4*
    - int
    constantsTouched: []
    func_position:
      end: 1447
      start: 1429
    functionDepth: 0
    functionLinenumber: 1429
    functionLinenumberEnd: 1447
    functionName: setenv_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - gc_new
    - gc_free
    - setenv_int
    - alloc_buf_gc
    - setenv_route_addr
    linkageType: ''
    returnType: void
    signature: 'static void setenv_route(struct env_set *es, const struct route_ipv4
      *r, int i) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_route
      Src: /src/openvpn/src/openvpn/route.c:1456,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 2
    argNames:
    - es
    - rl
    argTypes:
    - struct env_set*
    - struct route_list*
    constantsTouched: []
    func_position:
      end: 1458
      start: 1449
    functionDepth: 0
    functionLinenumber: 1449
    functionLinenumberEnd: 1458
    functionName: setenv_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - setenv_route
    linkageType: ''
    returnType: void
    signature: 'void setenv_routes(struct env_set *es, const struct route_list *rl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/route.c:141,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 144
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 144
    functionName: new_route_ipv6_option_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct route_ipv6_option_list*
    signature: 'struct route_ipv6_option_list *new_route_ipv6_option_list(struct gc_arena
      *a) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2937,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:2946,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2945,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:2947,1
    - Dst: windows_route_find_if_index
      Src: /src/openvpn/src/openvpn/route.c:2940,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:2949,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2963,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2964,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2965,1
    - Dst: CreateIpForwardEntry
      Src: /src/openvpn/src/openvpn/route.c:2968,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2992,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3014,1
    - Dst: CreateIpForwardEntry
      Src: /src/openvpn/src/openvpn/route.c:2989,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:3022,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/route.c:3015,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 62
    argCount: 3
    argNames:
    - r
    - tt
    - adapter_index
    argTypes:
    - struct route_ipv4*
    - struct tuntap*
    - DWORD
    constantsTouched: []
    func_position:
      end: 3024
      start: 2934
    functionDepth: 0
    functionLinenumber: 2934
    functionLinenumberEnd: 3024
    functionName: add_route_ipapi
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - print_in_addr_t
    - CreateIpForwardEntry
    - gc_new
    - strerror_win32
    - CLEAR
    - gc_free
    - windows_route_find_if_index
    - htonl
    linkageType: ''
    returnType: int
    signature: 'static int add_route_ipapi(const struct route_ipv4 *r, const struct
      tuntap *tt, DWORD adapter_index) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - option
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1305
      start: 1294
    functionDepth: 0
    functionLinenumber: 1294
    functionLinenumberEnd: 1305
    functionName: show_opt
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *show_opt(const char *option) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetIpForwardTable
      Src: /src/openvpn/src/openvpn/route.c:2586,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/route.c:2594,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/route.c:2589,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2593,1
    - Dst: GetIpForwardTable
      Src: /src/openvpn/src/openvpn/route.c:2590,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2600
      start: 2579
    functionDepth: 0
    functionLinenumber: 2579
    functionLinenumberEnd: 2600
    functionName: get_windows_routing_table
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - strerror_win32
    - gc_malloc
    - GetIpForwardTable
    linkageType: ''
    returnType: MIB_IPFORWARDTABLE*
    signature: 'static const MIB_IPFORWARDTABLE *get_windows_routing_table(struct
      gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: adapter_index_of_ip
      Src: /src/openvpn/src/openvpn/route.c:2608,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 3
    argNames:
    - adapters
    - gateway
    - index
    argTypes:
    - IP_ADAPTER_INFO*
    - in_addr_t
    - DWORD*
    constantsTouched: []
    func_position:
      end: 2614
      start: 2602
    functionDepth: 0
    functionLinenumber: 2602
    functionLinenumberEnd: 2614
    functionName: test_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - adapter_index_of_ip
    linkageType: ''
    returnType: int
    signature: 'static int test_route(const IP_ADAPTER_INFO *adapters, const in_addr_t
      gateway, DWORD *index) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1310,1
    - Dst: show_opt
      Src: /src/openvpn/src/openvpn/route.c:1312,1
    - Dst: show_opt
      Src: /src/openvpn/src/openvpn/route.c:1314,1
    - Dst: show_opt
      Src: /src/openvpn/src/openvpn/route.c:1313,1
    - Dst: show_opt
      Src: /src/openvpn/src/openvpn/route.c:1311,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - ro
    - level
    argTypes:
    - struct route_option*
    - int
    constantsTouched: []
    func_position:
      end: 1315
      start: 1307
    functionDepth: 0
    functionLinenumber: 1307
    functionLinenumberEnd: 1315
    functionName: print_route_option
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - show_opt
    linkageType: ''
    returnType: void
    signature: 'static void print_route_option(const struct route_option *ro, int
      level) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 23
    argCount: 4
    argNames:
    - network
    - netmask
    - gateway
    - rgi
    argTypes:
    - in_addr_t
    - in_addr_t
    - in_addr_t
    - struct route_gateway_info*
    constantsTouched: []
    func_position:
      end: 1553
      start: 1521
    functionDepth: 0
    functionLinenumber: 1521
    functionLinenumberEnd: 1553
    functionName: local_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int local_route(in_addr_t network, in_addr_t netmask, in_addr_t
      gateway, const struct route_gateway_info *rgi) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2888,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2889,1
    - Dst: get_best_route
      Src: /src/openvpn/src/openvpn/route.c:2901,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2900,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2892,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2908,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:2910,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:2912,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2913,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/route.c:2924,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2930,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 23
    argCount: 3
    argNames:
    - rgi6
    - dest
    - ctx
    argTypes:
    - struct route_ipv6_gateway_info*
    - struct in6_addr*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2931
      start: 2884
    functionDepth: 0
    functionLinenumber: 2884
    functionLinenumberEnd: 2931
    functionName: get_default_gateway_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - get_best_route
    - msg
    - gc_new
    - print_in6_addr
    - CLEAR
    - gc_free
    - IN6_IS_ADDR_UNSPECIFIED
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,
      const struct in6_addr *dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2786,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/route.c:2794,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2798,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:2792,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2788,1
    - Dst: get_best_route
      Src: /src/openvpn/src/openvpn/route.c:2799,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:2806,1
    - Dst: get_adapter_info_list
      Src: /src/openvpn/src/openvpn/route.c:2815,1
    - Dst: get_adapter
      Src: /src/openvpn/src/openvpn/route.c:2816,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/route.c:2819,1
    - Dst: inet_addr
      Src: /src/openvpn/src/openvpn/route.c:2823,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2832,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:2826,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 3
    argNames:
    - rgi
    - dest
    - ctx
    argTypes:
    - struct route_gateway_info*
    - in_addr_t
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2833
      start: 2783
    functionDepth: 0
    functionLinenumber: 2783
    functionLinenumberEnd: 2833
    functionName: get_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - get_best_route
    - memcpy
    - inet_addr
    - get_adapter
    - ntohl
    - gc_new
    - get_adapter_info_list
    - CLEAR
    - gc_free
    - htonl
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway(struct route_gateway_info *rgi, in_addr_t
      dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3990,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/route.c:3992,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:4003,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:3995,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:4001,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/route.c:4013,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/route.c:4014,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/route.c:4018,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/route.c:4020,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/route.c:4032,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/route.c:4034,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/route.c:4054,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 49
    argCount: 3
    argNames:
    - rgi
    - dest
    - ctx
    argTypes:
    - struct route_gateway_info*
    - in_addr_t
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 4055
      start: 3987
    functionDepth: 0
    functionLinenumber: 3987
    functionLinenumberEnd: 4055
    functionName: get_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - socket
    - msg
    - ioctl
    - ntohl
    - CLEAR
    - malloc
    - free
    - strncpy
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway(struct route_gateway_info *rgi, in_addr_t
      dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:4094,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - rgi
    - dest
    - ctx
    argTypes:
    - struct route_gateway_info*
    - in_addr_t
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 4095
      start: 4091
    functionDepth: 0
    functionLinenumber: 4091
    functionLinenumberEnd: 4095
    functionName: get_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway(struct route_gateway_info *rgi, in_addr_t
      dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2838,1
    - Dst: get_adapter_info_list
      Src: /src/openvpn/src/openvpn/route.c:2841,1
    - Dst: get_tun_adapter
      Src: /src/openvpn/src/openvpn/route.c:2842,1
    - Dst: test_route
      Src: /src/openvpn/src/openvpn/route.c:2854,1
    - Dst: is_ip_in_adapter_subnet
      Src: /src/openvpn/src/openvpn/route.c:2846,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2859,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2860,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2865,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2866,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/route.c:2870,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2875,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 23
    argCount: 2
    argNames:
    - r
    - tt
    argTypes:
    - struct route_ipv4*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 2877
      start: 2835
    functionDepth: 0
    functionLinenumber: 2835
    functionLinenumberEnd: 2877
    functionName: windows_route_find_if_index
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - print_in_addr_t
    - gc_new
    - get_adapter_info_list
    - test_route
    - gc_free
    - is_ip_in_adapter_subnet
    - get_tun_adapter
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD windows_route_find_if_index(const struct route_ipv4 *r,
      const struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:4062,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 3
    argNames:
    - rgi6
    - dest
    - ctx
    argTypes:
    - struct route_ipv6_gateway_info*
    - struct in6_addr*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 4063
      start: 4057
    functionDepth: 0
    functionLinenumber: 4057
    functionLinenumberEnd: 4063
    functionName: get_default_gateway_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,
      const struct in6_addr *dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:4100,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:4101,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 3
    argNames:
    - rgi6
    - dest
    - ctx
    argTypes:
    - struct route_ipv6_gateway_info*
    - struct in6_addr*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 4102
      start: 4096
    functionDepth: 0
    functionLinenumber: 4096
    functionLinenumberEnd: 4102
    functionName: get_default_gateway_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,
      const struct in6_addr *dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:951,1
    - Dst: delete_route
      Src: /src/openvpn/src/openvpn/route.c:956,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 8
    argNames:
    - network
    - netmask
    - gateway
    - tt
    - flags
    - rgi
    - es
    - ctx
    argTypes:
    - in_addr_t
    - in_addr_t
    - in_addr_t
    - struct tuntap*
    - unsigned int
    - struct route_gateway_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 957
      start: 940
    functionDepth: 0
    functionLinenumber: 940
    functionLinenumberEnd: 957
    functionName: del_route3
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - CLEAR
    - delete_route
    linkageType: ''
    returnType: void
    signature: 'static void del_route3(in_addr_t network, in_addr_t netmask, in_addr_t
      gateway, const struct tuntap *tt, unsigned int flags, const struct route_gateway_info
      *rgi, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2235,1
    - Dst: del_route_ipapi
      Src: /src/openvpn/src/openvpn/route.c:2251,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2247,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/route.c:2236,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2257,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2286,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2290,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2297,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2301,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2308,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2351,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2344,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2355,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2377,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/route.c:2203,1
    - Dst: net_route_v4_del
      Src: /src/openvpn/src/openvpn/route.c:2228,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/route.c:2228,1
    - Dst: netcmd_semaphore_release
      Src: /src/openvpn/src/openvpn/route.c:2258,1
    - Dst: netcmd_semaphore_lock
      Src: /src/openvpn/src/openvpn/route.c:2256,1
    - Dst: del_route_ipapi
      Src: /src/openvpn/src/openvpn/route.c:2262,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2268,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2330,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2334,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2341,1
    - Dst: net_ctx_reset
      Src: /src/openvpn/src/openvpn/route.c:2379,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2202,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2211,1
    - Dst: local_route
      Src: /src/openvpn/src/openvpn/route.c:2215,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2231,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2242,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2263,1
    - Dst: netcmd_semaphore_release
      Src: /src/openvpn/src/openvpn/route.c:2269,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2279,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2285,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2296,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/route.c:2376,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2314,1
    - Dst: is_on_link
      Src: /src/openvpn/src/openvpn/route.c:2312,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/route.c:2350,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2322,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2361,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2208,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:2206,1
    - Dst: del_route_service
      Src: /src/openvpn/src/openvpn/route.c:2246,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2252,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2266,1
    - Dst: netcmd_semaphore_lock
      Src: /src/openvpn/src/openvpn/route.c:2267,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/route.c:2274,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2329,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2340,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2367,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2371,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2368,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2354,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2307,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 100
    argCount: 6
    argNames:
    - r
    - tt
    - flags
    - rgi
    - es
    - ctx
    argTypes:
    - struct route_ipv4*
    - struct tuntap*
    - unsigned int
    - struct route_gateway_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2380
      start: 2176
    functionDepth: 0
    functionLinenumber: 2176
    functionLinenumberEnd: 2380
    functionName: delete_route
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - netcmd_semaphore_release
    - msg
    - is_on_link
    - netcmd_semaphore_lock
    - net_route_v4_del
    - del_route_service
    - netmask_to_netbits2
    - argv_msg
    - gc_new
    - gc_free
    - openvpn_execve_check
    - argv_printf
    - print_in_addr_t
    - argv_new
    - local_route
    - del_route_ipapi
    - net_ctx_reset
    - get_win_sys_path
    - argv_free
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void delete_route(struct route_ipv4 *r, const struct tuntap
      *tt, unsigned int flags, const struct route_gateway_info *rgi, const struct
      env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: add_route3
      Src: /src/openvpn/src/openvpn/route.c:973,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 8
    argCount: 7
    argNames:
    - rb
    - gateway
    - tt
    - flags
    - rgi
    - es
    - ctx
    argTypes:
    - struct route_bypass*
    - in_addr_t
    - struct tuntap*
    - unsigned int
    - struct route_gateway_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 978
      start: 959
    functionDepth: 0
    functionLinenumber: 959
    functionLinenumberEnd: 978
    functionName: add_bypass_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - add_route3
    linkageType: ''
    returnType: bool
    signature: 'static bool add_bypass_routes(struct route_bypass *rb, in_addr_t gateway,
      const struct tuntap *tt, unsigned int flags, const struct route_gateway_info
      *rgi, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: net_route_v6_del
      Src: /src/openvpn/src/openvpn/route.c:2453,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2481,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2480,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2496,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2500,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2514,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2531,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2536,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2553,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2560,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2567,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:2421,1
    - Dst: IN6_IS_ADDR_LINKLOCAL
      Src: /src/openvpn/src/openvpn/route.c:2435,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/route.c:2437,1
    - Dst: route_ipv6_ipapi
      Src: /src/openvpn/src/openvpn/route.c:2468,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2457,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2522,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2527,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2543,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2547,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2563,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/route.c:2566,1
    - Dst: net_ctx_reset
      Src: /src/openvpn/src/openvpn/route.c:2569,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2559,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/route.c:2419,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/route.c:2437,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2444,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2485,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2474,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2499,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2504,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2517,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2518,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2535,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:2418,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:2423,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/route.c:2438,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/route.c:2439,1
    - Dst: del_route_ipv6_service
      Src: /src/openvpn/src/openvpn/route.c:2464,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2492,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2510,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2526,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2540,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2544,1
    CyclomaticComplexity: 43
    EdgeCount: 43
    ICount: 96
    argCount: 4
    argNames:
    - r6
    - tt
    - es
    - ctx
    argTypes:
    - struct route_ipv6*
    - struct tuntap*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2570
      start: 2382
    functionDepth: 0
    functionLinenumber: 2382
    functionLinenumberEnd: 2570
    functionName: delete_route_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - net_ctx_reset
    - argv_msg
    - route_ipv6_ipapi
    - argv_printf
    - msg
    - snprintf
    - del_route_ipv6_service
    - gc_malloc
    - argv_free
    - IN6_IS_ADDR_LINKLOCAL
    - gc_new
    - print_in6_addr
    - gc_free
    - argv_new
    - net_route_v6_del
    - strlen
    - argv_printf_cat
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'void delete_route_ipv6(const struct route_ipv6 *r6, const struct tuntap
      *tt, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: add_bypass_address
      Src: /src/openvpn/src/openvpn/route.c:600,1
    - Dst: add_block_local_item
      Src: /src/openvpn/src/openvpn/route.c:604,1
    - Dst: add_block_local_item
      Src: /src/openvpn/src/openvpn/route.c:614,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 1
    argNames:
    - rl
    argTypes:
    - struct route_list*
    constantsTouched: []
    func_position:
      end: 617
      start: 595
    functionDepth: 0
    functionLinenumber: 595
    functionLinenumberEnd: 617
    functionName: add_block_local_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - add_bypass_address
    - add_block_local_item
    linkageType: ''
    returnType: void
    signature: 'static void add_block_local_routes(struct route_list *rl) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: del_route3
      Src: /src/openvpn/src/openvpn/route.c:1124,1
    - Dst: del_route3
      Src: /src/openvpn/src/openvpn/route.c:1144,1
    - Dst: del_bypass_routes
      Src: /src/openvpn/src/openvpn/route.c:1136,1
    - Dst: del_route3
      Src: /src/openvpn/src/openvpn/route.c:1166,1
    - Dst: del_route3
      Src: /src/openvpn/src/openvpn/route.c:1154,1
    - Dst: add_route3
      Src: /src/openvpn/src/openvpn/route.c:1177,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 25
    argCount: 5
    argNames:
    - rl
    - tt
    - flags
    - es
    - ctx
    argTypes:
    - struct route_list*
    - struct tuntap*
    - unsigned int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1185
      start: 1113
    functionDepth: 0
    functionLinenumber: 1113
    functionLinenumberEnd: 1185
    functionName: undo_redirect_default_route_to_vpn
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - del_route3
    - del_bypass_routes
    - add_route3
    linkageType: ''
    returnType: void
    signature: 'static void undo_redirect_default_route_to_vpn(struct route_list *rl,
      const struct tuntap *tt, unsigned int flags, const struct env_set *es, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - r6
    argTypes:
    - struct route_ipv6*
    constantsTouched: []
    func_position:
      end: 1911
      start: 1890
    functionDepth: 0
    functionLinenumber: 1890
    functionLinenumberEnd: 1911
    functionName: route_ipv6_clear_host_bits
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void route_ipv6_clear_host_bits( struct route_ipv6 *r6 ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: do_route_ipv6_service
      Src: /src/openvpn/src/openvpn/route.c:3272,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - r
    - tt
    argTypes:
    - struct route_ipv6*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3273
      start: 3269
    functionDepth: 0
    functionLinenumber: 3269
    functionLinenumberEnd: 3273
    functionName: add_route_ipv6_service
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - do_route_ipv6_service
    linkageType: ''
    returnType: int
    signature: 'static int add_route_ipv6_service(const struct route_ipv6 *r, const
      struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - rl
    argTypes:
    - struct route_list*
    constantsTouched: []
    func_position:
      end: 627
      start: 619
    functionDepth: 0
    functionLinenumber: 619
    functionLinenumberEnd: 627
    functionName: block_local_needed
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool block_local_needed(const struct route_list *rl) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: redirect_default_route_to_vpn
      Src: /src/openvpn/src/openvpn/route.c:1192,1
    - Dst: add_route
      Src: /src/openvpn/src/openvpn/route.c:1224,1
    - Dst: delete_route
      Src: /src/openvpn/src/openvpn/route.c:1222,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1199,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/route.c:1208,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1234,1
    - Dst: delete_route_ipv6
      Src: /src/openvpn/src/openvpn/route.c:1244,1
    - Dst: add_route_ipv6
      Src: /src/openvpn/src/openvpn/route.c:1246,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 40
    argCount: 6
    argNames:
    - rl
    - rl6
    - tt
    - flags
    - es
    - ctx
    argTypes:
    - struct route_list*
    - struct route_ipv6_list*
    - struct tuntap*
    - unsigned int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1252
      start: 1187
    functionDepth: 0
    functionLinenumber: 1187
    functionLinenumberEnd: 1252
    functionName: add_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - redirect_default_route_to_vpn
    - management_set_state
    - msg
    - delete_route
    - add_route_ipv6
    - delete_route_ipv6
    - add_route
    linkageType: ''
    returnType: bool
    signature: 'bool add_routes(struct route_list *rl, struct route_ipv6_list *rl6,
      const struct tuntap *tt, unsigned int flags, const struct env_set *es, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:1943,1
    - Dst: net_route_v6_add
      Src: /src/openvpn/src/openvpn/route.c:2007,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/route.c:1989,1
    - Dst: route_ipv6_ipapi
      Src: /src/openvpn/src/openvpn/route.c:2036,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2051,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2060,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2063,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2085,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2091,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2104,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2137,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:2169,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2156,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2115,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:1927,1
    - Dst: route_ipv6_clear_host_bits
      Src: /src/openvpn/src/openvpn/route.c:1941,1
    - Dst: IN6_IS_ADDR_LINKLOCAL
      Src: /src/openvpn/src/openvpn/route.c:1954,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/route.c:1956,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/route.c:1958,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2012,1
    - Dst: add_route_ipv6_service
      Src: /src/openvpn/src/openvpn/route.c:2032,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2070,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2084,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2097,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2136,1
    - Dst: net_ctx_reset
      Src: /src/openvpn/src/openvpn/route.c:2171,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2127,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2144,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/route.c:1926,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/route.c:1956,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1964,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1967,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/route.c:2026,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2077,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2101,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2111,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2126,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2133,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/route.c:2150,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/route.c:2168,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/route.c:1942,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/route.c:1934,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/route.c:1957,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1991,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:2017,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/route.c:2024,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2064,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/route.c:2081,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2105,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2116,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/route.c:2122,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/route.c:2151,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 126
    argCount: 5
    argNames:
    - r6
    - tt
    - flags
    - es
    - ctx
    argTypes:
    - struct route_ipv6*
    - struct tuntap*
    - unsigned int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2174
      start: 1913
    functionDepth: 0
    functionLinenumber: 1913
    functionLinenumberEnd: 2174
    functionName: add_route_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - add_route_ipv6_service
    - route_ipv6_ipapi
    - msg
    - management_android_control
    - IN6_IS_ADDR_UNSPECIFIED
    - route_ipv6_clear_host_bits
    - argv_msg
    - gc_new
    - print_in6_addr
    - gc_free
    - openvpn_execve_check
    - argv_printf
    - IN6_IS_ADDR_LINKLOCAL
    - argv_new
    - strlen
    - net_ctx_reset
    - net_route_v6_add
    - argv_free
    - snprintf
    - gc_malloc
    - argv_printf_cat
    linkageType: ''
    returnType: bool
    signature: 'bool add_route_ipv6(struct route_ipv6 *r6, const struct tuntap *tt,
      unsigned int flags, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: do_route_ipv4_service
      Src: /src/openvpn/src/openvpn/route.c:3265,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - r
    - tt
    argTypes:
    - struct route_ipv4*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3266
      start: 3262
    functionDepth: 0
    functionLinenumber: 3262
    functionLinenumberEnd: 3266
    functionName: del_route_service
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - do_route_ipv4_service
    linkageType: ''
    returnType: bool
    signature: 'static bool del_route_service(const struct route_ipv4 *r, const struct
      tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3337,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/route.c:3341,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - rgi
    - dest
    - ctx
    argTypes:
    - struct route_gateway_info*
    - in_addr_t
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3348
      start: 3326
    functionDepth: 0
    functionLinenumber: 3326
    functionLinenumberEnd: 3348
    functionName: get_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - strcpy
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway(struct route_gateway_info *rgi, in_addr_t
      dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:88,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/route.c:94,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:92,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:96,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - rb
    argTypes:
    - struct route_bypass*
    constantsTouched: []
    func_position:
      end: 97
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 97
    functionName: print_bypass_addresses
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void print_bypass_addresses(const struct route_bypass *rb) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:544,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:545,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - rl
    argTypes:
    - struct route_list*
    constantsTouched: []
    func_position:
      end: 546
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 546
    functionName: clear_route_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - gc_free
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void clear_route_list(struct route_list *rl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:3356,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/route.c:3359,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/route.c:3362,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/route.c:3359,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 3
    argNames:
    - rgi6
    - dest
    - ctx
    argTypes:
    - struct route_ipv6_gateway_info*
    - struct in6_addr*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3363
      start: 3350
    functionDepth: 0
    functionLinenumber: 3350
    functionLinenumberEnd: 3363
    functionName: get_default_gateway_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - strcpy
    - CLEAR
    - ASSERT
    - inet_pton
    linkageType: ''
    returnType: void
    signature: 'void get_default_gateway_ipv6(struct route_ipv6_gateway_info *rgi6,
      const struct in6_addr *dest, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:551,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/route.c:552,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - rl6
    argTypes:
    - struct route_ipv6_list*
    constantsTouched: []
    func_position:
      end: 553
      start: 548
    functionDepth: 0
    functionLinenumber: 548
    functionLinenumberEnd: 553
    functionName: clear_route_ipv6_list
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - gc_free
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void clear_route_ipv6_list(struct route_ipv6_list *rl6) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/route.c:1324,1
    - Dst: print_route_option
      Src: /src/openvpn/src/openvpn/route.c:1329,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - rol
    - level
    argTypes:
    - struct route_option_list*
    - int
    constantsTouched: []
    func_position:
      end: 1331
      start: 1317
    functionDepth: 0
    functionLinenumber: 1317
    functionLinenumberEnd: 1331
    functionName: print_route_options
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - msg
    - print_route_option
    linkageType: ''
    returnType: void
    signature: 'void print_route_options(const struct route_option_list *rol, int
      level) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/route.c:4190,1
    - Dst: get_per_adapter_info
      Src: /src/openvpn/src/openvpn/route.c:4205,1
    - Dst: get_windows_routing_table
      Src: /src/openvpn/src/openvpn/route.c:4194,1
    - Dst: get_adapter_info
      Src: /src/openvpn/src/openvpn/route.c:4202,1
    - Dst: get_default_gateway_row
      Src: /src/openvpn/src/openvpn/route.c:4197,1
    - Dst: add_host_route_array
      Src: /src/openvpn/src/openvpn/route.c:4210,1
    - Dst: add_host_route_array
      Src: /src/openvpn/src/openvpn/route.c:4216,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/route.c:4220,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 17
    argCount: 2
    argNames:
    - rb
    - flags
    argTypes:
    - struct route_bypass*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4221
      start: 4187
    functionDepth: 0
    functionLinenumber: 4187
    functionLinenumberEnd: 4221
    functionName: get_bypass_addresses
    functionSourceFile: /src/openvpn/src/openvpn/route.c
    functionUses: []
    functionsReached:
    - get_adapter_info
    - get_windows_routing_table
    - add_host_route_array
    - gc_new
    - get_default_gateway_row
    - gc_free
    - get_per_adapter_info
    linkageType: ''
    returnType: void
    signature: 'static void get_bypass_addresses(struct route_bypass *rb, const unsigned
      int flags) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/base64.c:62,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/base64.c:100,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 48
    argCount: 3
    argNames:
    - data
    - size
    - str
    argTypes:
    - void*
    - int
    - char**
    constantsTouched: []
    func_position:
      end: 101
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 101
    functionName: openvpn_base64_encode
    functionSourceFile: /src/openvpn/src/openvpn/base64.c
    functionUses: []
    functionsReached:
    - strlen
    - malloc
    linkageType: ''
    returnType: int
    signature: 'int openvpn_base64_encode(const void *data, int size, char **str) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: pos
      Src: /src/openvpn/src/openvpn/base64.c:142,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 24
    argCount: 1
    argNames:
    - token
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 150
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 150
    functionName: token_decode
    functionSourceFile: /src/openvpn/src/openvpn/base64.c
    functionUses: []
    functionsReached:
    - pos
    linkageType: ''
    returnType: unsigned int
    signature: 'static unsigned int token_decode(const char *token) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 115
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 115
    functionName: pos
    functionSourceFile: /src/openvpn/src/openvpn/base64.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int pos(char c) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/base64.c:168,1
    - Dst: token_decode
      Src: /src/openvpn/src/openvpn/base64.c:170,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 40
    argCount: 3
    argNames:
    - str
    - data
    - size
    argTypes:
    - char*
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 199
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 199
    functionName: openvpn_base64_decode
    functionSourceFile: /src/openvpn/src/openvpn/base64.c
    functionUses: []
    functionsReached:
    - token_decode
    - strchr
    linkageType: ''
    returnType: int
    signature: 'int openvpn_base64_decode(const char *str, void *data, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sd_booted
      Src: /src/openvpn/src/openvpn/console_systemd.c:53,1
    - Dst: stat
      Src: /src/openvpn/src/openvpn/console_systemd.c:54,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 56
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 56
    functionName: check_systemd_running
    functionSourceFile: /src/openvpn/src/openvpn/console_systemd.c
    functionUses: []
    functionsReached:
    - sd_booted
    - stat
    linkageType: ''
    returnType: bool
    signature: 'static bool check_systemd_running(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: check_systemd_running
      Src: /src/openvpn/src/openvpn/console_systemd.c:106,1
    - Dst: get_console_input_systemd
      Src: /src/openvpn/src/openvpn/console_systemd.c:114,1
    - Dst: query_user_exec_builtin
      Src: /src/openvpn/src/openvpn/console_systemd.c:108,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 123
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 123
    functionName: query_user_exec_systemd
    functionSourceFile: /src/openvpn/src/openvpn/console_systemd.c
    functionUses: []
    functionsReached:
    - get_console_input_systemd
    - query_user_exec_builtin
    - check_systemd_running
    linkageType: ''
    returnType: bool
    signature: 'bool query_user_exec_systemd(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/console_systemd.c:63,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/console_systemd.c:74,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/console_systemd.c:73,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/console_systemd.c:65,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/console_systemd.c:70,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/console_systemd.c:75,1
    - Dst: openvpn_popen
      Src: /src/openvpn/src/openvpn/console_systemd.c:77,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/console_systemd.c:81,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/console_systemd.c:82,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/console_systemd.c:84,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/console_systemd.c:87,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/console_systemd.c:89,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 4
    argNames:
    - prompt
    - echo
    - input
    - capacity
    argTypes:
    - char*
    - bool
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 92
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 92
    functionName: get_console_input_systemd
    functionSourceFile: /src/openvpn/src/openvpn/console_systemd.c
    functionUses: []
    functionsReached:
    - openvpn_popen
    - argv_printf
    - argv_free
    - read
    - argv_new
    - chomp
    - memset
    - argv_printf_cat
    - close
    linkageType: ''
    returnType: bool
    signature: 'static bool get_console_input_systemd(const char *prompt, const bool
      echo, char *input, const int capacity) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ioctlsocket
      Src: /src/openvpn/src/openvpn/fdmisc.c:40,1
    - Dst: fcntl
      Src: /src/openvpn/src/openvpn/fdmisc.c:45,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 51
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 51
    functionName: set_nonblock_action
    functionSourceFile: /src/openvpn/src/openvpn/fdmisc.c
    functionUses: []
    functionsReached:
    - fcntl
    - ioctlsocket
    linkageType: ''
    returnType: bool
    signature: 'bool set_nonblock_action(socket_descriptor_t fd) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: set_cloexec_action
      Src: /src/openvpn/src/openvpn/fdmisc.c:80,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/fdmisc.c:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 84
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 84
    functionName: set_cloexec
    functionSourceFile: /src/openvpn/src/openvpn/fdmisc.c
    functionUses: []
    functionsReached:
    - msg
    - set_cloexec_action
    linkageType: ''
    returnType: void
    signature: 'void set_cloexec(socket_descriptor_t fd) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fcntl
      Src: /src/openvpn/src/openvpn/fdmisc.c:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - fd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 64
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 64
    functionName: set_cloexec_action
    functionSourceFile: /src/openvpn/src/openvpn/fdmisc.c
    functionUses: []
    functionsReached:
    - fcntl
    linkageType: ''
    returnType: bool
    signature: 'bool set_cloexec_action(socket_descriptor_t fd) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: set_nonblock_action
      Src: /src/openvpn/src/openvpn/fdmisc.c:70,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/fdmisc.c:72,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 74
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 74
    functionName: set_nonblock
    functionSourceFile: /src/openvpn/src/openvpn/fdmisc.c
    functionUses: []
    functionsReached:
    - msg
    - set_nonblock_action
    linkageType: ''
    returnType: void
    signature: 'void set_nonblock(socket_descriptor_t fd) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco_internal.h:42,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco_internal.h:43,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco_internal.h:47,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_internal.h:53,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco_internal.h:42,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 55
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 55
    functionName: dco_get_cipher
    functionSourceFile: /src/openvpn/src/openvpn/dco_internal.h
    functionUses: []
    functionsReached:
    - strcmp
    - msg
    linkageType: ''
    returnType: dco_cipher_t
    signature: 'static inline dco_cipher_t dco_get_cipher(const char *cipher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: crypto_init_lib
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void crypto_init_lib(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:230,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 232
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 232
    functionName: show_available_engines
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_engines(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:401,1
    - Dst: mbedtls_cipher_info_from_string
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:406,1
    - Dst: translate_cipher_name_from_openvpn
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:405,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 408
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 408
    functionName: cipher_get
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_info_from_string
    - ASSERT
    - translate_cipher_name_from_openvpn
    linkageType: ''
    returnType: mbedtls_cipher_info_t*
    signature: 'static const mbedtls_cipher_info_t *cipher_get(const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:441,1
    - Dst: mbedtls_cipher_info_get_name
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:447,1
    - Dst: translate_cipher_name_to_openvpn
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:447,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 448
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 448
    functionName: cipher_kt_name
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - translate_cipher_name_to_openvpn
    - cipher_get
    - mbedtls_cipher_info_get_name
    linkageType: ''
    returnType: char*
    signature: 'const char *cipher_kt_name(const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:466,1
    - Dst: mbedtls_cipher_info_get_iv_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:472,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 473
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 473
    functionName: cipher_kt_iv_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_get
    - mbedtls_cipher_info_get_iv_size
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_iv_size(const char *ciphername) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:571,1
    - Dst: mbedtls_cipher_info_get_key_bitlen
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:576,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:572,1
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:574,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:575,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:578,1
    - Dst: mbedtls_cipher_setup
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:578,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:580,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:583,1
    - Dst: mbedtls_cipher_setkey
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:583,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:590,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:585,1
    - Dst: mbedtls_cipher_info_get_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:588,1
    - Dst: mbedtls_cipher_set_padding_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:590,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:597,1
    - Dst: mbedtls_cipher_get_key_bitlen
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:597,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:592,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 4
    argNames:
    - ctx
    - key
    - ciphername
    - enc
    argTypes:
    - mbedtls_cipher_context_t*
    - uint8_t*
    - char*
    - crypto_operation_t
    constantsTouched: []
    func_position:
      end: 598
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 598
    functionName: cipher_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_setup
    - cipher_get
    - mbedtls_cipher_set_padding_mode
    - msg
    - mbed_ok
    - mbedtls_cipher_info_get_key_bitlen
    - CLEAR
    - ASSERT
    - mbedtls_cipher_info_get_mode
    - mbedtls_cipher_get_key_bitlen
    - mbedtls_cipher_setkey
    linkageType: ''
    returnType: void
    signature: 'void cipher_ctx_init(mbedtls_cipher_context_t *ctx, const uint8_t
      *key, const char *ciphername, crypto_operation_t enc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:698,1
    - Dst: mbedtls_cipher_update
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:698,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 5
    argNames:
    - ctx
    - dst
    - dst_len
    - src
    - src_len
    argTypes:
    - mbedtls_cipher_context_t*
    - uint8_t*
    - int*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 707
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 707
    functionName: cipher_ctx_update
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_ok
    - mbedtls_cipher_update
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_update(mbedtls_cipher_context_t *ctx, uint8_t *dst,
      int *dst_len, uint8_t *src, int src_len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:774,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:783,1
    - Dst: mbedtls_md_info_from_string
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:776,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:781,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:779,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:785,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - digest
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 789
      start: 770
    functionDepth: 0
    functionLinenumber: 770
    functionLinenumberEnd: 789
    functionName: md_get
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - ASSERT
    - mbedtls_md_info_from_string
    - mbedtls_md_get_size
    linkageType: ''
    returnType: mbedtls_md_info_t*
    signature: 'static const mbedtls_md_info_t *md_get(const char *digest) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: crypto_uninit_lib
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void crypto_uninit_lib(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:242,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:253,1
    - Dst: mbedtls_pem_write_buffer
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:253,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:253,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:246,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:261,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:262,1
    - Dst: mbedtls_pem_write_buffer
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:262,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:262,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:262,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:263,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:264,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:266,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:263,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 29
    argCount: 4
    argNames:
    - name
    - dst
    - src
    - gc
    argTypes:
    - char*
    - struct buffer*
    - struct buffer*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 271
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 271
    functionName: crypto_pem_encode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_pem_write_buffer
    - BPTR
    - snprintf
    - mbed_ok
    - BLEN
    - CLEAR
    - buf_inc_len
    - BCAP
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool crypto_pem_encode(const char *name, struct buffer *dst, const
      struct buffer *src, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:336,1
    - Dst: platform_getpid
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:344,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:344,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:344,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:337,1
    - Dst: mbedtls_entropy_init
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:347,1
    - Dst: mbedtls_ctr_drbg_init
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:349,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:350,1
    - Dst: mbedtls_ctr_drbg_seed
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:350,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:351,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:351,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:353,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:356,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 361
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 361
    functionName: rand_ctx_get
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - time_string
    - platform_getpid
    - BPTR
    - buf_printf
    - msg
    - mbed_ok
    - BLEN
    - gc_new
    - mbedtls_entropy_init
    - gc_free
    - mbedtls_ctr_drbg_init
    - mbedtls_ctr_drbg_seed
    - alloc_buf_gc
    linkageType: ''
    returnType: mbedtls_ctr_drbg_context*
    signature: 'mbedtls_ctr_drbg_context *rand_ctx_get(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:413,1
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:415,1
    - Dst: mbedtls_cipher_info_get_key_bitlen
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:424,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:427,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:419,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - ciphername
    - reason
    argTypes:
    - char*
    - char**
    constantsTouched: []
    func_position:
      end: 436
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 436
    functionName: cipher_valid_reason
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - cipher_get
    - ASSERT
    - mbedtls_cipher_info_get_key_bitlen
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_valid_reason(const char *ciphername, const char **reason) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:453,1
    - Dst: mbedtls_cipher_info_get_key_bitlen
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:460,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 461
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 461
    functionName: cipher_kt_key_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_get
    - mbedtls_cipher_info_get_key_bitlen
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_key_size(const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:478,1
    - Dst: mbedtls_cipher_info_get_block_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:483,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 484
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 484
    functionName: cipher_kt_block_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_get
    - mbedtls_cipher_info_get_block_size
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_block_size(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_cipher_get_iv_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:603,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_cipher_context_t*
    constantsTouched: []
    func_position:
      end: 604
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 604
    functionName: cipher_ctx_iv_length
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_get_iv_size
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_iv_length(const mbedtls_cipher_context_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:714,1
    - Dst: mbedtls_cipher_finish
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:714,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - ctx
    - dst
    - dst_len
    argTypes:
    - mbedtls_cipher_context_t*
    - uint8_t*
    - int*
    constantsTouched: []
    func_position:
      end: 722
      start: 709
    functionDepth: 0
    functionLinenumber: 709
    functionLinenumberEnd: 722
    functionName: cipher_ctx_final
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_finish
    - mbed_ok
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_final(mbedtls_cipher_context_t *ctx, uint8_t *dst,
      int *dst_len) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:281,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:293,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:293,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:292,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:285,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:294,1
    - Dst: buf_null_terminate
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:295,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:299,1
    - Dst: mbedtls_pem_read_buffer
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:299,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:299,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:303,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:306,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:310,1
    - Dst: mbedtls_pem_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:309,1
    - Dst: mbedtls_pem_get_buffer
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:302,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 27
    argCount: 3
    argNames:
    - name
    - dst
    - src
    argTypes:
    - char*
    - struct buffer*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 312
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 312
    functionName: crypto_pem_decode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - buf_copy
    - mbedtls_pem_get_buffer
    - buf_write
    - BPTR
    - msg
    - snprintf
    - mbed_ok
    - BLEN
    - gc_new
    - buf_null_terminate
    - mbedtls_pem_free
    - gc_free
    - mbedtls_pem_read_buffer
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool crypto_pem_decode(const char *name, struct buffer *dst, const
      struct buffer *src) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_cipher_get_operation
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:730,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:752,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:740,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:742,1
    - Dst: mbedtls_cipher_finish
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:740,1
    - Dst: mbedtls_cipher_check_tag
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:752,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 5
    argNames:
    - ctx
    - dst
    - dst_len
    - tag
    - tag_len
    argTypes:
    - mbedtls_cipher_context_t*
    - uint8_t*
    - int*
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 759
      start: 724
    functionDepth: 0
    functionLinenumber: 724
    functionLinenumberEnd: 759
    functionName: cipher_ctx_final_check_tag
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_check_tag
    - msg
    - mbed_ok
    - mbedtls_cipher_get_operation
    - mbedtls_cipher_finish
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_final_check_tag(mbedtls_cipher_context_t *ctx, uint8_t
      *dst, int *dst_len, uint8_t *tag, size_t tag_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:844,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 845
      start: 841
    functionDepth: 0
    functionLinenumber: 841
    functionLinenumberEnd: 845
    functionName: md_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_free(mbedtls_md_context_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1095,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1099,1
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1096,1
    - Dst: tls1_P_hash
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1106,1
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1097,1
    - Dst: tls1_P_hash
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1107,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1114,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1116,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1116,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1118,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 17
    argCount: 6
    argNames:
    - label
    - label_len
    - sec
    - slen
    - out1
    - olen
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1120
      start: 1091
    functionDepth: 0
    functionLinenumber: 1091
    functionLinenumberEnd: 1120
    functionName: ssl_tls1_PRF
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - format_hex
    - dmsg
    - gc_malloc
    - gc_new
    - secure_memzero
    - gc_free
    - tls1_P_hash
    - md_get
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_tls1_PRF(const uint8_t *label, int label_len, const uint8_t
      *sec, int slen, uint8_t *out1, int olen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:988,1
    - Dst: mbedtls_ssl_tls_prf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:988,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 6
    argNames:
    - seed
    - seed_len
    - secret
    - secret_len
    - output
    - output_len
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 991
      start: 984
    functionDepth: 0
    functionLinenumber: 984
    functionLinenumberEnd: 991
    functionName: ssl_tls1_PRF
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_ok
    - mbedtls_ssl_tls_prf
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_tls1_PRF(const uint8_t *seed, int seed_len, const uint8_t
      *secret, int secret_len, uint8_t *output, int output_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 105
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 105
    functionName: crypto_clear_error
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void crypto_clear_error(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:631,1
    - Dst: mbedtls_cipher_get_cipher_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:633,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_cipher_context_t*
    constantsTouched: []
    func_position:
      end: 634
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 634
    functionName: cipher_ctx_mode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_get_cipher_mode
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_mode(const mbedtls_cipher_context_t *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:663,1
    - Dst: mbedtls_cipher_set_iv
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:668,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:668,1
    - Dst: mbedtls_cipher_get_iv_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:668,1
    - Dst: mbedtls_cipher_reset
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:663,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - ctx
    - iv_buf
    argTypes:
    - mbedtls_cipher_context_t*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 674
      start: 660
    functionDepth: 0
    functionLinenumber: 660
    functionLinenumberEnd: 674
    functionName: cipher_ctx_reset
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_get_iv_size
    - mbed_ok
    - mbedtls_cipher_reset
    - mbedtls_cipher_set_iv
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_reset(mbedtls_cipher_context_t *ctx, const uint8_t
      *iv_buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_info_from_string
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:794,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - digest
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 796
      start: 791
    functionDepth: 0
    functionLinenumber: 791
    functionLinenumberEnd: 796
    functionName: md_valid
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_info_from_string
    linkageType: ''
    returnType: bool
    signature: 'bool md_valid(const char *digest) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:829,1
    - Dst: mbedtls_md
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:830,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 4
    argNames:
    - mdname
    - src
    - src_len
    - dst
    argTypes:
    - char*
    - uint8_t*
    - int
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 831
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 831
    functionName: md_full
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md
    - md_get
    linkageType: ''
    returnType: int
    signature: 'int md_full(const char *mdname, const uint8_t *src, int src_len, uint8_t
      *dst) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:871,1
    - Dst: mbedtls_md_info_from_ctx
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:871,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 872
      start: 864
    functionDepth: 0
    functionLinenumber: 864
    functionLinenumberEnd: 872
    functionName: md_ctx_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_info_from_ctx
    - mbedtls_md_get_size
    linkageType: ''
    returnType: int
    signature: 'int md_ctx_size(const mbedtls_md_context_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:883,1
    - Dst: mbedtls_md_finish
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:883,1
    - Dst: mbedtls_md_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:884,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 2
    argNames:
    - ctx
    - dst
    argTypes:
    - mbedtls_md_context_t*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 885
      start: 880
    functionDepth: 0
    functionLinenumber: 880
    functionLinenumberEnd: 885
    functionName: md_ctx_final
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_finish
    - mbedtls_md_free
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_final(mbedtls_md_context_t *ctx, uint8_t *dst) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:910,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 911
      start: 907
    functionDepth: 0
    functionLinenumber: 907
    functionLinenumberEnd: 911
    functionName: hmac_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_free(mbedtls_md_context_t *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_strerror
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:113,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:119,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 3
    argNames:
    - flags
    - errval
    - prefix
    argTypes:
    - unsigned int
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 123
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 123
    functionName: mbed_log_err
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_strerror
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool mbed_log_err(unsigned int flags, int errval, const char *prefix) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:639,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - cipher_ctx_t*
    constantsTouched: []
    func_position:
      end: 640
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 640
    functionName: cipher_ctx_mode_cbc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_ctx_mode_cbc(const cipher_ctx_t *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:684,1
    - Dst: mbedtls_cipher_update_ad
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:684,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 3
    argNames:
    - ctx
    - src
    - src_len
    argTypes:
    - cipher_ctx_t*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 690
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 690
    functionName: cipher_ctx_update_ad
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_ok
    - mbedtls_cipher_update_ad
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_update_ad(cipher_ctx_t *ctx, const uint8_t *src, int
      src_len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:801,1
    - Dst: mbedtls_md_get_name
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:806,1
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:805,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - mdname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 807
      start: 798
    functionDepth: 0
    functionLinenumber: 798
    functionLinenumberEnd: 807
    functionName: md_kt_name
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_get_name
    - strcmp
    - md_get
    linkageType: ''
    returnType: char*
    signature: 'const char *md_kt_name(const char *mdname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:877,1
    - Dst: mbedtls_md_update
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:877,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 3
    argNames:
    - ctx
    - src
    - src_len
    argTypes:
    - mbedtls_md_context_t*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 878
      start: 874
    functionDepth: 0
    functionLinenumber: 874
    functionLinenumberEnd: 878
    functionName: md_ctx_update
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - ASSERT
    - mbedtls_md_update
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_update(mbedtls_md_context_t *ctx, const uint8_t *src,
      int src_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:916,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:920,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:917,1
    - Dst: mbedtls_md_init
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:919,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:921,1
    - Dst: mbedtls_md_setup
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:921,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:922,1
    - Dst: mbedtls_md_hmac_starts
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:922,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:925,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:925,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 3
    argNames:
    - ctx
    - key
    - mdname
    argTypes:
    - mbedtls_md_context_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 926
      start: 913
    functionDepth: 0
    functionLinenumber: 913
    functionLinenumberEnd: 926
    functionName: hmac_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_setup
    - mbedtls_md_hmac_starts
    - ASSERT
    - mbedtls_md_init
    - mbedtls_md_get_size
    - md_get
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_init(mbedtls_md_context_t *ctx, const uint8_t *key,
      const char *mdname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:947,1
    - Dst: mbedtls_md_hmac_reset
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:947,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 948
      start: 944
    functionDepth: 0
    functionLinenumber: 944
    functionLinenumberEnd: 948
    functionName: hmac_ctx_reset
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - ASSERT
    - mbedtls_md_hmac_reset
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_reset(mbedtls_md_context_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:959,1
    - Dst: mbedtls_md_hmac_finish
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:959,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - ctx
    - dst
    argTypes:
    - mbedtls_md_context_t*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 960
      start: 956
    functionDepth: 0
    functionLinenumber: 956
    functionLinenumberEnd: 960
    functionName: hmac_ctx_final
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_hmac_finish
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_final(mbedtls_md_context_t *ctx, uint8_t *dst) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 145
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 145
    functionName: crypto_init_dmalloc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void crypto_init_dmalloc(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:367,1
    - Dst: mbedtls_ctr_drbg_set_prediction_resistance
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:369,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 370
      start: 364
    functionDepth: 0
    functionLinenumber: 364
    functionLinenumberEnd: 370
    functionName: rand_ctx_enable_prediction_resistance
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - rand_ctx_get
    - mbedtls_ctr_drbg_set_prediction_resistance
    linkageType: ''
    returnType: void
    signature: 'void rand_ctx_enable_prediction_resistance(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:812,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:817,1
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:816,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - mdname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 818
      start: 809
    functionDepth: 0
    functionLinenumber: 809
    functionLinenumberEnd: 818
    functionName: md_kt_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - strcmp
    - md_get
    - mbedtls_md_get_size
    linkageType: ''
    returnType: unsigned char
    signature: 'unsigned char md_kt_size(const char *mdname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:850,1
    - Dst: mbedtls_md_init
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:853,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:851,1
    - Dst: mbedtls_md_setup
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:854,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:854,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:855,1
    - Dst: mbedtls_md_starts
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:855,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - ctx
    - mdname
    argTypes:
    - mbedtls_md_context_t*
    - char*
    constantsTouched: []
    func_position:
      end: 856
      start: 847
    functionDepth: 0
    functionLinenumber: 847
    functionLinenumberEnd: 856
    functionName: md_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_setup
    - mbedtls_md_starts
    - ASSERT
    - mbedtls_md_init
    - md_get
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_init(mbedtls_md_context_t *ctx, const char *mdname) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:941,1
    - Dst: mbedtls_md_info_from_ctx
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:941,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 942
      start: 934
    functionDepth: 0
    functionLinenumber: 934
    functionLinenumberEnd: 942
    functionName: hmac_ctx_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_info_from_ctx
    - mbedtls_md_get_size
    linkageType: ''
    returnType: int
    signature: 'int hmac_ctx_size(mbedtls_md_context_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1008,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1025,1
    - Dst: mbedtls_md_init
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1029,1
    - Dst: mbedtls_md_init
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1033,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1034,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1038,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1044,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1045,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1046,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1053,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1021,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1021,1
    - Dst: hmac_ctx_new
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1019,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1024,1
    - Dst: mbedtls_md_hmac_starts
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1031,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1043,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1058,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1063,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1066,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1069,1
    - Dst: mbedtls_md_setup
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1030,1
    - Dst: mbedtls_md_hmac_starts
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1035,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1031,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1050,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1057,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1062,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1064,1
    - Dst: hmac_ctx_new
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1018,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1022,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1022,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1030,1
    - Dst: mbedtls_md_setup
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1034,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1035,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1037,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1042,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1065,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1068,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:1068,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 49
    argCount: 7
    argNames:
    - md_kt
    - sec
    - sec_len
    - seed
    - seed_len
    - out
    - olen
    argTypes:
    - mbedtls_md_info_t*
    - uint8_t*
    - int
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1070
      start: 1004
    functionDepth: 0
    functionLinenumber: 1004
    functionLinenumberEnd: 1070
    functionName: tls1_P_hash
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_setup
    - memcpy
    - format_hex
    - dmsg
    - hmac_ctx_final
    - hmac_ctx_free
    - gc_new
    - hmac_ctx_update
    - secure_memzero
    - mbedtls_md_hmac_starts
    - gc_free
    - ASSERT
    - hmac_ctx_new
    - mbedtls_md_get_size
    - mbedtls_md_init
    - hmac_ctx_reset
    - hmac_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'static void tls1_P_hash(const mbedtls_md_info_t *md_kt, const uint8_t
      *sec, int sec_len, const uint8_t *seed, int seed_len, uint8_t *out, int olen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:131,1
    - Dst: mbed_log_err
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:136,1
    - Dst: mbed_log_err
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:133,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 4
    argNames:
    - flags
    - errval
    - func
    - line
    argTypes:
    - unsigned int
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 137
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 137
    functionName: mbed_log_func_line
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_log_err
    - snprintf
    linkageType: ''
    returnType: bool
    signature: 'bool mbed_log_func_line(unsigned int flags, int errval, const char
      *func, int line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:556,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 558
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 558
    functionName: cipher_ctx_new
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ
    linkageType: ''
    returnType: mbedtls_cipher_context_t*
    signature: 'mbedtls_cipher_context_t *cipher_ctx_new(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_cipher_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:563,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:564,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_cipher_context_t*
    constantsTouched: []
    func_position:
      end: 565
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 565
    functionName: cipher_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_free
    - free
    linkageType: ''
    returnType: void
    signature: 'void cipher_ctx_free(mbedtls_cipher_context_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:376,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:380,1
    - Dst: mbedtls_ctr_drbg_random
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:381,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - output
    - len
    argTypes:
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 391
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 391
    functionName: rand_bytes
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - rand_ctx_get
    - min_int
    - mbedtls_ctr_drbg_random
    linkageType: ''
    returnType: int
    signature: 'int rand_bytes(uint8_t *output, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:903,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 905
      start: 899
    functionDepth: 0
    functionLinenumber: 899
    functionLinenumberEnd: 905
    functionName: hmac_ctx_new
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ
    linkageType: ''
    returnType: mbedtls_md_context_t*
    signature: 'mbedtls_md_context_t *hmac_ctx_new(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:76,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - provider
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 79
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 79
    functionName: crypto_load_provider
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: provider_t*
    signature: 'provider_t *crypto_load_provider(const char *provider) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_cipher_list
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:161,1
    - Dst: cipher_kt_insecure
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:175,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:164,1
    - Dst: mbedtls_cipher_info_from_type
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:173,1
    - Dst: mbedtls_cipher_info_get_name
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:174,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:176,1
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:176,1
    - Dst: print_cipher
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:178,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:183,1
    - Dst: mbedtls_cipher_list
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:185,1
    - Dst: mbedtls_cipher_info_from_type
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:188,1
    - Dst: mbedtls_cipher_info_get_name
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:189,1
    - Dst: print_cipher
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:193,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:197,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:191,1
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:191,1
    - Dst: cipher_kt_insecure
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:190,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 34
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 198
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 198
    functionName: show_available_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_list
    - cipher_kt_mode_cbc
    - mbedtls_cipher_info_from_type
    - mbedtls_cipher_info_get_name
    - print_cipher
    - cipher_kt_insecure
    - cipher_kt_mode_aead
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_ciphers(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:489,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 494
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 494
    functionName: cipher_kt_tag_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_aead
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_tag_size(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:515,1
    - Dst: mbedtls_cipher_info_get_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:516,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - cipher_kt
    argTypes:
    - mbedtls_cipher_info_t*
    constantsTouched: []
    func_position:
      end: 517
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 517
    functionName: cipher_kt_mode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_info_get_mode
    - ASSERT
    linkageType: ''
    returnType: mbedtls_cipher_mode_t
    signature: 'static mbedtls_cipher_mode_t cipher_kt_mode(const mbedtls_cipher_info_t
      *cipher_kt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:529,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:531,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:530,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 532
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 532
    functionName: cipher_kt_mode_ofb_cfb
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_get
    - cipher_kt_mode
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_mode_ofb_cfb(const char *ciphername) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:614,1
    - Dst: mbedtls_cipher_write_tag
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:614,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 3
    argNames:
    - ctx
    - tag
    - tag_len
    argTypes:
    - cipher_ctx_t*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 620
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 620
    functionName: cipher_ctx_get_tag
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_ok
    - mbedtls_cipher_write_tag
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_get_tag(cipher_ctx_t *ctx, uint8_t *tag, int tag_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:646,1
    - Dst: cipher_ctx_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:647,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - cipher_ctx_t*
    constantsTouched: []
    func_position:
      end: 648
      start: 643
    functionDepth: 0
    functionLinenumber: 643
    functionLinenumberEnd: 648
    functionName: cipher_ctx_mode_ofb_cfb
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_ctx_mode_ofb_cfb(const cipher_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:837,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 839
      start: 833
    functionDepth: 0
    functionLinenumber: 833
    functionLinenumberEnd: 839
    functionName: md_ctx_new
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: mbedtls_md_context_t*
    signature: 'mbedtls_md_context_t *md_ctx_new(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - provname
    - provider
    argTypes:
    - char*
    - provider_t*
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: crypto_unload_provider
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void crypto_unload_provider(const char *provname, provider_t *provider) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_list
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:203,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:206,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:219,1
    - Dst: mbedtls_md_get_name
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:219,1
    - Dst: mbedtls_md_info_from_type
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:215,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:220,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:224,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 225
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 225
    functionName: show_available_digests
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_list
    - mbedtls_md_info_from_type
    - mbedtls_md_get_name
    - mbedtls_md_get_size
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_digests(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:499,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:505,1
    - Dst: mbedtls_cipher_info_get_type
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:507,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 510
      start: 496
    functionDepth: 0
    functionLinenumber: 496
    functionLinenumberEnd: 510
    functionName: cipher_kt_insecure
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_info_get_type
    - cipher_get
    - cipher_kt_block_size
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_insecure(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:522,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:523,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 524
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 524
    functionName: cipher_kt_mode_cbc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_get
    - cipher_kt_mode
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_mode_cbc(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:537,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:540,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:538,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 543
      start: 534
    functionDepth: 0
    functionLinenumber: 534
    functionLinenumberEnd: 543
    functionName: cipher_kt_mode_aead
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_get
    - cipher_kt_mode
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_mode_aead(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_cipher_get_block_size
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_cipher_context_t*
    constantsTouched: []
    func_position:
      end: 626
      start: 622
    functionDepth: 0
    functionLinenumber: 622
    functionLinenumberEnd: 626
    functionName: cipher_ctx_block_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_cipher_get_block_size
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_block_size(const mbedtls_cipher_context_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:653,1
    - Dst: cipher_ctx_mode
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:655,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - cipher_ctx_t*
    constantsTouched: []
    func_position:
      end: 658
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 658
    functionName: cipher_ctx_mode_aead
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_ctx_mode_aead(const cipher_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:861,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 862
      start: 858
    functionDepth: 0
    functionLinenumber: 858
    functionLinenumberEnd: 862
    functionName: md_ctx_cleanup
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_free
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_cleanup(mbedtls_md_context_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:67,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - engine_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 69
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: crypto_init_lib_engine
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void crypto_init_lib_engine(const char *engine_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:953,1
    - Dst: mbedtls_md_hmac_update
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:953,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 3
    argNames:
    - ctx
    - src
    - src_len
    argTypes:
    - mbedtls_md_context_t*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 954
      start: 950
    functionDepth: 0
    functionLinenumber: 950
    functionLinenumberEnd: 954
    functionName: hmac_ctx_update
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_hmac_update
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_update(mbedtls_md_context_t *ctx, const uint8_t *src,
      int src_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 3
    argNames:
    - a
    - b
    - size
    argTypes:
    - void*
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 980
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 980
    functionName: memcmp_constant_time
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int memcmp_constant_time(const void *a, const void *b, size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_free
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.c:931,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - mbedtls_md_context_t*
    constantsTouched: []
    func_position:
      end: 932
      start: 928
    functionDepth: 0
    functionLinenumber: 928
    functionLinenumberEnd: 932
    functionName: hmac_ctx_cleanup
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_md_free
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_cleanup(mbedtls_md_context_t *ctx) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/dco.c:157,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:152,1
    - Dst: dco_get_secondary_key
      Src: /src/openvpn/src/openvpn/dco.c:177,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/dco.c:218,1
    - Dst: dco_del_key
      Src: /src/openvpn/src/openvpn/dco.c:215,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:200,1
    - Dst: tls_select_encryption_key
      Src: /src/openvpn/src/openvpn/dco.c:146,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:157,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/dco.c:164,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:192,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:218,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:164,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.c:175,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.c:207,1
    - Dst: dco_swap_keys
      Src: /src/openvpn/src/openvpn/dco.c:197,1
    - Dst: dco_del_key
      Src: /src/openvpn/src/openvpn/dco.c:154,1
    - Dst: dco_del_key
      Src: /src/openvpn/src/openvpn/dco.c:161,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/dco.c:200,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:186,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 61
    argCount: 2
    argNames:
    - dco
    - multi
    argTypes:
    - dco_context_t*
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 238
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 238
    functionName: dco_update_keys
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - dco_swap_keys
    - tls_select_encryption_key
    - msg
    - strerror
    - ASSERT
    - dco_get_secondary_key
    - dco_del_key
    linkageType: ''
    returnType: bool
    signature: 'bool dco_update_keys(dco_context_t *dco, struct tls_multi *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_direction_state_init
      Src: /src/openvpn/src/openvpn/dco.c:94,1
    - Dst: dco_install_key
      Src: /src/openvpn/src/openvpn/dco.c:96,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 4
    argCount: 6
    argNames:
    - multi
    - ks
    - key2
    - key_direction
    - ciphername
    - server
    argTypes:
    - struct tls_multi*
    - struct key_state*
    - struct key2*
    - int
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 102
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 102
    functionName: init_key_dco_bi
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - dco_install_key
    - key_direction_state_init
    linkageType: ''
    returnType: int
    signature: 'int init_key_dco_bi(struct tls_multi *multi, struct key_state *ks,
      const struct key2 *key2, int key_direction, const char *ciphername, bool server) '
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:312,1
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/dco.c:317,1
    - Dst: tun_name_is_fixed
      Src: /src/openvpn/src/openvpn/dco.c:372,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:388,1
    - Dst: capng_have_capability
      Src: /src/openvpn/src/openvpn/dco.c:407,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:325,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:319,1
    - Dst: dco_check_option_ce
      Src: /src/openvpn/src/openvpn/dco.c:340,1
    - Dst: net_iface_type
      Src: /src/openvpn/src/openvpn/dco.c:379,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:409,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:418,1
    - Dst: dco_available
      Src: /src/openvpn/src/openvpn/dco.c:431,1
    - Dst: is_tun_afunix
      Src: /src/openvpn/src/openvpn/dco.c:323,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:331,1
    - Dst: dco_check_option_ce
      Src: /src/openvpn/src/openvpn/dco.c:348,1
    - Dst: capng_have_capability
      Src: /src/openvpn/src/openvpn/dco.c:401,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco.c:380,1
    - Dst: is_dev_type
      Src: /src/openvpn/src/openvpn/dco.c:329,1
    - Dst: dco_win_supports_multipeer
      Src: /src/openvpn/src/openvpn/dco.c:355,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:382,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/dco.c:389,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:357,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:363,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:403,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:424,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 74
    argCount: 2
    argNames:
    - msglevel
    - o
    argTypes:
    - int
    - struct options*
    constantsTouched: []
    func_position:
      end: 432
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 432
    functionName: dco_check_startup_option
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - capng_have_capability
    - is_tun_afunix
    - dco_available
    - msg
    - dev_type_enum
    - dco_win_supports_multipeer
    - strerror
    - is_dev_type
    - strcmp
    - tun_name_is_fixed
    - dco_check_option_ce
    - net_iface_type
    linkageType: ''
    returnType: bool
    signature: 'bool dco_check_startup_option(int msglevel, const struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:485,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - msglevel
    - o
    argTypes:
    - int
    - struct options*
    constantsTouched: []
    func_position:
      end: 490
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 490
    functionName: dco_check_pull_options
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool dco_check_pull_options(int msglevel, const struct options *o) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/dco.c:531,1
    - Dst: dco_del_peer
      Src: /src/openvpn/src/openvpn/dco.c:538,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 541
      start: 528
    functionDepth: 0
    functionLinenumber: 528
    functionLinenumberEnd: 541
    functionName: dco_remove_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - dco_del_peer
    - dco_enabled
    linkageType: ''
    returnType: void
    signature: 'void dco_remove_peer(struct context *c) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.c:610,1
    - Dst: dco_new_peer
      Src: /src/openvpn/src/openvpn/dco.c:634,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/dco.c:619,1
    - Dst: dco_multi_get_localaddr
      Src: /src/openvpn/src/openvpn/dco.c:629,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 20
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 644
      start: 592
    functionDepth: 0
    functionLinenumber: 592
    functionLinenumberEnd: 644
    functionName: dco_multi_add_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - dco_new_peer
    - dco_multi_get_localaddr
    - htonl
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int dco_multi_add_new_peer(struct multi_context *m, struct multi_instance
      *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:60,1
    - Dst: dco_new_key
      Src: /src/openvpn/src/openvpn/dco.c:74,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 12
    argCount: 7
    argNames:
    - multi
    - ks
    - encrypt_key
    - encrypt_iv
    - decrypt_key
    - decrypt_iv
    - ciphername
    argTypes:
    - struct tls_multi*
    - struct key_state*
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 86
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 86
    functionName: dco_install_key
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - msg
    - dco_new_key
    linkageType: ''
    returnType: int
    signature: 'static int dco_install_key(struct tls_multi *multi, struct key_state
      *ks, const uint8_t *encrypt_key, const uint8_t *encrypt_iv, const uint8_t *decrypt_key,
      const uint8_t *decrypt_iv, const char *ciphername) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:245,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:251,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:257,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:268,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/dco.c:266,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/dco.c:276,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:278,1
    - Dst: dco_win_supports_multipeer
      Src: /src/openvpn/src/openvpn/dco.c:282,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:284,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:290,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 31
    argCount: 3
    argNames:
    - ce
    - msglevel
    - mode
    argTypes:
    - struct connection_entry*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 296
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 296
    functionName: dco_check_option_ce
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - proto_is_udp
    - msg
    - dco_win_supports_multipeer
    - proto_is_dgram
    linkageType: ''
    returnType: bool
    signature: 'static bool dco_check_option_ce(const struct connection_entry *ce,
      int msglevel, int mode) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/dco.c:439,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:450,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:456,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:441,1
    - Dst: dco_get_supported_ciphers
      Src: /src/openvpn/src/openvpn/dco.c:439,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dco.c:462,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/dco.c:463,1
    - Dst: strsep
      Src: /src/openvpn/src/openvpn/dco.c:465,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/dco.c:467,1
    - Dst: dco_get_supported_ciphers
      Src: /src/openvpn/src/openvpn/dco.c:467,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco.c:471,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco.c:475,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco.c:469,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 30
    argCount: 2
    argNames:
    - msglevel
    - o
    argTypes:
    - int
    - struct options*
    constantsTouched: []
    func_position:
      end: 478
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 478
    functionName: dco_check_option
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - dco_get_supported_ciphers
    - msg
    - gc_new
    - strsep
    - tls_item_in_cipher_list
    - gc_free
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'bool dco_check_option(int msglevel, const struct options *o) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/dco.c:495,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/dco.c:516,1
    - Dst: dco_new_peer
      Src: /src/openvpn/src/openvpn/dco.c:515,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.c:502,1
    - Dst: dco_del_peer
      Src: /src/openvpn/src/openvpn/dco.c:511,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 14
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 526
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 526
    functionName: dco_p2p_add_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - dco_enabled
    - dco_new_peer
    - ASSERT
    - proto_is_dgram
    - dco_del_peer
    linkageType: ''
    returnType: int
    signature: 'int dco_p2p_add_new_peer(struct context *c) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/dco.c:550,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.c:583,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 17
    argCount: 3
    argNames:
    - m
    - mi
    - local
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct sockaddr_storage*
    constantsTouched: []
    func_position:
      end: 590
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 590
    functionName: dco_multi_get_localaddr
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - proto_is_udp
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static bool dco_multi_get_localaddr(struct multi_context *m, struct
      multi_instance *mi, struct sockaddr_storage *local) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/dco.c:651,1
    - Dst: net_route_v6_add
      Src: /src/openvpn/src/openvpn/dco.c:671,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/dco.c:681,1
    - Dst: dco_win_add_iroute_ipv6
      Src: /src/openvpn/src/openvpn/dco.c:669,1
    - Dst: dco_win_add_iroute_ipv4
      Src: /src/openvpn/src/openvpn/dco.c:679,1
    - Dst: net_route_v4_add
      Src: /src/openvpn/src/openvpn/dco.c:682,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 24
    argCount: 3
    argNames:
    - m
    - mi
    - addr
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 688
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 688
    functionName: dco_install_iroute
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - dco_win_add_iroute_ipv4
    - net_route_v6_add
    - net_route_v4_add
    - dco_enabled
    - dco_win_add_iroute_ipv6
    - htonl
    linkageType: ''
    returnType: void
    signature: 'void dco_install_iroute(struct multi_context *m, struct multi_instance
      *mi, struct mroute_addr *addr) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/dco.c:694,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/dco.c:698,1
    - Dst: dco_win_del_iroute_ipv4
      Src: /src/openvpn/src/openvpn/dco.c:709,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.c:698,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/dco.c:709,1
    - Dst: net_route_v4_del
      Src: /src/openvpn/src/openvpn/dco.c:711,1
    - Dst: dco_win_del_iroute_ipv6
      Src: /src/openvpn/src/openvpn/dco.c:725,1
    - Dst: net_route_v6_del
      Src: /src/openvpn/src/openvpn/dco.c:727,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 20
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 734
      start: 690
    functionDepth: 0
    functionLinenumber: 690
    functionLinenumberEnd: 734
    functionName: dco_delete_iroutes
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - dco_win_del_iroute_ipv4
    - dco_enabled
    - net_route_v4_del
    - ASSERT
    - net_route_v6_del
    - htonl
    - dco_win_del_iroute_ipv6
    linkageType: ''
    returnType: void
    signature: 'void dco_delete_iroutes(struct multi_context *m, struct multi_instance
      *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/dco.c:117,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.c:127,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 11
    argCount: 2
    argNames:
    - multi
    - primary
    argTypes:
    - struct tls_multi*
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 133
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 133
    functionName: dco_get_secondary_key
    functionSourceFile: /src/openvpn/src/openvpn/dco.c
    functionUses: []
    functionsReached:
    - get_key_scan
    - ASSERT
    linkageType: ''
    returnType: struct key_state*
    signature: 'static struct key_state *dco_get_secondary_key(struct tls_multi *multi,
      const struct key_state *primary) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - key
    argTypes:
    - struct key_ctx_bi*
    constantsTouched: []
    func_position:
      end: 659
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 659
    functionName: key_ctx_bi_defined
    functionSourceFile: /src/openvpn/src/openvpn/crypto.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool key_ctx_bi_defined(const struct key_ctx_bi *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct key_ctx*
    constantsTouched: []
    func_position:
      end: 739
      start: 734
    functionDepth: 0
    functionLinenumber: 734
    functionLinenumberEnd: 739
    functionName: cipher_decrypt_verify_fail_warn
    functionSourceFile: /src/openvpn/src/openvpn/crypto.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool cipher_decrypt_verify_fail_warn(const struct key_ctx
      *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_defined
      Src: /src/openvpn/src/openvpn/crypto.h:690,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.h:692,1
    - Dst: cipher_valid
      Src: /src/openvpn/src/openvpn/crypto.h:690,1
    - Dst: md_defined
      Src: /src/openvpn/src/openvpn/crypto.h:695,1
    - Dst: md_valid
      Src: /src/openvpn/src/openvpn/crypto.h:695,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.h:697,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 3
    argNames:
    - cipher
    - md
    - optname
    argTypes:
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 702
      start: 683
    functionDepth: 0
    functionLinenumber: 683
    functionLinenumberEnd: 702
    functionName: create_kt
    functionSourceFile: /src/openvpn/src/openvpn/crypto.h
    functionUses: []
    functionsReached:
    - md_valid
    - msg
    - md_defined
    - cipher_defined
    - cipher_valid
    linkageType: ''
    returnType: struct key_type
    signature: 'static inline struct key_type create_kt(const char *cipher, const
      char *md, const char *optname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct key_ctx*
    constantsTouched: []
    func_position:
      end: 728
      start: 719
    functionDepth: 0
    functionLinenumber: 719
    functionLinenumberEnd: 728
    functionName: cipher_decrypt_verify_fail_exceeded
    functionSourceFile: /src/openvpn/src/openvpn/crypto.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool cipher_decrypt_verify_fail_exceeded(const struct
      key_ctx *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 3
    argNames:
    - limit
    - key_ctx
    - higest_pid
    argTypes:
    - uint64_t
    - struct key_ctx*
    - int64_t
    constantsTouched: []
    func_position:
      end: 771
      start: 763
    functionDepth: 0
    functionLinenumber: 763
    functionLinenumberEnd: 771
    functionName: aead_usage_limit_reached
    functionSourceFile: /src/openvpn/src/openvpn/crypto.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool aead_usage_limit_reached(const uint64_t limit,
      const struct key_ctx *key_ctx, int64_t higest_pid) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/multi_io.c:143,1
    - Dst: mbuf_defined
      Src: /src/openvpn/src/openvpn/multi_io.c:155,1
    - Dst: socket_set
      Src: /src/openvpn/src/openvpn/multi_io.c:145,1
    - Dst: socket_set
      Src: /src/openvpn/src/openvpn/multi_io.c:153,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 159
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 159
    functionName: multi_io_set_global_rw_flags
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - socket_set
    - mbuf_defined
    - proto_is_dgram
    linkageType: ''
    returnType: void
    signature: 'void multi_io_set_global_rw_flags(struct multi_context *m, struct
      multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 3
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 113
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 113
    functionName: multi_get_context
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct context*
    signature: 'static inline struct context *multi_get_context(struct multi_context
      *m, struct multi_instance *mi) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: tuntap_is_dco_win
      Src: /src/openvpn/src/openvpn/multi_io.c:178,1
    - Dst: get_io_flags_udp
      Src: /src/openvpn/src/openvpn/multi_io.c:189,1
    - Dst: has_udp_in_local_list
      Src: /src/openvpn/src/openvpn/multi_io.c:187,1
    - Dst: socket_set_listen_persistent
      Src: /src/openvpn/src/openvpn/multi_io.c:182,1
    - Dst: p2mp_iow_flags
      Src: /src/openvpn/src/openvpn/multi_io.c:189,1
    - Dst: tun_set
      Src: /src/openvpn/src/openvpn/multi_io.c:192,1
    - Dst: dco_event_set
      Src: /src/openvpn/src/openvpn/multi_io.c:195,1
    - Dst: management_socket_set
      Src: /src/openvpn/src/openvpn/multi_io.c:201,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/multi_io.c:207,1
    - Dst: event_wait
      Src: /src/openvpn/src/openvpn/multi_io.c:210,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/multi_io.c:211,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 27
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 218
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 218
    functionName: multi_io_wait
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - event_ctl
    - has_udp_in_local_list
    - p2mp_iow_flags
    - event_wait
    - tun_set
    - update_time
    - dco_event_set
    - socket_set_listen_persistent
    - tuntap_is_dco_win
    - get_io_flags_udp
    - management_socket_set
    linkageType: ''
    returnType: int
    signature: 'int multi_io_wait(struct multi_context *m) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi_io.c:298,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi_io.c:306,1
    - Dst: read_incoming_tun
      Src: /src/openvpn/src/openvpn/multi_io.c:305,1
    - Dst: multi_tcp_process_outgoing_link
      Src: /src/openvpn/src/openvpn/multi_io.c:353,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi_io.c:359,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi_io.c:363,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:314,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi_io.c:317,1
    - Dst: read_incoming_link
      Src: /src/openvpn/src/openvpn/multi_io.c:318,1
    - Dst: multi_tcp_process_outgoing_link_ready
      Src: /src/openvpn/src/openvpn/multi_io.c:345,1
    - Dst: multi_tcp_process_outgoing_link
      Src: /src/openvpn/src/openvpn/multi_io.c:349,1
    - Dst: multi_io_set_global_rw_flags
      Src: /src/openvpn/src/openvpn/multi_io.c:358,1
    - Dst: pract
      Src: /src/openvpn/src/openvpn/multi_io.c:299,1
    - Dst: multi_process_incoming_tun
      Src: /src/openvpn/src/openvpn/multi_io.c:308,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi_io.c:320,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi_io.c:324,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:357,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:315,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:316,1
    - Dst: stream_buf_read_setup
      Src: /src/openvpn/src/openvpn/multi_io.c:326,1
    - Dst: multi_process_drop_outgoing_tun
      Src: /src/openvpn/src/openvpn/multi_io.c:340,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi_io.c:319,1
    - Dst: multi_process_timeout
      Src: /src/openvpn/src/openvpn/multi_io.c:332,1
    - Dst: multi_process_outgoing_tun
      Src: /src/openvpn/src/openvpn/multi_io.c:336,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:344,1
    - Dst: multi_process_incoming_link
      Src: /src/openvpn/src/openvpn/multi_io.c:322,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 37
    argCount: 3
    argNames:
    - m
    - mi
    - action
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - int
    constantsTouched: []
    func_position:
      end: 368
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 368
    functionName: multi_io_dispatch
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - dmsg
    - msg
    - multi_tcp_process_outgoing_link
    - multi_process_outgoing_tun
    - multi_process_post
    - pract
    - set_prefix
    - read_incoming_link
    - multi_io_set_global_rw_flags
    - multi_process_drop_outgoing_tun
    - clear_prefix
    - multi_process_timeout
    - multi_tcp_process_outgoing_link_ready
    - read_incoming_tun
    - multi_process_incoming_tun
    - stream_buf_read_setup
    - ASSERT
    - multi_process_incoming_link
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static struct multi_instance *multi_io_dispatch(struct multi_context
      *m, struct multi_instance *mi, const int action) '
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi_io.c:459,1
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi_io.c:513,1
    - Dst: socket_reset_listen_persistent
      Src: /src/openvpn/src/openvpn/multi_io.c:521,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:520,1
    - Dst: multi_process_incoming_dco
      Src: /src/openvpn/src/openvpn/multi_io.c:533,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/multi_io.c:539,1
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi_io.c:509,1
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi_io.c:525,1
    - Dst: multi_process_file_closed
      Src: /src/openvpn/src/openvpn/multi_io.c:544,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi_io.c:560,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi_io.c:470,1
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi_io.c:463,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/multi_io.c:474,1
    - Dst: socket_reset_listen_persistent
      Src: /src/openvpn/src/openvpn/multi_io.c:476,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:499,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi_io.c:452,1
    - Dst: multi_process_io_udp
      Src: /src/openvpn/src/openvpn/multi_io.c:481,1
    - Dst: multi_create_instance_tcp
      Src: /src/openvpn/src/openvpn/multi_io.c:522,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi_io.c:548,1
    - Dst: mbuf_peek
      Src: /src/openvpn/src/openvpn/multi_io.c:560,1
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi_io.c:562,1
    - Dst: multi_create_instance_tcp
      Src: /src/openvpn/src/openvpn/multi_io.c:477,1
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi_io.c:489,1
    - Dst: management_io
      Src: /src/openvpn/src/openvpn/multi_io.c:500,1
    CyclomaticComplexity: 42
    EdgeCount: 42
    ICount: 74
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 565
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 565
    functionName: multi_io_process_io
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - management_io
    - IS_SIG
    - msg
    - multi_process_file_closed
    - socket_reset_listen_persistent
    - get_signal
    - multi_process_incoming_dco
    - multi_io_action
    - mbuf_peek
    - ASSERT
    - proto_is_dgram
    - multi_create_instance_tcp
    - multi_process_io_udp
    linkageType: ''
    returnType: void
    signature: 'void multi_io_process_io(struct multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: multi_process_incoming_dco
      Src: /src/openvpn/src/openvpn/multi_io.c:533,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - MULTI_IO_DCO
    argTypes:
    - e
    constantsTouched: []
    func_position:
      end: 534
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 534
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - multi_process_incoming_dco
    linkageType: ''
    returnType: else
    signature: 'else if (e->arg == MULTI_IO_DCO) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/multi_io.c:539,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - MULTI_IO_SIG
    argTypes:
    - e
    constantsTouched: []
    func_position:
      end: 540
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 540
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - get_signal
    linkageType: ''
    returnType: else
    signature: 'else if (e->arg == MULTI_IO_SIG) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: multi_process_file_closed
      Src: /src/openvpn/src/openvpn/multi_io.c:544,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - MULTI_IO_FILE_CLOSE_WRITE
    argTypes:
    - e
    constantsTouched: []
    func_position:
      end: 545
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 545
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - multi_process_file_closed
    linkageType: ''
    returnType: else
    signature: 'else if (e->arg == MULTI_IO_FILE_CLOSE_WRITE) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_free
      Src: /src/openvpn/src/openvpn/multi_io.c:166,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi_io.c:167,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi_io.c:168,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - multi_io
    argTypes:
    - struct multi_io*
    constantsTouched: []
    func_position:
      end: 170
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 170
    functionName: multi_io_free
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - free
    - event_free
    linkageType: ''
    returnType: void
    signature: 'void multi_io_free(struct multi_io *multi_io) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:121,1
    - Dst: wait_signal
      Src: /src/openvpn/src/openvpn/multi_io.c:127,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi_io.c:122,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/multi_io.c:124,1
    - Dst: event_set_init
      Src: /src/openvpn/src/openvpn/multi_io.c:126,1
    - Dst: ALLOC_ARRAY
      Src: /src/openvpn/src/openvpn/multi_io.c:128,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/multi_io.c:129,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/multi_io.c:129,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi_io.c:130,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 2
    argNames:
    - maxevents
    - maxclients
    argTypes:
    - int
    - int*
    constantsTouched: []
    func_position:
      end: 132
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 132
    functionName: multi_io_init
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY
    - msg
    - event_set_init
    - max_int
    - min_int
    - ASSERT
    - wait_signal
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct multi_io*
    signature: 'struct multi_io *multi_io_init(int maxevents, int *maxclients) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: multi_get_context
      Src: /src/openvpn/src/openvpn/multi_io.c:223,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi_io.c:226,1
    - Dst: tv_clear
      Src: /src/openvpn/src/openvpn/multi_io.c:230,1
    - Dst: pract
      Src: /src/openvpn/src/openvpn/multi_io.c:227,1
    - Dst: io_wait
      Src: /src/openvpn/src/openvpn/multi_io.c:237,1
    - Dst: io_wait
      Src: /src/openvpn/src/openvpn/multi_io.c:243,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/multi_io.c:251,1
    - Dst: io_wait
      Src: /src/openvpn/src/openvpn/multi_io.c:252,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/multi_io.c:253,1
    - Dst: io_wait
      Src: /src/openvpn/src/openvpn/multi_io.c:258,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi_io.c:262,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 30
    argCount: 4
    argNames:
    - m
    - mi
    - action
    - tun_input_pending
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - int
    - bool*
    constantsTouched: []
    func_position:
      end: 289
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 289
    functionName: multi_io_wait_lite
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - io_wait
    - pract
    - dmsg
    - msg
    - tv_clear
    - perf_pop
    - multi_get_context
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'static int multi_io_wait_lite(struct multi_context *m, struct multi_instance
      *mi, const int action, bool *tun_input_pending) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: multi_get_context
      Src: /src/openvpn/src/openvpn/multi_io.c:373,1
    - Dst: LINK_OUT
      Src: /src/openvpn/src/openvpn/multi_io.c:385,1
    - Dst: multi_io_set_global_rw_flags
      Src: /src/openvpn/src/openvpn/multi_io.c:408,1
    - Dst: sockets_read_residual
      Src: /src/openvpn/src/openvpn/multi_io.c:402,1
    - Dst: TUN_OUT
      Src: /src/openvpn/src/openvpn/multi_io.c:381,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi_io.c:414,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi_io.c:415,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi_io.c:416,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi_io.c:418,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi_io.c:423,1
    - Dst: pract
      Src: /src/openvpn/src/openvpn/multi_io.c:424,1
    - Dst: pract
      Src: /src/openvpn/src/openvpn/multi_io.c:425,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 26
    argCount: 3
    argNames:
    - m
    - mi
    - action
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - int
    constantsTouched: []
    func_position:
      end: 428
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 428
    functionName: multi_io_post
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - TUN_OUT
    - sockets_read_residual
    - dmsg
    - pract
    - msg
    - gc_new
    - multi_instance_string
    - gc_free
    - multi_get_context
    - LINK_OUT
    - multi_io_set_global_rw_flags
    linkageType: ''
    returnType: int
    signature: 'static int multi_io_post(struct multi_context *m, struct multi_instance
      *mi, const int action) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi_io.c:574,1
    - Dst: pract
      Src: /src/openvpn/src/openvpn/multi_io.c:575,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi_io.c:595,1
    - Dst: multi_io_dispatch
      Src: /src/openvpn/src/openvpn/multi_io.c:602,1
    - Dst: multi_io_wait_lite
      Src: /src/openvpn/src/openvpn/multi_io.c:592,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi_io.c:608,1
    - Dst: multi_close_instance_on_signal
      Src: /src/openvpn/src/openvpn/multi_io.c:614,1
    - Dst: multi_io_post
      Src: /src/openvpn/src/openvpn/multi_io.c:633,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 34
    argCount: 4
    argNames:
    - m
    - mi
    - action
    - poll
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 653
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 653
    functionName: multi_io_action
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - multi_close_instance_on_signal
    - pract
    - dmsg
    - msg
    - multi_io_dispatch
    - multi_io_wait_lite
    - multi_io_post
    linkageType: ''
    returnType: void
    signature: 'void multi_io_action(struct multi_context *m, struct multi_instance
      *mi, int action, bool poll) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_del
      Src: /src/openvpn/src/openvpn/multi_io.c:660,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - multi_io
    - event
    argTypes:
    - struct multi_io*
    - event_t
    constantsTouched: []
    func_position:
      end: 662
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 662
    functionName: multi_io_delete_event
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached:
    - event_del
    linkageType: ''
    returnType: void
    signature: 'void multi_io_delete_event(struct multi_io *multi_io, event_t event) '
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 2
    argCount: 1
    argNames:
    - action
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 99
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 99
    functionName: pract
    functionSourceFile: /src/openvpn/src/openvpn/multi_io.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *pract(int action) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:359,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:365,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:362,1
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:361,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:363,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:366,1
    - Dst: nvlist_pack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:368,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:370,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:373,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:376,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:377,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 3
    argNames:
    - dco
    - peerid
    - slot
    argTypes:
    - dco_context_t*
    - unsigned int
    - dco_key_slot_t
    constantsTouched: []
    func_position:
      end: 380
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 380
    functionName: dco_del_key
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_destroy
    - nvlist_create
    - msg
    - nvlist_add_number
    - snprintf
    - ioctl
    - CLEAR
    - free
    - nvlist_pack
    linkageType: ''
    returnType: int
    signature: 'int dco_del_key(dco_context_t *dco, unsigned int peerid, dco_key_slot_t
      slot) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:388,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:394,1
    - Dst: nvlist_add_string
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:390,1
    - Dst: nvlist_add_binary
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:396,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:392,1
    - Dst: nvlist_add_binary
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:397,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 3
    argNames:
    - key
    - implicit_iv
    - ciphername
    argTypes:
    - uint8_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 401
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 401
    functionName: key_to_nvlist
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - cipher_kt_key_size
    - nvlist_add_binary
    - nvlist_create
    - strcmp
    - nvlist_add_string
    linkageType: ''
    returnType: nvlist_t*
    signature: 'static nvlist_t *key_to_nvlist(const uint8_t *key, const uint8_t *implicit_iv,
      const char *ciphername) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pipe2
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:143,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 156
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 156
    functionName: open_fd
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - socket
    - pipe2
    linkageType: ''
    returnType: int
    signature: 'static int open_fd(dco_context_t *dco) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:210,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:218,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:213,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:223,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:214,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:232,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:234,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:239,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:240,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 2
    argNames:
    - tt
    - dev
    argTypes:
    - struct tuntap*
    - char*
    constantsTouched: []
    func_position:
      end: 245
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 245
    functionName: create_interface
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - ioctl
    - strcmp
    - CLEAR
    linkageType: ''
    returnType: int
    signature: 'static int create_interface(struct tuntap *tt, const char *dev) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: kldload
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:594,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:606,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:612,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:602,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:596,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:620,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:628,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:636,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:637,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 33
    argCount: 1
    argNames:
    - msglevel
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 640
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 640
    functionName: dco_available
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - socket
    - ioctl
    - strcmp
    - CLEAR
    - malloc
    - free
    - kldload
    - close
    linkageType: ''
    returnType: bool
    signature: 'bool dco_available(int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:480,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:486,1
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:483,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:484,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:485,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:488,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:489,1
    - Dst: nvlist_pack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:491,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:493,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:496,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:499,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:500,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 5
    argNames:
    - dco
    - peerid
    - keepalive_interval
    - keepalive_timeout
    - mss
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 503
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 503
    functionName: dco_set_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_destroy
    - nvlist_create
    - msg
    - nvlist_add_number
    - snprintf
    - ioctl
    - CLEAR
    - free
    - nvlist_pack
    linkageType: ''
    returnType: int
    signature: 'int dco_set_peer(dco_context_t *dco, unsigned int peerid, int keepalive_interval,
      int keepalive_timeout, int mss) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:732,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:750,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:733,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:741,1
    - Dst: realloc
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:737,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:751,1
    - Dst: nvlist_unpack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:755,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:756,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:759,1
    - Dst: nvlist_exists_nvlist_array
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:763,1
    - Dst: nvlist_get_nvlist_array
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:770,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:779,1
    - Dst: nvlist_get_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:776,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:774,1
    - Dst: dco_update_peer_stat
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:776,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:766,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 3
    argNames:
    - dco
    - m
    - raise_sigusr1_on_err
    argTypes:
    - dco_context_t*
    - struct multi_context*
    - bool
    constantsTouched: []
    func_position:
      end: 781
      start: 714
    functionDepth: 0
    functionLinenumber: 714
    functionLinenumberEnd: 781
    functionName: dco_get_peer_stats_multi
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - dco_update_peer_stat
    - realloc
    - nvlist_unpack
    - nvlist_exists_nvlist_array
    - msg
    - snprintf
    - ioctl
    - nvlist_destroy
    - nvlist_get_nvlist_array
    - nvlist_get_nvlist
    - CLEAR
    - nvlist_get_number
    - free
    linkageType: ''
    returnType: int
    signature: 'int dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context
      *m, const bool raise_sigusr1_on_err) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:161,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:162,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:163,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: close_fd
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - close
    linkageType: ''
    returnType: void
    signature: 'static void close_fd(dco_context_t *dco) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:253,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:256,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:259,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:254,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 265
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 265
    functionName: remove_interface
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - CLEAR
    - ioctl
    linkageType: ''
    returnType: int
    signature: 'static int remove_interface(struct tuntap *tt) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:515,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:523,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:526,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:518,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:517,1
    - Dst: nvlist_unpack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:530,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:533,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:537,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:539,1
    - Dst: nvlist_exists_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:545,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:547,1
    - Dst: nvlist_get_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:560,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:574,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:562,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:578,1
    - Dst: nvlist_exists_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:558,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:563,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 44
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 581
      start: 505
    functionDepth: 0
    functionLinenumber: 505
    functionLinenumberEnd: 581
    functionName: dco_do_read
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_unpack
    - nvlist_destroy
    - msg
    - snprintf
    - ioctl
    - nvlist_exists_number
    - nvlist_get_nvlist
    - CLEAR
    - read
    - nvlist_get_number
    - nvlist_exists_nvlist
    linkageType: ''
    returnType: int
    signature: 'int dco_do_read(dco_context_t *dco) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:646,1
    - Dst: uname
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:648,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 654
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 654
    functionName: dco_version_string
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - uname
    linkageType: ''
    returnType: char*
    signature: 'const char *dco_version_string(struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - c
    - raise_sigusr1_on_err
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 788
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 788
    functionName: dco_get_peer_stats
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int dco_get_peer_stats(struct context *c, const bool raise_sigusr1_on_err) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:45,1
    - Dst: nvlist_add_binary
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:62,1
    - Dst: nvlist_add_binary
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:54,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:55,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:47,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:63,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:68,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 11
    argCount: 1
    argNames:
    - sa
    argTypes:
    - struct sockaddr*
    constantsTouched: []
    func_position:
      end: 72
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 72
    functionName: sockaddr_to_nvlist
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_create
    - nvlist_add_number
    - ASSERT
    - nvlist_add_binary
    linkageType: ''
    returnType: nvlist_t*
    signature: 'static nvlist_t *sockaddr_to_nvlist(const struct sockaddr *sa) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: open_fd
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:169,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:171,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 3
    argNames:
    - mode
    - dco
    - dev_node
    argTypes:
    - int
    - dco_context_t*
    - char*
    constantsTouched: []
    func_position:
      end: 175
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 175
    functionName: ovpn_dco_init
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - msg
    - open_fd
    linkageType: ''
    returnType: bool
    signature: 'bool ovpn_dco_init(int mode, dco_context_t *dco, const char *dev_node) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: create_interface
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:270,1
    - Dst: dco_set_ifmode
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:280,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 3
    argNames:
    - tt
    - ctx
    - dev
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    - char*
    constantsTouched: []
    func_position:
      end: 284
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 284
    functionName: open_tun_dco
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - create_interface
    - dco_set_ifmode
    linkageType: ''
    returnType: int
    signature: 'int open_tun_dco(struct tuntap *tt, openvpn_net_ctx_t *ctx, const
      char *dev) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:409,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:413,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:416,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:410,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 420
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 420
    functionName: start_tun
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - CLEAR
    - ioctl
    linkageType: ''
    returnType: int
    signature: 'static int start_tun(dco_context_t *dco) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:110,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:133,1
    - Dst: sockaddr_to_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:95,1
    - Dst: nvlist_add_binary
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:101,1
    - Dst: nvlist_add_binary
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:107,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:111,1
    - Dst: nvlist_pack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:116,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:121,1
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:83,1
    - Dst: nvlist_add_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:90,1
    - Dst: nvlist_add_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:96,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:114,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:127,1
    - Dst: sockaddr_to_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:89,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:85,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:113,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:124,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:131,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:118,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 34
    argCount: 7
    argNames:
    - dco
    - peerid
    - sd
    - localaddr
    - remoteaddr
    - vpn_ipv4
    - vpn_ipv6
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - struct sockaddr*
    - struct sockaddr*
    - struct in_addr*
    - struct in6_addr*
    constantsTouched: []
    func_position:
      end: 136
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 136
    functionName: dco_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_add_binary
    - nvlist_destroy
    - nvlist_create
    - msg
    - nvlist_add_number
    - snprintf
    - ioctl
    - CLEAR
    - sockaddr_to_nvlist
    - free
    - nvlist_add_nvlist
    - nvlist_pack
    linkageType: ''
    returnType: int
    signature: 'int dco_new_peer(dco_context_t *dco, unsigned int peerid, int sd,
      struct sockaddr *localaddr, struct sockaddr *remoteaddr, struct in_addr *vpn_ipv4,
      struct in6_addr *vpn_ipv6) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:184,1
    - Dst: nvlist_pack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:190,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:187,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:185,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:188,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:192,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:195,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:198,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:199,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - dco
    - ifmode
    argTypes:
    - dco_context_t*
    - int
    constantsTouched: []
    func_position:
      end: 202
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 202
    functionName: dco_set_ifmode
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_destroy
    - nvlist_create
    - nvlist_add_number
    - snprintf
    - ioctl
    - msg
    - CLEAR
    - free
    - nvlist_pack
    linkageType: ''
    returnType: int
    signature: 'static int dco_set_ifmode(dco_context_t *dco, int ifmode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: remove_interface
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:289,1
    - Dst: close_fd
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:290,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 291
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 291
    functionName: close_tun_dco
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - remove_interface
    - close_fd
    linkageType: ''
    returnType: void
    signature: 'void close_tun_dco(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:438,1
    - Dst: nvlist_add_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:446,1
    - Dst: nvlist_pack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:451,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:453,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:439,1
    - Dst: key_to_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:443,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:466,1
    - Dst: start_tun
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:460,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:463,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:449,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:440,1
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:436,1
    - Dst: key_to_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:442,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:448,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:456,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:465,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:433,1
    - Dst: nvlist_add_nvlist
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:445,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:464,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 9
    argNames:
    - dco
    - peerid
    - keyid
    - slot
    - encrypt_key
    - encrypt_iv
    - decrypt_key
    - decrypt_iv
    - ciphername
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - dco_key_slot_t
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 469
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 469
    functionName: dco_new_key
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - start_tun
    - nvlist_destroy
    - nvlist_create
    - msg
    - nvlist_add_number
    - snprintf
    - ioctl
    - key_to_nvlist
    - CLEAR
    - free
    - nvlist_add_nvlist
    - nvlist_pack
    linkageType: ''
    returnType: int
    signature: 'int dco_new_key(dco_context_t *dco, unsigned int peerid, int keyid,
      dco_key_slot_t slot, const uint8_t *encrypt_key, const uint8_t *encrypt_iv,
      const uint8_t *decrypt_key, const uint8_t *decrypt_iv, const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:300,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:305,1
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:302,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:306,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:303,1
    - Dst: nvlist_pack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:308,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:310,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:313,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:316,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:317,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - dco
    - peerid
    argTypes:
    - dco_context_t*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 320
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 320
    functionName: dco_swap_keys
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_destroy
    - nvlist_create
    - msg
    - nvlist_add_number
    - snprintf
    - ioctl
    - CLEAR
    - free
    - nvlist_pack
    linkageType: ''
    returnType: int
    signature: 'int dco_swap_keys(dco_context_t *dco, unsigned int peerid) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:669,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:675,1
    - Dst: nvlist_unpack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:682,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:678,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:670,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:685,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:689,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:691,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:692,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:695,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 26
    argCount: 3
    argNames:
    - dco
    - es
    - arg
    argTypes:
    - dco_context_t*
    - struct event_set*
    - void*
    constantsTouched: []
    func_position:
      end: 696
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 696
    functionName: dco_event_set
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_unpack
    - nvlist_destroy
    - msg
    - snprintf
    - ioctl
    - CLEAR
    - write
    - nvlist_get_number
    - event_ctl
    linkageType: ''
    returnType: void
    signature: 'void dco_event_set(dco_context_t *dco, struct event_set *es, void
      *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:329,1
    - Dst: nvlist_add_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:332,1
    - Dst: nvlist_create
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:331,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:335,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:334,1
    - Dst: nvlist_pack
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:337,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:339,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:342,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:345,1
    - Dst: nvlist_destroy
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:346,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - dco
    - peerid
    argTypes:
    - dco_context_t*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 349
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 349
    functionName: dco_del_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - nvlist_destroy
    - nvlist_create
    - msg
    - nvlist_add_number
    - snprintf
    - ioctl
    - CLEAR
    - free
    - nvlist_pack
    linkageType: ''
    returnType: int
    signature: 'int dco_del_peer(dco_context_t *dco, unsigned int peerid) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:704,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:710,1
    - Dst: nvlist_get_number
      Src: /src/openvpn/src/openvpn/dco_freebsd.c:711,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 3
    argNames:
    - m
    - peerid
    - nvl
    argTypes:
    - struct multi_context*
    - uint32_t
    - nvlist_t*
    constantsTouched: []
    func_position:
      end: 712
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 712
    functionName: dco_update_peer_stat
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached:
    - msg
    - nvlist_get_number
    linkageType: ''
    returnType: void
    signature: 'static void dco_update_peer_stat(struct multi_context *m, uint32_t
      peerid, const nvlist_t *nvl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 794
      start: 790
    functionDepth: 0
    functionLinenumber: 790
    functionLinenumberEnd: 794
    functionName: dco_get_supported_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/dco_freebsd.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *dco_get_supported_ciphers(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/lzo.c:46,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/lzo.c:55,1
    - Dst: lzo_init
      Src: /src/openvpn/src/openvpn/lzo.c:50,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/lzo.c:53,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/lzo.c:47,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/lzo.c:56,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 57
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 57
    functionName: lzo_compress_init
    functionSourceFile: /src/openvpn/src/openvpn/lzo.c
    functionUses: []
    functionsReached:
    - msg
    - lzo_init
    - ASSERT
    - malloc
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'static void lzo_compress_init(struct compress_context *compctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/lzo.c:62,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 64
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 64
    functionName: lzo_compress_uninit
    functionSourceFile: /src/openvpn/src/openvpn/lzo.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void lzo_compress_uninit(struct compress_context *compctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/lzo.c:71,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 3
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 73
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 73
    functionName: lzo_compress
    functionSourceFile: /src/openvpn/src/openvpn/lzo.c
    functionUses: []
    functionsReached:
    - buf_prepend
    linkageType: ''
    returnType: void
    signature: 'static void lzo_compress(struct buffer *buf, struct buffer work, struct
      compress_context *compctx, const struct frame *frame) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/lzo.c:89,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/lzo.c:91,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/lzo.c:92,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/lzo.c:92,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/lzo.c:89,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/lzo.c:96,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/lzo.c:96,1
    - Dst: LZO_DECOMPRESS
      Src: /src/openvpn/src/openvpn/lzo.c:97,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/lzo.c:97,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/lzo.c:97,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/lzo.c:101,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/lzo.c:106,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/lzo.c:97,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/lzo.c:121,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/lzo.c:109,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/lzo.c:106,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 34
    argCount: 4
    argNames:
    - buf
    - work
    - compctx
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct compress_context*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 124
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 124
    functionName: lzo_decompress
    functionSourceFile: /src/openvpn/src/openvpn/lzo.c
    functionUses: []
    functionsReached:
    - buf_safe
    - buf_init
    - BPTR
    - dmsg
    - BLEN
    - LZO_DECOMPRESS
    - ASSERT
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static void lzo_decompress(struct buffer *buf, struct buffer work,
      struct compress_context *compctx, const struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_user_pass_cr
      Src: /src/openvpn/src/openvpn/misc.h:156,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 4
    argNames:
    - up
    - auth_file
    - prefix
    - flags
    argTypes:
    - struct user_pass*
    - char*
    - char*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 157
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 157
    functionName: get_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/misc.h
    functionUses: []
    functionsReached:
    - get_user_pass_cr
    linkageType: ''
    returnType: bool
    signature: 'static inline bool get_user_pass(struct user_pass *up, const char
      *auth_file, const char *prefix, const unsigned int flags) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/comp.c:144,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/comp.c:148,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/comp.c:145,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/comp.c:154,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/comp.c:156,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/comp.c:157,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - opt
    - out
    argTypes:
    - struct compress_options*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 158
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 158
    functionName: comp_generate_peer_info_string
    functionSourceFile: /src/openvpn/src/openvpn/comp.c
    functionUses: []
    functionsReached:
    - buf_printf
    linkageType: ''
    returnType: void
    signature: 'void comp_generate_peer_info_string(const struct compress_options
      *opt, struct buffer *out) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/comp.c:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - compctx
    argTypes:
    - struct compress_context*
    constantsTouched: []
    func_position:
      end: 115
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 115
    functionName: comp_uninit
    functionSourceFile: /src/openvpn/src/openvpn/comp.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void comp_uninit(struct compress_context *compctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/comp.c:92,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/comp.c:99,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/comp.c:101,1
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/comp.c:99,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 104
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 104
    functionName: compv2_escape_data_ifneeded
    functionSourceFile: /src/openvpn/src/openvpn/comp.c
    functionUses: []
    functionsReached:
    - buf_prepend
    - ASSERT
    - BPTR
    linkageType: ''
    returnType: void
    signature: 'void compv2_escape_data_ifneeded(struct buffer *buf) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/comp.c:173,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/comp.c:184,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/comp.c:176,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/comp.c:191,1
    - Dst: comp_non_stub_enabled
      Src: /src/openvpn/src/openvpn/comp.c:182,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/comp.c:199,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 2
    argNames:
    - info
    - msglevel
    argTypes:
    - struct compress_options*
    - int
    constantsTouched: []
    func_position:
      end: 205
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 205
    functionName: check_compression_settings_valid
    functionSourceFile: /src/openvpn/src/openvpn/comp.c
    functionUses: []
    functionsReached:
    - comp_non_stub_enabled
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool check_compression_settings_valid(struct compress_options *info,
      int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/comp.c:122,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/comp.c:125,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/comp.c:123,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/comp.c:124,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - compctx
    - so
    argTypes:
    - struct compress_context*
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 127
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 127
    functionName: comp_print_stats
    functionSourceFile: /src/openvpn/src/openvpn/comp.c
    functionUses: []
    functionsReached:
    - status_printf
    linkageType: ''
    returnType: void
    signature: 'void comp_print_stats(const struct compress_context *compctx, struct
      status_output *so) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/comp.c:45,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/comp.c:58,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/comp.c:72,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/comp.c:66,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/comp.c:51,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 19
    argCount: 1
    argNames:
    - opt
    argTypes:
    - struct compress_options*
    constantsTouched: []
    func_position:
      end: 84
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 84
    functionName: comp_init
    functionSourceFile: /src/openvpn/src/openvpn/comp.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct compress_context*
    signature: 'struct compress_context *comp_init(const struct compress_options *opt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 79
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 79
    functionName: perf_push
    functionSourceFile: /src/openvpn/src/openvpn/perf.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void perf_push(int type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 87
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 87
    functionName: perf_output_results
    functionSourceFile: /src/openvpn/src/openvpn/perf.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void perf_output_results(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 83
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 83
    functionName: perf_pop
    functionSourceFile: /src/openvpn/src/openvpn/perf.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void perf_pop(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: win32_signal_close
      Src: /src/openvpn/src/openvpn/sig.h:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 96
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 96
    functionName: halt_non_edge_triggered_signals
    functionSourceFile: /src/openvpn/src/openvpn/sig.h
    functionUses: []
    functionsReached:
    - win32_signal_close
    linkageType: ''
    returnType: void
    signature: 'static inline void halt_non_edge_triggered_signals(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: win32_signal_get
      Src: /src/openvpn/src/openvpn/sig.h:112,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - sig
    argTypes:
    - int*
    constantsTouched: []
    func_position:
      end: 120
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 120
    functionName: get_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.h
    functionUses: []
    functionsReached:
    - win32_signal_get
    linkageType: ''
    returnType: void
    signature: 'static inline void get_signal(volatile int *sig) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - sdelta
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 98
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 98
    functionName: get_stack_index
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int get_stack_index(int sdelta) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_stack_index
      Src: /src/openvpn/src/openvpn/perf.c:167,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 176
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 176
    functionName: pop_perf_index
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - msg
    - get_stack_index
    linkageType: ''
    returnType: void
    signature: 'static void pop_perf_index(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_perf_index
      Src: /src/openvpn/src/openvpn/perf.c:125,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - sdelta
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 134
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 134
    functionName: get_perf
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - get_perf_index
    linkageType: ''
    returnType: struct perf*
    signature: 'static struct perf *get_perf(int sdelta) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/perf.c:193,1
    - Dst: tv_clear
      Src: /src/openvpn/src/openvpn/perf.c:195,1
    - Dst: tv_subtract
      Src: /src/openvpn/src/openvpn/perf.c:194,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/perf.c:193,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct perf*
    constantsTouched: []
    func_position:
      end: 196
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 196
    functionName: update_sofar
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - tv_subtract
    - gettimeofday
    - tv_clear
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void update_sofar(struct perf *p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: state_must_be
      Src: /src/openvpn/src/openvpn/perf.c:210,1
    - Dst: update_sofar
      Src: /src/openvpn/src/openvpn/perf.c:211,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct perf*
    constantsTouched: []
    func_position:
      end: 220
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 220
    functionName: perf_stop
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - update_sofar
    - state_must_be
    linkageType: ''
    returnType: void
    signature: 'static void perf_stop(struct perf *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: state_must_be
      Src: /src/openvpn/src/openvpn/perf.c:233,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/perf.c:234,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/perf.c:234,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct perf*
    constantsTouched: []
    func_position:
      end: 236
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 236
    functionName: perf_resume
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - gettimeofday
    - state_must_be
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void perf_resume(struct perf *p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_perf
      Src: /src/openvpn/src/openvpn/perf.c:265,1
    - Dst: perf_stop
      Src: /src/openvpn/src/openvpn/perf.c:269,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/perf.c:268,1
    - Dst: get_perf
      Src: /src/openvpn/src/openvpn/perf.c:266,1
    - Dst: perf_resume
      Src: /src/openvpn/src/openvpn/perf.c:273,1
    - Dst: pop_perf_index
      Src: /src/openvpn/src/openvpn/perf.c:276,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 277
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 277
    functionName: perf_pop
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - perf_stop
    - perf_resume
    - get_perf
    - ASSERT
    - pop_perf_index
    linkageType: ''
    returnType: void
    signature: 'void perf_pop(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_stack_index
      Src: /src/openvpn/src/openvpn/perf.c:103,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - sdelta
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 120
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 120
    functionName: get_perf_index
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - get_stack_index
    linkageType: ''
    returnType: int
    signature: 'static int get_perf_index(int sdelta) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_stack_index
      Src: /src/openvpn/src/openvpn/perf.c:139,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:150,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:160,1
    - Dst: get_stack_index
      Src: /src/openvpn/src/openvpn/perf.c:140,1
    - Dst: perf_print_state
      Src: /src/openvpn/src/openvpn/perf.c:149,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - pindex
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 162
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 162
    functionName: push_perf_index
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - msg
    - get_stack_index
    - perf_print_state
    linkageType: ''
    returnType: void
    signature: 'static void push_perf_index(int pindex) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:183,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - p
    - wanted
    argTypes:
    - struct perf*
    - int
    constantsTouched: []
    func_position:
      end: 187
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 187
    functionName: state_must_be
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void state_must_be(const struct perf *p, const int wanted) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: state_must_be
      Src: /src/openvpn/src/openvpn/perf.c:201,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/perf.c:202,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/perf.c:202,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct perf*
    constantsTouched: []
    func_position:
      end: 205
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 205
    functionName: perf_start
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - gettimeofday
    - state_must_be
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void perf_start(struct perf *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: state_must_be
      Src: /src/openvpn/src/openvpn/perf.c:225,1
    - Dst: update_sofar
      Src: /src/openvpn/src/openvpn/perf.c:226,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct perf*
    constantsTouched: []
    func_position:
      end: 228
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 228
    functionName: perf_interrupt
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - update_sofar
    - state_must_be
    linkageType: ''
    returnType: void
    signature: 'static void perf_interrupt(struct perf *p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/perf.c:244,1
    - Dst: push_perf_index
      Src: /src/openvpn/src/openvpn/perf.c:245,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/perf.c:244,1
    - Dst: get_perf
      Src: /src/openvpn/src/openvpn/perf.c:248,1
    - Dst: get_perf
      Src: /src/openvpn/src/openvpn/perf.c:247,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/perf.c:250,1
    - Dst: perf_interrupt
      Src: /src/openvpn/src/openvpn/perf.c:254,1
    - Dst: perf_start
      Src: /src/openvpn/src/openvpn/perf.c:256,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 257
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 257
    functionName: perf_push
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - perf_interrupt
    - perf_start
    - SIZE
    - get_perf
    - ASSERT
    - push_perf_index
    linkageType: ''
    returnType: void
    signature: 'void perf_push(int type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:283,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:290,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 293
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 293
    functionName: perf_output_results
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void perf_output_results(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/perf.c:298,1
    - Dst: tv_string
      Src: /src/openvpn/src/openvpn/perf.c:310,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:301,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:300,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/perf.c:306,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/perf.c:316,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - lev
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 317
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 317
    functionName: perf_print_state
    functionSourceFile: /src/openvpn/src/openvpn/perf.c
    functionUses: []
    functionsReached:
    - msg
    - tv_string
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void perf_print_state(int lev) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultiByteToWideChar
      Src: /src/openvpn/src/openvpn/win32-util.c:42,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/win32-util.c:43,1
    - Dst: MultiByteToWideChar
      Src: /src/openvpn/src/openvpn/win32-util.c:44,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - utf8
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 46
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 46
    functionName: wide_string
    functionSourceFile: /src/openvpn/src/openvpn/win32-util.c
    functionUses: []
    functionsReached:
    - MultiByteToWideChar
    - gc_malloc
    linkageType: ''
    returnType: WCHAR*
    signature: 'WCHAR *wide_string(const char *utf8, struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: isdigit
      Src: /src/openvpn/src/openvpn/win32-util.c:94,1
    - Dst: tolower
      Src: /src/openvpn/src/openvpn/win32-util.c:109,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 19
    argCount: 3
    argNames:
    - str
    - n
    - pre
    argTypes:
    - char*
    - bool
    - char*
    constantsTouched: []
    func_position:
      end: 114
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 114
    functionName: cmp_prefix
    functionSourceFile: /src/openvpn/src/openvpn/win32-util.c
    functionUses: []
    functionsReached:
    - tolower
    - isdigit
    linkageType: ''
    returnType: bool
    signature: 'static bool cmp_prefix(const char *str, const bool n, const char *pre) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetTempPathW
      Src: /src/openvpn/src/openvpn/win32-util.c:156,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32-util.c:163,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32-util.c:156,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/win32-util.c:161,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/win32-util.c:168,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 170
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 170
    functionName: win_get_tempdir
    functionSourceFile: /src/openvpn/src/openvpn/win32-util.c
    functionUses: []
    functionsReached:
    - msg
    - GetTempPathW
    - _countof
    - WideCharToMultiByte
    linkageType: ''
    returnType: char*
    signature: 'const char *win_get_tempdir(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/win32-util.c:52,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/win32-util.c:58,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/win32-util.c:55,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 2
    argNames:
    - utf16
    - gc
    argTypes:
    - wchar_t*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 62
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 62
    functionName: utf16to8
    functionSourceFile: /src/openvpn/src/openvpn/win32-util.c
    functionUses: []
    functionsReached:
    - gc_malloc
    - WideCharToMultiByte
    linkageType: ''
    returnType: char*
    signature: 'char *utf16to8(const wchar_t *utf16, struct gc_arena *gc) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: cmp_prefix
      Src: /src/openvpn/src/openvpn/win32-util.c:119,1
    - Dst: cmp_prefix
      Src: /src/openvpn/src/openvpn/win32-util.c:131,1
    - Dst: cmp_prefix
      Src: /src/openvpn/src/openvpn/win32-util.c:135,1
    - Dst: cmp_prefix
      Src: /src/openvpn/src/openvpn/win32-util.c:123,1
    - Dst: cmp_prefix
      Src: /src/openvpn/src/openvpn/win32-util.c:127,1
    - Dst: cmp_prefix
      Src: /src/openvpn/src/openvpn/win32-util.c:139,1
    - Dst: cmp_prefix
      Src: /src/openvpn/src/openvpn/win32-util.c:143,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 1
    argNames:
    - fn
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 148
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 148
    functionName: win_safe_filename
    functionSourceFile: /src/openvpn/src/openvpn/win32-util.c
    functionUses: []
    functionsReached:
    - cmp_prefix
    linkageType: ''
    returnType: bool
    signature: 'bool win_safe_filename(const char *fn) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify.c:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: string_mod_remap_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - string_mod
    linkageType: ''
    returnType: void
    signature: 'static void string_mod_remap_name(char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:137,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 139
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 139
    functionName: tls_lock_common_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void tls_lock_common_name(struct tls_multi *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:458,1
    - Dst: backend_x509_write_pem
      Src: /src/openvpn/src/openvpn/ssl_verify.c:460,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 3
    argNames:
    - es
    - peer_cert
    - pem_export_fname
    argTypes:
    - struct env_set*
    - openvpn_x509_cert_t*
    - char*
    constantsTouched: []
    func_position:
      end: 461
      start: 453
    functionDepth: 0
    functionLinenumber: 453
    functionLinenumberEnd: 461
    functionName: verify_cert_cert_export_env
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - setenv_str
    - backend_x509_write_pem
    linkageType: ''
    returnType: bool
    signature: 'static bool verify_cert_cert_export_env(struct env_set *es, openvpn_x509_cert_t
      *peer_cert, const char *pem_export_fname) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:806,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:809,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:811,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - multi
    - client_reason
    argTypes:
    - struct tls_multi*
    - char*
    constantsTouched: []
    func_position:
      end: 813
      start: 803
    functionDepth: 0
    functionLinenumber: 803
    functionLinenumberEnd: 813
    functionName: auth_set_client_reason
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - strlen
    - string_alloc
    - free
    linkageType: ''
    returnType: void
    signature: 'void auth_set_client_reason(struct tls_multi *multi, const char *client_reason) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buffer_read_from_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1014,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1016,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1018,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 7
    argCount: 2
    argNames:
    - ads
    - gc
    argTypes:
    - struct auth_deferred_status*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1023
      start: 1007
    functionDepth: 0
    functionLinenumber: 1007
    functionLinenumberEnd: 1023
    functionName: key_state_check_auth_failed_message_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - buffer_read_from_file
    - BLEN
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static char *key_state_check_auth_failed_message_file(const struct
      auth_deferred_status *ads, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1276,1
    - Dst: key_state_check_auth_failed_message_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1277,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1282,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1280,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 2
    argNames:
    - multi
    - status
    argTypes:
    - struct tls_multi*
    - struct auth_deferred_status*
    constantsTouched: []
    func_position:
      end: 1283
      start: 1272
    functionDepth: 0
    functionLinenumber: 1272
    functionLinenumberEnd: 1283
    functionName: check_for_client_reason
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - key_state_check_auth_failed_message_file
    - auth_set_client_reason
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void check_for_client_reason(struct tls_multi *multi, struct
      auth_deferred_status *status) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: env_set_del
      Src: /src/openvpn/src/openvpn/ssl_verify.c:466,1
    - Dst: unlink
      Src: /src/openvpn/src/openvpn/ssl_verify.c:469,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - es
    - pem_export_fname
    argTypes:
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 471
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 471
    functionName: verify_cert_cert_delete_env
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - env_set_del
    - unlink
    linkageType: ''
    returnType: void
    signature: 'static void verify_cert_cert_delete_env(struct env_set *es, const
      char *pem_export_fname) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1856,1
    - Dst: env_set_del
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1858,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1856,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 1862
      start: 1848
    functionDepth: 0
    functionLinenumber: 1848
    functionLinenumberEnd: 1862
    functionName: tls_x509_clear_env
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - strlen
    - env_set_del
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'void tls_x509_clear_env(struct env_set *es) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:114,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 2
    argNames:
    - multi
    - 'null'
    argTypes:
    - struct tls_multi*
    - bool
    constantsTouched: []
    func_position:
      end: 126
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 126
    functionName: tls_common_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - strlen
    linkageType: ''
    returnType: char*
    signature: 'const char *tls_common_name(const struct tls_multi *multi, const bool
      null) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 312
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 312
    functionName: print_nsCertType
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_nsCertType(int type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: x509_setenv_track
      Src: /src/openvpn/src/openvpn/ssl_verify.c:410,1
    - Dst: x509_setenv
      Src: /src/openvpn/src/openvpn/ssl_verify.c:414,1
    - Dst: x509_get_sha1_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify.c:423,1
    - Dst: x509_get_sha256_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify.c:424,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:426,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl_verify.c:428,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify.c:433,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:405,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:418,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify.c:428,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:438,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:439,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl_verify.c:433,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:433,1
    - Dst: backend_x509_get_serial
      Src: /src/openvpn/src/openvpn/ssl_verify.c:437,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:432,1
    - Dst: backend_x509_get_serial_hex
      Src: /src/openvpn/src/openvpn/ssl_verify.c:442,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:446,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:419,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:427,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:428,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:430,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:443,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:444,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 5
    argNames:
    - es
    - peer_cert
    - cert_depth
    - subject
    - x509_track
    argTypes:
    - struct env_set*
    - openvpn_x509_cert_t*
    - int
    - char*
    - struct x509_track*
    constantsTouched: []
    func_position:
      end: 447
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 447
    functionName: verify_cert_set_env
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - BPTR
    - x509_get_sha1_fingerprint
    - snprintf
    - BLEN
    - gc_new
    - format_hex_ex
    - setenv_str
    - gc_free
    - x509_setenv_track
    - x509_get_sha256_fingerprint
    - x509_setenv
    - backend_x509_get_serial
    - backend_x509_get_serial_hex
    linkageType: ''
    returnType: void
    signature: 'static void verify_cert_set_env(struct env_set *es, openvpn_x509_cert_t
      *peer_cert, int cert_depth, const char *subject, const struct x509_track *x509_track) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:981,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:985,1
    - Dst: key_state_rm_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl_verify.c:983,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:984,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:986,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:990,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:991,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:992,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:994,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:995,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:996,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:999,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 19
    argCount: 2
    argNames:
    - ads
    - opt
    argTypes:
    - struct auth_deferred_status*
    - struct tls_options*
    constantsTouched: []
    func_position:
      end: 1001
      start: 977
    functionDepth: 0
    functionLinenumber: 977
    functionLinenumberEnd: 1001
    functionName: key_state_gen_auth_control_files
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - gc_new
    - key_state_rm_auth_control_files
    - setenv_str
    - gc_free
    - platform_create_temp_file
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'static bool key_state_gen_auth_control_files(struct auth_deferred_status
      *ads, const struct tls_options *opt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:151,1
    - Dst: tls_deauthenticate
      Src: /src/openvpn/src/openvpn/ssl_verify.c:159,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:152,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:154,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:165,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 2
    argNames:
    - multi
    - username
    argTypes:
    - struct tls_multi*
    - char*
    constantsTouched: []
    func_position:
      end: 168
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 168
    functionName: tls_lock_username
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - strcmp
    - tls_deauthenticate
    - msg
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_lock_username(struct tls_multi *multi, const char
      *username) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/ssl_verify.c:840,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:841,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - ads
    argTypes:
    - struct auth_deferred_status*
    constantsTouched: []
    func_position:
      end: 844
      start: 835
    functionDepth: 0
    functionLinenumber: 835
    functionLinenumberEnd: 844
    functionName: key_state_rm_auth_pending_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - platform_unlink
    - free
    linkageType: ''
    returnType: void
    signature: 'static void key_state_rm_auth_pending_file(struct auth_deferred_status
      *ads) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:894,1
    - Dst: buf_chomp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:913,1
    - Dst: strtol
      Src: /src/openvpn/src/openvpn/ssl_verify.c:916,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:920,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:924,1
    - Dst: check_auth_pending_method
      Src: /src/openvpn/src/openvpn/ssl_verify.c:925,1
    - Dst: buf_chomp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:914,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:916,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:942,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:928,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:902,1
    - Dst: buf_chomp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:912,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/ssl_verify.c:931,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:938,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:904,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:919,1
    - Dst: send_auth_pending_messages
      Src: /src/openvpn/src/openvpn/ssl_verify.c:938,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:932,1
    - Dst: key_state_rm_auth_pending_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:944,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 35
    argCount: 3
    argNames:
    - ads
    - multi
    - session
    argTypes:
    - struct auth_deferred_status*
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 946
      start: 886
    functionDepth: 0
    functionLinenumber: 886
    functionLinenumberEnd: 946
    functionName: key_state_check_auth_pending_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - strtol
    - send_auth_pending_messages
    - BSTR
    - buf_chomp
    - msg
    - check_auth_pending_method
    - snprintf
    - auth_set_client_reason
    - buffer_list_file
    - key_state_rm_auth_pending_file
    linkageType: ''
    returnType: bool
    signature: 'static bool key_state_check_auth_pending_file(struct auth_deferred_status
      *ads, struct tls_multi *multi, struct tls_session *session) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: key_state_test_auth_control_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1084,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1089,1
    - Dst: man_def_auth_test
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1087,1
    - Dst: key_state_test_auth_control_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1085,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 2
    argNames:
    - cached
    - ks
    argTypes:
    - bool
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 1116
      start: 1072
    functionDepth: 0
    functionLinenumber: 1072
    functionLinenumberEnd: 1116
    functionName: update_key_auth_status
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - man_def_auth_test
    - ASSERT
    - key_state_test_auth_control_file
    linkageType: ''
    returnType: void
    signature: 'static void update_key_auth_status(bool cached, struct key_state *ks) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:178,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 2
    argNames:
    - multi
    - 'null'
    argTypes:
    - struct tls_multi*
    - bool
    constantsTouched: []
    func_position:
      end: 190
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 190
    functionName: tls_username
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - strlen
    linkageType: ''
    returnType: char*
    signature: 'const char *tls_username(const struct tls_multi *multi, const bool
      null) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1415,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1422,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1416,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1418,1
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1428,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1430,1
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1431,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1433,1
    - Dst: tls_deauthenticate
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1434,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1440,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1449,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1445,1
    - Dst: tls_deauthenticate
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1441,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1455,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1454,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1446,1
    - Dst: tls_deauthenticate
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1451,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 26
    argCount: 2
    argNames:
    - multi
    - cr_response
    argTypes:
    - struct tls_multi*
    - char*
    constantsTouched: []
    func_position:
      end: 1456
      start: 1405
    functionDepth: 0
    functionLinenumber: 1405
    functionLinenumberEnd: 1456
    functionName: verify_crresponse_script
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - openvpn_run_script
    - status_open
    - argv_parse_cmd
    - msg
    - argv_free
    - gc_new
    - setenv_str
    - status_printf
    - status_close
    - argv_new
    - tls_deauthenticate
    - gc_free
    - argv_printf_cat
    - platform_create_temp_file
    linkageType: ''
    returnType: void
    signature: 'void verify_crresponse_script(struct tls_multi *multi, const char
      *cr_response) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_verify.c:62,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - session
    argTypes:
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: setenv_untrusted
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - setenv_link_socket_actual
    linkageType: ''
    returnType: void
    signature: 'static void setenv_untrusted(struct tls_session *session) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1044,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1056,1
    - Dst: fgetc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1047,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 2
    argNames:
    - ads
    - cached
    argTypes:
    - struct auth_deferred_status*
    - bool
    constantsTouched: []
    func_position:
      end: 1063
      start: 1036
    functionDepth: 0
    functionLinenumber: 1036
    functionLinenumberEnd: 1063
    functionName: key_state_test_auth_control_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - fgetc
    - fopen
    - fclose
    linkageType: ''
    returnType: enum auth_deferred_result
    signature: 'static enum auth_deferred_result key_state_test_auth_control_file(struct
      auth_deferred_status *ads, bool cached) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: key_state_check_auth_pending_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1361,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1376,1
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1382,1
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1311,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1313,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1387,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1307,1
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1314,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1316,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1333,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1326,1
    - Dst: key_state_gen_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1331,1
    - Dst: check_for_client_reason
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1353,1
    - Dst: key_state_rm_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1372,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1380,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1291,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1292,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1301,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1298,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1312,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1321,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1340,1
    - Dst: key_state_rm_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1365,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1327,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1386,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 51
    argCount: 3
    argNames:
    - session
    - multi
    - up
    argTypes:
    - struct tls_session*
    - struct tls_multi*
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 1389
      start: 1287
    functionDepth: 0
    functionLinenumber: 1287
    functionLinenumberEnd: 1389
    functionName: verify_user_pass_script
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - msg
    - openvpn_run_script
    - status_open
    - gc_new
    - setenv_str
    - gc_free
    - setenv_del
    - key_state_check_auth_pending_file
    - argv_parse_cmd
    - key_state_gen_auth_control_files
    - status_close
    - argv_new
    - strlen
    - platform_create_temp_file
    - argv_free
    - check_for_client_reason
    - key_state_rm_auth_control_files
    - status_printf
    - platform_unlink
    - argv_printf_cat
    linkageType: ''
    returnType: int
    signature: 'static int verify_user_pass_script(struct tls_session *session, struct
      tls_multi *multi, const struct user_pass *up) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:200,1
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/ssl_verify.c:204,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify.c:208,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify.c:208,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_verify.c:209,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:209,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 3
    argNames:
    - session
    - error_depth
    - cert_hash
    argTypes:
    - struct tls_session*
    - int
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 211
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 211
    functionName: cert_hash_remember
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - memcpy
    - BPTR
    - BLEN
    - ALLOC_OBJ
    - ASSERT
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: void
    signature: 'void cert_hash_remember(struct tls_session *session, const int error_depth,
      const struct buffer *cert_hash) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:242,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 21
    argCount: 2
    argNames:
    - chs1
    - chs2
    argTypes:
    - struct cert_hash_set*
    - struct cert_hash_set*
    constantsTouched: []
    func_position:
      end: 262
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 262
    functionName: cert_hash_compare
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: bool
    signature: 'bool cert_hash_compare(const struct cert_hash_set *chs1, const struct
      cert_hash_set *chs2) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:514,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/ssl_verify.c:520,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:517,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/ssl_verify.c:519,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:515,1
    - Dst: argv_msg_prefix
      Src: /src/openvpn/src/openvpn/ssl_verify.c:522,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/ssl_verify.c:523,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:525,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:526,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:530,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:535,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 4
    argNames:
    - verify_command
    - es
    - cert_depth
    - subject
    argTypes:
    - char*
    - struct env_set*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 538
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 538
    functionName: verify_cert_call_command
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - argv_msg_prefix
    - openvpn_run_script
    - argv_parse_cmd
    - argv_free
    - msg
    - gc_new
    - setenv_str
    - gc_free
    - argv_new
    - argv_printf_cat
    linkageType: ''
    returnType: result_t
    signature: 'static result_t verify_cert_call_command(const char *verify_command,
      struct env_set *es, int cert_depth, char *subject) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: min_uint
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1134,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1134,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 1137
      start: 1131
    functionDepth: 0
    functionLinenumber: 1131
    functionLinenumberEnd: 1137
    functionName: tls_authentication_status_use_cache
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - SIZE
    - min_uint
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_authentication_status_use_cache(struct tls_multi *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1396,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1401,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1398,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 2
    argNames:
    - multi
    - cr_response
    argTypes:
    - struct tls_multi*
    - char*
    constantsTouched: []
    func_position:
      end: 1402
      start: 1392
    functionDepth: 0
    functionLinenumber: 1392
    functionLinenumberEnd: 1402
    functionName: verify_crresponse_plugin
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - setenv_str
    - setenv_del
    - plugin_call
    linkageType: ''
    returnType: void
    signature: 'void verify_crresponse_plugin(struct tls_multi *multi, const char
      *cr_response) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1469,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1474,1
    - Dst: key_state_gen_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1472,1
    - Dst: key_state_check_auth_pending_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1486,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1480,1
    - Dst: check_for_client_reason
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1494,1
    - Dst: key_state_rm_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1500,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1503,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 21
    argCount: 3
    argNames:
    - session
    - multi
    - up
    argTypes:
    - struct tls_session*
    - struct tls_multi*
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 1506
      start: 1461
    functionDepth: 0
    functionLinenumber: 1461
    functionLinenumberEnd: 1506
    functionName: verify_user_pass_plugin
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - key_state_check_auth_pending_file
    - key_state_gen_auth_control_files
    - msg
    - plugin_call
    - check_for_client_reason
    - key_state_rm_auth_control_files
    - setenv_str
    - setenv_del
    linkageType: ''
    returnType: int
    signature: 'static int verify_user_pass_plugin(struct tls_session *session, struct
      tls_multi *multi, const struct user_pass *up) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1546,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1551,1
    - Dst: add_session_token_env
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1560,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1548,1
    - Dst: setenv_untrusted
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1554,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1565,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 3
    argNames:
    - up
    - multi
    - session
    argTypes:
    - struct user_pass*
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1568
      start: 1541
    functionDepth: 0
    functionLinenumber: 1541
    functionLinenumberEnd: 1568
    functionName: set_verify_user_pass_env
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - add_session_token_env
    - setenv_untrusted
    - msg
    - setenv_str
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'static bool set_verify_user_pass_env(struct user_pass *up, struct
      tls_multi *multi, struct tls_session *session) '
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1600,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1626,1
    - Dst: is_auth_token
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1638,1
    - Dst: strdup
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1647,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1664,1
    - Dst: set_verify_user_pass_env
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1682,1
    - Dst: tls_lock_username
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1722,1
    - Dst: strdup
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1764,1
    - Dst: string_mod_remap_name
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1612,1
    - Dst: verify_auth_token
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1640,1
    - Dst: wipe_auth_token
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1671,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1673,1
    - Dst: verify_user_pass_script
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1704,1
    - Dst: verify_user_pass_plugin
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1699,1
    - Dst: generate_auth_token
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1771,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1774,1
    - Dst: management_enable_def_auth
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1605,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1624,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1613,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1697,1
    - Dst: ssl_verify_username_length
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1709,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1629,1
    - Dst: verify_user_pass_management
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1694,1
    - Dst: set_common_name
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1749,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1782,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 100
    argCount: 3
    argNames:
    - up
    - multi
    - session
    argTypes:
    - struct user_pass*
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1784
      start: 1594
    functionDepth: 0
    functionLinenumber: 1594
    functionLinenumberEnd: 1784
    functionName: verify_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - management_enable_def_auth
    - verify_auth_token
    - set_verify_user_pass_env
    - msg
    - strdup
    - is_auth_token
    - string_mod
    - strncmp
    - generate_auth_token
    - string_mod_remap_name
    - tls_lock_username
    - plugin_defined
    - strncpy
    - verify_user_pass_management
    - set_common_name
    - verify_user_pass_script
    - ssl_verify_username_length
    - wipe_auth_token
    - verify_user_pass_plugin
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void verify_user_pass(struct user_pass *up, struct tls_multi *multi,
      struct tls_session *session) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:221,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:223,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - chs
    argTypes:
    - struct cert_hash_set*
    constantsTouched: []
    func_position:
      end: 225
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 225
    functionName: cert_hash_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void cert_hash_free(struct cert_hash_set *chs) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:271,1
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/ssl_verify.c:277,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_verify.c:278,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 9
    argCount: 1
    argNames:
    - chs
    argTypes:
    - struct cert_hash_set*
    constantsTouched: []
    func_position:
      end: 284
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 284
    functionName: cert_hash_copy
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - memcpy
    - ALLOC_OBJ_CLEAR
    - ALLOC_OBJ
    linkageType: ''
    returnType: struct cert_hash_set*
    signature: 'static struct cert_hash_set *cert_hash_copy(const struct cert_hash_set
      *chs) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1574,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1576,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - session
    - username
    argTypes:
    - struct tls_session*
    - char*
    constantsTouched: []
    func_position:
      end: 1586
      start: 1570
    functionDepth: 0
    functionLinenumber: 1570
    functionLinenumberEnd: 1586
    functionName: ssl_verify_username_length
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - strlen
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_verify_username_length(struct tls_session *session, const
      char *username) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: set_common_name
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1794,1
    - Dst: tls_deauthenticate
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1809,1
    - Dst: set_common_name
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1808,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1801,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1803,1
    - Dst: cert_hash_compare
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1817,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1819,1
    - Dst: tls_deauthenticate
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1823,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1830,1
    - Dst: platform_gen_path
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1833,1
    - Dst: platform_test_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1835,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1839,1
    - Dst: wipe_auth_token
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1838,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1844,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1835,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 39
    argCount: 2
    argNames:
    - multi
    - session
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1846
      start: 1786
    functionDepth: 0
    functionLinenumber: 1786
    functionLinenumberEnd: 1846
    functionName: verify_final_auth_checks
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - platform_test_file
    - platform_gen_path
    - cert_hash_compare
    - msg
    - gc_new
    - strcmp
    - wipe_auth_token
    - gc_free
    - tls_deauthenticate
    - set_common_name
    linkageType: ''
    returnType: void
    signature: 'void verify_final_auth_checks(struct tls_multi *multi, struct tls_session
      *session) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/ssl_verify.c:480,1
    - Dst: plugin_call_ssl
      Src: /src/openvpn/src/openvpn/ssl_verify.c:487,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:489,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:483,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:485,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:493,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:498,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 13
    argCount: 5
    argNames:
    - plugins
    - es
    - cert_depth
    - cert
    - subject
    argTypes:
    - struct plugin_list*
    - struct env_set*
    - int
    - openvpn_x509_cert_t*
    - char*
    constantsTouched: []
    func_position:
      end: 504
      start: 476
    functionDepth: 0
    functionLinenumber: 476
    functionLinenumberEnd: 504
    functionName: verify_cert_call_plugin
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - argv_printf
    - argv_free
    - msg
    - plugin_call_ssl
    - argv_new
    - plugin_defined
    linkageType: ''
    returnType: result_t
    signature: 'static result_t verify_cert_call_plugin(const struct plugin_list *plugins,
      struct env_set *es, int cert_depth, openvpn_x509_cert_t *cert, char *subject) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:852,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_verify.c:861,1
    - Dst: extract_var_peer_info
      Src: /src/openvpn/src/openvpn/ssl_verify.c:854,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:866,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:857,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_verify.c:871,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:874,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 2
    argNames:
    - peer_info
    - method
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 876
      start: 849
    functionDepth: 0
    functionLinenumber: 849
    functionLinenumberEnd: 876
    functionName: check_auth_pending_method
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - gc_new
    - strcmp
    - gc_free
    - extract_var_peer_info
    - strtok
    linkageType: ''
    returnType: bool
    signature: 'static bool check_auth_pending_method(const char *peer_info, const
      char *method) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/ssl_verify.c:958,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:965,1
    - Dst: key_state_rm_auth_pending_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:968,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:959,1
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/ssl_verify.c:964,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - ads
    argTypes:
    - struct auth_deferred_status*
    constantsTouched: []
    func_position:
      end: 969
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 969
    functionName: key_state_rm_auth_control_files
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - key_state_rm_auth_pending_file
    - platform_unlink
    - free
    linkageType: ''
    returnType: void
    signature: 'void key_state_rm_auth_control_files(struct auth_deferred_status *ads) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1243,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1246,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 4
    argNames:
    - multi
    - mda_key_id
    - auth
    - client_reason
    argTypes:
    - struct tls_multi*
    - unsigned int
    - bool
    - char*
    constantsTouched: []
    func_position:
      end: 1255
      start: 1236
    functionDepth: 0
    functionLinenumber: 1236
    functionLinenumberEnd: 1255
    functionName: tls_authenticate_key
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - get_key_scan
    - auth_set_client_reason
    linkageType: ''
    returnType: bool
    signature: 'bool tls_authenticate_key(struct tls_multi *multi, const unsigned
      int mda_key_id, const bool auth, const char *client_reason) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: wipe_auth_token
      Src: /src/openvpn/src/openvpn/ssl_verify.c:73,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 82
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 82
    functionName: tls_deauthenticate
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - wipe_auth_token
    linkageType: ''
    returnType: void
    signature: 'static void tls_deauthenticate(struct tls_multi *multi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cert_hash_copy
      Src: /src/openvpn/src/openvpn/ssl_verify.c:291,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 293
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 293
    functionName: tls_lock_cert_hash_set
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - cert_hash_copy
    linkageType: ''
    returnType: void
    signature: 'void tls_lock_cert_hash_set(struct tls_multi *multi) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: x509_verify_ns_cert_type
      Src: /src/openvpn/src/openvpn/ssl_verify.c:329,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:331,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:336,1
    - Dst: print_nsCertType
      Src: /src/openvpn/src/openvpn/ssl_verify.c:337,1
    - Dst: print_nsCertType
      Src: /src/openvpn/src/openvpn/ssl_verify.c:332,1
    - Dst: x509_verify_cert_ku
      Src: /src/openvpn/src/openvpn/ssl_verify.c:345,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:347,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:351,1
    - Dst: x509_verify_cert_eku
      Src: /src/openvpn/src/openvpn/ssl_verify.c:359,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:361,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:378,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify.c:379,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:376,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:385,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:381,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify.c:374,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:365,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 48
    argCount: 4
    argNames:
    - opt
    - peer_cert
    - subject
    - common_name
    argTypes:
    - struct tls_options*
    - openvpn_x509_cert_t*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 392
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 392
    functionName: verify_peer_cert
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - msg
    - x509_verify_cert_ku
    - strcmp
    - print_nsCertType
    - x509_verify_ns_cert_type
    - x509_verify_cert_eku
    - strlen
    - strncmp
    linkageType: ''
    returnType: result_t
    signature: 'static result_t verify_peer_cert(const struct tls_options *opt, openvpn_x509_cert_t
      *peer_cert, const char *subject, const char *common_name) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:550,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:562,1
    - Dst: backend_x509_get_serial
      Src: /src/openvpn/src/openvpn/ssl_verify.c:552,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:560,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:555,1
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/ssl_verify.c:565,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:568,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/ssl_verify.c:579,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:581,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 20
    argCount: 4
    argNames:
    - crl_dir
    - cert
    - subject
    - cert_depth
    argTypes:
    - char*
    - openvpn_x509_cert_t*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 583
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 583
    functionName: verify_check_crl_dir
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - platform_open
    - gc_new
    - gc_free
    - backend_x509_get_serial
    - close
    linkageType: ''
    returnType: result_t
    signature: 'static result_t verify_check_crl_dir(const char *crl_dir, openvpn_x509_cert_t
      *cert, const char *subject, int cert_depth) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: tls_authentication_status_use_cache
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1153,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1157,1
    - Dst: TLS_AUTHENTICATED
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1158,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1186,1
    - Dst: update_key_auth_status
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1161,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1190,1
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1191,1
    - Dst: key_state_check_auth_failed_message_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1192,1
    - Dst: key_state_check_auth_failed_message_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1193,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1197,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1210,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1201,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 36
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 1229
      start: 1139
    functionDepth: 0
    functionLinenumber: 1139
    functionLinenumberEnd: 1229
    functionName: tls_authentication_status
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - TLS_AUTHENTICATED
    - dmsg
    - get_key_scan
    - gc_new
    - get_primary_key
    - key_state_check_auth_failed_message_file
    - auth_set_client_reason
    - gc_free
    - tls_authentication_status_use_cache
    - update_key_auth_status
    linkageType: ''
    returnType: enum tls_auth_status
    signature: 'enum tls_auth_status tls_authentication_status(struct tls_multi *multi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:89,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:98,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:95,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - session
    - common_name
    argTypes:
    - struct tls_session*
    - char*
    constantsTouched: []
    func_position:
      end: 99
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 99
    functionName: set_common_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - string_alloc
    - setenv_str
    - free
    linkageType: ''
    returnType: void
    signature: 'void set_common_name(struct tls_session *session, const char *common_name) '
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: string_mod_remap_name
      Src: /src/openvpn/src/openvpn/ssl_verify.c:609,1
    - Dst: string_replace_leading
      Src: /src/openvpn/src/openvpn/ssl_verify.c:610,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:623,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:648,1
    - Dst: x509_get_sha256_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify.c:677,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:696,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify.c:706,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:731,1
    - Dst: setenv_untrusted
      Src: /src/openvpn/src/openvpn/ssl_verify.c:740,1
    - Dst: verify_cert_call_plugin
      Src: /src/openvpn/src/openvpn/ssl_verify.c:749,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:775,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify.c:591,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl_verify.c:633,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:708,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/ssl_verify.c:721,1
    - Dst: verify_cert_set_env
      Src: /src/openvpn/src/openvpn/ssl_verify.c:737,1
    - Dst: verify_peer_cert
      Src: /src/openvpn/src/openvpn/ssl_verify.c:743,1
    - Dst: tls_verify_crl_missing
      Src: /src/openvpn/src/openvpn/ssl_verify.c:773,1
    - Dst: verify_cert_cert_delete_env
      Src: /src/openvpn/src/openvpn/ssl_verify.c:786,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify.c:793,1
    - Dst: verify_check_crl_dir
      Src: /src/openvpn/src/openvpn/ssl_verify.c:766,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:781,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify.c:595,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:603,1
    - Dst: backend_x509_get_username
      Src: /src/openvpn/src/openvpn/ssl_verify.c:618,1
    - Dst: x509_get_sha1_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify.c:673,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:637,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:651,1
    - Dst: string_mod_remap_name
      Src: /src/openvpn/src/openvpn/ssl_verify.c:657,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl_verify.c:706,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify.c:706,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/ssl_verify.c:725,1
    - Dst: verify_cert_cert_export_env
      Src: /src/openvpn/src/openvpn/ssl_verify.c:729,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl_verify.c:789,1
    - Dst: x509_get_subject
      Src: /src/openvpn/src/openvpn/ssl_verify.c:600,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_verify.c:613,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:686,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/ssl_verify.c:696,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify.c:662,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify.c:697,1
    - Dst: set_common_name
      Src: /src/openvpn/src/openvpn/ssl_verify.c:718,1
    - Dst: verify_cert_call_command
      Src: /src/openvpn/src/openvpn/ssl_verify.c:755,1
    CyclomaticComplexity: 59
    EdgeCount: 59
    ICount: 105
    argCount: 3
    argNames:
    - session
    - cert
    - cert_depth
    argTypes:
    - struct tls_session*
    - openvpn_x509_cert_t*
    - int
    constantsTouched: []
    func_position:
      end: 796
      start: 585
    functionDepth: 0
    functionLinenumber: 585
    functionLinenumberEnd: 796
    functionName: verify_cert
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - verify_cert_cert_export_env
    - msg
    - BLEN
    - memcmp_constant_time
    - verify_cert_cert_delete_env
    - setenv_untrusted
    - BPTR
    - max_int
    - verify_cert_set_env
    - gc_new
    - format_hex_ex
    - string_mod_remap_name
    - gc_free
    - verify_cert_call_plugin
    - set_common_name
    - verify_cert_call_command
    - buf_printf
    - string_replace_leading
    - x509_get_subject
    - tls_clear_error
    - verify_check_crl_dir
    - x509_get_sha256_fingerprint
    - platform_create_temp_file
    - alloc_buf_gc
    - verify_peer_cert
    - tls_verify_crl_missing
    - BSTR
    - backend_x509_get_username
    - x509_get_sha1_fingerprint
    - ASSERT
    linkageType: ''
    returnType: result_t
    signature: 'result_t verify_cert(struct tls_session *session, openvpn_x509_cert_t
      *cert, int cert_depth) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1526,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1533,1
    - Dst: management_notify_client_needing_auth
      Src: /src/openvpn/src/openvpn/ssl_verify.c:1530,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 2
    argNames:
    - session
    - up
    argTypes:
    - struct tls_session*
    - struct user_pass*
    constantsTouched: []
    func_position:
      end: 1538
      start: 1518
    functionDepth: 0
    functionLinenumber: 1518
    functionLinenumberEnd: 1538
    functionName: verify_user_pass_management
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - setenv_str
    - setenv_del
    - management_notify_client_needing_auth
    linkageType: ''
    returnType: int
    signature: 'static int verify_user_pass_management(struct tls_session *session,
      const struct user_pass *up) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: management_enable_def_auth
      Src: /src/openvpn/src/openvpn/ssl_verify.c:820,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - ks
    argTypes:
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 828
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 828
    functionName: man_def_auth_test
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.c
    functionUses: []
    functionsReached:
    - management_enable_def_auth
    linkageType: ''
    returnType: enum auth_deferred_result
    signature: 'static inline enum auth_deferred_result man_def_auth_test(const struct
      key_state *ks) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbuf_len
      Src: /src/openvpn/src/openvpn/multi.h:417,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 423
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 423
    functionName: multi_output_queue_ready
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - mbuf_len
    linkageType: ''
    returnType: bool
    signature: 'static inline bool multi_output_queue_ready(const struct multi_context
      *m, const struct multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: route_quota_exceeded
      Src: /src/openvpn/src/openvpn/multi.h:470,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 477
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 477
    functionName: route_quota_test
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - route_quota_exceeded
    linkageType: ''
    returnType: bool
    signature: 'static inline bool route_quota_test(const struct multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 487
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 487
    functionName: multi_instance_inc_refcount
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_instance_inc_refcount(struct multi_instance
      *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: route_quota_dec
      Src: /src/openvpn/src/openvpn/multi.h:503,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.h:505,1
    - Dst: multi_instance_dec_refcount
      Src: /src/openvpn/src/openvpn/multi.h:504,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - route
    argTypes:
    - struct multi_route*
    constantsTouched: []
    func_position:
      end: 506
      start: 499
    functionDepth: 0
    functionLinenumber: 499
    functionLinenumberEnd: 506
    functionName: multi_route_del
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - route_quota_dec
    - multi_instance_dec_refcount
    - free
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_route_del(struct multi_route *route) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.h:548,1
    - Dst: msg_set_prefix
      Src: /src/openvpn/src/openvpn/multi.h:551,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 552
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 552
    functionName: set_prefix
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - msg_set_prefix
    - printf
    linkageType: ''
    returnType: void
    signature: 'static inline void set_prefix(struct multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.h:558,1
    - Dst: msg_set_prefix
      Src: /src/openvpn/src/openvpn/multi.h:560,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 561
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 561
    functionName: clear_prefix
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - msg_set_prefix
    - printf
    linkageType: ''
    returnType: void
    signature: 'static inline void clear_prefix(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: multi_reap_process_dowork
      Src: /src/openvpn/src/openvpn/multi.h:592,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 594
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 594
    functionName: multi_reap_process
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - multi_reap_process_dowork
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_reap_process(const struct multi_context *m) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.h:619,1
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/multi.h:623,1
    - Dst: tv_delta
      Src: /src/openvpn/src/openvpn/multi.h:624,1
    - Dst: schedule_get_earliest_wakeup
      Src: /src/openvpn/src/openvpn/multi.h:620,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.h:623,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - m
    - dest
    argTypes:
    - struct multi_context*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 637
      start: 614
    functionDepth: 0
    functionLinenumber: 614
    functionLinenumberEnd: 637
    functionName: multi_get_timeout
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - openvpn_gettimeofday
    - tv_delta
    - CLEAR
    - schedule_get_earliest_wakeup
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_get_timeout(struct multi_context *m, struct
      timeval *dest) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 456
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 456
    functionName: route_quota_inc
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void route_quota_inc(struct multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.h:494,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.h:495,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 497
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 497
    functionName: multi_instance_dec_refcount
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - gc_free
    - free
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_instance_dec_refcount(struct multi_instance
      *mi) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 2
    argNames:
    - m
    - r
    argTypes:
    - struct multi_context*
    - struct multi_route*
    constantsTouched: []
    func_position:
      end: 530
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 530
    functionName: multi_route_defined
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool multi_route_defined(const struct multi_context
      *m, const struct multi_route *r) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: multi_process_per_second_timers_dowork
      Src: /src/openvpn/src/openvpn/multi.h:601,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 604
      start: 596
    functionDepth: 0
    functionLinenumber: 596
    functionLinenumberEnd: 604
    functionName: multi_process_per_second_timers
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - multi_process_per_second_timers_dowork
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_process_per_second_timers(struct multi_context
      *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.h:685,1
    - Dst: process_outgoing_link
      Src: /src/openvpn/src/openvpn/multi.h:686,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.h:687,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.h:688,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - m
    - mi
    - mpp_flags
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 690
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 690
    functionName: multi_process_outgoing_link_dowork
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - process_outgoing_link
    - multi_process_post
    - clear_prefix
    - set_prefix
    linkageType: ''
    returnType: bool
    signature: 'static inline bool multi_process_outgoing_link_dowork(struct multi_context
      *m, struct multi_instance *mi, const unsigned int mpp_flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 701
      start: 697
    functionDepth: 0
    functionLinenumber: 697
    functionLinenumberEnd: 701
    functionName: multi_set_pending
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_set_pending(struct multi_context *m, struct
      multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 462
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 462
    functionName: route_quota_dec
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void route_quota_dec(struct multi_instance *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbuf_defined
      Src: /src/openvpn/src/openvpn/multi.h:439,1
    - Dst: multi_get_queue
      Src: /src/openvpn/src/openvpn/multi.h:441,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 444
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 444
    functionName: multi_process_outgoing_link_pre
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - mbuf_defined
    - multi_get_queue
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static inline struct multi_instance *multi_process_outgoing_link_pre(struct
      multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.h:663,1
    - Dst: vlan_process_outgoing_tun
      Src: /src/openvpn/src/openvpn/multi.h:670,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.h:665,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.h:669,1
    - Dst: id
      Src: /src/openvpn/src/openvpn/multi.h:666,1
    - Dst: process_outgoing_tun
      Src: /src/openvpn/src/openvpn/multi.h:671,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.h:672,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.h:673,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - m
    - mpp_flags
    argTypes:
    - struct multi_context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 675
      start: 657
    functionDepth: 0
    functionLinenumber: 657
    functionLinenumberEnd: 675
    functionName: multi_process_outgoing_tun
    functionSourceFile: /src/openvpn/src/openvpn/multi.h
    functionUses: []
    functionsReached:
    - multi_process_post
    - vlan_process_outgoing_tun
    - process_outgoing_tun
    - set_prefix
    - id
    - ASSERT
    - clear_prefix
    - printf
    linkageType: ''
    returnType: bool
    signature: 'static inline bool multi_process_outgoing_tun(struct multi_context
      *m, const unsigned int mpp_flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/buffer.c:54,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: buf_size_error
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void buf_size_error(const size_t size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/buffer.c:165,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 169
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 169
    functionName: buf_clear
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - secure_memzero
    linkageType: ''
    returnType: void
    signature: 'void buf_clear(struct buffer *buf) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/buffer.c:242,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/buffer.c:246,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/buffer.c:245,1
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpn/buffer.c:252,1
    - Dst: va_start
      Src: /src/openvpn/src/openvpn/buffer.c:251,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/buffer.c:253,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:255,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 2
    argNames:
    - buf
    - format
    - '...'
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 263
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 263
    functionName: buf_printf
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - va_end
    - vsnprintf
    - buf_forward_capacity
    - va_start
    - strlen
    - BEND
    - buf_defined
    linkageType: ''
    returnType: bool
    signature: 'bool buf_printf(struct buffer *buf, const char *format, ...) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 10
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct gc_arena*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 475
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 475
    functionName: gc_transfer
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void gc_transfer(struct gc_arena *dest, struct gc_arena *src) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/buffer.c:790,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:792,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/buffer.c:792,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - src
    - match
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 799
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 799
    functionName: buf_string_compare_advance
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - strlen
    - buf_string_match_head_str
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'bool buf_string_compare_advance(struct buffer *src, const char *match) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:1202,1
    - Dst: buffer_list_push_data
      Src: /src/openvpn/src/openvpn/buffer.c:1203,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 2
    argNames:
    - ol
    - str
    argTypes:
    - struct buffer_list*
    - char*
    constantsTouched: []
    func_position:
      end: 1209
      start: 1197
    functionDepth: 0
    functionLinenumber: 1197
    functionLinenumberEnd: 1209
    functionName: buffer_list_push
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_push_data
    - strlen
    linkageType: ''
    returnType: void
    signature: 'void buffer_list_push(struct buffer_list *ol, const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/buffer.c:269,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/buffer.c:273,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/buffer.c:270,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:275,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - buf
    - str
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 279
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 279
    functionName: buf_puts
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - strlen
    - BEND
    - strncpynt
    - buf_forward_capacity
    linkageType: ''
    returnType: bool
    signature: 'bool buf_puts(struct buffer *buf, const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/buffer.c:808,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - buf
    - delim
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 817
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 817
    functionName: buf_substring_len
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_read_u8
    linkageType: ''
    returnType: int
    signature: 'int buf_substring_len(const struct buffer *buf, int delim) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/buffer.c:1217,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/buffer.c:1231,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1227,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/buffer.c:1230,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1222,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 3
    argNames:
    - ol
    - data
    - size
    argTypes:
    - struct buffer_list*
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 1236
      start: 1211
    functionDepth: 0
    functionLinenumber: 1211
    functionLinenumberEnd: 1236
    functionName: buffer_list_push_data
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - memcpy
    - ALLOC_OBJ_CLEAR
    - ASSERT
    - alloc_buf
    linkageType: ''
    returnType: struct buffer_entry*
    signature: 'struct buffer_entry *buffer_list_push_data(struct buffer_list *ol,
      const void *data, size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/src/openvpn/buffer.c:1300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - bl
    - max
    argTypes:
    - struct buffer_list*
    - size_t
    constantsTouched: []
    func_position:
      end: 1301
      start: 1297
    functionDepth: 0
    functionLinenumber: 1297
    functionLinenumberEnd: 1301
    functionName: buffer_list_aggregate
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_aggregate_separator
    linkageType: ''
    returnType: void
    signature: 'void buffer_list_aggregate(struct buffer_list *bl, const size_t max) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - ol
    argTypes:
    - struct buffer_list*
    constantsTouched: []
    func_position:
      end: 1180
      start: 1176
    functionDepth: 0
    functionLinenumber: 1176
    functionLinenumberEnd: 1180
    functionName: buffer_list_defined
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool buffer_list_defined(const struct buffer_list *ol) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_init_dowork
      Src: /src/openvpn/src/openvpn/buffer.c:138,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 4
    argNames:
    - buf
    - offset
    - file
    - line
    argTypes:
    - struct buffer*
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 139
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 139
    functionName: buf_init_debug
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_init_dowork
    linkageType: ''
    returnType: bool
    signature: 'bool buf_init_debug(struct buffer *buf, int offset, const char *file,
      int line) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/buffer.c:288,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:290,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/buffer.c:293,1
    - Dst: buf_forward_capacity_total
      Src: /src/openvpn/src/openvpn/buffer.c:291,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - buf
    - str
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 296
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 296
    functionName: buf_catrunc
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - strlen
    - buf_forward_capacity_total
    - memcpy
    - buf_forward_capacity
    linkageType: ''
    returnType: void
    signature: 'void buf_catrunc(struct buffer *buf, const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:431,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 434
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 434
    functionName: x_gc_freespecial
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void x_gc_freespecial(struct gc_arena *a) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BLAST
      Src: /src/openvpn/src/openvpn/buffer.c:534,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/buffer.c:542,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/buffer.c:540,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/buffer.c:545,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 546
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 546
    functionName: buf_null_terminate
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_write_u8
    - buf_safe
    - buf_inc_len
    - BLAST
    linkageType: ''
    returnType: void
    signature: 'void buf_null_terminate(struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 1
    argNames:
    - array
    argTypes:
    - char**
    constantsTouched: []
    func_position:
      end: 713
      start: 701
    functionDepth: 0
    functionLinenumber: 701
    functionLinenumberEnd: 713
    functionName: string_array_len
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int string_array_len(const char **array) '
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: isalnum
      Src: /src/openvpn/src/openvpn/buffer.c:892,1
    - Dst: isdigit
      Src: /src/openvpn/src/openvpn/buffer.c:908,1
    - Dst: iscntrl
      Src: /src/openvpn/src/openvpn/buffer.c:904,1
    - Dst: isalpha
      Src: /src/openvpn/src/openvpn/buffer.c:896,1
    - Dst: isascii
      Src: /src/openvpn/src/openvpn/buffer.c:900,1
    - Dst: ispunct
      Src: /src/openvpn/src/openvpn/buffer.c:917,1
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/buffer.c:921,1
    - Dst: isxdigit
      Src: /src/openvpn/src/openvpn/buffer.c:925,1
    CyclomaticComplexity: 65
    EdgeCount: 65
    ICount: 129
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - unsigned char
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1013
      start: 875
    functionDepth: 0
    functionLinenumber: 875
    functionLinenumberEnd: 1013
    functionName: char_class
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - isdigit
    - isalpha
    - isspace
    - iscntrl
    - isxdigit
    - isalnum
    - ispunct
    - isascii
    linkageType: ''
    returnType: bool
    signature: 'bool char_class(const unsigned char c, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1075,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.c:1077,1
    - Dst: char_inc_exc
      Src: /src/openvpn/src/openvpn/buffer.c:1081,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/buffer.c:1079,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - inclusive
    - exclusive
    argTypes:
    - struct buffer*
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1087
      start: 1072
    functionDepth: 0
    functionLinenumber: 1072
    functionLinenumberEnd: 1087
    functionName: string_check_buf
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - char_inc_exc
    - BLEN
    - ASSERT
    - BSTR
    linkageType: ''
    returnType: bool
    signature: 'bool string_check_buf(struct buffer *buf, const unsigned int inclusive,
      const unsigned int exclusive) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1111,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 3
    argNames:
    - str
    - match
    - replace
    argTypes:
    - char*
    - char
    - char
    constantsTouched: []
    func_position:
      end: 1124
      start: 1108
    functionDepth: 0
    functionLinenumber: 1108
    functionLinenumberEnd: 1124
    functionName: string_replace_leading
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void string_replace_leading(char *str, const char match, const char
      replace) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 145
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 145
    functionName: buf_debug_line
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int buf_debug_line(const struct buffer *buf) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/buffer.c:302,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/buffer.c:310,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.c:310,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.c:310,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/buffer.c:306,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.c:311,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/buffer.c:313,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/buffer.c:319,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/buffer.c:321,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 2
    argNames:
    - filename
    - buf
    argTypes:
    - char*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 325
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 325
    functionName: buffer_write_file
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - BPTR
    - msg
    - BLEN
    - write
    - platform_open
    - close
    linkageType: ''
    returnType: bool
    signature: 'bool buffer_write_file(const char *filename, const struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:439,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/buffer.c:446,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/buffer.c:444,1
    - Dst: openvpn_dmalloc
      Src: /src/openvpn/src/openvpn/buffer.c:442,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 11
    argCount: 3
    argNames:
    - addr
    - (*free_function)
    - a
    argTypes:
    - void*
    - void
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 452
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 452
    functionName: gc_addspecial
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - openvpn_dmalloc
    - check_malloc_return
    - ASSERT
    - malloc
    linkageType: ''
    returnType: void
    signature: 'void gc_addspecial(void *addr, void (*free_function)(void *), struct
      gc_arena *a) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/buffer.c:718,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/buffer.c:737,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/buffer.c:733,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/buffer.c:741,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/buffer.c:729,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 13
    argCount: 3
    argNames:
    - p
    - gc
    - flags
    argTypes:
    - char**
    - struct gc_arena*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 742
      start: 715
    functionDepth: 0
    functionLinenumber: 715
    functionLinenumberEnd: 742
    functionName: print_argv
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'char *print_argv(const char **p, struct gc_arena *gc, const unsigned
      int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: char_class
      Src: /src/openvpn/src/openvpn/buffer.c:1018,1
    - Dst: char_class
      Src: /src/openvpn/src/openvpn/buffer.c:1018,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 3
    argNames:
    - c
    - inclusive
    - exclusive
    argTypes:
    - char
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1019
      start: 1015
    functionDepth: 0
    functionLinenumber: 1015
    functionLinenumberEnd: 1019
    functionName: char_inc_exc
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - char_class
    linkageType: ''
    returnType: bool
    signature: 'static inline bool char_inc_exc(const char c, const unsigned int inclusive,
      const unsigned int exclusive) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/buffer.c:1098,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/buffer.c:1099,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 5
    argNames:
    - str
    - inclusive
    - exclusive
    - replace
    - gc
    argTypes:
    - char*
    - unsigned int
    - unsigned int
    - char
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1106
      start: 1089
    functionDepth: 0
    functionLinenumber: 1089
    functionLinenumberEnd: 1106
    functionName: string_mod_const
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - string_mod
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'const char *string_mod_const(const char *str, const unsigned int inclusive,
      const unsigned int exclusive, const char replace, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/buffer.c:1189,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:1190,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 1
    argNames:
    - ol
    argTypes:
    - struct buffer_list*
    constantsTouched: []
    func_position:
      end: 1195
      start: 1182
    functionDepth: 0
    functionLinenumber: 1182
    functionLinenumberEnd: 1195
    functionName: buffer_list_reset
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - free_buf
    - free
    linkageType: ''
    returnType: void
    signature: 'void buffer_list_reset(struct buffer_list *ol) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:1255,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/buffer.c:1274,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/buffer.c:1281,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.c:1261,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/buffer.c:1275,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/buffer.c:1282,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/buffer.c:1283,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:1284,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 32
    argCount: 3
    argNames:
    - bl
    - max_len
    - sep
    argTypes:
    - struct buffer_list*
    - size_t
    - char*
    constantsTouched: []
    func_position:
      end: 1295
      start: 1251
    functionDepth: 0
    functionLinenumber: 1251
    functionLinenumberEnd: 1295
    functionName: buffer_list_aggregate_separator
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_copy
    - buf_write
    - BLEN
    - free_buf
    - free
    - alloc_buf
    - strlen
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: void
    signature: 'void buffer_list_aggregate_separator(struct buffer_list *bl, const
      size_t max_len, const char *sep) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/buffer.c:225,1
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/buffer.c:226,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/buffer.c:226,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 3
    argNames:
    - buf
    - size
    - prepend
    argTypes:
    - struct buffer*
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 233
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 233
    functionName: buf_sub
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_prepend
    - CLEAR
    - buf_write_alloc
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer buf_sub(struct buffer *buf, int size, bool prepend) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BLAST
      Src: /src/openvpn/src/openvpn/buffer.c:519,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - remove
    argTypes:
    - struct buffer*
    - uint8_t
    constantsTouched: []
    func_position:
      end: 525
      start: 516
    functionDepth: 0
    functionLinenumber: 516
    functionLinenumberEnd: 525
    functionName: buf_rmtail
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - BLAST
    linkageType: ''
    returnType: void
    signature: 'void buf_rmtail(struct buffer *buf, uint8_t remove) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/buffer.c:694,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:694,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 696
      start: 689
    functionDepth: 0
    functionLinenumber: 689
    functionLinenumberEnd: 696
    functionName: string_clear
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - strlen
    - secure_memzero
    linkageType: ''
    returnType: void
    signature: 'void string_clear(char *str) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1326,1
    - Dst: buffer_list_pop
      Src: /src/openvpn/src/openvpn/buffer.c:1329,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/buffer.c:1326,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.c:1327,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 2
    argNames:
    - ol
    - n
    argTypes:
    - struct buffer_list*
    - int
    constantsTouched: []
    func_position:
      end: 1332
      start: 1320
    functionDepth: 0
    functionLinenumber: 1320
    functionLinenumberEnd: 1332
    functionName: buffer_list_advance
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_pop
    - BLEN
    - ASSERT
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'void buffer_list_advance(struct buffer_list *ol, int n) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/buffer.c:1309,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:1310,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 1
    argNames:
    - ol
    argTypes:
    - struct buffer_list*
    constantsTouched: []
    func_position:
      end: 1318
      start: 1303
    functionDepth: 0
    functionLinenumber: 1303
    functionLinenumberEnd: 1318
    functionName: buffer_list_pop
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - free_buf
    - free
    linkageType: ''
    returnType: void
    signature: 'void buffer_list_pop(struct buffer_list *ol) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 1
    argNames:
    - ol
    argTypes:
    - struct buffer_list*
    constantsTouched: []
    func_position:
      end: 1249
      start: 1238
    functionDepth: 0
    functionLinenumber: 1238
    functionLinenumberEnd: 1249
    functionName: buffer_list_peek
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct buffer*
    signature: 'struct buffer *buffer_list_peek(struct buffer_list *ol) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:204,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/buffer.c:213,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 10
    argCount: 2
    argNames:
    - buf
    - gc
    argTypes:
    - struct buffer*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 214
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 214
    functionName: free_buf_gc
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - CLEAR
    - free
    linkageType: ''
    returnType: void
    signature: 'static void free_buf_gc(struct buffer *buf, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BLAST
      Src: /src/openvpn/src/openvpn/buffer.c:557,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/buffer.c:564,1
    - Dst: char_class
      Src: /src/openvpn/src/openvpn/buffer.c:562,1
    - Dst: buf_null_terminate
      Src: /src/openvpn/src/openvpn/buffer.c:574,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 575
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 575
    functionName: buf_chomp
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_null_terminate
    - buf_inc_len
    - char_class
    - BLAST
    linkageType: ''
    returnType: void
    signature: 'void buf_chomp(struct buffer *buf) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1046,1
    - Dst: char_inc_exc
      Src: /src/openvpn/src/openvpn/buffer.c:1053,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 4
    argNames:
    - str
    - inclusive
    - exclusive
    - replace
    argTypes:
    - char*
    - unsigned int
    - unsigned int
    - char
    constantsTouched: []
    func_position:
      end: 1070
      start: 1040
    functionDepth: 0
    functionLinenumber: 1040
    functionLinenumberEnd: 1070
    functionName: string_mod
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - ASSERT
    - char_inc_exc
    linkageType: ''
    returnType: bool
    signature: 'bool string_mod(char *str, const unsigned int inclusive, const unsigned
      int exclusive, const char replace) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 590
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 590
    functionName: skip_leading_whitespace
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *skip_leading_whitespace(const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rm_trailing_chars
      Src: /src/openvpn/src/openvpn/buffer.c:615,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 616
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 616
    functionName: chomp
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - rm_trailing_chars
    linkageType: ''
    returnType: void
    signature: 'void chomp(char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 869
      start: 858
    functionDepth: 0
    functionLinenumber: 858
    functionLinenumberEnd: 869
    functionName: np
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *np(const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1025,1
    - Dst: char_inc_exc
      Src: /src/openvpn/src/openvpn/buffer.c:1028,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 3
    argNames:
    - str
    - inclusive
    - exclusive
    argTypes:
    - char*
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1034
      start: 1021
    functionDepth: 0
    functionLinenumber: 1021
    functionLinenumberEnd: 1034
    functionName: string_class
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - ASSERT
    - char_inc_exc
    linkageType: ''
    returnType: bool
    signature: 'bool string_class(const char *str, const unsigned int inclusive, const
      unsigned int exclusive) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/buffer.c:1337,1
    - Dst: fgets
      Src: /src/openvpn/src/openvpn/buffer.c:1346,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/buffer.c:1342,1
    - Dst: buffer_list_push
      Src: /src/openvpn/src/openvpn/buffer.c:1348,1
    - Dst: buffer_list_new
      Src: /src/openvpn/src/openvpn/buffer.c:1345,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:1350,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/buffer.c:1352,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 13
    argCount: 2
    argNames:
    - fn
    - max_line_len
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 1355
      start: 1334
    functionDepth: 0
    functionLinenumber: 1334
    functionLinenumberEnd: 1355
    functionName: buffer_list_file
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_push
    - fgets
    - fclose
    - buffer_list_new
    - platform_fopen
    - malloc
    - free
    linkageType: ''
    returnType: struct buffer_list*
    signature: 'struct buffer_list *buffer_list_file(const char *fn, int max_line_len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/buffer.c:174,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.c:178,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.c:178,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/buffer.c:178,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct buffer*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 179
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 179
    functionName: buf_assign
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_init
    - BLEN
    - buf_write
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'bool buf_assign(struct buffer *dest, const struct buffer *src) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: realloc
      Src: /src/openvpn/src/openvpn/buffer.c:371,1
    - Dst: gc_addspecial
      Src: /src/openvpn/src/openvpn/buffer.c:394,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:388,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:387,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/buffer.c:372,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 20
    argCount: 3
    argNames:
    - ptr
    - size
    - a
    argTypes:
    - void*
    - size_t
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 399
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 399
    functionName: gc_realloc
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - ASSERT
    - check_malloc_return
    - realloc
    - gc_addspecial
    linkageType: ''
    returnType: void*
    signature: 'void *gc_realloc(void *ptr, size_t size, struct gc_arena *a) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:598,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 3
    argNames:
    - str
    - len
    - capacity
    argTypes:
    - char*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 607
      start: 595
    functionDepth: 0
    functionLinenumber: 595
    functionLinenumberEnd: 607
    functionName: string_null_terminate
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void string_null_terminate(char *str, int len, int capacity) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:830,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:852,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/buffer.c:834,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 23
    argCount: 4
    argNames:
    - buf
    - delim
    - line
    - size
    argTypes:
    - struct buffer*
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 853
      start: 823
    functionDepth: 0
    functionLinenumber: 823
    functionLinenumberEnd: 853
    functionName: buf_parse
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - strlen
    - buf_read_u8
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool buf_parse(struct buffer *buf, const int delim, char *line, const
      int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/buffer.c:1161,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1164
      start: 1157
    functionDepth: 0
    functionLinenumber: 1157
    functionLinenumberEnd: 1164
    functionName: buffer_list_new
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct buffer_list*
    signature: 'struct buffer_list *buffer_list_new(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlikely
      Src: /src/openvpn/src/openvpn/buffer.c:44,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/buffer.c:46,1
    - Dst: unlikely
      Src: /src/openvpn/src/openvpn/buffer.c:44,1
    - Dst: unlikely
      Src: /src/openvpn/src/openvpn/buffer.c:44,1
    - Dst: unlikely
      Src: /src/openvpn/src/openvpn/buffer.c:44,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 3
    argNames:
    - m1
    - m2
    - extra
    argTypes:
    - size_t
    - size_t
    - size_t
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: array_mult_safe
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - msg
    - unlikely
    linkageType: ''
    returnType: size_t
    signature: 'size_t array_mult_safe(const size_t m1, const size_t m2, const size_t
      extra) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 151
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 151
    functionName: buf_debug_file
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *buf_debug_file(const struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:184,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/buffer.c:185,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 186
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 186
    functionName: free_buf
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - CLEAR
    - free
    linkageType: ''
    returnType: void
    signature: 'void free_buf(struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:411,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 414
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 414
    functionName: x_gc_free
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void x_gc_free(struct gc_arena *a) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_reset
      Src: /src/openvpn/src/openvpn/buffer.c:1171,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/buffer.c:1172,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - ol
    argTypes:
    - struct buffer_list*
    constantsTouched: []
    func_position:
      end: 1174
      start: 1166
    functionDepth: 0
    functionLinenumber: 1166
    functionLinenumberEnd: 1174
    functionName: buffer_list_free
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buffer_list_reset
    - free
    linkageType: ''
    returnType: void
    signature: 'void buffer_list_free(struct buffer_list *ol) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: platform_stat
      Src: /src/openvpn/src/openvpn/buffer.c:1363,1
    - Dst: fread
      Src: /src/openvpn/src/openvpn/buffer.c:1376,1
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/buffer.c:1368,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/buffer.c:1375,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.c:1376,1
    - Dst: free_buf_gc
      Src: /src/openvpn/src/openvpn/buffer.c:1379,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/buffer.c:1382,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/buffer.c:1382,1
    - Dst: buf_null_terminate
      Src: /src/openvpn/src/openvpn/buffer.c:1383,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/buffer.c:1386,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 19
    argCount: 2
    argNames:
    - filename
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1388
      start: 1357
    functionDepth: 0
    functionLinenumber: 1357
    functionLinenumberEnd: 1388
    functionName: buffer_read_from_file
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - platform_stat
    - fread
    - BPTR
    - fclose
    - buf_null_terminate
    - platform_fopen
    - ASSERT
    - free_buf_gc
    - buf_inc_len
    - alloc_buf_gc
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer buffer_read_from_file(const char *filename, struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:487,1
    - Dst: static_assert
      Src: /src/openvpn/src/openvpn/buffer.c:488,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/buffer.c:501,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/buffer.c:492,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/buffer.c:497,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/buffer.c:505,1
    - Dst: buf_catrunc
      Src: /src/openvpn/src/openvpn/buffer.c:508,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 26
    argCount: 6
    argNames:
    - data
    - size
    - maxoutput
    - space_break_flags
    - separator
    - gc
    argTypes:
    - uint8_t*
    - int
    - int
    - unsigned int
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 510
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 510
    functionName: format_hex_ex
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - buf_catrunc
    - buf_printf
    - static_assert
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'char *format_hex_ex(const uint8_t *data, int size, int maxoutput,
      unsigned int space_break_flags, const char *separator, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:627,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/buffer.c:632,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - str
    - what_to_delete
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 639
      start: 621
    functionDepth: 0
    functionLinenumber: 621
    functionLinenumberEnd: 639
    functionName: rm_trailing_chars
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - strlen
    - strchr
    linkageType: ''
    returnType: void
    signature: 'void rm_trailing_chars(char *str, const char *what_to_delete) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.c:779,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/buffer.c:784,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.c:784,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - src
    - match
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 785
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 785
    functionName: buf_string_match_head_str
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - strlen
    - memcmp
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'bool buf_string_match_head_str(const struct buffer *src, const char
      *match) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.c:1133,1
    - Dst: buf_debug_line
      Src: /src/openvpn/src/openvpn/buffer.c:1149,1
    - Dst: buf_debug_file
      Src: /src/openvpn/src/openvpn/buffer.c:1148,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/buffer.c:1140,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 3
    argNames:
    - buf
    - file
    - line
    argTypes:
    - struct buffer*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 1151
      start: 1127
    functionDepth: 0
    functionLinenumber: 1127
    functionLinenumberEnd: 1151
    functionName: valign4
    functionSourceFile: /src/openvpn/src/openvpn/buffer.c
    functionUses: []
    functionsReached:
    - msg
    - buf_debug_line
    - buf_debug_file
    - BPTR
    linkageType: ''
    returnType: void
    signature: 'void valign4(const struct buffer *buf, const char *file, const int
      line) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: likely
      Src: /src/openvpn/src/openvpn/proto.h:248,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/proto.h:250,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.h:248,1
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/proto.h:250,1
    - Dst: likely
      Src: /src/openvpn/src/openvpn/proto.h:257,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.h:257,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/proto.h:259,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/proto.h:260,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 26
    argCount: 3
    argNames:
    - tunnel_type
    - buf
    - ip_hdr_offset
    argTypes:
    - int
    - struct buffer*
    - int*
    constantsTouched: []
    func_position:
      end: 273
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 273
    functionName: get_tun_ip_ver
    functionSourceFile: /src/openvpn/src/openvpn/proto.h
    functionUses: []
    functionsReached:
    - BPTR
    - BLEN
    - OPENVPN_IPH_GET_VER
    - likely
    - ntohs
    linkageType: ''
    returnType: int
    signature: 'static inline int get_tun_ip_ver(int tunnel_type, struct buffer *buf,
      int *ip_hdr_offset) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/ssl.h:488,1
    - Dst: packet_id_free
      Src: /src/openvpn/src/openvpn/ssl.h:490,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl.h:498,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/src/openvpn/ssl.h:495,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl.h:499,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.h:500,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - tls_wrap
    argTypes:
    - struct tls_wrap_ctx*
    constantsTouched: []
    func_position:
      end: 501
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 501
    functionName: tls_wrap_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl.h
    functionUses: []
    functionsReached:
    - free_key_ctx_bi
    - free_buf
    - packet_id_free
    - secure_memzero
    - packet_id_initialized
    linkageType: ''
    returnType: void
    signature: 'static inline void tls_wrap_free(struct tls_wrap_ctx *tls_wrap) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/ssl.h:514,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl.h:517,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 521
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 521
    functionName: tls_test_payload_len
    functionSourceFile: /src/openvpn/src/openvpn/ssl.h
    functionUses: []
    functionsReached:
    - BLEN
    - get_primary_key
    linkageType: ''
    returnType: int
    signature: 'static inline int tls_test_payload_len(const struct tls_multi *multi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 530
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 530
    functionName: tls_set_single_session
    functionSourceFile: /src/openvpn/src/openvpn/ssl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void tls_set_single_session(struct tls_multi *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 507
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 507
    functionName: tls_initial_packet_received
    functionSourceFile: /src/openvpn/src/openvpn/ssl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tls_initial_packet_received(const struct tls_multi
      *multi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/argv.c:54,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - a
    - newcap
    argTypes:
    - struct argv*
    - size_t
    constantsTouched: []
    func_position:
      end: 62
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 62
    functionName: argv_extend
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY_CLEAR_GC
    linkageType: ''
    returnType: void
    signature: 'static void argv_extend(struct argv *a, const size_t newcap) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/argv.c:103,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct argv*
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: argv_free
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void argv_free(struct argv *a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/argv.c:143,1
    - Dst: adjust_power_of_2
      Src: /src/openvpn/src/openvpn/argv.c:144,1
    - Dst: argv_extend
      Src: /src/openvpn/src/openvpn/argv.c:144,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 2
    argNames:
    - a
    - add
    argTypes:
    - struct argv*
    - size_t
    constantsTouched: []
    func_position:
      end: 145
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 145
    functionName: argv_grow
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - adjust_power_of_2
    - argv_extend
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void argv_grow(struct argv *a, const size_t add) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_grow
      Src: /src/openvpn/src/openvpn/argv.c:159,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - a
    - str
    argTypes:
    - struct argv*
    - char*
    constantsTouched: []
    func_position:
      end: 161
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 161
    functionName: argv_append
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - argv_grow
    linkageType: ''
    returnType: void
    signature: 'static void argv_append(struct argv *a, char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_clone
      Src: /src/openvpn/src/openvpn/argv.c:210,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/argv.c:211,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - a
    - head
    argTypes:
    - struct argv*
    - char*
    constantsTouched: []
    func_position:
      end: 213
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 213
    functionName: argv_insert_head
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - argv_clone
    - string_alloc
    linkageType: ''
    returnType: struct argv
    signature: 'struct argv argv_insert_head(const struct argv *a, const char *head) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/argv.c:244,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/argv.c:245,1
    - Dst: argv_str
      Src: /src/openvpn/src/openvpn/argv.c:245,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/argv.c:246,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - msglev
    - a
    argTypes:
    - int
    - struct argv*
    constantsTouched: []
    func_position:
      end: 247
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 247
    functionName: argv_msg
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - gc_new
    - argv_str
    linkageType: ''
    returnType: void
    signature: 'void argv_msg(const int msglev, const struct argv *a) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: argv_prep_format
      Src: /src/openvpn/src/openvpn/argv.c:363,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/argv.c:389,1
    - Dst: va_copy
      Src: /src/openvpn/src/openvpn/argv.c:376,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/argv.c:378,1
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpn/argv.c:377,1
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpn/argv.c:390,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/argv.c:400,1
    - Dst: argv_append
      Src: /src/openvpn/src/openvpn/argv.c:404,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/argv.c:406,1
    - Dst: argv_append
      Src: /src/openvpn/src/openvpn/argv.c:408,1
    - Dst: argv_reset
      Src: /src/openvpn/src/openvpn/argv.c:413,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 30
    argCount: 3
    argNames:
    - argres
    - format
    - arglist
    argTypes:
    - struct argv*
    - char*
    - va_list
    constantsTouched: []
    func_position:
      end: 420
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 420
    functionName: argv_printf_arglist
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - va_end
    - vsnprintf
    - gc_malloc
    - argv_append
    - argv_prep_format
    - va_copy
    - strchr
    - argv_reset
    linkageType: ''
    returnType: bool
    signature: 'static bool argv_printf_arglist(struct argv *argres, const char *format,
      va_list arglist) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/src/openvpn/argv.c:442,1
    - Dst: argv_printf_arglist
      Src: /src/openvpn/src/openvpn/argv.c:445,1
    - Dst: argv_reset
      Src: /src/openvpn/src/openvpn/argv.c:444,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/argv.c:446,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - argres
    - format
    - '...'
    argTypes:
    - struct argv*
    - char*
    constantsTouched: []
    func_position:
      end: 448
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 448
    functionName: argv_printf
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - va_end
    - argv_printf_arglist
    - argv_reset
    - va_start
    linkageType: ''
    returnType: bool
    signature: 'bool argv_printf(struct argv *argres, const char *format, ...) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/argv.c:76,1
    - Dst: argv_extend
      Src: /src/openvpn/src/openvpn/argv.c:77,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct argv*
    constantsTouched: []
    func_position:
      end: 78
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 78
    functionName: argv_init
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - argv_extend
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void argv_init(struct argv *a) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct argv*
    constantsTouched: []
    func_position:
      end: 124
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 124
    functionName: argv_reset
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void argv_reset(struct argv *a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_init
      Src: /src/openvpn/src/openvpn/argv.c:90,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 92
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 92
    functionName: argv_new
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - argv_init
    linkageType: ''
    returnType: struct argv
    signature: 'struct argv argv_new(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: argv_init
      Src: /src/openvpn/src/openvpn/argv.c:182,1
    - Dst: argv_append
      Src: /src/openvpn/src/openvpn/argv.c:192,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/argv.c:192,1
    - Dst: argv_append
      Src: /src/openvpn/src/openvpn/argv.c:186,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - source
    - headroom
    argTypes:
    - struct argv*
    - size_t
    constantsTouched: []
    func_position:
      end: 196
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 196
    functionName: argv_clone
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - argv_append
    - argv_init
    - string_alloc
    linkageType: ''
    returnType: struct argv
    signature: 'static struct argv argv_clone(const struct argv *source, const size_t
      headroom) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print_argv
      Src: /src/openvpn/src/openvpn/argv.c:232,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 3
    argNames:
    - a
    - gc
    - flags
    argTypes:
    - struct argv*
    - struct gc_arena*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 233
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 233
    functionName: argv_str
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - print_argv
    linkageType: ''
    returnType: char*
    signature: 'const char *argv_str(const struct argv *a, struct gc_arena *gc, const
      unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/argv.c:261,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/argv.c:263,1
    - Dst: argv_str
      Src: /src/openvpn/src/openvpn/argv.c:262,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/argv.c:262,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - msglev
    - a
    - prefix
    argTypes:
    - int
    - struct argv*
    - char*
    constantsTouched: []
    func_position:
      end: 264
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 264
    functionName: argv_msg_prefix
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - gc_new
    - argv_str
    linkageType: ''
    returnType: void
    signature: 'void argv_msg_prefix(const int msglev, const struct argv *a, const
      char *prefix) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/argv.c:296,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/argv.c:297,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/argv.c:296,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 19
    argCount: 4
    argNames:
    - format
    - delim
    - count
    - gc
    argTypes:
    - char*
    - char
    - size_t*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 325
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 325
    functionName: argv_prep_format
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - strlen
    - gc_malloc
    linkageType: ''
    returnType: char*
    signature: 'static char *argv_prep_format(const char *format, const char delim,
      size_t *count, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/src/openvpn/argv.c:466,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/argv.c:468,1
    - Dst: argv_printf_arglist
      Src: /src/openvpn/src/openvpn/argv.c:467,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - argres
    - format
    - '...'
    argTypes:
    - struct argv*
    - char*
    constantsTouched: []
    func_position:
      end: 470
      start: 462
    functionDepth: 0
    functionLinenumber: 462
    functionLinenumberEnd: 470
    functionName: argv_printf_cat
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - va_end
    - argv_printf_arglist
    - va_start
    linkageType: ''
    returnType: bool
    signature: 'bool argv_printf_cat(struct argv *argres, const char *format, ...) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: argv_reset
      Src: /src/openvpn/src/openvpn/argv.c:484,1
    - Dst: parse_line
      Src: /src/openvpn/src/openvpn/argv.c:487,1
    - Dst: argv_append
      Src: /src/openvpn/src/openvpn/argv.c:499,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/argv.c:499,1
    - Dst: argv_append
      Src: /src/openvpn/src/openvpn/argv.c:494,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 2
    argNames:
    - argres
    - cmdstr
    argTypes:
    - struct argv*
    - char*
    constantsTouched: []
    func_position:
      end: 501
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 501
    functionName: argv_parse_cmd
    functionSourceFile: /src/openvpn/src/openvpn/argv.c
    functionUses: []
    functionsReached:
    - argv_append
    - string_alloc
    - argv_reset
    - parse_line
    linkageType: ''
    returnType: void
    signature: 'void argv_parse_cmd(struct argv *argres, const char *cmdstr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - level
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 222
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 222
    functionName: check_debug_level
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool check_debug_level(unsigned int level) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/error.h:278,1
    - Dst: x_check_status
      Src: /src/openvpn/src/openvpn/error.h:280,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 4
    argNames:
    - status
    - description
    - sock
    - tt
    argTypes:
    - int
    - char*
    - struct link_socket*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 282
      start: 275
    functionDepth: 0
    functionLinenumber: 275
    functionLinenumberEnd: 282
    functionName: check_status
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached:
    - x_check_status
    - check_debug_level
    linkageType: ''
    returnType: void
    signature: 'static inline void check_status(int status, const char *description,
      struct link_socket *sock, struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/error.h:228,1
    - Dst: dont_mute
      Src: /src/openvpn/src/openvpn/error.h:228,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 229
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 229
    functionName: msg_test
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached:
    - dont_mute
    - check_debug_level
    linkageType: ''
    returnType: bool
    signature: 'static inline bool msg_test(unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 329
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 329
    functionName: msg_get_virtual_output
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct virtual_output*
    signature: 'static inline const struct virtual_output *msg_get_virtual_output(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - err
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 371
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 371
    functionName: nonfatal
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int nonfatal(const unsigned int err) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - milliseconds
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 288
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 288
    functionName: set_check_status_error_delay
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void set_check_status_error_delay(unsigned int milliseconds) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - prefix
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 303
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 303
    functionName: msg_set_prefix
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void msg_set_prefix(const char *prefix) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - vo
    argTypes:
    - struct virtual_output*
    constantsTouched: []
    func_position:
      end: 323
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 323
    functionName: msg_set_virtual_output
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void msg_set_virtual_output(const struct virtual_output
      *vo) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/error.h:379,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - crt_error
    argTypes:
    - bool*
    constantsTouched: []
    func_position:
      end: 391
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 391
    functionName: openvpn_errno_maybe_crt
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached:
    - GetLastError
    linkageType: ''
    returnType: int
    signature: 'static inline int openvpn_errno_maybe_crt(bool *crt_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 309
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 309
    functionName: msg_get_prefix
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *msg_get_prefix(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - err
    - crt_error
    argTypes:
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 364
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 364
    functionName: ignore_sys_error
    functionSourceFile: /src/openvpn/src/openvpn/error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool ignore_sys_error(const int err, bool crt_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_string_match
      Src: /src/openvpn/src/openvpn/ping.h:42,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: is_ping_msg
    functionSourceFile: /src/openvpn/src/openvpn/ping.h
    functionUses: []
    functionsReached:
    - buf_string_match
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_ping_msg(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/ping.h:79,1
    - Dst: TO_LINK_DEF
      Src: /src/openvpn/src/openvpn/ping.h:81,1
    - Dst: check_ping_send_dowork
      Src: /src/openvpn/src/openvpn/ping.h:83,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 85
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 85
    functionName: check_ping_send
    functionSourceFile: /src/openvpn/src/openvpn/ping.h
    functionUses: []
    functionsReached:
    - check_ping_send_dowork
    - event_timeout_trigger
    - TO_LINK_DEF
    linkageType: ''
    returnType: void
    signature: 'static inline void check_ping_send(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/ping.h:62,1
    - Dst: trigger_ping_timeout_signal
      Src: /src/openvpn/src/openvpn/ping.h:68,1
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/ping.h:65,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 70
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 70
    functionName: check_ping_restart
    functionSourceFile: /src/openvpn/src/openvpn/ping.h
    functionUses: []
    functionsReached:
    - link_socket_actual_defined
    - event_timeout_trigger
    - trigger_ping_timeout_signal
    linkageType: ''
    returnType: void
    signature: 'static inline void check_ping_restart(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hmac_ctx_new
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:46,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:61,1
    - Dst: hmac_ctx_init
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:47,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:57,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:60,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:62,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:63,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:68,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:70,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:72,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:73,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 5
    argNames:
    - secret
    - info
    - info_len
    - out
    - out_len
    argTypes:
    - uint8_t*
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 74
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 74
    functionName: ovpn_hkdf_expand
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - memcpy
    - hmac_ctx_init
    - hmac_ctx_final
    - hmac_ctx_free
    - hmac_ctx_update
    - min_int
    - hmac_ctx_new
    - hmac_ctx_reset
    - hmac_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'void ovpn_hkdf_expand(const uint8_t *secret, const uint8_t *info,
      int info_len, uint8_t *out, int out_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:182,1
    - Dst: init_key_bi_ctx_send
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:190,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:184,1
    - Dst: reset_packet_id_send
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:192,1
    - Dst: epoch_data_key_derive
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:188,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:193,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - co
    argTypes:
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 194
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 194
    functionName: epoch_init_send_key_ctx
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - reset_packet_id_send
    - snprintf
    - epoch_data_key_derive
    - CLEAR
    - ASSERT
    - init_key_bi_ctx_send
    linkageType: ''
    returnType: void
    signature: 'static void epoch_init_send_key_ctx(struct crypto_options *co) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_expand_label
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:136,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - epoch_key
    argTypes:
    - struct epoch_key*
    constantsTouched: []
    func_position:
      end: 141
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 141
    functionName: epoch_key_iterate
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - ovpn_expand_label
    linkageType: ''
    returnType: void
    signature: 'static void epoch_key_iterate(struct epoch_key *epoch_key) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:216,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:235,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:251,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:224,1
    - Dst: memmove
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:253,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:260,1
    - Dst: epoch_key_iterate
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:261,1
    - Dst: epoch_init_recv_key
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:263,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:269,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 34
    argCount: 1
    argNames:
    - co
    argTypes:
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 271
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 271
    functionName: epoch_generate_future_receive_keys
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - memmove
    - CLEAR
    - epoch_init_recv_key
    - ASSERT
    - free_key_ctx
    - epoch_key_iterate
    linkageType: ''
    returnType: void
    signature: 'void epoch_generate_future_receive_keys(struct crypto_options *co) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:298,1
    - Dst: epoch_key_iterate
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:316,1
    - Dst: epoch_init_send_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:318,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:307,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:299,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:322,1
    - Dst: packet_id_move_recv
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:324,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:330,1
    - Dst: epoch_generate_future_receive_keys
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:333,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 23
    argCount: 2
    argNames:
    - co
    - new_epoch
    argTypes:
    - struct crypto_options*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 334
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 334
    functionName: epoch_replace_update_recv_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - free_key_ctx
    - epoch_generate_future_receive_keys
    - packet_id_move_recv
    - ASSERT
    - memset
    - epoch_init_send_key_ctx
    - epoch_key_iterate
    linkageType: ''
    returnType: void
    signature: 'void epoch_replace_update_recv_key(struct crypto_options *co, uint16_t
      new_epoch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:357,1
    - Dst: cipher_get_aead_limits
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:362,1
    - Dst: epoch_init_send_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:364,1
    - Dst: epoch_init_recv_key
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:365,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:369,1
    - Dst: epoch_generate_future_receive_keys
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:370,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 5
    argNames:
    - co
    - key_type
    - e1_send
    - e1_recv
    - future_key_count
    argTypes:
    - struct crypto_options*
    - struct key_type*
    - struct epoch_key*
    - struct epoch_key*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 371
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 371
    functionName: epoch_init_key_ctx
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - cipher_get_aead_limits
    - epoch_generate_future_receive_keys
    - epoch_init_recv_key
    - ASSERT
    - ALLOC_ARRAY_CLEAR
    - epoch_init_send_key_ctx
    linkageType: ''
    returnType: void
    signature: 'void epoch_init_key_ctx(struct crypto_options *co, const struct key_type
      *key_type, const struct epoch_key *e1_send, const struct epoch_key *e1_recv,
      uint16_t future_key_count) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_iv_size
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:148,1
    - Dst: ovpn_expand_label
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:160,1
    - Dst: ovpn_expand_label
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:169,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:149,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 3
    argNames:
    - key
    - epoch_key
    - kt
    argTypes:
    - struct key_parameters*
    - struct epoch_key*
    - struct key_type*
    constantsTouched: []
    func_position:
      end: 174
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 174
    functionName: epoch_data_key_derive
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - cipher_kt_iv_size
    - ovpn_expand_label
    - cipher_kt_key_size
    linkageType: ''
    returnType: void
    signature: 'void epoch_data_key_derive(struct key_parameters *key, const struct
      epoch_key *epoch_key, const struct key_type *kt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:92,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:103,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:102,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:101,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:99,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:104,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:106,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:109,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:112,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:112,1
    - Dst: ovpn_hkdf_expand
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:114,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:117,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:115,1
    - Dst: buf_bptr
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:114,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 32
    argCount: 8
    argNames:
    - secret
    - secret_len
    - label
    - label_len
    - context
    - context_len
    - out
    - out_len
    argTypes:
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - uint8_t*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 119
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 119
    functionName: ovpn_expand_label
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - buf_write
    - ovpn_hkdf_expand
    - gc_new
    - buf_len
    - gc_free
    - buf_bptr
    - ASSERT
    - buf_write_u8
    - alloc_buf_gc
    - buf_write_u16
    linkageType: ''
    returnType: bool
    signature: 'bool ovpn_expand_label(const uint8_t *secret, size_t secret_len, const
      uint8_t *label, size_t label_len, const uint8_t *context, size_t context_len,
      uint8_t *out, uint16_t out_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoch_data_key_derive
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:201,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:205,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:208,1
    - Dst: init_key_bi_ctx_recv
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:207,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - ctx
    - co
    argTypes:
    - struct key_ctx*
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 209
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 209
    functionName: epoch_init_recv_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - init_key_bi_ctx_recv
    - snprintf
    - epoch_data_key_derive
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void epoch_init_recv_key(struct key_ctx *ctx, struct crypto_options
      *co) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:276,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:278,1
    - Dst: epoch_key_iterate
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:277,1
    - Dst: epoch_init_send_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:279,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - co
    argTypes:
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: epoch_iterate_send_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - epoch_init_send_key_ctx
    - ASSERT
    - epoch_key_iterate
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'void epoch_iterate_send_key(struct crypto_options *co) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:341,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:346,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:344,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:345,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:347,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:348,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - co
    argTypes:
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 349
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 349
    functionName: free_epoch_key_ctx
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - CLEAR
    - free_key_ctx
    - free
    linkageType: ''
    returnType: void
    signature: 'void free_epoch_key_ctx(struct crypto_options *co) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 19
    argCount: 2
    argNames:
    - opt
    - epoch
    argTypes:
    - struct crypto_options*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 409
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 409
    functionName: epoch_lookup_decrypt_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct key_ctx*
    signature: 'struct key_ctx *epoch_lookup_decrypt_key(struct crypto_options *opt,
      uint16_t epoch) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: aead_usage_limit_reached
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:422,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:426,1
    - Dst: cipher_decrypt_verify_fail_warn
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:447,1
    - Dst: aead_usage_limit_reached
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:444,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:453,1
    - Dst: epoch_iterate_send_key
      Src: /src/openvpn/src/openvpn/crypto_epoch.c:459,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 1
    argNames:
    - opt
    argTypes:
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 462
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 462
    functionName: epoch_check_send_iterate
    functionSourceFile: /src/openvpn/src/openvpn/crypto_epoch.c
    functionUses: []
    functionsReached:
    - cipher_decrypt_verify_fail_warn
    - aead_usage_limit_reached
    - epoch_iterate_send_key
    linkageType: ''
    returnType: void
    signature: 'void epoch_check_send_iterate(struct crypto_options *opt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/console.c:50,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 52
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 52
    functionName: query_user_clear
    functionSourceFile: /src/openvpn/src/openvpn/console.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void query_user_clear(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console.c:65,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/console.c:75,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 5
    argNames:
    - prompt
    - prompt_len
    - resp
    - resp_len
    - echo
    argTypes:
    - char*
    - size_t
    - char*
    - size_t
    - bool
    constantsTouched: []
    func_position:
      end: 83
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 83
    functionName: query_user_add
    functionSourceFile: /src/openvpn/src/openvpn/console.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void query_user_add(char *prompt, size_t prompt_len, char *resp, size_t
      resp_len, bool echo) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - ctx
    - ssl_flags
    argTypes:
    - struct tls_root_ctx*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 309
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 309
    functionName: tls_ctx_set_options
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool tls_ctx_set_options(struct tls_root_ctx *ctx, unsigned int ssl_flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:492,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - ctx
    - curve_name
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 496
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 496
    functionName: tls_ctx_load_ecdh_params
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_ecdh_params(struct tls_root_ctx *ctx, const char
      *curve_name ) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:444,1
    - Dst: mbedtls_x509_time_is_future
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:450,1
    - Dst: mbedtls_x509_time_is_past
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:455,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:452,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:457,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 459
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 459
    functionName: tls_ctx_check_cert_time
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_time_is_past
    - msg
    - mbedtls_x509_time_is_future
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_check_cert_time(const struct tls_root_ctx *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:791,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:806,1
    - Dst: management_query_pk_sig
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:800,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:813,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:814,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 16
    argCount: 5
    argNames:
    - sign_ctx
    - src
    - src_len
    - dst
    - dst_len
    argTypes:
    - void*
    - void*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 817
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 817
    functionName: management_sign_func
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - free
    - openvpn_base64_encode
    - openvpn_base64_decode
    - management_query_pk_sig
    linkageType: ''
    returnType: bool
    signature: 'static bool management_sign_func(void *sign_ctx, const void *src,
      size_t src_len, void *dst, size_t dst_len) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:833,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:838,1
    - Dst: mbedtls_x509_crt_parse
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:838,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:842,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:840,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:848,1
    - Dst: mbedtls_x509_crt_parse_file
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:848,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:850,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 5
    argNames:
    - ctx
    - ca_file
    - ca_inline
    - ca_path
    - tls_server
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 853
      start: 827
    functionDepth: 0
    functionLinenumber: 827
    functionLinenumberEnd: 853
    functionName: tls_ctx_load_ca
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_crt_parse_file
    - msg
    - mbed_ok
    - mbedtls_x509_crt_parse
    - strlen
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_ca(struct tls_root_ctx *ctx, const char *ca_file,
      bool ca_inline, const char *ca_path, bool tls_server) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: endless_buf_write
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1006,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - in
    - in_len
    argTypes:
    - void*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 1007
      start: 1002
    functionDepth: 0
    functionLinenumber: 1002
    functionLinenumberEnd: 1007
    functionName: ssl_bio_write
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - endless_buf_write
    linkageType: ''
    returnType: int
    signature: 'static int ssl_bio_write( void *ctx, const unsigned char *in, size_t
      in_len) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1025,1
    - Dst: md_full
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1031,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1038,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1036,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1033,1
    - Dst: mbedtls_compat_ctr_drbg_update
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1038,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1040,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1042,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 1045
      start: 1020
    functionDepth: 0
    functionLinenumber: 1020
    functionLinenumberEnd: 1045
    functionName: tls_ctx_personalise_random
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - memcpy
    - msg
    - mbed_ok
    - mbedtls_compat_ctr_drbg_update
    - md_full
    - rand_ctx_get
    - memcmp
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_personalise_random(struct tls_root_ctx *ctx) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1285,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1295,1
    - Dst: mbedtls_ssl_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1289,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1290,1
    - Dst: mbedtls_ssl_config_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1294,1
    - Dst: buf_free_entries
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1299,1
    - Dst: buf_free_entries
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1300,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1301,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1303,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 1
    argNames:
    - ks_ssl
    argTypes:
    - struct key_state_ssl*
    constantsTouched: []
    func_position:
      end: 1305
      start: 1280
    functionDepth: 0
    functionLinenumber: 1280
    functionLinenumberEnd: 1305
    functionName: key_state_ssl_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_ssl_free
    - CLEAR
    - buf_free_entries
    - mbedtls_ssl_config_free
    - free
    linkageType: ''
    returnType: void
    signature: 'void key_state_ssl_free(struct key_state_ssl *ks_ssl) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_get_cipher_name_pair
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:314,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:322,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:325,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:314,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - cipher_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 329
      start: 311
    functionDepth: 0
    functionLinenumber: 311
    functionLinenumberEnd: 329
    functionName: tls_translate_cipher_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - strcmp
    - strlen
    - tls_get_cipher_name_pair
    - msg
    linkageType: ''
    returnType: char*
    signature: 'static const char *tls_translate_cipher_name(const char *cipher_name) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:467,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:471,1
    - Dst: mbedtls_dhm_parse_dhm
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:467,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:469,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:476,1
    - Dst: mbedtls_dhm_parse_dhmfile
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:476,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:478,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:482,1
    - Dst: mbedtls_dhm_get_bitlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:483,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 3
    argNames:
    - ctx
    - dh_file
    - dh_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 484
      start: 461
    functionDepth: 0
    functionLinenumber: 461
    functionLinenumberEnd: 484
    functionName: tls_ctx_load_dh_params
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_dhm_parse_dhmfile
    - mbedtls_dhm_parse_dhm
    - msg
    - mbed_ok
    - strlen
    - mbedtls_dhm_get_bitlen
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_dh_params(struct tls_root_ctx *ctx, const char *dh_file,
      bool dh_inline) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:502,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 4
    argNames:
    - ctx
    - pkcs12_file
    - pkcs12_file_inline
    - load_ca_file
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    - bool
    constantsTouched: []
    func_position:
      end: 504
      start: 498
    functionDepth: 0
    functionLinenumber: 498
    functionLinenumberEnd: 504
    functionName: tls_ctx_load_pkcs12
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_load_pkcs12(struct tls_root_ctx *ctx, const char *pkcs12_file,
      bool pkcs12_file_inline, bool load_ca_file) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_use_external_signing_func
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:822,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 823
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 823
    functionName: tls_ctx_use_management_external_key
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - tls_ctx_use_external_signing_func
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_use_management_external_key(struct tls_root_ctx *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1014,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 5
    argNames:
    - ctx
    - level
    - file
    - line
    - str
    argTypes:
    - void*
    - int
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 1015
      start: 1009
    functionDepth: 0
    functionLinenumber: 1009
    functionLinenumberEnd: 1015
    functionName: my_debug
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void my_debug( void *ctx, int level, const char *file, int
      line, const char *str ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1058
      start: 1047
    functionDepth: 0
    functionLinenumber: 1047
    functionLinenumberEnd: 1058
    functionName: tls_version_max
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int tls_version_max(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1312,1
    - Dst: key_state_write_plaintext_const
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1314,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1314,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1318,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1314,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1318,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1318,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - ks
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1323
      start: 1307
    functionDepth: 0
    functionLinenumber: 1307
    functionLinenumberEnd: 1323
    functionName: key_state_write_plaintext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - key_state_write_plaintext_const
    - BPTR
    - BLEN
    - ASSERT
    - memset
    linkageType: ''
    returnType: int
    signature: 'int key_state_write_plaintext(struct key_state_ssl *ks, struct buffer
      *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:510,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - cryptoapi_cert
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 511
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 511
    functionName: tls_ctx_load_cryptoapi
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_cryptoapi(struct tls_root_ctx *ctx, const char *cryptoapi_cert) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:105,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:108,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:106,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:110,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 114
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 114
    functionName: tls_ctx_server_new
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    - CLEAR
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_server_new(struct tls_root_ctx *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 1
    argNames:
    - vctx
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 746
      start: 740
    functionDepth: 0
    functionLinenumber: 740
    functionLinenumberEnd: 746
    functionName: external_key_len
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static inline size_t external_key_len(void *vctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1083,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 1
    argNames:
    - tls_ver
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 1086
      start: 1067
    functionDepth: 0
    functionLinenumber: 1067
    functionLinenumberEnd: 1086
    functionName: tls_version_to_ssl_version
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: mbedtls_ssl_protocol_version
    signature: 'mbedtls_ssl_protocol_version tls_version_to_ssl_version(int tls_ver) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1329,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1331,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1340,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1336,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1332,1
    - Dst: mbedtls_ssl_write
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1342,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1346,1
    - Dst: mbed_log_err
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1351,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1358,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1361,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1366,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1368,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 3
    argNames:
    - ks
    - data
    - len
    argTypes:
    - struct key_state_ssl*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1370
      start: 1325
    functionDepth: 0
    functionLinenumber: 1325
    functionLinenumberEnd: 1370
    functionName: key_state_write_plaintext_const
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_log_err
    - dmsg
    - msg
    - perf_pop
    - ASSERT
    - mbedtls_ssl_write
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_write_plaintext_const(struct key_state_ssl *ks, const
      uint8_t *data, int len) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1425,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1428,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1427,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1429,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1433,1
    - Dst: endless_buf_write
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1437,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1437,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1441,1
    - Dst: mbed_log_err
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1447,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1454,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1463,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1463,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1466,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1456,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1461,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1463,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 31
    argCount: 2
    argNames:
    - ks
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1468
      start: 1421
    functionDepth: 0
    functionLinenumber: 1421
    functionLinenumberEnd: 1468
    functionName: key_state_write_ciphertext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_log_err
    - BPTR
    - dmsg
    - msg
    - perf_pop
    - BLEN
    - ASSERT
    - memset
    - endless_buf_write
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_write_ciphertext(struct key_state_ssl *ks, struct buffer
      *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:119,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:122,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:120,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:123,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 127
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 127
    functionName: tls_ctx_client_new
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    - CLEAR
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_client_new(struct tls_root_ctx *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:752,1
    - Dst: mbedtls_pk_get_len
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:767,1
    - Dst: mbedtls_pk_get_type
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:760,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:762,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:756,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:771,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:772,1
    - Dst: mbedtls_pk_setup_rsa_alt
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:772,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 3
    argNames:
    - ctx
    - sign_func
    - sign_ctx
    argTypes:
    - struct tls_root_ctx*
    - external_sign_func
    - void*
    constantsTouched: []
    func_position:
      end: 779
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 779
    functionName: tls_ctx_use_external_signing_func
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_pk_setup_rsa_alt
    - msg
    - mbed_ok
    - mbedtls_pk_get_type
    - mbedtls_pk_get_len
    - ASSERT
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_use_external_signing_func(struct tls_root_ctx *ctx, external_sign_func
      sign_func, void *sign_ctx) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1092,1
    - Dst: mbedtls_x509_crl_parse
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1102,1
    - Dst: mbedtls_x509_crl_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1098,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1096,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1102,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1104,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1106,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1112,1
    - Dst: mbedtls_x509_crl_parse_file
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1112,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1114,1
    - Dst: mbedtls_x509_crl_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1121,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 21
    argCount: 3
    argNames:
    - ctx
    - crl_file
    - crl_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1122
      start: 1088
    functionDepth: 0
    functionLinenumber: 1088
    functionLinenumberEnd: 1122
    functionName: backend_tls_ctx_reload_crl
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_crl_free
    - mbedtls_x509_crl_parse_file
    - msg
    - mbed_ok
    - ASSERT
    - mbedtls_x509_crl_parse
    - strlen
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: void
    signature: 'void backend_tls_ctx_reload_crl(struct tls_root_ctx *ctx, const char
      *crl_file, bool crl_inline) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1378,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1381,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1380,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1386,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1382,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1390,1
    - Dst: endless_buf_read
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1392,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1392,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1397,1
    - Dst: mbed_log_err
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1402,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1417,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1410,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1415,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 2
    argNames:
    - ks
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1419
      start: 1372
    functionDepth: 0
    functionLinenumber: 1372
    functionLinenumberEnd: 1419
    functionName: key_state_read_ciphertext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_log_err
    - buf_forward_capacity
    - BPTR
    - dmsg
    - perf_pop
    - endless_buf_read
    - ASSERT
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_read_ciphertext(struct key_state_ssl *ks, struct buffer
      *buf) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1476,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1484,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1478,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1480,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1479,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1488,1
    - Dst: mbedtls_ssl_read
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1490,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1490,1
    - Dst: mbed_log_err
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1499,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1501,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1516,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1513,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1508,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 2
    argNames:
    - ks
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1518
      start: 1470
    functionDepth: 0
    functionLinenumber: 1470
    functionLinenumberEnd: 1518
    functionName: key_state_read_plaintext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_log_err
    - buf_forward_capacity
    - BPTR
    - dmsg
    - perf_pop
    - ASSERT
    - mbedtls_ssl_read
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_read_plaintext(struct key_state_ssl *ks, struct buffer
      *buf) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:262,1
    - Dst: mbedtls_ssl_tls_prf
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:287,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:268,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:262,1
    - Dst: mbedtls_ssl_export_keying_material
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:268,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:293,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:299,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 5
    argNames:
    - session
    - label
    - label_size
    - ekm
    - ekm_size
    argTypes:
    - struct tls_session*
    - char*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 303
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 303
    functionName: key_state_export_keying_material
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbed_ok
    - mbedtls_ssl_tls_prf
    - secure_memzero
    - mbedtls_ssl_export_keying_material
    - ASSERT
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'bool key_state_export_keying_material(struct tls_session *session,
      const char *label, size_t label_size, void *ekm, size_t ekm_size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_ecp_curve_list
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1583,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1591,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1594,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1587,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1597
      start: 1580
    functionDepth: 0
    functionLinenumber: 1580
    functionLinenumberEnd: 1597
    functionName: show_available_curves
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - mbedtls_ecp_curve_list
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_curves(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:383,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:392,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:388,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:398,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:384,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - ctx
    - profile
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 400
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 400
    functionName: tls_ctx_set_cert_profile
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - strcmp
    - msg
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_set_cert_profile(struct tls_root_ctx *ctx, const char
      *profile) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:962,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:971,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:968,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:978,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 3
    argNames:
    - out
    - in
    - len
    argTypes:
    - endless_buffer*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 993
      start: 959
    functionDepth: 0
    functionLinenumber: 959
    functionLinenumberEnd: 993
    functionName: endless_buf_write
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - memcpy
    - malloc
    - free
    linkageType: ''
    returnType: int
    signature: 'static int endless_buf_write( endless_buffer *out, const unsigned
      char *in, size_t len ) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1129,1
    - Dst: mbedtls_ssl_config_init
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1135,1
    - Dst: mbedtls_debug_set_threshold
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1149,1
    - Dst: mbedtls_ssl_conf_renegotiation
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1172,1
    - Dst: mbedtls_ssl_conf_groups
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1165,1
    - Dst: mbedtls_ssl_conf_cert_profile
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1156,1
    - Dst: mbedtls_ssl_conf_own_cert
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1191,1
    - Dst: mbedtls_ssl_init
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1254,1
    - Dst: mbedtls_ssl_setup
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1255,1
    - Dst: mbedtls_ssl_set_export_keys_cb
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1263,1
    - Dst: tls_version_to_ssl_version
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1240,1
    - Dst: mbedtls_ssl_conf_ciphersuites
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1160,1
    - Dst: mbedtls_ssl_conf_authmode
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1197,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1130,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1131,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1134,1
    - Dst: mbedtls_ssl_config_defaults
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1136,1
    - Dst: mbedtls_debug_set_threshold
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1145,1
    - Dst: mbedtls_ssl_conf_dbg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1152,1
    - Dst: mbedtls_ssl_conf_rng
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1153,1
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1154,1
    - Dst: mbedtls_ssl_conf_dh_param_ctx
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1187,1
    - Dst: mbedtls_ssl_conf_cbc_record_splitting
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1180,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1253,1
    - Dst: mbedtls_ssl_set_bio
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1268,1
    - Dst: tls_version_to_ssl_version
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1219,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1259,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1191,1
    - Dst: mbedtls_ssl_conf_ca_chain
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1206,1
    - Dst: mbedtls_ssl_conf_min_tls_version
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1222,1
    - Dst: tls_version_to_ssl_version
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1235,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1255,1
    - Dst: mbedtls_ssl_set_hostname
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1259,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1187,1
    - Dst: mbedtls_ssl_conf_authmode
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1201,1
    - Dst: mbedtls_ssl_conf_verify
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1203,1
    - Dst: tls_version_max
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1240,1
    - Dst: mbedtls_ssl_conf_max_tls_version
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1243,1
    - Dst: mbedtls_ssl_conf_export_keys_ext_cb
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1248,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1259,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1267,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 72
    argCount: 4
    argNames:
    - ks_ssl
    - ssl_ctx
    - is_server
    - session
    argTypes:
    - struct key_state_ssl*
    - struct tls_root_ctx*
    - bool
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1270
      start: 1124
    functionDepth: 0
    functionLinenumber: 1124
    functionLinenumberEnd: 1270
    functionName: key_state_ssl_init
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_ssl_conf_cert_profile
    - mbedtls_ssl_conf_rng
    - mbedtls_ssl_init
    - mbedtls_debug_set_threshold
    - mbedtls_ssl_conf_groups
    - mbedtls_ssl_conf_verify
    - mbedtls_ssl_set_bio
    - mbedtls_ssl_config_defaults
    - tls_version_max
    - mbedtls_ssl_set_export_keys_cb
    - ALLOC_OBJ_CLEAR
    - mbedtls_ssl_conf_max_tls_version
    - mbedtls_ssl_setup
    - mbedtls_ssl_set_hostname
    - tls_version_to_ssl_version
    - rand_ctx_get
    - CLEAR
    - mbedtls_ssl_config_init
    - mbedtls_ssl_conf_dbg
    - mbedtls_ssl_conf_cbc_record_splitting
    - mbedtls_ssl_conf_ca_chain
    - mbedtls_ssl_conf_dh_param_ctx
    - mbedtls_ssl_conf_ciphersuites
    - mbedtls_ssl_conf_authmode
    - mbed_ok
    - mbedtls_ssl_conf_renegotiation
    - mbedtls_ssl_conf_min_tls_version
    - mbedtls_ssl_conf_export_keys_ext_cb
    - ASSERT
    - mbedtls_ssl_conf_own_cert
    linkageType: ''
    returnType: void
    signature: 'void key_state_ssl_init(struct key_state_ssl *ks_ssl, const struct
      tls_root_ctx *ssl_ctx, bool is_server, struct tls_session *session) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:405,1
    - Dst: get_num_elements
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:409,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:406,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:410,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:414,1
    - Dst: strsep
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:417,1
    - Dst: mbedtls_ecp_curve_info_from_name
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:420,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:423,1
    - Dst: mbedtls_compat_get_group_id
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:427,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:437,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 2
    argNames:
    - ctx
    - groups
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 438
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 438
    functionName: tls_ctx_set_tls_groups
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_compat_get_group_id
    - msg
    - gc_new
    - strsep
    - gc_free
    - get_num_elements
    - ASSERT
    - mbedtls_ecp_curve_info_from_name
    - ALLOC_ARRAY_CLEAR
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_set_tls_groups(struct tls_root_ctx *ctx, const char *groups) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: endless_buf_read
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:999,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - out
    - out_len
    argTypes:
    - void*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 1000
      start: 995
    functionDepth: 0
    functionLinenumber: 995
    functionLinenumberEnd: 1000
    functionName: ssl_bio_read
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - endless_buf_read
    linkageType: ''
    returnType: int
    signature: 'static int ssl_bio_read( void *ctx, unsigned char *out, size_t out_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_ssl_send_alert_message
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1276,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - ks_ssl
    argTypes:
    - struct key_state_ssl*
    constantsTouched: []
    func_position:
      end: 1278
      start: 1273
    functionDepth: 0
    functionLinenumber: 1273
    functionLinenumberEnd: 1278
    functionName: key_state_ssl_shutdown
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_ssl_send_alert_message
    linkageType: ''
    returnType: void
    signature: 'void key_state_ssl_shutdown(struct key_state_ssl *ks_ssl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1613
      start: 1609
    functionDepth: 0
    functionLinenumber: 1609
    functionLinenumberEnd: 1613
    functionName: load_xkey_provider
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void load_xkey_provider(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:518,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:527,1
    - Dst: mbedtls_x509_crt_parse
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:527,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:529,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:522,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:531,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:536,1
    - Dst: mbedtls_x509_crt_parse_file
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:536,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:538,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 3
    argNames:
    - ctx
    - cert_file
    - cert_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 541
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 541
    functionName: tls_ctx_load_cert_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_crt_parse_file
    - msg
    - mbed_ok
    - ASSERT
    - mbedtls_x509_crt_parse
    - strlen
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_cert_file(struct tls_root_ctx *ctx, const char *cert_file,
      bool cert_inline) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_compat_psa_crypto_init
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    functionName: tls_init_lib
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_compat_psa_crypto_init
    linkageType: ''
    returnType: void
    signature: 'void tls_init_lib(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_pk_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:134,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:135,1
    - Dst: mbedtls_x509_crt_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:140,1
    - Dst: mbedtls_x509_crt_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:137,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:138,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:141,1
    - Dst: mbedtls_dhm_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:143,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:144,1
    - Dst: mbedtls_x509_crl_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:146,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:147,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:161,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:163,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:159,1
    - Dst: pkcs11h_certificate_freeCertificate
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:155,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 167
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 167
    functionName: tls_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_crl_free
    - pkcs11h_certificate_freeCertificate
    - CLEAR
    - mbedtls_pk_free
    - free
    - mbedtls_dhm_free
    - mbedtls_x509_crt_free
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_free(struct tls_root_ctx *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_assert
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:197,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:201,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:200,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:202,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 8
    argCount: 9
    argNames:
    - p_expkey
    - ms
    - kb
    - maclen
    - keylen
    - ivlen
    - client_random
    - server_random
    - tls_prf_type
    argTypes:
    - void*
    - unsigned char*
    - unsigned char*
    - size_t
    - size_t
    - size_t
    - unsigned char
    - unsigned char
    - mbedtls_tls_prf_types
    constantsTouched: []
    func_position:
      end: 206
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 206
    functionName: mbedtls_ssl_export_keys_cb
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - memcpy
    - static_assert
    linkageType: ''
    returnType: int
    signature: 'int mbedtls_ssl_export_keys_cb(void *p_expkey, const unsigned char
      *ms, const unsigned char *kb, size_t maclen, size_t keylen, size_t ivlen, const
      unsigned char client_random[32], const unsigned char server_random[32], mbedtls_tls_prf_types
      tls_prf_type) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:243,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:248,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:249,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:250,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 11
    argCount: 7
    argNames:
    - p_expkey
    - type
    - secret
    - secret_len
    - client_random
    - server_random
    - tls_prf_type
    argTypes:
    - void*
    - mbedtls_ssl_key_export_type
    - unsigned char*
    - size_t
    - unsigned char
    - unsigned char
    - mbedtls_tls_prf_types
    constantsTouched: []
    func_position:
      end: 252
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 252
    functionName: mbedtls_ssl_export_keys_cb
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    - memcpy
    linkageType: ''
    returnType: void
    signature: 'void mbedtls_ssl_export_keys_cb(void *p_expkey, mbedtls_ssl_key_export_type
      type, const unsigned char *secret, size_t secret_len, const unsigned char client_random[32],
      const unsigned char server_random[32], mbedtls_tls_prf_types tls_prf_type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:340,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - ctx
    - ciphers
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 342
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 342
    functionName: tls_ctx_restrict_ciphers_tls13
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_restrict_ciphers_tls13(struct tls_root_ctx *ctx, const
      char *ciphers) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_md_info_from_type
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:671,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:677,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:692,1
    - Dst: mbedtls_oid_get_oid_by_md
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:677,1
    - Dst: mbedtls_md_get_size
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:682,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:711,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:719,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:723,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:736,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 58
    argCount: 8
    argNames:
    - ctx_voidptr
    - (*f_rng)
    - p_rng
    - '#if MBEDTLS_VERSION_NUMBER < 0x03020100'
    - mode
    - '#endif'
    - md_alg
    - hashlen
    - hash
    - sig
    argTypes:
    - void*
    - int
    - void*
    - int
    - mbedtls_md_type_t
    - unsigned int
    - unsigned char*
    - unsigned char*
    constantsTouched: []
    func_position:
      end: 738
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 738
    functionName: external_pkcs1_sign
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - memcpy
    - mbedtls_oid_get_oid_by_md
    - mbed_ok
    - free
    - mbedtls_md_info_from_type
    - ASSERT
    - mbedtls_md_get_size
    - ALLOC_ARRAY_CLEAR
    linkageType: ''
    returnType: int
    signature: 'static inline int external_pkcs1_sign( void *ctx_voidptr, int (*f_rng)(void
      *, unsigned char *, size_t), void *p_rng,#if MBEDTLS_VERSION_NUMBER < 0x03020100
      int mode,#endif mbedtls_md_type_t md_alg, unsigned int hashlen, const unsigned
      char *hash, unsigned char *sig ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_free_entry
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:911,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - endless_buffer*
    constantsTouched: []
    func_position:
      end: 914
      start: 904
    functionDepth: 0
    functionLinenumber: 904
    functionLinenumberEnd: 914
    functionName: buf_free_entries
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - buf_free_entry
    linkageType: ''
    returnType: void
    signature: 'static void buf_free_entries(endless_buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1535,1
    - Dst: mbedtls_ssl_get_version
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1537,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1543,1
    - Dst: mbedtls_ssl_get_peer_cert
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1540,1
    - Dst: mbedtls_ssl_get_ciphersuite
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1538,1
    - Dst: mbedtls_pk_get_bitlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1544,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1547,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 2
    argNames:
    - ks_ssl
    - prefix
    argTypes:
    - struct key_state_ssl*
    - char*
    constantsTouched: []
    func_position:
      end: 1548
      start: 1527
    functionDepth: 0
    functionLinenumber: 1527
    functionLinenumberEnd: 1548
    functionName: print_details
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_ssl_get_peer_cert
    - mbedtls_pk_get_bitlen
    - msg
    - snprintf
    - mbedtls_ssl_get_version
    - mbedtls_ssl_get_ciphersuite
    linkageType: ''
    returnType: void
    signature: 'void print_details(struct key_state_ssl *ks_ssl, const char *prefix) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: tls_free_lib
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void tls_free_lib(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:172,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 174
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 174
    functionName: tls_ctx_initialised
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool tls_ctx_initialised(struct tls_root_ctx *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:354,1
    - Dst: get_num_elements
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:357,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:366,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:364,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:360,1
    - Dst: mbedtls_ssl_get_ciphersuite_id
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:369,1
    - Dst: tls_translate_cipher_name
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:370,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:375,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:377,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 2
    argNames:
    - ctx
    - ciphers
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 378
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 378
    functionName: tls_ctx_restrict_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_ssl_get_ciphersuite_id
    - tls_translate_cipher_name
    - get_num_elements
    - ASSERT
    - free
    - strtok
    - ALLOC_ARRAY_CLEAR
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_restrict_ciphers(struct tls_root_ctx *ctx, const char
      *ciphers) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:899,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:900,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - entry
    argTypes:
    - buffer_entry*
    constantsTouched: []
    func_position:
      end: 902
      start: 894
    functionDepth: 0
    functionLinenumber: 894
    functionLinenumberEnd: 902
    functionName: buf_free_entry
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static inline void buf_free_entry(buffer_entry *entry) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:932,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:949,1
    - Dst: buf_free_entry
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:945,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 3
    argNames:
    - in
    - out
    - out_len
    argTypes:
    - endless_buffer*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 957
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 957
    functionName: endless_buf_read
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - memcpy
    - buf_free_entry
    linkageType: ''
    returnType: int
    signature: 'static int endless_buf_read( endless_buffer *in, unsigned char *out,
      size_t out_len ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_ssl_list_ciphersuites
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1561,1
    - Dst: tls_ctx_set_cert_profile
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1564,1
    - Dst: tls_ctx_server_new
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1563,1
    - Dst: tls_ctx_restrict_ciphers
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1565,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1574,1
    - Dst: mbedtls_ssl_get_ciphersuite_name
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1574,1
    - Dst: tls_ctx_free
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1577,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 3
    argNames:
    - cipher_list
    - tls_cert_profile
    - tls13
    argTypes:
    - char*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1578
      start: 1550
    functionDepth: 0
    functionLinenumber: 1550
    functionLinenumberEnd: 1578
    functionName: show_available_tls_ciphers_list
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - tls_ctx_restrict_ciphers
    - tls_ctx_free
    - mbedtls_ssl_get_ciphersuite_name
    - mbedtls_ssl_list_ciphersuites
    - tls_ctx_set_cert_profile
    - tls_ctx_server_new
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_tls_ciphers_list(const char *cipher_list, const
      char *tls_cert_profile, bool tls13) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mbedtls_version_get_number
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1603,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:1604,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1607
      start: 1599
    functionDepth: 0
    functionLinenumber: 1599
    functionLinenumberEnd: 1607
    functionName: get_ssl_library_version
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - snprintf
    - mbedtls_version_get_number
    linkageType: ''
    returnType: char*
    signature: 'const char *get_ssl_library_version(void) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:548,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:552,1
    - Dst: pem_password_callback
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:566,1
    - Dst: mbedtls_compat_pk_parse_key
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:567,1
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:573,1
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:582,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:593,1
    - Dst: mbedtls_compat_pk_parse_keyfile
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:578,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:611,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:559,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:601,1
    - Dst: mbedtls_compat_pk_parse_keyfile
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:587,1
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:590,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:602,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:606,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:569,1
    - Dst: management_auth_failure
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:598,1
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:561,1
    - Dst: mbedtls_compat_pk_parse_key
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:557,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:571,1
    - Dst: pem_password_callback
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:586,1
    - Dst: mbedtls_compat_pk_check_pair
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:606,1
    - Dst: rand_ctx_get
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:609,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 3
    argNames:
    - ctx
    - priv_key_file
    - priv_key_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 616
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 616
    functionName: tls_ctx_load_priv_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - print_key_filename
    - msg
    - pem_password_callback
    - mbedtls_compat_pk_parse_key
    - mbed_ok
    - mbedtls_compat_pk_check_pair
    - rand_ctx_get
    - ASSERT
    - strlen
    - mbedtls_compat_pk_parse_keyfile
    - ALLOC_OBJ_CLEAR
    - management_auth_failure
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_load_priv_file(struct tls_root_ctx *ctx, const char *priv_key_file,
      bool priv_key_inline) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:859,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:863,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:870,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:868,1
    - Dst: mbedtls_x509_crt_parse
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:868,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:872,1
    - Dst: mbed_ok
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:877,1
    - Dst: mbedtls_x509_crt_parse_file
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:877,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_mbedtls.c:879,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 3
    argNames:
    - ctx
    - extra_certs_file
    - extra_certs_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 882
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 882
    functionName: tls_ctx_load_extra_certs
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.c
    functionUses: []
    functionsReached:
    - mbedtls_x509_crt_parse_file
    - msg
    - mbed_ok
    - ASSERT
    - mbedtls_x509_crt_parse
    - strlen
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_extra_certs(struct tls_root_ctx *ctx, const char
      *extra_certs_file, bool extra_certs_inline) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8448,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8464,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8464,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8466,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8456,1
    - Dst: show_compression_warning
      Src: /src/openvpn/src/openvpn/options.c:8470,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 1
    argNames:
    - (p[0], "comp-lzo") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8471
      start: 8446
    functionDepth: 0
    functionLinenumber: 8446
    functionLinenumberEnd: 8471
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    - show_compression_warning
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "comp-lzo") && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7570,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7571,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "opt-verify") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7574
      start: 7568
    functionDepth: 0
    functionLinenumber: 7568
    functionLinenumberEnd: 7574
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "opt-verify") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - (p[0], "comp-noadapt") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8475
      start: 8472
    functionDepth: 0
    functionLinenumber: 8472
    functionLinenumberEnd: 8475
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "comp-noadapt") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 5652
      start: 5639
    functionDepth: 0
    functionLinenumber: 5639
    functionLinenumberEnd: 5652
    functionName: key_is_external
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool key_is_external(const struct options *options) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6243,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/options.c:6259,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6244,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6259,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6252,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - (p[0], "connect-retry") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6261
      start: 6241
    functionDepth: 0
    functionLinenumber: 6241
    functionLinenumberEnd: 6261
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    - max_int
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "connect-retry") && p[1] && !p[3]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7650,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7655,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7651,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "client-crresponse") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7657
      start: 7648
    functionDepth: 0
    functionLinenumber: 7648
    functionLinenumberEnd: 7657
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-crresponse") && p[1]) '
  - BBCount: 314
    BranchProfiles: []
    Callsites:
    - Dst: msglevel_forward_compatible
      Src: /src/openvpn/src/openvpn/options.c:5668,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6864,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6869,1
    - Dst: is_special_addr
      Src: /src/openvpn/src/openvpn/options.c:7009,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7407,1
    - Dst: strtol
      Src: /src/openvpn/src/openvpn/options.c:7496,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7858,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7980,1
    - Dst: dns_domain_list_append
      Src: /src/openvpn/src/openvpn/options.c:8106,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8216,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8187,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8534,1
    - Dst: management_auth_token
      Src: /src/openvpn/src/openvpn/options.c:9003,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8937,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7974,1
    - Dst: comp_non_stub_enabled
      Src: /src/openvpn/src/openvpn/options.c:8415,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9510,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8597,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8930,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5818,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5873,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6815,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6885,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6940,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7481,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7571,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7611,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7919,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8193,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8275,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7665,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8371,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8478,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7774,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9302,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8375,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8707,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7443,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9083,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9318,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6773,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7250,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7655,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8087,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8114,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8318,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8597,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8811,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8941,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:9065,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9292,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6477,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7133,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7256,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7543,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7907,1
    - Dst: atou
      Src: /src/openvpn/src/openvpn/options.c:8304,1
    - Dst: show_valid_win32_tun_subnets
      Src: /src/openvpn/src/openvpn/options.c:8345,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8516,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8524,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8861,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9524,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options.c:8194,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9450,1
    - Dst: connection_entry_load_re
      Src: /src/openvpn/src/openvpn/options.c:6215,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6493,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6965,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6011,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6590,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7354,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7738,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:8242,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8396,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8562,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8758,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9312,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8391,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/options.c:9364,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7480,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9362,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5895,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5901,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6227,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6425,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6646,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6822,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7196,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7228,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7318,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7484,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8323,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9454,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8893,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6808,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/options.c:6104,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:6276,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6307,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7066,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7200,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7337,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7600,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8386,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8648,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8667,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9212,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options.c:9144,1
    - Dst: redirect_stdout_stderr
      Src: /src/openvpn/src/openvpn/options.c:6384,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6707,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5676,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/options.c:6116,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7382,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7584,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7925,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7939,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7965,1
    - Dst: dns_server_get
      Src: /src/openvpn/src/openvpn/options.c:8091,1
    - Dst: dns_domain_list_append
      Src: /src/openvpn/src/openvpn/options.c:8080,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9039,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9161,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:9255,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7211,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7356,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8411,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9474,1
    - Dst: plugin_option_list_new
      Src: /src/openvpn/src/openvpn/options.c:5924,1
    - Dst: alloc_local_entry
      Src: /src/openvpn/src/openvpn/options.c:6063,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6895,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6679,1
    - Dst: ipset2ascii_all
      Src: /src/openvpn/src/openvpn/options.c:7996,1
    - Dst: dhcp_option_dns6_parse
      Src: /src/openvpn/src/openvpn/options.c:8198,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8500,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8563,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8801,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9217,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9506,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8485,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8696,1
    - Dst: usage
      Src: /src/openvpn/src/openvpn/options.c:5694,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:6340,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6365,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7168,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7284,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7494,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7500,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7531,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7594,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7765,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7944,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9307,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8614,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8774,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6741,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7570,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7803,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7857,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:8543,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8886,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9060,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9536,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9489,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7690,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8286,1
    - Dst: ascii2af
      Src: /src/openvpn/src/openvpn/options.c:6726,1
    - Dst: add_client_nat_to_option_list
      Src: /src/openvpn/src/openvpn/options.c:6947,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5952,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7039,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7147,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7163,1
    - Dst: script_security_set
      Src: /src/openvpn/src/openvpn/options.c:7243,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7312,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7618,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7833,1
    - Dst: show_compression_warning
      Src: /src/openvpn/src/openvpn/options.c:8520,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6612,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6699,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6967,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:5666,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5703,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6184,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7274,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7300,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7404,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7697,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8168,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8359,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9505,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9444,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6962,1
    - Dst: rol6_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:6976,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:6280,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7028,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7237,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7514,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8184,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7701,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8364,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8631,1
    - Dst: show_pkcs11_ids
      Src: /src/openvpn/src/openvpn/options.c:9365,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9208,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8842,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6513,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6689,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6829,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5992,1
    - Dst: get_default_gateway
      Src: /src/openvpn/src/openvpn/options.c:5737,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7278,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7479,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8417,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8690,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9499,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8602,1
    - Dst: rol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:7120,1
    - Dst: init_http_proxy_options_once
      Src: /src/openvpn/src/openvpn/options.c:6763,1
    - Dst: parse_http_proxy_override
      Src: /src/openvpn/src/openvpn/options.c:6170,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7784,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:7834,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8049,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8248,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8258,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8297,1
    - Dst: sleep
      Src: /src/openvpn/src/openvpn/options.c:8305,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8641,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9383,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8213,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9159,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9465,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8130,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5957,1
    - Dst: get_ipv6_addr_no_netbits
      Src: /src/openvpn/src/openvpn/options.c:6037,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6266,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6759,1
    - Dst: cnol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:6946,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6359,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6558,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6595,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7215,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/options.c:7527,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7577,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8741,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8448,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9442,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6054,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6476,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6975,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7355,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7660,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7773,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7797,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8027,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8170,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8291,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/options.c:8335,1
    - Dst: ssl_set_auth_token_user
      Src: /src/openvpn/src/openvpn/options.c:9010,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/options.c:7220,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8606,1
    - Dst: tls_version_parse
      Src: /src/openvpn/src/openvpn/options.c:8961,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8726,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6589,1
    - Dst: ascii2af
      Src: /src/openvpn/src/openvpn/options.c:6192,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6271,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:6327,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6375,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6445,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6833,1
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:8194,1
    - Dst: setenv_foreign_option
      Src: /src/openvpn/src/openvpn/options.c:8392,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8403,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9154,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7445,1
    - Dst: set_win_sys_path
      Src: /src/openvpn/src/openvpn/options.c:7960,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8752,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9179,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9084,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8998,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:5909,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6012,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6027,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6169,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6195,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6526,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6494,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6621,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7195,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7890,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9218,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6243,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6666,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6930,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5697,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:6069,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6270,1
    - Dst: add_route_to_option_list
      Src: /src/openvpn/src/openvpn/options.c:6971,1
    - Dst: rol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:6952,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7082,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7113,1
    - Dst: valid_integer
      Src: /src/openvpn/src/openvpn/options.c:7616,1
    - Dst: show_tap_win_adapters
      Src: /src/openvpn/src/openvpn/options.c:8257,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8148,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9076,1
    - Dst: ssl_set_auth_token
      Src: /src/openvpn/src/openvpn/options.c:8999,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6465,1
    - Dst: management_echo
      Src: /src/openvpn/src/openvpn/options.c:5776,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5946,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6413,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6777,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7626,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7526,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7680,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8030,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8118,1
    - Dst: dhcp_renew_by_adapter_index
      Src: /src/openvpn/src/openvpn/options.c:8312,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9415,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6394,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6745,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7003,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:7095,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:7109,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7243,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7433,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7670,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7713,1
    - Dst: atoll
      Src: /src/openvpn/src/openvpn/options.c:7935,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9460,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8181,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8819,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6628,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6294,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7035,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7633,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7793,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8128,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/options.c:8303,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8355,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8713,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9126,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9493,1
    - Dst: get_default_gateway_ipv6
      Src: /src/openvpn/src/openvpn/options.c:5738,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5861,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6033,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6091,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6454,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7209,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7299,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7387,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7393,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8011,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8370,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9414,1
    - Dst: proto2ascii_all
      Src: /src/openvpn/src/openvpn/options.c:6732,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6981,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:6028,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/openvpn/src/openvpn/options.c:6141,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6504,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6615,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options.c:7226,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7750,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7850,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7894,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8432,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7913,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6986,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6344,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5833,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5908,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6244,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6304,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7190,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7402,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7650,1
    - Dst: option_iroute
      Src: /src/openvpn/src/openvpn/options.c:7739,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8806,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6527,1
    - Dst: errors_to_stderr
      Src: /src/openvpn/src/openvpn/options.c:6450,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6674,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5879,1
    - Dst: read_config_string
      Src: /src/openvpn/src/openvpn/options.c:6099,1
    - Dst: string_substitute
      Src: /src/openvpn/src/openvpn/options.c:6282,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7070,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7119,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7151,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7329,1
    - Dst: show_compression_warning
      Src: /src/openvpn/src/openvpn/options.c:8470,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9532,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7989,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:7091,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7685,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8015,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8456,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8104,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8464,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8541,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8256,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8124,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9296,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6742,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6563,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6929,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7057,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7330,1
    - Dst: strtol
      Src: /src/openvpn/src/openvpn/options.c:7497,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7828,1
    - Dst: auth_retry_set
      Src: /src/openvpn/src/openvpn/options.c:7908,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8490,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9050,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9448,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8099,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8848,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6335,1
    - Dst: platform_chdir
      Src: /src/openvpn/src/openvpn/options.c:6305,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5693,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5769,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7812,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8138,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8208,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8340,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:8570,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8636,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8812,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7836,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6487,1
    - Dst: is_special_addr
      Src: /src/openvpn/src/openvpn/options.c:6955,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6884,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6825,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5789,1
    - Dst: ipv6_addr_safe_hexplusbits
      Src: /src/openvpn/src/openvpn/options.c:6979,1
    - Dst: alloc_pull_filter
      Src: /src/openvpn/src/openvpn/options.c:7089,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7371,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7403,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8009,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9372,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8879,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9424,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8738,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5676,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6606,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:6331,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6553,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6444,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6924,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6935,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7870,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7993,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8218,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9409,1
    - Dst: push_options
      Src: /src/openvpn/src/openvpn/options.c:7383,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8981,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9387,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9139,1
    - Dst: net_ctx_init
      Src: /src/openvpn/src/openvpn/options.c:5736,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:5761,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/options.c:6259,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6533,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6912,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:7009,1
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:7022,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7353,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7532,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8110,1
    - Dst: show_adapters
      Src: /src/openvpn/src/openvpn/options.c:8264,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7698,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8682,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7442,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8768,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8279,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:9323,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9479,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8891,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6800,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7202,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7464,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7547,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7720,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7751,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7954,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8144,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8160,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8170,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9266,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8829,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8723,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9458,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6481,1
    - Dst: init_http_proxy_options_once
      Src: /src/openvpn/src/openvpn/options.c:6823,1
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6984,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:7099,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7242,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7641,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7733,1
    - Dst: ifconfig_pool_verify_range
      Src: /src/openvpn/src/openvpn/options.c:7414,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7795,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7889,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8948,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7527,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9091,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:9366,1
    - Dst: gc_transfer
      Src: /src/openvpn/src/openvpn/options.c:6115,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5928,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6043,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6049,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6061,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:6064,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6103,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6232,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6354,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6419,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9166,1
    - Dst: strtoll
      Src: /src/openvpn/src/openvpn/options.c:9198,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7645,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7620,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9102,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9325,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9132,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6293,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6718,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5963,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6221,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7034,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7565,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7640,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7805,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8334,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9029,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9121,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9485,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5935,1
    - Dst: init_options
      Src: /src/openvpn/src/openvpn/options.c:6097,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6275,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6388,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6647,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6891,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6907,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6945,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7065,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7392,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9108,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9229,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5843,1
    - Dst: usage_version
      Src: /src/openvpn/src/openvpn/options.c:5704,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:5776,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5808,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7043,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7077,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7105,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7124,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7578,1
    - Dst: dns_server_addr_parse
      Src: /src/openvpn/src/openvpn/options.c:8097,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7951,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7560,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6081,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5726,1
    - Dst: print_default_gateway
      Src: /src/openvpn/src/openvpn/options.c:5739,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5974,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5936,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5986,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7185,1
    - Dst: set_pause_exit_win32
      Src: /src/openvpn/src/openvpn/options.c:8351,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9173,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8424,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5708,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6126,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6638,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7450,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7775,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7861,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:8070,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8620,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9122,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6517,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6600,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5921,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:5771,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5912,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5940,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6315,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7015,1
    - Dst: rol6_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:7165,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7588,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6466,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6694,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6995,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5823,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5865,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5706,1
    - Dst: alloc_remote_entry
      Src: /src/openvpn/src/openvpn/options.c:6206,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7061,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7155,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7205,1
    - Dst: show_routes
      Src: /src/openvpn/src/openvpn/options.c:8263,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8589,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9223,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9394,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5767,1
    - Dst: alloc_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:6108,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6382,1
    - Dst: redirect_stdout_stderr
      Src: /src/openvpn/src/openvpn/options.c:6402,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7411,1
    - Dst: option_iroute_ipv6
      Src: /src/openvpn/src/openvpn/options.c:7744,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8108,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9209,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8884,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9077,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9071,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9430,1
    - Dst: parse_hash_fingerprint_multiline
      Src: /src/openvpn/src/openvpn/options.c:8900,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6955,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5853,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:5759,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5788,1
    - Dst: constrain_int
      Src: /src/openvpn/src/openvpn/options.c:6534,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6538,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7139,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7360,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7377,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7553,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7966,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8960,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8221,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8763,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6594,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6636,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6902,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6650,1
    - Dst: plugin_option_list_add
      Src: /src/openvpn/src/openvpn/options.c:5926,1
    - Dst: set_suppress_timestamps
      Src: /src/openvpn/src/openvpn/options.c:6390,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/options.c:5667,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:5733,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5749,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5858,1
    - Dst: set_machine_readable_output
      Src: /src/openvpn/src/openvpn/options.c:6396,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6681,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5999,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7174,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7661,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7002,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8269,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8649,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9019,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9280,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options.c:9398,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9189,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7879,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8276,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9034,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/options.c:5745,1
    - Dst: parse_topology
      Src: /src/openvpn/src/openvpn/options.c:5993,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5848,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6191,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6514,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7303,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8302,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8409,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8529,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8598,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9419,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9335,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8211,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9098,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7933,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:5734,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6005,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6299,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6400,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7247,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8082,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8428,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8466,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8678,1
    - Dst: strtoll
      Src: /src/openvpn/src/openvpn/options.c:9186,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6326,1
    - Dst: init_http_proxy_options_once
      Src: /src/openvpn/src/openvpn/options.c:6801,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6567,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6915,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6634,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7511,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7551,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7710,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7752,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8078,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9196,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8711,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9358,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8441,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8346,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9044,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9184,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6499,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6717,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5979,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6086,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6220,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6259,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6579,1
    - Dst: atoll
      Src: /src/openvpn/src/openvpn/options.c:6703,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6584,1
    - Dst: add_route_ipv6_to_option_list
      Src: /src/openvpn/src/openvpn/options.c:6991,1
    - Dst: tap_allow_nonadmin_access
      Src: /src/openvpn/src/openvpn/options.c:8365,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9118,1
    - Dst: strtol
      Src: /src/openvpn/src/openvpn/options.c:9345,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7915,1
    - Dst: dns_server_priority_parse
      Src: /src/openvpn/src/openvpn/options.c:8085,1
    - Dst: GetCurrentProcess
      Src: /src/openvpn/src/openvpn/options.c:7934,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5782,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6265,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6469,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6663,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6833,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6890,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7923,1
    - Dst: ascii2ipset
      Src: /src/openvpn/src/openvpn/options.c:7986,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8510,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8718,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7760,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8076,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8836,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:9238,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9024,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5838,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5828,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/options.c:6111,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6321,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6426,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6552,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7884,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8054,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8344,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8366,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8924,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8376,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8464,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9009,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8854,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9405,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6012,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6287,1
    - Dst: open_syslog
      Src: /src/openvpn/src/openvpn/options.c:6360,1
    - Dst: remap_redirect_gateway_flags
      Src: /src/openvpn/src/openvpn/options.c:7180,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7289,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7536,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7671,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7728,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7743,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7815,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9201,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8974,1
    - Dst: mac_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:5980,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6019,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6349,1
    - Dst: translate_mtu_discover_type_name
      Src: /src/openvpn/src/openvpn/options.c:6580,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6725,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7215,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8262,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8495,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8702,1
    - Dst: ssl_set_auth_nocache
      Src: /src/openvpn/src/openvpn/options.c:8994,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8154,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8350,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:9061,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8043,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8583,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8964,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6951,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6458,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7465,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7609,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8176,1
    - Dst: dhcp_release_by_adapter_index
      Src: /src/openvpn/src/openvpn/options.c:8308,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8381,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8795,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8993,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9014,1
    - Dst: string_substitute
      Src: /src/openvpn/src/openvpn/options.c:9066,1
    - Dst: tls_version_parse
      Src: /src/openvpn/src/openvpn/options.c:8938,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8864,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6852,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6957,1
    - Dst: is_special_addr
      Src: /src/openvpn/src/openvpn/options.c:6965,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7469,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7603,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8093,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8193,1
    - Dst: ipconfig_register_dns
      Src: /src/openvpn/src/openvpn/options.c:8338,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8866,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9436,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7970,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8134,1
    - Dst: x509_username_field_ext_supported
      Src: /src/openvpn/src/openvpn/options.c:9323,1
    - Dst: x509_track_add
      Src: /src/openvpn/src/openvpn/options.c:9313,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6896,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6599,1
    - Dst: read_config_file
      Src: /src/openvpn/src/openvpn/options.c:5716,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6833,1
    - Dst: ip_addr_dotted_quad_safe
      Src: /src/openvpn/src/openvpn/options.c:6960,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6559,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7332,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7519,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7651,1
    - Dst: DuplicateHandle
      Src: /src/openvpn/src/openvpn/options.c:7936,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9222,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8065,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8505,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:5670,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:6336,1
    - Dst: open_syslog
      Src: /src/openvpn/src/openvpn/options.c:6369,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6500,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6658,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6886,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7159,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7357,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7952,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:8044,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8824,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8229,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6901,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5964,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6252,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6449,1
    - Dst: msglevel_forward_compatible
      Src: /src/openvpn/src/openvpn/options.c:7218,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7298,1
    - Dst: push_remove_option
      Src: /src/openvpn/src/openvpn/options.c:7394,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7510,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7675,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7709,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9094,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:9452,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6573,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6724,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7056,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7143,1
    - Dst: setenv_str_safe
      Src: /src/openvpn/src/openvpn/options.c:7238,1
    - Dst: push_reset
      Src: /src/openvpn/src/openvpn/options.c:7388,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7429,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8202,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8234,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8686,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9484,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6814,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6729,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6807,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6605,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5869,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:5740,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6700,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7466,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options.c:8196,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8206,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8265,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9051,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8651,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:9540,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8434,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6532,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6407,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6437,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6754,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5813,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5691,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5701,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5794,1
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6029,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7046,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8314,1
    CyclomaticComplexity: 1393
    EdgeCount: 1393
    ICount: 2679
    argCount: 10
    argNames:
    - options
    - p
    - is_inline
    - file
    - line
    - level
    - msglevel
    - permission_mask
    - option_types_found
    - es
    argTypes:
    - struct options*
    - char*
    - bool
    - char*
    - int
    - int
    - int
    - unsigned int
    - unsigned int*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 9541
      start: 5654
    functionDepth: 0
    functionLinenumber: 5654
    functionLinenumberEnd: 9541
    functionName: add_option
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - read_config_file
    - set_pause_exit_win32
    - valid_integer
    - ipv6_addr_safe
    - max_int
    - mac_addr_safe
    - usage
    - management_echo
    - buf_printf
    - msglevel_forward_compatible
    - show_adapters
    - plugin_option_list_add
    - strcmp
    - alloc_connection_entry
    - set_machine_readable_output
    - strlen
    - show_valid_win32_tun_subnets
    - atoll
    - get_ipv6_addr
    - rol_check_alloc
    - no_more_than_n_args
    - BSTR
    - GetCurrentProcess
    - ipv6_addr_safe_hexplusbits
    - set_debug_level
    - dns_server_priority_parse
    - is_special_addr
    - dhcp_option_address_parse
    - constrain_int
    - ip_or_dns_addr_safe
    - redirect_stdout_stderr
    - parse_http_proxy_override
    - set_suppress_timestamps
    - strtol
    - add_route_to_option_list
    - alloc_remote_entry
    - parse_topology
    - translate_mtu_discover_type_name
    - ifconfig_pool_verify_range
    - x509_track_add
    - openvpn_exit
    - push_reset
    - BOOL_CAST
    - connection_entry_load_re
    - init_http_proxy_options_once
    - show_routes
    - tap_allow_nonadmin_access
    - gc_free
    - init_options
    - get_default_gateway_ipv6
    - dhcp_release_by_adapter_index
    - ascii2ipset
    - tls_version_parse
    - atoi_warn
    - platform_chdir
    - auth_retry_set
    - DuplicateHandle
    - option_iroute
    - ip_addr_dotted_quad_safe
    - setenv_foreign_option
    - push_options
    - usage_version
    - get_ipv6_addr_no_netbits
    - add_route_ipv6_to_option_list
    - proto2ascii_all
    - show_pkcs11_ids
    - VERIFY_PERMISSION
    - ascii2proto
    - cnol_check_alloc
    - comp_non_stub_enabled
    - msg
    - strtoll
    - dns_server_addr_parse
    - ipset2ascii_all
    - rol6_check_alloc
    - errors_to_stderr
    - strncmp
    - ssl_set_auth_token
    - get_ip_addr
    - strstr
    - show_tap_win_adapters
    - net_ctx_init
    - gc_new
    - ssl_set_auth_nocache
    - dhcp_option_dns6_parse
    - ipconfig_register_dns
    - parse_hash_fingerprint_multiline
    - ascii2af
    - set_win_sys_path
    - dns_server_get
    - getaddr
    - set_user_script
    - script_security_set
    - ascii2keydirection
    - setenv_str_safe
    - add_client_nat_to_option_list
    - ALLOC_ARRAY_GC
    - sscanf
    - remap_redirect_gateway_flags
    - atou
    - ssl_set_auth_token_user
    - push_remove_option
    - uninit_options
    - get_default_gateway
    - gc_transfer
    - dns_domain_list_append
    - setenv_str
    - read_config_string
    - open_syslog
    - streq
    - management_auth_token
    - plugin_option_list_new
    - sleep
    - x509_username_field_ext_supported
    - positive_atoi
    - print_default_gateway
    - alloc_pull_filter
    - alloc_buf_gc
    - dhcp_renew_by_adapter_index
    - show_compression_warning
    - string_substitute
    - alloc_local_entry
    - ASSERT
    - option_iroute_ipv6
    linkageType: ''
    returnType: void
    signature: 'static void add_option(struct options *options, char *p[], bool is_inline,
      const char *file, int line, const int level, const int msglevel, const unsigned
      int permission_mask, unsigned int *option_types_found, struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6265,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6266,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "connect-timeout") || streq(p[0], "server-poll-timeout"))
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6267
      start: 6262
    functionDepth: 0
    functionLinenumber: 6262
    functionLinenumberEnd: 6267
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if ((streq(p[0], "connect-timeout") || streq(p[0], "server-poll-timeout"))
      && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7660,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7665,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7661,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "client-disconnect") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7667
      start: 7658
    functionDepth: 0
    functionLinenumber: 7658
    functionLinenumberEnd: 7667
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-disconnect") && p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:4713,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4727,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:4717,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:4721,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 2
    argNames:
    - msglevel
    - option
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 4731
      start: 4710
    functionDepth: 0
    functionLinenumber: 4710
    functionLinenumberEnd: 4731
    functionName: auth_retry_set
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - streq
    linkageType: ''
    returnType: bool
    signature: 'bool auth_retry_set(const int msglevel, const char *option) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7536,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7547,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7543,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7553,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7551,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - (p[0], "verify-client-cert") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7557
      start: 7534
    functionDepth: 0
    functionLinenumber: 7534
    functionLinenumberEnd: 7557
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "verify-client-cert") && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9034,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-cert-profile") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9036
      start: 9032
    functionDepth: 0
    functionLinenumber: 9032
    functionLinenumberEnd: 9036
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-cert-profile") && p[1] && !p[2]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4750
      start: 4733
    functionDepth: 0
    functionLinenumber: 4733
    functionLinenumberEnd: 4750
    functionName: auth_retry_print
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *auth_retry_print(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9039,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-ciphersuites") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9041
      start: 9037
    functionDepth: 0
    functionLinenumber: 9037
    functionLinenumberEnd: 9041
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-ciphersuites") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:4457,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/options.c:4462,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/options.c:4459,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options.c:4463,1
    - Dst: string_alloc_buf
      Src: /src/openvpn/src/openvpn/options.c:4458,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:4464,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 2
    argNames:
    - option_string
    - gc_ret
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4466
      start: 4453
    functionDepth: 0
    functionLinenumber: 4453
    functionLinenumberEnd: 4466
    functionName: options_warning_extract_parm1
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - string_alloc_buf
    - gc_malloc
    - gc_new
    - buf_parse
    - gc_free
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'static const char *options_warning_extract_parm1(const char *option_string,
      struct gc_arena *gc_ret) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "management-client") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5855
      start: 5851
    functionDepth: 0
    functionLinenumber: 5851
    functionLinenumberEnd: 5855
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "management-client") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6005,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "iproute") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6007
      start: 6003
    functionDepth: 0
    functionLinenumber: 6003
    functionLinenumberEnd: 6007
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "iproute") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6599,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6600,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "sndbuf") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6601
      start: 6597
    functionDepth: 0
    functionLinenumber: 6597
    functionLinenumberEnd: 6601
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "sndbuf") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7464,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7465,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7469,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7466,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - (p[0], "hash-size") && p[1] && p[2] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7474
      start: 7460
    functionDepth: 0
    functionLinenumber: 7460
    functionLinenumberEnd: 7474
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "hash-size") && p[1] && p[2] && !p[3]) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4491,1
    - Dst: options_warning_extract_parm1
      Src: /src/openvpn/src/openvpn/options.c:4495,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/options.c:4498,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4500,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:4508,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:4504,1
    - Dst: safe_print
      Src: /src/openvpn/src/openvpn/options.c:4513,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/options.c:4482,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/options.c:4483,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/options.c:4485,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:4484,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/options.c:4486,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/options.c:4496,1
    - Dst: safe_print
      Src: /src/openvpn/src/openvpn/options.c:4515,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/options.c:4481,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:4493,1
    - Dst: safe_print
      Src: /src/openvpn/src/openvpn/options.c:4517,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4512,1
    - Dst: options_warning_extract_parm1
      Src: /src/openvpn/src/openvpn/options.c:4502,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4524,1
    - Dst: safe_print
      Src: /src/openvpn/src/openvpn/options.c:4529,1
    - Dst: safe_print
      Src: /src/openvpn/src/openvpn/options.c:4525,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:4532,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 39
    argCount: 7
    argNames:
    - msglevel
    - delim
    - report_inconsistent
    - p1
    - b2_src
    - b1_name
    - b2_name
    argTypes:
    - int
    - int
    - bool
    - char*
    - struct buffer*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4534
      start: 4468
    functionDepth: 0
    functionLinenumber: 4468
    functionLinenumberEnd: 4534
    functionName: options_warning_safe_scan2
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strprefix
    - options_warning_extract_parm1
    - msg
    - gc_malloc
    - safe_print
    - gc_new
    - buf_parse
    - strcmp
    - gc_free
    - strlen
    - streq
    linkageType: ''
    returnType: void
    signature: 'static void options_warning_safe_scan2(const int msglevel, const int
      delim, const bool report_inconsistent, const char *p1, const struct buffer *b2_src,
      const char *b1_name, const char *b2_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6605,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6606,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "mark") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6608
      start: 6602
    functionDepth: 0
    functionLinenumber: 6602
    functionLinenumberEnd: 6608
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mark") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7479,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7480,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7484,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7481,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - (p[0], "connect-freq") && p[1] && p[2] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7489
      start: 7475
    functionDepth: 0
    functionLinenumber: 7475
    functionLinenumberEnd: 7489
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "connect-freq") && p[1] && p[2] && !p[3]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/options.c:1625,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:1626,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:1631,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1636,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/options.c:1632,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 4
    argNames:
    - o
    - network_str
    - netmask_str
    - msglevel
    argTypes:
    - struct options*
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 1645
      start: 1617
    functionDepth: 0
    functionLinenumber: 1617
    functionLinenumberEnd: 1645
    functionName: option_iroute
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - msg
    - netmask_to_netbits2
    - getaddr
    linkageType: ''
    returnType: void
    signature: 'static void option_iroute(struct options *o, const char *network_str,
      const char *netmask_str, int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg_fp
      Src: /src/openvpn/src/openvpn/options.c:4758,1
    - Dst: init_options
      Src: /src/openvpn/src/openvpn/options.c:4767,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/options.c:4762,1
    - Dst: fflush
      Src: /src/openvpn/src/openvpn/options.c:4780,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/options.c:4769,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:4784,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4785
      start: 4755
    functionDepth: 0
    functionLinenumber: 4755
    functionLinenumberEnd: 4785
    functionName: usage
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - fflush
    - msg_fp
    - init_options
    - fprintf
    - openvpn_exit
    linkageType: ''
    returnType: void
    signature: 'static void usage(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6658,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "port") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6660
      start: 6656
    functionDepth: 0
    functionLinenumber: 6656
    functionLinenumberEnd: 6660
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "port") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/options.c:1654,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:1656,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1658,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 3
    argNames:
    - o
    - prefix_str
    - msglevel
    argTypes:
    - struct options*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 1665
      start: 1647
    functionDepth: 0
    functionLinenumber: 1647
    functionLinenumberEnd: 1665
    functionName: option_iroute_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - msg
    - get_ipv6_addr
    linkageType: ''
    returnType: void
    signature: 'static void option_iroute_ipv6(struct options *o, const char *prefix_str,
      int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4790,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:4791,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4792
      start: 4787
    functionDepth: 0
    functionLinenumber: 4787
    functionLinenumberEnd: 4792
    functionName: usage_small
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    - msg
    linkageType: ''
    returnType: void
    signature: 'void usage_small(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6663,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6666,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "lport") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6671
      start: 6661
    functionDepth: 0
    functionLinenumber: 6661
    functionLinenumberEnd: 6671
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "lport") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: options_postprocess_mutate
      Src: /src/openvpn/src/openvpn/options.c:4154,1
    - Dst: options_postprocess_filechecks
      Src: /src/openvpn/src/openvpn/options.c:4157,1
    - Dst: options_postprocess_verify
      Src: /src/openvpn/src/openvpn/options.c:4155,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - options
    - es
    argTypes:
    - struct options*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 4159
      start: 4151
    functionDepth: 0
    functionLinenumber: 4151
    functionLinenumberEnd: 4159
    functionName: options_postprocess
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - options_postprocess_filechecks
    - options_postprocess_verify
    - options_postprocess_mutate
    linkageType: ''
    returnType: void
    signature: 'void options_postprocess(struct options *options, struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5848,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "management-up-down") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5850
      start: 5846
    functionDepth: 0
    functionLinenumber: 5846
    functionLinenumberEnd: 5850
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "management-up-down") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "providers") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8791
      start: 8785
    functionDepth: 0
    functionLinenumber: 8785
    functionLinenumberEnd: 8791
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "providers") && p[1]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/options.c:5405,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5412,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5414,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5417,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5419,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5423,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5425,1
    - Dst: throw_signal_soft
      Src: /src/openvpn/src/openvpn/options.c:5427,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 29
    argCount: 2
    argNames:
    - o
    - line
    argTypes:
    - struct options*
    - char*
    constantsTouched: []
    func_position:
      end: 5432
      start: 5394
    functionDepth: 0
    functionLinenumber: 5394
    functionLinenumberEnd: 5432
    functionName: apply_pull_filter
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - throw_signal_soft
    - isspace
    - strncmp
    linkageType: ''
    returnType: bool
    signature: 'static bool apply_pull_filter(const struct options *o, char *line) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: usage
      Src: /src/openvpn/src/openvpn/options.c:5333,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:5352,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5337,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:5340,1
    - Dst: add_option
      Src: /src/openvpn/src/openvpn/options.c:5343,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5354,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5356,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5369,1
    - Dst: add_option
      Src: /src/openvpn/src/openvpn/options.c:5379,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 38
    argCount: 7
    argNames:
    - options
    - argc
    - argv
    - msglevel
    - permission_mask
    - option_types_found
    - es
    argTypes:
    - struct options*
    - int
    - char*
    - int
    - unsigned int
    - unsigned int*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 5384
      start: 5321
    functionDepth: 0
    functionLinenumber: 5321
    functionLinenumberEnd: 5384
    functionName: parse_argv
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - usage
    - msg
    - CLEAR
    - add_option
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'void parse_argv(struct options *options, const int argc, char *argv[],
      const int msglevel, const unsigned int permission_mask, unsigned int *option_types_found,
      struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6628,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "bind-dev") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6630
      start: 6626
    functionDepth: 0
    functionLinenumber: 6626
    functionLinenumberEnd: 6630
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "bind-dev") && p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2370,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2390,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 2391
      start: 2364
    functionDepth: 0
    functionLinenumber: 2364
    functionLinenumberEnd: 2391
    functionName: check_ca_required
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void check_ca_required(const struct options *options) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6589,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6590,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "nice") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6591
      start: 6587
    functionDepth: 0
    functionLinenumber: 6587
    functionLinenumberEnd: 6591
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "nice") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6634,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6638,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6636,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "txqueuelen") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6641
      start: 6632
    functionDepth: 0
    functionLinenumber: 6632
    functionLinenumberEnd: 6641
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "txqueuelen") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6724,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6725,1
    - Dst: proto2ascii_all
      Src: /src/openvpn/src/openvpn/options.c:6732,1
    - Dst: ascii2af
      Src: /src/openvpn/src/openvpn/options.c:6726,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6729,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - (p[0], "proto") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6737
      start: 6720
    functionDepth: 0
    functionLinenumber: 6720
    functionLinenumberEnd: 6737
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ascii2proto
    - msg
    - ascii2af
    - proto2ascii_all
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "proto") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7879,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "client") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7881
      start: 7877
    functionDepth: 0
    functionLinenumber: 7877
    functionLinenumberEnd: 7881
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6594,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6595,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "rcvbuf") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6596
      start: 6592
    functionDepth: 0
    functionLinenumber: 6592
    functionLinenumberEnd: 6596
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "rcvbuf") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6646,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6650,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6647,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "shaper") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6655
      start: 6642
    functionDepth: 0
    functionLinenumber: 6642
    functionLinenumberEnd: 6655
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "shaper") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6741,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6742,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6745,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "proto-force") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6749
      start: 6738
    functionDepth: 0
    functionLinenumber: 6738
    functionLinenumberEnd: 6749
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ascii2proto
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "proto-force") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7884,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "pull") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7886
      start: 7882
    functionDepth: 0
    functionLinenumber: 7882
    functionLinenumberEnd: 7886
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pull") && !p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:3249,1
    - Dst: clone_route_ipv6_option_list
      Src: /src/openvpn/src/openvpn/options.c:3261,1
    - Dst: clone_route_option_list
      Src: /src/openvpn/src/openvpn/options.c:3256,1
    - Dst: clone_client_nat_option_list
      Src: /src/openvpn/src/openvpn/options.c:3266,1
    - Dst: clone_dns_options
      Src: /src/openvpn/src/openvpn/options.c:3273,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 3286
      start: 3246
    functionDepth: 0
    functionLinenumber: 3246
    functionLinenumberEnd: 3286
    functionName: pre_connect_save
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - clone_client_nat_option_list
    - clone_route_option_list
    - ALLOC_OBJ_CLEAR_GC
    - clone_dns_options
    - clone_route_ipv6_option_list
    linkageType: ''
    returnType: void
    signature: 'static void pre_connect_save(struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8774,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "engine") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8783
      start: 8772
    functionDepth: 0
    functionLinenumber: 8772
    functionLinenumberEnd: 8783
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "engine") && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9208,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9209,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9212,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "reneg-sec") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9214
      start: 9206
    functionDepth: 0
    functionLinenumber: 9206
    functionLinenumberEnd: 9214
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "reneg-sec") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9217,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9218,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "hand-window") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9219
      start: 9215
    functionDepth: 0
    functionLinenumber: 9215
    functionLinenumberEnd: 9219
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "hand-window") && p[1] && !p[2]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:1067,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/options.c:1069,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/options.c:1068,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:1082,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:1074,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:1084,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/options.c:1090,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:1090,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:1090,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1094,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:1096,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 27
    argCount: 4
    argNames:
    - o
    - argv
    - len
    - es
    argTypes:
    - struct options*
    - char*
    - int
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 1098
      start: 1062
    functionDepth: 0
    functionLinenumber: 1062
    functionLinenumberEnd: 1098
    functionName: setenv_foreign_option
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - msg
    - gc_new
    - setenv_str
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void setenv_foreign_option(struct options *o, const char *argv[],
      int len, struct env_set *es) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5516,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5545,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5549,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5522,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 22
    argCount: 9
    argNames:
    - name
    - file
    - line
    - type
    - allowed
    - found
    - msglevel
    - options
    - is_inline
    argTypes:
    - char*
    - char*
    - int
    - unsigned int
    - unsigned int
    - unsigned int*
    - int
    - struct options*
    - bool
    constantsTouched: []
    func_position:
      end: 5554
      start: 5503
    functionDepth: 0
    functionLinenumber: 5503
    functionLinenumberEnd: 5554
    functionName: verify_permission
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool verify_permission(const char *name, const char *file,
      int line, const unsigned int type, const unsigned int allowed, unsigned int
      *found, const int msglevel, struct options *options, bool is_inline) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9024,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-exit") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9026
      start: 9022
    functionDepth: 0
    functionLinenumber: 9022
    functionLinenumberEnd: 9026
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-exit") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9029,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-cipher") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9031
      start: 9027
    functionDepth: 0
    functionLinenumber: 9027
    functionLinenumberEnd: 9031
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-cipher") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:2300,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 2303
      start: 2295
    functionDepth: 0
    functionLinenumber: 2295
    functionLinenumberEnd: 2303
    functionName: alloc_pull_filter_list
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct pull_filter_list*
    signature: 'static struct pull_filter_list *alloc_pull_filter_list(struct options
      *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: check_file_access_chroot
      Src: /src/openvpn/src/openvpn/options.c:3951,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 6
    argNames:
    - is_inline
    - chroot
    - type
    - file
    - mode
    - opt
    argTypes:
    - bool
    - char*
    - int
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 3952
      start: 3941
    functionDepth: 0
    functionLinenumber: 3941
    functionLinenumberEnd: 3952
    functionName: check_file_access_chroot_inline
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - check_file_access_chroot
    linkageType: ''
    returnType: bool
    signature: 'static bool check_file_access_chroot_inline(bool is_inline, const
      char *chroot, const int type, const char *file, const int mode, const char *opt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5935,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5936,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5940,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5946,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "mode") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5949
      start: 5933
    functionDepth: 0
    functionLinenumber: 5933
    functionLinenumberEnd: 5949
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mode") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_pull_filter_list
      Src: /src/openvpn/src/openvpn/options.c:2308,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:2311,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:2319,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:2314,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 11
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 2324
      start: 2305
    functionDepth: 0
    functionLinenumber: 2305
    functionLinenumberEnd: 2324
    functionName: alloc_pull_filter
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    - alloc_pull_filter_list
    - ASSERT
    linkageType: ''
    returnType: struct pull_filter*
    signature: 'static struct pull_filter *alloc_pull_filter(struct options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5952,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "dev") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5954
      start: 5950
    functionDepth: 0
    functionLinenumber: 5950
    functionLinenumberEnd: 5954
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dev") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:3922,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:3926,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:3927,1
    - Dst: prepend_dir
      Src: /src/openvpn/src/openvpn/options.c:3925,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:3926,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:3932,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 5
    argNames:
    - chroot
    - type
    - file
    - mode
    - opt
    argTypes:
    - char*
    - int
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 3935
      start: 3908
    functionDepth: 0
    functionLinenumber: 3908
    functionLinenumberEnd: 3935
    functionName: check_file_access_chroot
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - BSTR
    - check_file_access
    - gc_new
    - gc_free
    - prepend_dir
    linkageType: ''
    returnType: bool
    signature: 'static bool check_file_access_chroot(const char *chroot, const int
      type, const char *file, const int mode, const char *opt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:2267,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 2270
      start: 2262
    functionDepth: 0
    functionLinenumber: 2262
    functionLinenumberEnd: 2270
    functionName: alloc_remote_list_if_undef
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct remote_list*
    signature: 'static struct remote_list *alloc_remote_list_if_undef(struct options
      *options) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6407,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "memstats") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6409
      start: 6405
    functionDepth: 0
    functionLinenumber: 6405
    functionLinenumberEnd: 6409
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "memstats") && p[1] && !p[2]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9484,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9485,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9493,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9489,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9499,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - (p[0], "vlan-accept") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9502
      start: 9482
    functionDepth: 0
    functionLinenumber: 9482
    functionLinenumberEnd: 9502
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "vlan-accept") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_remote_list_if_undef
      Src: /src/openvpn/src/openvpn/options.c:2275,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/options.c:2290,1
    - Dst: gc_realloc
      Src: /src/openvpn/src/openvpn/options.c:2281,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2284,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 14
    argCount: 2
    argNames:
    - options
    - msglevel
    argTypes:
    - struct options*
    - int
    constantsTouched: []
    func_position:
      end: 2293
      start: 2272
    functionDepth: 0
    functionLinenumber: 2272
    functionLinenumberEnd: 2293
    functionName: alloc_remote_entry
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - msg
    - gc_realloc
    - alloc_remote_list_if_undef
    linkageType: ''
    returnType: struct remote_entry*
    signature: 'static struct remote_entry *alloc_remote_entry(struct options *options,
      const int msglevel) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:3827,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:3841,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:3841,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:3837,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:3835,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:3841,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options.c:3850,1
    - Dst: dirname
      Src: /src/openvpn/src/openvpn/options.c:3851,1
    - Dst: platform_access
      Src: /src/openvpn/src/openvpn/options.c:3853,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/options.c:3857,1
    - Dst: platform_access
      Src: /src/openvpn/src/openvpn/options.c:3867,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3888,1
    - Dst: platform_access
      Src: /src/openvpn/src/openvpn/options.c:3869,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3881,1
    - Dst: platform_stat
      Src: /src/openvpn/src/openvpn/options.c:3879,1
    - Dst: platform_access
      Src: /src/openvpn/src/openvpn/options.c:3861,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3897,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 68
    argCount: 4
    argNames:
    - type
    - file
    - mode
    - opt
    argTypes:
    - int
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 3902
      start: 3813
    functionDepth: 0
    functionLinenumber: 3813
    functionLinenumberEnd: 3902
    functionName: check_file_access
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strncmp
    - platform_stat
    - dirname
    - msg
    - strchr
    - free
    - streq
    - platform_access
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'static bool check_file_access(const int type, const char *file, const
      int mode, const char *opt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9505,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9510,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9506,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "vlan-pvid") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9515
      start: 9503
    functionDepth: 0
    functionLinenumber: 9503
    functionLinenumberEnd: 9515
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "vlan-pvid") && p[1] && !p[2]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6975,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6981,1
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6984,1
    - Dst: ipv6_addr_safe_hexplusbits
      Src: /src/openvpn/src/openvpn/options.c:6979,1
    - Dst: rol6_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:6976,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6986,1
    - Dst: add_route_ipv6_to_option_list
      Src: /src/openvpn/src/openvpn/options.c:6991,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 1
    argNames:
    - (p[0], "route-ipv6") && p[1] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6992
      start: 6973
    functionDepth: 0
    functionLinenumber: 6973
    functionLinenumberEnd: 6992
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ipv6_addr_safe
    - ipv6_addr_safe_hexplusbits
    - msg
    - rol6_check_alloc
    - add_route_ipv6_to_option_list
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-ipv6") && p[1] && !p[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8974,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "pkcs12") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8977
      start: 8972
    functionDepth: 0
    functionLinenumber: 8972
    functionLinenumberEnd: 8977
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pkcs12") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8981,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "askpass") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8990
      start: 8979
    functionDepth: 0
    functionLinenumber: 8979
    functionLinenumberEnd: 8990
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "askpass") && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6995,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "max-routes") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6999
      start: 6993
    functionDepth: 0
    functionLinenumber: 6993
    functionLinenumberEnd: 6999
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "max-routes") && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8993,1
    - Dst: ssl_set_auth_nocache
      Src: /src/openvpn/src/openvpn/options.c:8994,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "auth-nocache") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8995
      start: 8991
    functionDepth: 0
    functionLinenumber: 8991
    functionLinenumberEnd: 8995
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - ssl_set_auth_nocache
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth-nocache") && !p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7913,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7925,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7919,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7923,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7915,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 1
    argNames:
    - (p[0], "static-challenge") && p[1] && p[2] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7928
      start: 7911
    functionDepth: 0
    functionLinenumber: 7911
    functionLinenumberEnd: 7928
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "static-challenge") && p[1] && p[2] && !p[4]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 983
      start: 964
    functionDepth: 0
    functionLinenumber: 964
    functionLinenumberEnd: 983
    functionName: pull_filter_type_name
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *pull_filter_type_name(int type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_inline_file
      Src: /src/openvpn/src/openvpn/options.c:5198,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 3
    argNames:
    - multiline
    - p
    - gc
    argTypes:
    - struct buffer*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5199
      start: 5191
    functionDepth: 0
    functionLinenumber: 5191
    functionLinenumberEnd: 5199
    functionName: check_inline_file_via_buf
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - check_inline_file
    linkageType: ''
    returnType: int
    signature: 'static int check_inline_file_via_buf(struct buffer *multiline, char
      *p[], struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6299,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "chroot") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6301
      start: 6297
    functionDepth: 0
    functionLinenumber: 6297
    functionLinenumberEnd: 6301
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "chroot") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8836,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "capath") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8838
      start: 8834
    functionDepth: 0
    functionLinenumber: 8834
    functionLinenumberEnd: 8838
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "capath") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6304,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6307,1
    - Dst: platform_chdir
      Src: /src/openvpn/src/openvpn/options.c:6305,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "cd") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6311
      start: 6302
    functionDepth: 0
    functionLinenumber: 6302
    functionLinenumberEnd: 6311
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - platform_chdir
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "cd") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8763,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "replay-persist") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8765
      start: 8761
    functionDepth: 0
    functionLinenumber: 8761
    functionLinenumberEnd: 8765
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "replay-persist") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5999,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "tun-ipv6") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6001
      start: 5995
    functionDepth: 0
    functionLinenumber: 5995
    functionLinenumberEnd: 6001
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tun-ipv6") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6513,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6514,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6517,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "tun-mtu-max") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6523
      start: 6511
    functionDepth: 0
    functionLinenumber: 6511
    functionLinenumberEnd: 6523
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tun-mtu-max") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6526,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6527,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "tun-mtu-extra") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6529
      start: 6524
    functionDepth: 0
    functionLinenumber: 6524
    functionLinenumberEnd: 6529
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tun-mtu-extra") && p[1] && !p[2]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/options.c:1456,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options.c:1461,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options.c:1460,1
    - Dst: env_set_get
      Src: /src/openvpn/src/openvpn/options.c:1458,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:1459,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/options.c:1463,1
    - Dst: setenv_foreign_option
      Src: /src/openvpn/src/openvpn/options.c:1467,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:1471,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1482,1
    - Dst: setenv_foreign_option
      Src: /src/openvpn/src/openvpn/options.c:1484,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:1505,1
    - Dst: setenv_foreign_option
      Src: /src/openvpn/src/openvpn/options.c:1501,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/options.c:1491,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/options.c:1512,1
    - Dst: setenv_foreign_option
      Src: /src/openvpn/src/openvpn/options.c:1493,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/options.c:1511,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 43
    argCount: 2
    argNames:
    - o
    - es
    argTypes:
    - struct options*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 1514
      start: 1439
    functionDepth: 0
    functionLinenumber: 1439
    functionLinenumberEnd: 1514
    functionName: foreign_options_copy_dns
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - setenv_foreign_option
    - strstr
    - print_in_addr_t
    - snprintf
    - gc_new
    - print_in6_addr
    - strchr
    - setenv_del
    - gc_free
    - env_set_get
    linkageType: ''
    returnType: void
    signature: 'static void foreign_options_copy_dns(struct options *o, struct env_set
      *es) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - mode
    argTypes:
    - enum vlan_acceptable_frames
    constantsTouched: []
    func_position:
      end: 1533
      start: 1518
    functionDepth: 0
    functionLinenumber: 1518
    functionLinenumberEnd: 1533
    functionName: print_vlan_accept
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_vlan_accept(enum vlan_acceptable_frames mode) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:2142,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:2145,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options.c:2143,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 17
    argCount: 4
    argNames:
    - server
    - port
    - flags
    - gc
    argTypes:
    - char*
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2161
      start: 2133
    functionDepth: 0
    functionLinenumber: 2133
    functionLinenumberEnd: 2161
    functionName: parse_http_proxy_override
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strcmp
    - ALLOC_OBJ_CLEAR_GC
    - string_alloc
    linkageType: ''
    returnType: struct http_proxy_options*
    signature: 'static struct http_proxy_options *parse_http_proxy_override(const
      char *server, const char *port, const char *flags, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:4586,1
    - Dst: options_warning_safe_ml
      Src: /src/openvpn/src/openvpn/options.c:4595,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:4592,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4594,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:4599,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:4602,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 3
    argNames:
    - actual
    - expected
    - actual_n
    argTypes:
    - char*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 4604
      start: 4583
    functionDepth: 0
    functionLinenumber: 4583
    functionLinenumberEnd: 4604
    functionName: options_cmp_equal_safe
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - strcmp
    - gc_free
    - options_warning_safe_ml
    - strncmp
    linkageType: ''
    returnType: bool
    signature: 'bool options_cmp_equal_safe(char *actual, const char *expected, size_t
      actual_n) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1540,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1541,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1540,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1541,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1543,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1560,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1568,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1572,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1574,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1578,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1582,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1587,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1593,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1586,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1592,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:1612,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1606,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1594,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:1610,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1609,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1608,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1566,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1583,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1544,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1544,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1545,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1546,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1546,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1547,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1547,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1561,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1545,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1561,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1563,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1585,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1589,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1590,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1571,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1577,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/options.c:1585,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1591,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1605,1
    - Dst: print_vlan_accept
      Src: /src/openvpn/src/openvpn/options.c:1605,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1563,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1542,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/options.c:1542,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1565,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1567,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/options.c:1567,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1570,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1576,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1580,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1584,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/options.c:1584,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1602,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1598,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1588,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:1599,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:1538,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1555,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1564,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1569,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1573,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1575,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1579,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1581,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1581,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1582,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1604,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1595,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1601,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1597,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1562,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1596,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1562,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 80
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1613
      start: 1535
    functionDepth: 0
    functionLinenumber: 1535
    functionLinenumberEnd: 1613
    functionName: show_p2mp_parms
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - SHOW_INT
    - SHOW_STR_INLINE
    - msg
    - print_in_addr_t
    - SHOW_STR
    - print_vlan_accept
    - gc_new
    - print_in6_addr
    - gc_free
    - SHOW_BOOL
    linkageType: ''
    returnType: void
    signature: 'static void show_p2mp_parms(const struct options *o) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2191,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 19
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 2193
      start: 2163
    functionDepth: 0
    functionLinenumber: 2163
    functionLinenumberEnd: 2193
    functionName: options_postprocess_http_proxy_override
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_http_proxy_override(struct options
      *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: options_warning_safe_ml
      Src: /src/openvpn/src/openvpn/options.c:4609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - actual
    - expected
    - actual_n
    argTypes:
    - char*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 4610
      start: 4606
    functionDepth: 0
    functionLinenumber: 4606
    functionLinenumberEnd: 4610
    functionName: options_warning_safe
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - options_warning_safe_ml
    linkageType: ''
    returnType: void
    signature: 'void options_warning_safe(char *actual, const char *expected, size_t
      actual_n) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: check_tls_prf_working
      Src: /src/openvpn/src/openvpn/options.c:3588,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3597,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3590,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 3603
      start: 3585
    functionDepth: 0
    functionLinenumber: 3585
    functionLinenumberEnd: 3603
    functionName: options_process_mutate_prf
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - check_tls_prf_working
    linkageType: ''
    returnType: void
    signature: 'static void options_process_mutate_prf(struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6532,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6533,1
    - Dst: constrain_int
      Src: /src/openvpn/src/openvpn/options.c:6534,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6538,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - (p[0], "max-packet-size") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6548
      start: 6530
    functionDepth: 0
    functionLinenumber: 6530
    functionLinenumberEnd: 6548
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - constrain_int
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "max-packet-size") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options.c:7226,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7228,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "compat-mode") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7234
      start: 7223
    functionDepth: 0
    functionLinenumber: 7223
    functionLinenumberEnd: 7234
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - sscanf
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "compat-mode") && p[1] && !p[3]) '
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: options_postprocess_setdefault_ncpciphers
      Src: /src/openvpn/src/openvpn/options.c:3619,1
    - Dst: helper_setdefault_topology
      Src: /src/openvpn/src/openvpn/options.c:3615,1
    - Dst: mutate_ncp_cipher_list
      Src: /src/openvpn/src/openvpn/options.c:3624,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:3642,1
    - Dst: alloc_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:3644,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:3653,1
    - Dst: options_postprocess_http_proxy_override
      Src: /src/openvpn/src/openvpn/options.c:3715,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3721,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3728,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/options.c:3746,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3765,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/options.c:3763,1
    - Dst: helper_tcp_nodelay
      Src: /src/openvpn/src/openvpn/options.c:3617,1
    - Dst: options_postprocess_cipher
      Src: /src/openvpn/src/openvpn/options.c:3623,1
    - Dst: alloc_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:3652,1
    - Dst: options_postprocess_mutate_ce
      Src: /src/openvpn/src/openvpn/options.c:3660,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:3645,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:3700,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:3726,1
    - Dst: foreign_options_copy_dns
      Src: /src/openvpn/src/openvpn/options.c:3790,1
    - Dst: tuntap_options_copy_dns
      Src: /src/openvpn/src/openvpn/options.c:3788,1
    - Dst: helper_client_server
      Src: /src/openvpn/src/openvpn/options.c:3613,1
    - Dst: helper_keepalive
      Src: /src/openvpn/src/openvpn/options.c:3616,1
    - Dst: options_process_mutate_prf
      Src: /src/openvpn/src/openvpn/options.c:3621,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3627,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:3657,1
    - Dst: options_postprocess_mutate_le
      Src: /src/openvpn/src/openvpn/options.c:3667,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:3687,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3708,1
    - Dst: dco_check_option
      Src: /src/openvpn/src/openvpn/options.c:3735,1
    - Dst: dco_check_startup_option
      Src: /src/openvpn/src/openvpn/options.c:3736,1
    - Dst: dns_options_preprocess_pull
      Src: /src/openvpn/src/openvpn/options.c:3783,1
    - Dst: options_set_backwards_compatible_options
      Src: /src/openvpn/src/openvpn/options.c:3620,1
    - Dst: connection_entry_load_re
      Src: /src/openvpn/src/openvpn/options.c:3643,1
    - Dst: alloc_local_entry
      Src: /src/openvpn/src/openvpn/options.c:3686,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/options.c:3732,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/options.c:3739,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3754,1
    - Dst: options_postprocess_mutate_invariant
      Src: /src/openvpn/src/openvpn/options.c:3772,1
    - Dst: check_compression_settings_valid
      Src: /src/openvpn/src/openvpn/options.c:3775,1
    - Dst: pre_connect_save
      Src: /src/openvpn/src/openvpn/options.c:3797,1
    CyclomaticComplexity: 53
    EdgeCount: 53
    ICount: 126
    argCount: 2
    argNames:
    - o
    - es
    argTypes:
    - struct options*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 3798
      start: 3605
    functionDepth: 0
    functionLinenumber: 3605
    functionLinenumberEnd: 3798
    functionName: options_postprocess_mutate
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - options_process_mutate_prf
    - foreign_options_copy_dns
    - msg
    - check_compression_settings_valid
    - options_postprocess_mutate_le
    - tuntap_options_copy_dns
    - connection_entry_load_re
    - options_postprocess_mutate_ce
    - options_set_backwards_compatible_options
    - streq
    - dco_check_option
    - options_postprocess_cipher
    - mutate_ncp_cipher_list
    - helper_keepalive
    - dco_check_startup_option
    - dns_options_preprocess_pull
    - helper_tcp_nodelay
    - alloc_connection_entry
    - pre_connect_save
    - options_postprocess_setdefault_ncpciphers
    - options_postprocess_http_proxy_override
    - options_postprocess_mutate_invariant
    - dco_enabled
    - helper_client_server
    - alloc_local_entry
    - ASSERT
    - helper_setdefault_topology
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_mutate(struct options *o, struct env_set
      *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7237,1
    - Dst: setenv_str_safe
      Src: /src/openvpn/src/openvpn/options.c:7238,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "setenv-safe") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7239
      start: 7235
    functionDepth: 0
    functionLinenumber: 7235
    functionLinenumberEnd: 7239
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - setenv_str_safe
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "setenv-safe") && p[1] && !p[3]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:2202,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 4
    argCount: 2
    argNames:
    - ce
    - gc
    argTypes:
    - struct connection_entry*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2205
      start: 2197
    functionDepth: 0
    functionLinenumber: 2197
    functionLinenumberEnd: 2205
    functionName: alloc_local_list_if_undef
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct local_list*
    signature: 'static struct local_list *alloc_local_list_if_undef(struct connection_entry
      *ce, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6354,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "up-restart") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6356
      start: 6352
    functionDepth: 0
    functionLinenumber: 6352
    functionLinenumberEnd: 6356
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "up-restart") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_local_list_if_undef
      Src: /src/openvpn/src/openvpn/options.c:2211,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2216,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:2222,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 8
    argCount: 3
    argNames:
    - ce
    - msglevel
    - gc
    argTypes:
    - struct connection_entry*
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2227
      start: 2207
    functionDepth: 0
    functionLinenumber: 2207
    functionLinenumberEnd: 2227
    functionName: alloc_local_entry
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    - msg
    - alloc_local_list_if_undef
    linkageType: ''
    returnType: struct local_entry*
    signature: 'static struct local_entry *alloc_local_entry(struct connection_entry
      *ce, const int msglevel, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:4808,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:4810,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4809,1
    - Dst: dco_version_string
      Src: /src/openvpn/src/openvpn/options.c:4809,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4812
      start: 4804
    functionDepth: 0
    functionLinenumber: 4804
    functionLinenumberEnd: 4812
    functionName: show_dco_version
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - dco_version_string
    - msg
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void show_dco_version(const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6359,1
    - Dst: open_syslog
      Src: /src/openvpn/src/openvpn/options.c:6360,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "syslog") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6361
      start: 6357
    functionDepth: 0
    functionLinenumber: 6357
    functionLinenumberEnd: 6361
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - open_syslog
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "syslog") && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1337,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:1340,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 4
    argNames:
    - parm
    - dns6_list
    - len
    - msglevel
    argTypes:
    - char*
    - struct in6_addr*
    - int*
    - int
    constantsTouched: []
    func_position:
      end: 1344
      start: 1331
    functionDepth: 0
    functionLinenumber: 1331
    functionLinenumberEnd: 1344
    functionName: dhcp_option_dns6_parse
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void dhcp_option_dns6_parse(const char *parm, struct in6_addr
      *dns6_list, int *len, int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5963,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5964,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "windows-driver") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5966
      start: 5961
    functionDepth: 0
    functionLinenumber: 5961
    functionLinenumberEnd: 5966
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "windows-driver") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8256,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8258,1
    - Dst: show_tap_win_adapters
      Src: /src/openvpn/src/openvpn/options.c:8257,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "show-adapters") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8259
      start: 8254
    functionDepth: 0
    functionLinenumber: 8254
    functionLinenumberEnd: 8259
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    - show_tap_win_adapters
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-adapters") && !p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1350,1
    - Dst: ip_addr_dotted_quad_safe
      Src: /src/openvpn/src/openvpn/options.c:1357,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1368,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:1360,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 5
    argNames:
    - name
    - parm
    - array
    - len
    - msglevel
    argTypes:
    - char*
    - char*
    - in_addr_t*
    - int*
    - int
    constantsTouched: []
    func_position:
      end: 1371
      start: 1345
    functionDepth: 0
    functionLinenumber: 1345
    functionLinenumberEnd: 1371
    functionName: dhcp_option_address_parse
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - get_ip_addr
    - ip_addr_dotted_quad_safe
    linkageType: ''
    returnType: void
    signature: 'static void dhcp_option_address_parse(const char *name, const char
      *parm, in_addr_t *array, int *len, int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8262,1
    - Dst: show_adapters
      Src: /src/openvpn/src/openvpn/options.c:8264,1
    - Dst: show_routes
      Src: /src/openvpn/src/openvpn/options.c:8263,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8265,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "show-net") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8266
      start: 8260
    functionDepth: 0
    functionLinenumber: 8260
    functionLinenumberEnd: 8266
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    - show_routes
    - VERIFY_PERMISSION
    - show_adapters
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-net") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1024,1
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1026,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/options.c:1024,1
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1025,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - es
    - e
    - i
    argTypes:
    - struct env_set*
    - struct local_entry*
    - int
    constantsTouched: []
    func_position:
      end: 1027
      start: 1019
    functionDepth: 0
    functionLinenumber: 1019
    functionLinenumberEnd: 1027
    functionName: setenv_local_entry
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - setenv_str_i
    - proto2ascii
    linkageType: ''
    returnType: void
    signature: 'static void setenv_local_entry(struct env_set *es, const struct local_entry
      *e, const int i) '
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4233,1
    - Dst: calc_options_string_link_mtu
      Src: /src/openvpn/src/openvpn/options.c:4245,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4264,1
    - Dst: ifconfig_options_string
      Src: /src/openvpn/src/openvpn/options.c:4295,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4310,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:4342,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:4352,1
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/options.c:4359,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4370,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4372,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:4431,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4412,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4244,1
    - Dst: init_tun
      Src: /src/openvpn/src/openvpn/options.c:4273,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4296,1
    - Dst: PULL_DEFINED
      Src: /src/openvpn/src/openvpn/options.c:4258,1
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/options.c:4354,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4376,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4382,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4419,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/options.c:4230,1
    - Dst: dev_type_string
      Src: /src/openvpn/src/openvpn/options.c:4239,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4239,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4249,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4253,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/options.c:4303,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4298,1
    - Dst: keydirection2ascii
      Src: /src/openvpn/src/openvpn/options.c:4328,1
    - Dst: cipher_defined
      Src: /src/openvpn/src/openvpn/options.c:4361,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4408,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4256,1
    - Dst: proto_remote
      Src: /src/openvpn/src/openvpn/options.c:4256,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4317,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4331,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/options.c:4360,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/options.c:4363,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/options.c:4368,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4373,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4395,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4401,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4423,1
    - Dst: md_kt_name
      Src: /src/openvpn/src/openvpn/options.c:4372,1
    CyclomaticComplexity: 47
    EdgeCount: 47
    ICount: 98
    argCount: 6
    argNames:
    - o
    - frame
    - tt
    - ctx
    - remote
    - gc
    argTypes:
    - struct options*
    - struct frame*
    - struct tuntap*
    - openvpn_net_ctx_t*
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4432
      start: 4222
    functionDepth: 0
    functionLinenumber: 4222
    functionLinenumberEnd: 4432
    functionName: options_string
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - dev_type_string
    - md_kt_name
    - free
    - alloc_buf
    - proto_remote
    - tls_item_in_cipher_list
    - init_key_type
    - PULL_DEFINED
    - ifconfig_options_string
    - cipher_kt_key_size
    - buf_printf
    - strcmp
    - init_tun
    - strlen
    - cipher_kt_name
    - BSTR
    - cipher_defined
    - calc_options_string_link_mtu
    - keydirection2ascii
    - ASSERT
    linkageType: ''
    returnType: char*
    signature: 'char *options_string(const struct options *o, const struct frame *frame,
      struct tuntap *tt, openvpn_net_ctx_t *ctx, bool remote, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6552,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6553,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "mtu-dynamic")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6555
      start: 6550
    functionDepth: 0
    functionLinenumber: 6550
    functionLinenumberEnd: 6555
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mtu-dynamic")) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/options.c:1032,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/options.c:1033,1
    - Dst: setenv_long_long
      Src: /src/openvpn/src/openvpn/options.c:1036,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/options.c:1035,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/options.c:1034,1
    - Dst: time
      Src: /src/openvpn/src/openvpn/options.c:1036,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/options.c:1037,1
    - Dst: platform_getpid
      Src: /src/openvpn/src/openvpn/options.c:1037,1
    - Dst: setenv_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:1044,1
    - Dst: setenv_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:1049,1
    - Dst: setenv_local_entry
      Src: /src/openvpn/src/openvpn/options.c:1056,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 22
    argCount: 2
    argNames:
    - es
    - o
    argTypes:
    - struct env_set*
    - struct options*
    constantsTouched: []
    func_position:
      end: 1059
      start: 1029
    functionDepth: 0
    functionLinenumber: 1029
    functionLinenumberEnd: 1059
    functionName: setenv_settings
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - setenv_connection_entry
    - platform_getpid
    - setenv_local_entry
    - setenv_long_long
    - setenv_str
    - setenv_int
    - time
    linkageType: ''
    returnType: void
    signature: 'void setenv_settings(struct env_set *es, const struct options *o) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6558,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6573,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6559,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6567,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6563,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 1
    argNames:
    - (p[0], "fragment") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6575
      start: 6556
    functionDepth: 0
    functionLinenumber: 6556
    functionLinenumberEnd: 6575
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "fragment") && p[1] && !p[3]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dns_options_verify
      Src: /src/openvpn/src/openvpn/options.c:4168,1
    - Dst: foreign_options_copy_dns
      Src: /src/openvpn/src/openvpn/options.c:4175,1
    - Dst: dns_options_postprocess_pull
      Src: /src/openvpn/src/openvpn/options.c:4171,1
    - Dst: tuntap_options_copy_dns
      Src: /src/openvpn/src/openvpn/options.c:4173,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - o
    - es
    argTypes:
    - struct options*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 4179
      start: 4165
    functionDepth: 0
    functionLinenumber: 4165
    functionLinenumberEnd: 4179
    functionName: options_postprocess_pull
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - foreign_options_copy_dns
    - dns_options_verify
    - tuntap_options_copy_dns
    - dns_options_postprocess_pull
    linkageType: ''
    returnType: bool
    signature: 'bool options_postprocess_pull(struct options *o, struct env_set *es) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: need_compatibility_before
      Src: /src/openvpn/src/openvpn/options.c:3525,1
    - Dst: need_compatibility_before
      Src: /src/openvpn/src/openvpn/options.c:3561,1
    - Dst: append_cipher_to_ncp_list
      Src: /src/openvpn/src/openvpn/options.c:3564,1
    - Dst: need_compatibility_before
      Src: /src/openvpn/src/openvpn/options.c:3542,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/options.c:3562,1
    - Dst: need_compatibility_before
      Src: /src/openvpn/src/openvpn/options.c:3573,1
    - Dst: comp_non_stub_enabled
      Src: /src/openvpn/src/openvpn/options.c:3575,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 44
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 3583
      start: 3515
    functionDepth: 0
    functionLinenumber: 3515
    functionLinenumberEnd: 3583
    functionName: options_set_backwards_compatible_options
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - append_cipher_to_ncp_list
    - need_compatibility_before
    - comp_non_stub_enabled
    - tls_item_in_cipher_list
    linkageType: ''
    returnType: void
    signature: 'static void options_set_backwards_compatible_options(struct options
      *o) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: string_array_len
      Src: /src/openvpn/src/openvpn/options.c:5569,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5578,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 4
    argNames:
    - msglevel
    - p
    - max
    - flags
    argTypes:
    - int
    - char*
    - int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 5589
      start: 5563
    functionDepth: 0
    functionLinenumber: 5563
    functionLinenumberEnd: 5589
    functionName: no_more_than_n_args
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - string_array_len
    linkageType: ''
    returnType: bool
    signature: 'static bool no_more_than_n_args(const int msglevel, char *p[], const
      int max, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5979,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5986,1
    - Dst: mac_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:5980,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "lladdr") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5989
      start: 5977
    functionDepth: 0
    functionLinenumber: 5977
    functionLinenumberEnd: 5989
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - mac_addr_safe
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "lladdr") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6935,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "persist-local-ip") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6937
      start: 6933
    functionDepth: 0
    functionLinenumber: 6933
    functionLinenumberEnd: 6937
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "persist-local-ip") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - options
    - msglevel
    argTypes:
    - struct options*
    - int
    constantsTouched: []
    func_position:
      end: 5595
      start: 5591
    functionDepth: 0
    functionLinenumber: 5591
    functionLinenumberEnd: 5595
    functionName: msglevel_forward_compatible
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int msglevel_forward_compatible(struct options *options,
      const int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5992,1
    - Dst: parse_topology
      Src: /src/openvpn/src/openvpn/options.c:5993,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "topology") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5994
      start: 5990
    functionDepth: 0
    functionLinenumber: 5990
    functionLinenumberEnd: 5994
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - parse_topology
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "topology") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6940,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "persist-remote-ip") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6942
      start: 6938
    functionDepth: 0
    functionLinenumber: 6938
    functionLinenumberEnd: 6942
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "persist-remote-ip") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - o
    - version
    argTypes:
    - struct options*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3509
      start: 3505
    functionDepth: 0
    functionLinenumber: 3505
    functionLinenumberEnd: 3509
    functionName: need_compatibility_before
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool need_compatibility_before(const struct options *o, unsigned
      int version) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1672,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1674,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1673,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1675,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1676,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1677,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1678,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1679,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1680,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1681,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1686,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1695,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1691,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct http_proxy_options*
    constantsTouched: []
    func_position:
      end: 1696
      start: 1668
    functionDepth: 0
    functionLinenumber: 1668
    functionLinenumberEnd: 1696
    functionName: show_http_proxy_options
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - SHOW_STR
    - SHOW_BOOL
    linkageType: ''
    returnType: void
    signature: 'static void show_http_proxy_options(const struct http_proxy_options
      *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: new_client_nat_list
      Src: /src/openvpn/src/openvpn/options.c:1731,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1733
      start: 1726
    functionDepth: 0
    functionLinenumber: 1726
    functionLinenumberEnd: 1733
    functionName: cnol_check_alloc
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - new_client_nat_list
    linkageType: ''
    returnType: void
    signature: 'static void cnol_check_alloc(struct options *options) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8768,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "test-crypto") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8770
      start: 8766
    functionDepth: 0
    functionLinenumber: 8766
    functionLinenumberEnd: 8770
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "test-crypto") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6321,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "writepid") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6323
      start: 6319
    functionDepth: 0
    functionLinenumber: 6319
    functionLinenumberEnd: 6323
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "writepid") && p[1] && !p[2]) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7195,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7202,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7205,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7196,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7200,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7209,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7211,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7215,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7215,1
    - Dst: msglevel_forward_compatible
      Src: /src/openvpn/src/openvpn/options.c:7218,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/options.c:7220,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 30
    argCount: 1
    argNames:
    - (p[0], "setenv") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7222
      start: 7193
    functionDepth: 0
    functionLinenumber: 7193
    functionLinenumberEnd: 7222
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - msglevel_forward_compatible
    - setenv_str
    - positive_atoi
    - streq
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "setenv") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9312,1
    - Dst: x509_track_add
      Src: /src/openvpn/src/openvpn/options.c:9313,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "x509-track") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9314
      start: 9310
    functionDepth: 0
    functionLinenumber: 9310
    functionLinenumberEnd: 9314
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - x509_track_add
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "x509-track") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6293,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6294,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "gremlin") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6295
      start: 6291
    functionDepth: 0
    functionLinenumber: 6291
    functionLinenumberEnd: 6295
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "gremlin") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7685,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "client-config-dir") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7687
      start: 7683
    functionDepth: 0
    functionLinenumber: 7683
    functionLinenumberEnd: 7687
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-config-dir") && p[1] && !p[2]) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8043,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8049,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:8044,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8054,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8065,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:8070,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 21
    argCount: 1
    argNames:
    - (p[0], "dns-updown") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8073
      start: 8041
    functionDepth: 0
    functionLinenumber: 8041
    functionLinenumberEnd: 8073
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - streq
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dns-updown") && p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/options.c:5095,1
    - Dst: fgets
      Src: /src/openvpn/src/openvpn/options.c:5095,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5100,1
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/options.c:5102,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/options.c:5099,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:5108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 3
    argNames:
    - is
    - line
    - size
    argTypes:
    - struct in_src*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 5111
      start: 5090
    functionDepth: 0
    functionLinenumber: 5090
    functionLinenumberEnd: 5111
    functionName: in_src_get
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - fgets
    - buf_parse
    - ASSERT
    - strlen
    - strcat
    - BOOL_CAST
    linkageType: ''
    returnType: bool
    signature: 'static bool in_src_get(const struct in_src *is, char *line, const
      int size) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6061,1
    - Dst: alloc_local_entry
      Src: /src/openvpn/src/openvpn/options.c:6063,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:6069,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:6064,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6081,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 1
    argNames:
    - (p[0], "local") && p[1] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6083
      start: 6057
    functionDepth: 0
    functionLinenumber: 6057
    functionLinenumberEnd: 6083
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ascii2proto
    - strcmp
    - alloc_local_entry
    - ASSERT
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "local") && p[1] && !p[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6579,1
    - Dst: translate_mtu_discover_type_name
      Src: /src/openvpn/src/openvpn/options.c:6580,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "mtu-disc") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6581
      start: 6577
    functionDepth: 0
    functionLinenumber: 6577
    functionLinenumberEnd: 6581
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - translate_mtu_discover_type_name
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mtu-disc") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6699,1
    - Dst: atoll
      Src: /src/openvpn/src/openvpn/options.c:6703,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6707,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6700,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "inactive") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6714
      start: 6697
    functionDepth: 0
    functionLinenumber: 6697
    functionLinenumberEnd: 6714
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    - atoll
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "inactive") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6945,1
    - Dst: cnol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:6946,1
    - Dst: add_client_nat_to_option_list
      Src: /src/openvpn/src/openvpn/options.c:6947,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "client-nat") && p[1] && p[2] && p[3] && p[4] && !p[5])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6948
      start: 6943
    functionDepth: 0
    functionLinenumber: 6943
    functionLinenumberEnd: 6948
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - add_client_nat_to_option_list
    - VERIFY_PERMISSION
    - cnol_check_alloc
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-nat") && p[1] && p[2] && p[3] && p[4]
      && !p[5]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9060,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:9065,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:9061,1
    - Dst: string_substitute
      Src: /src/openvpn/src/openvpn/options.c:9066,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "tls-verify") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9068
      start: 9058
    functionDepth: 0
    functionLinenumber: 9058
    functionLinenumberEnd: 9068
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - string_substitute
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-verify") && p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7690,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "ccd-exclusive") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7692
      start: 7688
    functionDepth: 0
    functionLinenumber: 7688
    functionLinenumberEnd: 7692
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ccd-exclusive") && !p[1]) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: dns_domain_list_append
      Src: /src/openvpn/src/openvpn/options.c:8106,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8104,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8108,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8148,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8076,1
    - Dst: dns_domain_list_append
      Src: /src/openvpn/src/openvpn/options.c:8080,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8082,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8093,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8118,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8154,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8087,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8099,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8114,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8124,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8130,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8138,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8160,1
    - Dst: dns_server_priority_parse
      Src: /src/openvpn/src/openvpn/options.c:8085,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8078,1
    - Dst: dns_server_get
      Src: /src/openvpn/src/openvpn/options.c:8091,1
    - Dst: dns_server_addr_parse
      Src: /src/openvpn/src/openvpn/options.c:8097,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8110,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8128,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8134,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8144,1
    CyclomaticComplexity: 34
    EdgeCount: 34
    ICount: 66
    argCount: 1
    argNames:
    - (p[0], "dns") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8163
      start: 8074
    functionDepth: 0
    functionLinenumber: 8074
    functionLinenumberEnd: 8163
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - dns_server_priority_parse
    - dns_domain_list_append
    - dns_server_get
    - streq
    - dns_server_addr_parse
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dns") && p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: in_src_get
      Src: /src/openvpn/src/openvpn/options.c:5122,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/options.c:5136,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/options.c:5140,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/options.c:5152,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/options.c:5142,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/options.c:5118,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5131,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5131,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/options.c:5139,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/options.c:5153,1
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/options.c:5127,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:5140,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options.c:5151,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:5151,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/options.c:5154,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5149,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5136,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/options.c:5141,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:5145,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 34
    argCount: 4
    argNames:
    - is
    - close_tag
    - num_lines
    - gc
    argTypes:
    - struct in_src*
    - char*
    - int*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5156
      start: 5113
    functionDepth: 0
    functionLinenumber: 5113
    functionLinenumberEnd: 5156
    functionName: read_inline_file
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - buf_copy
    - buf_safe
    - buf_clear
    - BSTR
    - buf_printf
    - msg
    - in_src_get
    - string_alloc
    - isspace
    - free_buf
    - secure_memzero
    - ASSERT
    - alloc_buf
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static char *read_inline_file(struct in_src *is, const char *close_tag,
      int *num_lines, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6086,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "remote-random") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6088
      start: 6084
    functionDepth: 0
    functionLinenumber: 6084
    functionLinenumberEnd: 6088
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote-random") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6584,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "mtu-test") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6586
      start: 6582
    functionDepth: 0
    functionLinenumber: 6582
    functionLinenumberEnd: 6586
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mtu-test") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6717,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6718,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "session-timeout") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6719
      start: 6715
    functionDepth: 0
    functionLinenumber: 6715
    functionLinenumberEnd: 6719
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "session-timeout") && p[1] && !p[2]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6951,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6957,1
    - Dst: rol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:6952,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6955,1
    - Dst: is_special_addr
      Src: /src/openvpn/src/openvpn/options.c:6955,1
    - Dst: ip_addr_dotted_quad_safe
      Src: /src/openvpn/src/openvpn/options.c:6960,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6962,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6965,1
    - Dst: is_special_addr
      Src: /src/openvpn/src/openvpn/options.c:6965,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6967,1
    - Dst: add_route_to_option_list
      Src: /src/openvpn/src/openvpn/options.c:6971,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 25
    argCount: 1
    argNames:
    - (p[0], "route") && p[1] && !p[5])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6972
      start: 6949
    functionDepth: 0
    functionLinenumber: 6949
    functionLinenumberEnd: 6972
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - rol_check_alloc
    - ip_addr_dotted_quad_safe
    - msg
    - add_route_to_option_list
    - is_special_addr
    - VERIFY_PERMISSION
    - ip_or_dns_addr_safe
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route") && p[1] && !p[5]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9071,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-export-cert") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9073
      start: 9069
    functionDepth: 0
    functionLinenumber: 9069
    functionLinenumberEnd: 9073
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-export-cert") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5921,1
    - Dst: plugin_option_list_new
      Src: /src/openvpn/src/openvpn/options.c:5924,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5928,1
    - Dst: plugin_option_list_add
      Src: /src/openvpn/src/openvpn/options.c:5926,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "plugin") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5931
      start: 5919
    functionDepth: 0
    functionLinenumber: 5919
    functionLinenumberEnd: 5931
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - plugin_option_list_add
    - msg
    - VERIFY_PERMISSION
    - plugin_option_list_new
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "plugin") && p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6011,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6012,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6019,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6012,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "ifconfig") && p[1] && p[2] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6022
      start: 6009
    functionDepth: 0
    functionLinenumber: 6009
    functionLinenumberEnd: 6022
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - ip_or_dns_addr_safe
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ifconfig") && p[1] && p[2] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8930,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "key") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8933
      start: 8928
    functionDepth: 0
    functionLinenumber: 8928
    functionLinenumberEnd: 8933
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "key") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9430,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "rmtun") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9433
      start: 9428
    functionDepth: 0
    functionLinenumber: 9428
    functionLinenumberEnd: 9433
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "rmtun") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6027,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6033,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:6028,1
    - Dst: get_ipv6_addr_no_netbits
      Src: /src/openvpn/src/openvpn/options.c:6037,1
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:6029,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6043,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 1
    argNames:
    - (p[0], "ifconfig-ipv6") && p[1] && p[2] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6046
      start: 6023
    functionDepth: 0
    functionLinenumber: 6023
    functionLinenumberEnd: 6046
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - ipv6_addr_safe
    - msg
    - get_ipv6_addr_no_netbits
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ifconfig-ipv6") && p[1] && p[2] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8375,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8376,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "group") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8377
      start: 8373
    functionDepth: 0
    functionLinenumber: 8373
    functionLinenumberEnd: 8377
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "group") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8937,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8948,1
    - Dst: tls_version_parse
      Src: /src/openvpn/src/openvpn/options.c:8938,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8941,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - (p[0], "tls-version-min") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8956
      start: 8934
    functionDepth: 0
    functionLinenumber: 8934
    functionLinenumberEnd: 8956
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - tls_version_parse
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-version-min") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9436,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "mktun") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9439
      start: 9434
    functionDepth: 0
    functionLinenumber: 9434
    functionLinenumberEnd: 9439
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mktun") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6612,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6615,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6621,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "socket-flags")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6624
      start: 6609
    functionDepth: 0
    functionLinenumber: 6609
    functionLinenumberEnd: 6624
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "socket-flags")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7697,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7698,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7701,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "bcast-buffers") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7704
      start: 7693
    functionDepth: 0
    functionLinenumber: 7693
    functionLinenumberEnd: 7704
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "bcast-buffers") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7709,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7710,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7713,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "tcp-queue-limit") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7716
      start: 7705
    functionDepth: 0
    functionLinenumber: 7705
    functionLinenumberEnd: 7716
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tcp-queue-limit") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8350,1
    - Dst: set_pause_exit_win32
      Src: /src/openvpn/src/openvpn/options.c:8351,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "pause-exit") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8352
      start: 8348
    functionDepth: 0
    functionLinenumber: 8348
    functionLinenumberEnd: 8352
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_pause_exit_win32
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pause-exit") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6884,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6885,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6886,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "keepalive") && p[1] && p[2] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6887
      start: 6882
    functionDepth: 0
    functionLinenumber: 6882
    functionLinenumberEnd: 6887
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "keepalive") && p[1] && p[2] && !p[3]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - ce
    - re
    argTypes:
    - struct connection_entry*
    - struct remote_entry*
    constantsTouched: []
    func_position:
      end: 2345
      start: 2326
    functionDepth: 0
    functionLinenumber: 2326
    functionLinenumberEnd: 2345
    functionName: connection_entry_load_re
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void connection_entry_load_re(struct connection_entry *ce,
      const struct remote_entry *re) '
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/options.c:3053,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3112,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3117,1
    - Dst: ssl_get_auth_nocache
      Src: /src/openvpn/src/openvpn/options.c:3102,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/options.c:3108,1
    - Dst: connection_entry_preload_key
      Src: /src/openvpn/src/openvpn/options.c:3195,1
    - Dst: connection_entry_preload_key
      Src: /src/openvpn/src/openvpn/options.c:3197,1
    - Dst: connection_entry_preload_key
      Src: /src/openvpn/src/openvpn/options.c:3199,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/options.c:3203,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3205,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 93
    argCount: 2
    argNames:
    - o
    - ce
    argTypes:
    - struct options*
    - struct connection_entry*
    constantsTouched: []
    func_position:
      end: 3208
      start: 3050
    functionDepth: 0
    functionLinenumber: 3050
    functionLinenumberEnd: 3208
    functionName: options_postprocess_mutate_ce
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - dev_type_enum
    - proto_is_udp
    - connection_entry_preload_key
    - ssl_get_auth_nocache
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_mutate_ce(struct options *o, struct
      connection_entry *ce) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/options.c:5446,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:5449,1
    - Dst: parse_line
      Src: /src/openvpn/src/openvpn/options.c:5455,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/options.c:5455,1
    - Dst: apply_pull_filter
      Src: /src/openvpn/src/openvpn/options.c:5451,1
    - Dst: add_option
      Src: /src/openvpn/src/openvpn/options.c:5457,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 14
    argCount: 5
    argNames:
    - options
    - buf
    - permission_mask
    - option_types_found
    - es
    argTypes:
    - struct options*
    - struct buffer*
    - unsigned int
    - unsigned int*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 5462
      start: 5434
    functionDepth: 0
    functionLinenumber: 5434
    functionLinenumberEnd: 5462
    functionName: apply_push_options
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - parse_line
    - SIZE
    - buf_parse
    - CLEAR
    - apply_pull_filter
    - add_option
    linkageType: ''
    returnType: bool
    signature: 'bool apply_push_options(struct options *options, struct buffer *buf,
      unsigned int permission_mask, unsigned int *option_types_found, struct env_set
      *es) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6822,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6833,1
    - Dst: init_http_proxy_options_once
      Src: /src/openvpn/src/openvpn/options.c:6823,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6829,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6825,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6833,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6833,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6852,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6864,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 38
    argCount: 1
    argNames:
    - (p[0], "http-proxy-option") && p[1] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6866
      start: 6818
    functionDepth: 0
    functionLinenumber: 6818
    functionLinenumberEnd: 6866
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - init_http_proxy_options_once
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "http-proxy-option") && p[1] && !p[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8824,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-client") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8826
      start: 8822
    functionDepth: 0
    functionLinenumber: 8822
    functionLinenumberEnd: 8826
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-client") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7442,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7450,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7443,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7445,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 1
    argNames:
    - (p[0], "ifconfig-ipv6-pool") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7459
      start: 7436
    functionDepth: 0
    functionLinenumber: 7436
    functionLinenumberEnd: 7459
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ifconfig-ipv6-pool") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7728,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "client-to-client") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7730
      start: 7726
    functionDepth: 0
    functionLinenumber: 7726
    functionLinenumberEnd: 7730
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-to-client") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8355,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8359,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "service") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8361
      start: 8353
    functionDepth: 0
    functionLinenumber: 8353
    functionLinenumberEnd: 8361
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "service") && p[1] && !p[3]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buffer_read_from_file
      Src: /src/openvpn/src/openvpn/options.c:2353,1
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/options.c:2354,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2356,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 12
    argCount: 3
    argNames:
    - key_file
    - key_inline
    - gc
    argTypes:
    - char**
    - bool*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2362
      start: 2347
    functionDepth: 0
    functionLinenumber: 2347
    functionLinenumberEnd: 2362
    functionName: connection_entry_preload_key
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - buffer_read_from_file
    - buf_valid
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void connection_entry_preload_key(const char **key_file, bool
      *key_inline, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 3
    argNames:
    - ce
    - le
    - mode
    argTypes:
    - struct connection_entry*
    - struct local_entry*
    - int
    constantsTouched: []
    func_position:
      end: 3224
      start: 3210
    functionDepth: 0
    functionLinenumber: 3210
    functionLinenumberEnd: 3224
    functionName: options_postprocess_mutate_le
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_mutate_le(struct connection_entry
      *ce, struct local_entry *le, int mode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5472,1
    - Dst: read_config_file
      Src: /src/openvpn/src/openvpn/options.c:5473,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 6
    argNames:
    - o
    - filename
    - msglevel
    - permission_mask
    - option_types_found
    - es
    argTypes:
    - struct options*
    - char*
    - int
    - unsigned int
    - unsigned int*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 5482
      start: 5464
    functionDepth: 0
    functionLinenumber: 5464
    functionLinenumberEnd: 5482
    functionName: options_server_import
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - read_config_file
    linkageType: ''
    returnType: void
    signature: 'void options_server_import(struct options *o, const char *filename,
      int msglevel, unsigned int permission_mask, unsigned int *option_types_found,
      struct env_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6869,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - (p[0], "socks-proxy") && p[1] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6881
      start: 6867
    functionDepth: 0
    functionLinenumber: 6867
    functionLinenumberEnd: 6881
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "socks-proxy") && p[1] && !p[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6890,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6891,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "ping") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6892
      start: 6888
    functionDepth: 0
    functionLinenumber: 6888
    functionLinenumberEnd: 6892
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ping") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8829,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "ca") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8832
      start: 8827
    functionDepth: 0
    functionLinenumber: 8827
    functionLinenumberEnd: 8832
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ca") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6344,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "down-pre") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6346
      start: 6342
    functionDepth: 0
    functionLinenumber: 6342
    functionLinenumberEnd: 6346
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "down-pre") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6349,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "up-delay") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6351
      start: 6347
    functionDepth: 0
    functionLinenumber: 6347
    functionLinenumberEnd: 6351
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "up-delay") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8286,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "dhcp-renew") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8288
      start: 8284
    functionDepth: 0
    functionLinenumber: 8284
    functionLinenumberEnd: 8288
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dhcp-renew") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7733,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "duplicate-cn") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7735
      start: 7731
    functionDepth: 0
    functionLinenumber: 7731
    functionLinenumberEnd: 7735
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "duplicate-cn") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6388,1
    - Dst: set_suppress_timestamps
      Src: /src/openvpn/src/openvpn/options.c:6390,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "suppress-timestamps") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6391
      start: 6386
    functionDepth: 0
    functionLinenumber: 6386
    functionLinenumberEnd: 6391
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - set_suppress_timestamps
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "suppress-timestamps") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8291,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "dhcp-pre-release") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8294
      start: 8289
    functionDepth: 0
    functionLinenumber: 8289
    functionLinenumberEnd: 8294
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dhcp-pre-release") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7738,1
    - Dst: option_iroute
      Src: /src/openvpn/src/openvpn/options.c:7739,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "iroute") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7740
      start: 7736
    functionDepth: 0
    functionLinenumber: 7736
    functionLinenumberEnd: 7740
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - option_iroute
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "iroute") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6419,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "multihome") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6421
      start: 6417
    functionDepth: 0
    functionLinenumber: 6417
    functionLinenumberEnd: 6421
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "multihome") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/options.c:4894,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - unsigned char
    constantsTouched: []
    func_position:
      end: 4895
      start: 4891
    functionDepth: 0
    functionLinenumber: 4891
    functionLinenumberEnd: 4895
    functionName: space
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - isspace
    linkageType: ''
    returnType: bool
    signature: 'static inline bool space(unsigned char c) '
  - BBCount: 23
    BranchProfiles: []
    Callsites:
    - Dst: space
      Src: /src/openvpn/src/openvpn/options.c:4943,1
    - Dst: space
      Src: /src/openvpn/src/openvpn/options.c:5010,1
    - Dst: space
      Src: /src/openvpn/src/openvpn/options.c:4966,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/options.c:5000,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/options.c:5001,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5013,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5015,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/options.c:5026,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/options.c:5028,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5029,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/options.c:5030,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5046,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5064,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5056,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5051,1
    CyclomaticComplexity: 42
    EdgeCount: 42
    ICount: 113
    argCount: 7
    argNames:
    - line
    - p
    - n
    - file
    - line_num
    - msglevel
    - gc
    argTypes:
    - char*
    - char*
    - int
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5069
      start: 4897
    functionDepth: 0
    functionLinenumber: 4897
    functionLinenumberEnd: 5069
    functionName: parse_line
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - memcpy
    - msg
    - SIZE
    - gc_malloc
    - space
    linkageType: ''
    returnType: int
    signature: 'int parse_line(const char *line, char *p[], const int n, const char
      *file, const int line_num, int msglevel, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: options_postprocess_verify_ce
      Src: /src/openvpn/src/openvpn/options.c:3429,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3441,1
    - Dst: dns_options_verify
      Src: /src/openvpn/src/openvpn/options.c:3437,1
    - Dst: options_postprocess_verify_ce
      Src: /src/openvpn/src/openvpn/options.c:3434,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/options.c:3439,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 3445
      start: 3421
    functionDepth: 0
    functionLinenumber: 3421
    functionLinenumberEnd: 3445
    functionName: options_postprocess_verify
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - dns_options_verify
    - dco_enabled
    - options_postprocess_verify_ce
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_verify(const struct options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5957,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "dev-type") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5959
      start: 5955
    functionDepth: 0
    functionLinenumber: 5955
    functionLinenumberEnd: 5959
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dev-type") && p[1] && !p[2]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3473,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/options.c:3481,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3483,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 3488
      start: 3447
    functionDepth: 0
    functionLinenumber: 3447
    functionLinenumberEnd: 3488
    functionName: options_postprocess_cipher
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - tls_item_in_cipher_list
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_cipher(struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:2234,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 2237
      start: 2229
    functionDepth: 0
    functionLinenumber: 2229
    functionLinenumberEnd: 2237
    functionName: alloc_connection_list_if_undef
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct connection_list*
    signature: 'static struct connection_list *alloc_connection_list_if_undef(struct
      options *options) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_connection_list_if_undef
      Src: /src/openvpn/src/openvpn/options.c:2242,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/options.c:2257,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2251,1
    - Dst: gc_realloc
      Src: /src/openvpn/src/openvpn/options.c:2248,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 14
    argCount: 2
    argNames:
    - options
    - msglevel
    argTypes:
    - struct options*
    - int
    constantsTouched: []
    func_position:
      end: 2260
      start: 2239
    functionDepth: 0
    functionLinenumber: 2239
    functionLinenumberEnd: 2260
    functionName: alloc_connection_entry
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - msg
    - gc_realloc
    - alloc_connection_list_if_undef
    linkageType: ''
    returnType: struct connection_entry*
    signature: 'static struct connection_entry *alloc_connection_entry(struct options
      *options, const int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8648,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8651,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8649,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "data-ciphers") || streq(p[0], "ncp-ciphers"))
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8655
      start: 8645
    functionDepth: 0
    functionLinenumber: 8645
    functionLinenumberEnd: 8655
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if ((streq(p[0], "data-ciphers") || streq(p[0], "ncp-ciphers"))
      && p[1] && !p[2]) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: check_file_access_chroot
      Src: /src/openvpn/src/openvpn/options.c:4042,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4045,1
    - Dst: check_file_access_chroot
      Src: /src/openvpn/src/openvpn/options.c:4079,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:4108,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4103,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:4124,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4033,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4059,1
    - Dst: check_file_access_chroot
      Src: /src/openvpn/src/openvpn/options.c:4065,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4097,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4119,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4089,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4093,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:4126,1
    - Dst: check_file_access_chroot
      Src: /src/openvpn/src/openvpn/options.c:4136,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4038,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4048,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:4112,1
    - Dst: check_file_access_chroot
      Src: /src/openvpn/src/openvpn/options.c:4134,1
    - Dst: check_file_access_inline
      Src: /src/openvpn/src/openvpn/options.c:4054,1
    - Dst: check_file_access_chroot_inline
      Src: /src/openvpn/src/openvpn/options.c:4071,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/options.c:4084,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:4115,1
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:4130,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4141,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 86
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 4143
      start: 4027
    functionDepth: 0
    functionLinenumber: 4027
    functionLinenumberEnd: 4143
    functionName: options_postprocess_filechecks
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - check_file_access
    - check_file_access_chroot
    - msg
    - ASSERT
    - check_file_access_chroot_inline
    - check_file_access_inline
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_filechecks(struct options *options) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:4545,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/options.c:4547,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:4554,1
    - Dst: options_warning_safe_scan2
      Src: /src/openvpn/src/openvpn/options.c:4551,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/options.c:4549,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 7
    argCount: 7
    argNames:
    - msglevel
    - delim
    - report_inconsistent
    - b1_src
    - b2_src
    - b1_name
    - b2_name
    argTypes:
    - int
    - int
    - bool
    - struct buffer*
    - struct buffer*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4555
      start: 4536
    functionDepth: 0
    functionLinenumber: 4536
    functionLinenumberEnd: 4555
    functionName: options_warning_safe_scan1
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - options_warning_safe_scan2
    - gc_malloc
    - gc_new
    - buf_parse
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void options_warning_safe_scan1(const int msglevel, const int
      delim, const bool report_inconsistent, const struct buffer *b1_src, const struct
      buffer *b2_src, const char *b1_name, const char *b2_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5833,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "management-hold") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5835
      start: 5831
    functionDepth: 0
    functionLinenumber: 5831
    functionLinenumberEnd: 5835
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "management-hold") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6465,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:6466,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6469,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "status-version") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6473
      start: 6461
    functionDepth: 0
    functionLinenumber: 6461
    functionLinenumberEnd: 6473
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "status-version") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8334,1
    - Dst: ipconfig_register_dns
      Src: /src/openvpn/src/openvpn/options.c:8338,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8340,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/options.c:8335,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "rdns-internal") && !p[1])
    - "/* standalone method for internal use\n     *\n     * (if --register-dns is
      set, openvpn needs to call itself in a\n     *  sub-process to execute the required
      functions in a non-blocking\n     *  way, and uses --rdns-internal to signal
      that to itself)\n     */"
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8341
      start: 8326
    functionDepth: 0
    functionLinenumber: 8326
    functionLinenumberEnd: 8341
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    - ipconfig_register_dns
    - VERIFY_PERMISSION
    - set_debug_level
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "rdns-internal") && !p[1]) /* standalone method
      for internal use * * (if --register-dns is set, openvpn needs to call itself
      in a * sub-process to execute the required functions in a non-blocking * way,
      and uses --rdns-internal to signal that to itself) */ '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8667,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "key-derivation") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8669
      start: 8656
    functionDepth: 0
    functionLinenumber: 8656
    functionLinenumberEnd: 8669
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "key-derivation") && p[1]) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8861,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8866,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8884,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8879,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8864,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8886,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8891,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8893,1
    - Dst: parse_hash_fingerprint_multiline
      Src: /src/openvpn/src/openvpn/options.c:8900,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8924,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 41
    argCount: 1
    argNames:
    - (p[0], "cryptoapicert") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8926
      start: 8858
    functionDepth: 0
    functionLinenumber: 8858
    functionLinenumberEnd: 8926
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - parse_hash_fingerprint_multiline
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if ((streq(p[0], "verify-hash") && p[1] && !p[3]) || (streq(p[0],
      "peer-fingerprint") && p[1] && !p[2])) { VERIFY_PERMISSION(OPT_P_GENERAL|OPT_P_INLINE);
      int verify_hash_depth = 0; if (streq(p[0], "verify-hash")) { msg(M_WARN, "DEPRECATED
      OPTION: The option --verify-hash is deprecated. " "You should switch to the
      either use the level 1 certificate as " "--ca option, use --tls-verify or use
      --peer-fingerprint"); /* verify level 1 cert, i.e. the CA that signed the leaf
      cert */ verify_hash_depth = 1; } options->verify_hash_algo = MD_SHA256; int
      digest_len = SHA256_DIGEST_LENGTH; if (options->verify_hash && options->verify_hash_depth
      != verify_hash_depth) { msg(msglevel, "ERROR: Setting %s not allowed. --verify-hash
      and" " --peer-fingerprint are mutually exclusive", p[0]); goto err; } if (streq(p[0],
      "verify-hash")) { if ((!p[2] && !is_inline) || (p[2] && streq(p[2], "SHA1")))
      { options->verify_hash_algo = MD_SHA1; digest_len = SHA_DIGEST_LENGTH; } else
      if (p[2] && !streq(p[2], "SHA256")) { msg(msglevel, "invalid or unsupported
      hashing algorithm: %s " "(only SHA1 and SHA256 are supported)", p[2]); goto
      err; } } struct verify_hash_list *newlist; newlist = parse_hash_fingerprint_multiline(p[1],
      digest_len, msglevel, &options->gc); /* Append the new list to the end of our
      current list */ if (!options->verify_hash) { options->verify_hash = newlist;
      options->verify_hash_depth = verify_hash_depth; } else { /* since both the old
      and new list can have multiple entries * we need to go to the end of one of
      them to concatenate them */ struct verify_hash_list *listend = options->verify_hash;
      while (listend->next) { listend = listend->next; } listend->next = newlist;
      } }#if defined(ENABLE_CRYPTOAPI) && defined(HAVE_XKEY_PROVIDER) else if (streq(p[0],
      "cryptoapicert") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:4560,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/options.c:4564,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4569,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:4568,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/options.c:4565,1
    - Dst: options_warning_safe_scan1
      Src: /src/openvpn/src/openvpn/options.c:4571,1
    - Dst: options_warning_safe_scan1
      Src: /src/openvpn/src/openvpn/options.c:4575,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:4580,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 4
    argNames:
    - msglevel
    - actual
    - expected
    - actual_n
    argTypes:
    - int
    - char*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 4581
      start: 4557
    functionDepth: 0
    functionLinenumber: 4557
    functionLinenumberEnd: 4581
    functionName: options_warning_safe_ml
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - buf_printf
    - gc_new
    - gc_free
    - options_warning_safe_scan1
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void options_warning_safe_ml(const int msglevel, char *actual,
      const char *expected, size_t actual_n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5838,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "management-signal") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5840
      start: 5836
    functionDepth: 0
    functionLinenumber: 5836
    functionLinenumberEnd: 5840
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "management-signal") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6476,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6487,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6477,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6481,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "remap-usr1") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6490
      start: 6474
    functionDepth: 0
    functionLinenumber: 6474
    functionLinenumberEnd: 6490
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remap-usr1") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8344,1
    - Dst: show_valid_win32_tun_subnets
      Src: /src/openvpn/src/openvpn/options.c:8345,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8346,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "show-valid-subnets") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8347
      start: 8342
    functionDepth: 0
    functionLinenumber: 8342
    functionLinenumberEnd: 8347
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    - show_valid_win32_tun_subnets
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-valid-subnets") && !p[1]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8678,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8696,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8682,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8686,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8690,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 1
    argNames:
    - (p[0], "protocol-flags") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8699
      start: 8670
    functionDepth: 0
    functionLinenumber: 8670
    functionLinenumberEnd: 8699
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "protocol-flags") && p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6924,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "persist-tun") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6926
      start: 6922
    functionDepth: 0
    functionLinenumber: 6922
    functionLinenumberEnd: 6926
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "persist-tun") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6929,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6930,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "persist-key") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6932
      start: 6927
    functionDepth: 0
    functionLinenumber: 6927
    functionLinenumberEnd: 6932
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "persist-key") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5788,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5794,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5789,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "management") && p[1] && p[2] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5805
      start: 5786
    functionDepth: 0
    functionLinenumber: 5786
    functionLinenumberEnd: 5805
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "management") && p[1] && p[2] && !p[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8811,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8812,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "ecdh-curve") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8816
      start: 8809
    functionDepth: 0
    functionLinenumber: 8809
    functionLinenumberEnd: 8816
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ecdh-curve") && p[1] && !p[2]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9091,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9108,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9094,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9102,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9098,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 1
    argNames:
    - (p[0], "verify-x509-name") && p[1] && strlen(p[1]) && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9114
      start: 9088
    functionDepth: 0
    functionLinenumber: 9088
    functionLinenumberEnd: 9114
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "verify-x509-name") && p[1] && strlen(p[1]) &&
      !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8819,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-server") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8821
      start: 8817
    functionDepth: 0
    functionLinenumber: 8817
    functionLinenumberEnd: 8821
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-server") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9118,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9122,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9132,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9126,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9121,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "ns-cert-type") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9136
      start: 9115
    functionDepth: 0
    functionLinenumber: 9115
    functionLinenumberEnd: 9136
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ns-cert-type") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7289,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "disable-occ") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7291
      start: 7287
    functionDepth: 0
    functionLinenumber: 7287
    functionLinenumberEnd: 7291
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "disable-occ") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[1], "tls-ekm")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8664
      start: 8660
    functionDepth: 0
    functionLinenumber: 8660
    functionLinenumberEnd: 8664
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: VERIFY_PERMISSION(OPT_P_NCP)
    signature: 'VERIFY_PERMISSION(OPT_P_NCP) if (streq(p[1], "tls-ekm")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9184,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9189,1
    - Dst: strtoll
      Src: /src/openvpn/src/openvpn/options.c:9186,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - (p[0], "reneg-bytes") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9193
      start: 9182
    functionDepth: 0
    functionLinenumber: 9182
    functionLinenumberEnd: 9193
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strtoll
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "reneg-bytes") && p[1] && !p[2]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7298,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7299,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7312,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7300,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7303,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7318,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 21
    argCount: 1
    argNames:
    - (p[0], "server") && p[1] && p[2] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7322
      start: 7292
    functionDepth: 0
    functionLinenumber: 7292
    functionLinenumberEnd: 7322
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - get_ip_addr
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "server") && p[1] && p[2] && !p[4]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9196,1
    - Dst: strtoll
      Src: /src/openvpn/src/openvpn/options.c:9198,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9201,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - (p[0], "reneg-pkts") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9205
      start: 9194
    functionDepth: 0
    functionLinenumber: 9194
    functionLinenumberEnd: 9205
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strtoll
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "reneg-pkts") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7329,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7332,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7330,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7337,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 1
    argNames:
    - (p[0], "server-ipv6") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7346
      start: 7323
    functionDepth: 0
    functionLinenumber: 7323
    functionLinenumberEnd: 7346
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "server-ipv6") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8801,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "show-tls") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8803
      start: 8799
    functionDepth: 0
    functionLinenumber: 8799
    functionLinenumberEnd: 8803
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-tls") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8960,1
    - Dst: tls_version_parse
      Src: /src/openvpn/src/openvpn/options.c:8961,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8964,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - (p[0], "tls-version-max") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8970
      start: 8957
    functionDepth: 0
    functionLinenumber: 8957
    functionLinenumberEnd: 8970
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - tls_version_parse
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-version-max") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7353,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7355,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7357,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7354,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:7356,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7360,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 1
    argNames:
    - (p[0], "server-bridge") && p[1] && p[2] && p[3] && p[4] && !p[5])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7368
      start: 7347
    functionDepth: 0
    functionLinenumber: 7347
    functionLinenumberEnd: 7368
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - get_ip_addr
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "server-bridge") && p[1] && p[2] && p[3] && p[4]
      && !p[5]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8806,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "show-curves") || streq(p[0], "show-groups"))
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8808
      start: 8804
    functionDepth: 0
    functionLinenumber: 8804
    functionLinenumberEnd: 8808
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if ((streq(p[0], "show-curves") || streq(p[0], "show-groups"))
      && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9442,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "peer-id") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9445
      start: 9440
    functionDepth: 0
    functionLinenumber: 9440
    functionLinenumberEnd: 9445
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "peer-id") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6049,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "ifconfig-noexec") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6051
      start: 6047
    functionDepth: 0
    functionLinenumber: 6047
    functionLinenumberEnd: 6051
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ifconfig-noexec") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6413,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "mlock") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6415
      start: 6411
    functionDepth: 0
    functionLinenumber: 6411
    functionLinenumberEnd: 6415
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mlock") && !p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:931,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:940,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:939,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:935,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 942
      start: 926
    functionDepth: 0
    functionLinenumber: 926
    functionLinenumberEnd: 942
    functionName: uninit_options
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - CLEAR
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void uninit_options(struct options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6054,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "ifconfig-nowarn") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6056
      start: 6052
    functionDepth: 0
    functionLinenumber: 6052
    functionLinenumberEnd: 6056
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ifconfig-nowarn") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/options.c:9550,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 9558
      start: 9543
    functionDepth: 0
    functionLinenumber: 9543
    functionLinenumberEnd: 9558
    functionName: has_udp_in_local_list
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - proto_is_dgram
    linkageType: ''
    returnType: bool
    signature: 'bool has_udp_in_local_list(const struct options *options) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:1240,1
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/options.c:1249,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options.c:1241,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:1254,1
    - Dst: strsep
      Src: /src/openvpn/src/openvpn/options.c:1246,1
    - Dst: parse_hash_fingerprint
      Src: /src/openvpn/src/openvpn/options.c:1259,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:1264,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:1271,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 22
    argCount: 4
    argNames:
    - str
    - nbytes
    - msglevel
    - gc
    argTypes:
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1274
      start: 1236
    functionDepth: 0
    functionLinenumber: 1236
    functionLinenumberEnd: 1274
    functionName: parse_hash_fingerprint_multiline
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - isspace
    - gc_new
    - strsep
    - gc_free
    - strlen
    - parse_hash_fingerprint
    - string_alloc
    linkageType: ''
    returnType: struct verify_hash_list*
    signature: 'static struct verify_hash_list *parse_hash_fingerprint_multiline(const
      char *str, int nbytes, int msglevel, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9159,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9173,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9161,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9166,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - (p[0], "remote-cert-tls") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9176
      start: 9157
    functionDepth: 0
    functionLinenumber: 9157
    functionLinenumberEnd: 9176
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote-cert-tls") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7640,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7645,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7641,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "client-connect") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7647
      start: 7638
    functionDepth: 0
    functionLinenumber: 7638
    functionLinenumberEnd: 7647
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-connect") && p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9179,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9180,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "tls-timeout") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9181
      start: 9177
    functionDepth: 0
    functionLinenumber: 9177
    functionLinenumberEnd: 9181
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-timeout") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:1129,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options.c:1133,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/options.c:1138,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/options.c:1139,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 2
    argNames:
    - addr
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1142
      start: 1126
    functionDepth: 0
    functionLinenumber: 1126
    functionLinenumberEnd: 1142
    functionName: get_ipv6_addr_no_netbits
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - memcpy
    - strchr
    - gc_malloc
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'static char *get_ipv6_addr_no_netbits(const char *addr, struct gc_arena
      *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1844,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1874,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1934,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1915,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1988,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2073,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:2100,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2119,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2030,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2038,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2066,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1836,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1850,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1878,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1897,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1918,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1926,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1943,1
    - Dst: print_client_nat_list
      Src: /src/openvpn/src/openvpn/options.c:1962,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:1984,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2050,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1903,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1853,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1883,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1921,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1930,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1946,1
    - Dst: show_pull_filter_list
      Src: /src/openvpn/src/openvpn/options.c:1953,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1972,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2028,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2035,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1858,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1867,1
    - Dst: SHOW_INT64
      Src: /src/openvpn/src/openvpn/options.c:1886,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1892,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1906,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1949,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1968,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1975,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1996,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2032,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:2086,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1994,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1838,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1862,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1870,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1940,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1889,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1911,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1952,1
    - Dst: plugin_option_list_print
      Src: /src/openvpn/src/openvpn/options.c:1980,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:1985,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1993,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2111,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2036,1
    - Dst: SHOW_INT64
      Src: /src/openvpn/src/openvpn/options.c:2068,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2031,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1873,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1914,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1987,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:2005,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:2022,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2002,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2072,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:2107,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2120,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1973,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1917,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1924,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1849,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1877,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1938,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1992,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:2014,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2046,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2076,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1901,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1928,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1852,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1882,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1920,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1945,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:2025,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2034,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/options.c:2057,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1848,1
    - Dst: show_connection_entries
      Src: /src/openvpn/src/openvpn/options.c:1856,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1865,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1932,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1885,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1905,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1948,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1970,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1974,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1995,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2112,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:2037,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1888,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1894,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1861,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1869,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1910,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1951,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1969,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1971,1
    - Dst: keydirection2ascii
      Src: /src/openvpn/src/openvpn/options.c:1985,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2001,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2077,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1913,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1843,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1872,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1891,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1986,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2004,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:2051,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2070,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2118,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1916,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1936,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1875,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1941,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1990,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2043,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2049,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:2075,1
    - Dst: show_tuntap_options
      Src: /src/openvpn/src/openvpn/options.c:2121,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1851,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1880,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1900,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1927,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1919,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1944,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2079,1
    - Dst: show_p2mp_parms
      Src: /src/openvpn/src/openvpn/options.c:2115,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:2062,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:2059,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1847,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1863,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1855,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1884,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1922,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1931,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1904,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1947,1
    - Dst: print_route_options
      Src: /src/openvpn/src/openvpn/options.c:1957,1
    - Dst: show_dns_options
      Src: /src/openvpn/src/openvpn/options.c:1965,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2110,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1893,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1860,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1868,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1887,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1908,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1950,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1998,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:2008,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:2033,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:2064,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:2012,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1912,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1840,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1871,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1890,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:2003,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:2018,1
    - Dst: SHOW_INT64
      Src: /src/openvpn/src/openvpn/options.c:2069,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:2093,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 203
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 2124
      start: 1832
    functionDepth: 0
    functionLinenumber: 1832
    functionLinenumberEnd: 2124
    functionName: show_settings
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - print_route_options
    - msg
    - SHOW_STR
    - show_dns_options
    - SHOW_INT
    - SHOW_STR_INLINE
    - gc_new
    - format_hex_ex
    - gc_free
    - show_p2mp_parms
    - print_client_nat_list
    - show_connection_entries
    - show_tuntap_options
    - show_pull_filter_list
    - SHOW_INT64
    - plugin_option_list_print
    - SHOW_PARM
    - keydirection2ascii
    - SHOW_BOOL
    linkageType: ''
    returnType: void
    signature: 'void show_settings(const struct options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7743,1
    - Dst: option_iroute_ipv6
      Src: /src/openvpn/src/openvpn/options.c:7744,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "iroute-ipv6") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7745
      start: 7741
    functionDepth: 0
    functionLinenumber: 7741
    functionLinenumberEnd: 7745
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - option_iroute_ipv6
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "iroute-ipv6") && p[1] && !p[2]) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8478,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8500,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8495,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8485,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8490,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8505,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8510,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8516,1
    - Dst: show_compression_warning
      Src: /src/openvpn/src/openvpn/options.c:8520,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 32
    argCount: 1
    argNames:
    - (p[0], "compress") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8521
      start: 8476
    functionDepth: 0
    functionLinenumber: 8476
    functionLinenumberEnd: 8521
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    - show_compression_warning
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "compress") && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:1150,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - ipv6_prefix_spec
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1151
      start: 1144
    functionDepth: 0
    functionLinenumber: 1144
    functionLinenumberEnd: 1151
    functionName: ipv6_addr_safe_hexplusbits
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    linkageType: ''
    returnType: bool
    signature: 'static bool ipv6_addr_safe_hexplusbits( const char *ipv6_prefix_spec
      ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7750,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7765,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7751,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7760,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:7752,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 1
    argNames:
    - (p[0], "ifconfig-push") && p[1] && p[2] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7768
      start: 7746
    functionDepth: 0
    functionLinenumber: 7746
    functionLinenumberEnd: 7768
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - getaddr
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ifconfig-push") && p[1] && p[2] && !p[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8524,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "show-ciphers") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8526
      start: 8522
    functionDepth: 0
    functionLinenumber: 8522
    functionLinenumberEnd: 8526
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-ciphers") && !p[1]) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1395,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1433,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/options.c:1417,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 33
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1437
      start: 1378
    functionDepth: 0
    functionLinenumber: 1378
    functionLinenumberEnd: 1437
    functionName: tuntap_options_copy_dns
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - ntohl
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_options_copy_dns(struct options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6400,1
    - Dst: redirect_stdout_stderr
      Src: /src/openvpn/src/openvpn/options.c:6402,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "log-append") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6403
      start: 6398
    functionDepth: 0
    functionLinenumber: 6398
    functionLinenumberEnd: 6403
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - redirect_stdout_stderr
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "log-append") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8707,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "prng") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8708
      start: 8705
    functionDepth: 0
    functionLinenumber: 8705
    functionLinenumberEnd: 8708
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "prng") && p[1] && !p[3]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/options.c:1189,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options.c:1200,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1202,1
    - Dst: isxdigit
      Src: /src/openvpn/src/openvpn/options.c:1197,1
    - Dst: isxdigit
      Src: /src/openvpn/src/openvpn/options.c:1198,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1217,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1221,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 30
    argCount: 4
    argNames:
    - str
    - nbytes
    - msglevel
    - gc
    argTypes:
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1224
      start: 1182
    functionDepth: 0
    functionLinenumber: 1182
    functionLinenumberEnd: 1224
    functionName: parse_hash_fingerprint
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - sscanf
    - ALLOC_OBJ_CLEAR_GC
    - msg
    - isxdigit
    linkageType: ''
    returnType: struct verify_hash_list*
    signature: 'static struct verify_hash_list *parse_hash_fingerprint(const char
      *str, int nbytes, int msglevel, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/options.c:1156,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:1156,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 4
    argNames:
    - src
    - from
    - to
    - gc
    argTypes:
    - char*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1171
      start: 1153
    functionDepth: 0
    functionLinenumber: 1153
    functionLinenumberEnd: 1171
    functionName: string_substitute
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strlen
    - gc_malloc
    linkageType: ''
    returnType: char*
    signature: 'static char *string_substitute(const char *src, int from, int to,
      struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6674,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "rport") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6676
      start: 6672
    functionDepth: 0
    functionLinenumber: 6672
    functionLinenumberEnd: 6676
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "rport") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7670,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7675,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7671,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "learn-address") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7677
      start: 7668
    functionDepth: 0
    functionLinenumber: 7668
    functionLinenumberEnd: 7677
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "learn-address") && p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1823,1
    - Dst: pull_filter_type_name
      Src: /src/openvpn/src/openvpn/options.c:1826,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1826,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - l
    argTypes:
    - struct pull_filter_list*
    constantsTouched: []
    func_position:
      end: 1828
      start: 1814
    functionDepth: 0
    functionLinenumber: 1814
    functionLinenumberEnd: 1828
    functionName: show_pull_filter_list
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - pull_filter_type_name
    linkageType: ''
    returnType: void
    signature: 'static void show_pull_filter_list(const struct pull_filter_list *l) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6679,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6681,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "bind") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6686
      start: 6677
    functionDepth: 0
    functionLinenumber: 6677
    functionLinenumberEnd: 6686
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "bind") && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7680,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tmp-dir") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7682
      start: 7678
    functionDepth: 0
    functionLinenumber: 7678
    functionLinenumberEnd: 7682
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tmp-dir") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7034,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7035,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "route-metric") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7036
      start: 7032
    functionDepth: 0
    functionLinenumber: 7032
    functionLinenumberEnd: 7036
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-metric") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7242,1
    - Dst: script_security_set
      Src: /src/openvpn/src/openvpn/options.c:7243,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7243,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "script-security") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7244
      start: 7240
    functionDepth: 0
    functionLinenumber: 7240
    functionLinenumberEnd: 7244
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - script_security_set
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "script-security") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8381,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "user") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8383
      start: 8379
    functionDepth: 0
    functionLinenumber: 8379
    functionLinenumberEnd: 8383
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "user") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8998,1
    - Dst: ssl_set_auth_token
      Src: /src/openvpn/src/openvpn/options.c:8999,1
    - Dst: management_auth_token
      Src: /src/openvpn/src/openvpn/options.c:9003,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "auth-token") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9006
      start: 8996
    functionDepth: 0
    functionLinenumber: 8996
    functionLinenumberEnd: 9006
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ssl_set_auth_token
    - VERIFY_PERMISSION
    - management_auth_token
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth-token") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9044,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tls-groups") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9046
      start: 9042
    functionDepth: 0
    functionLinenumber: 9042
    functionLinenumberEnd: 9046
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-groups") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7039,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7043,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7046,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "route-delay") && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7053
      start: 7037
    functionDepth: 0
    functionLinenumber: 7037
    functionLinenumberEnd: 7053
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-delay") && !p[3]) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7247,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7250,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7256,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7274,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7278,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7284,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 29
    argCount: 1
    argNames:
    - (p[0], "mssfix") && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7286
      start: 7245
    functionDepth: 0
    functionLinenumber: 7245
    functionLinenumberEnd: 7286
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mssfix") && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8386,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "group") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8388
      start: 8384
    functionDepth: 0
    functionLinenumber: 8384
    functionLinenumberEnd: 8388
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "group") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9009,1
    - Dst: ssl_set_auth_token_user
      Src: /src/openvpn/src/openvpn/options.c:9010,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "auth-token-user") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9011
      start: 9007
    functionDepth: 0
    functionLinenumber: 9007
    functionLinenumberEnd: 9011
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - ssl_set_auth_token_user
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth-token-user") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9050,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9051,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 1
    argNames:
    - "(p[0], \"crl-verify\") && p[1] && ((p[2] && streq(p[2], \"dir\"))\n                                                   ||
      !p[2])"
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9057
      start: 9047
    functionDepth: 0
    functionLinenumber: 9047
    functionLinenumberEnd: 9057
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "crl-verify") && p[1] && ((p[2] && streq(p[2],
      "dir")) || !p[2])) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_detach
      Src: /src/openvpn/src/openvpn/options.c:1702,1
    - Dst: clone_push_list
      Src: /src/openvpn/src/openvpn/options.c:1705,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1706
      start: 1699
    functionDepth: 0
    functionLinenumber: 1699
    functionLinenumberEnd: 1706
    functionName: options_detach
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - gc_detach
    - clone_push_list
    linkageType: ''
    returnType: void
    signature: 'void options_detach(struct options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read_config_string
      Src: /src/openvpn/src/openvpn/options.c:5492,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 6
    argNames:
    - options
    - config
    - msglevel
    - permission_mask
    - option_types_found
    - es
    argTypes:
    - struct options*
    - char*
    - int
    - unsigned int
    - unsigned int*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 5493
      start: 5484
    functionDepth: 0
    functionLinenumber: 5484
    functionLinenumberEnd: 5493
    functionName: options_string_import
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - read_config_string
    linkageType: ''
    returnType: void
    signature: 'void options_string_import(struct options *options, const char *config,
      const int msglevel, const unsigned int permission_mask, unsigned int *option_types_found,
      struct env_set *es) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7002,1
    - Dst: is_special_addr
      Src: /src/openvpn/src/openvpn/options.c:7009,1
    - Dst: ip_or_dns_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:7009,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7015,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7003,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - (p[0], "route-gateway") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7019
      start: 7000
    functionDepth: 0
    functionLinenumber: 7000
    functionLinenumberEnd: 7019
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - is_special_addr
    - streq
    - VERIFY_PERMISSION
    - ip_or_dns_addr_safe
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-gateway") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:7022,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7028,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "route-ipv6-gateway") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7031
      start: 7020
    functionDepth: 0
    functionLinenumber: 7020
    functionLinenumberEnd: 7031
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - ipv6_addr_safe
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-ipv6-gateway") && p[1] && !p[2]) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:5233,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:5247,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5249,1
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/options.c:5239,1
    - Dst: fgets
      Src: /src/openvpn/src/openvpn/options.c:5244,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5251,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5256,1
    - Dst: parse_line
      Src: /src/openvpn/src/openvpn/options.c:5260,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/options.c:5260,1
    - Dst: bypass_doubledash
      Src: /src/openvpn/src/openvpn/options.c:5262,1
    - Dst: check_inline_file_via_fp
      Src: /src/openvpn/src/openvpn/options.c:5263,1
    - Dst: add_option
      Src: /src/openvpn/src/openvpn/options.c:5264,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5277,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5282,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:5285,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/options.c:5284,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/options.c:5272,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 44
    argCount: 9
    argNames:
    - options
    - file
    - level
    - top_file
    - top_line
    - msglevel
    - permission_mask
    - option_types_found
    - es
    argTypes:
    - struct options*
    - char*
    - int
    - char*
    - int
    - int
    - unsigned int
    - unsigned int*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 5286
      start: 5213
    functionDepth: 0
    functionLinenumber: 5213
    functionLinenumberEnd: 5286
    functionName: read_config_file
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - fgets
    - parse_line
    - check_inline_file_via_fp
    - msg
    - SIZE
    - fclose
    - platform_fopen
    - secure_memzero
    - CLEAR
    - bypass_doubledash
    - strlen
    - streq
    - add_option
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'static void read_config_file(struct options *options, const char *file,
      int level, const char *top_file, const int top_line, const int msglevel, const
      unsigned int permission_mask, unsigned int *option_types_found, struct env_set
      *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6807,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6808,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "http-proxy-retry") || streq(p[0], "socks-proxy-retry"))
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6811
      start: 6805
    functionDepth: 0
    functionLinenumber: 6805
    functionLinenumberEnd: 6811
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "http-proxy-retry") || streq(p[0], "socks-proxy-retry")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6907,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "ping-timer-rem") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6909
      start: 6905
    functionDepth: 0
    functionLinenumber: 6905
    functionLinenumberEnd: 6909
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ping-timer-rem") && !p[1]) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8409,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8411,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8424,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8417,1
    - Dst: comp_non_stub_enabled
      Src: /src/openvpn/src/openvpn/options.c:8415,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8428,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8432,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8434,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8441,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 21
    argCount: 1
    argNames:
    - (p[0], "allow-compression") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8445
      start: 8407
    functionDepth: 0
    functionLinenumber: 8407
    functionLinenumberEnd: 8445
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - comp_non_stub_enabled
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "allow-compression") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/options.c:5301,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:5306,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/options.c:5303,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5301,1
    - Dst: parse_line
      Src: /src/openvpn/src/openvpn/options.c:5308,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/options.c:5308,1
    - Dst: bypass_doubledash
      Src: /src/openvpn/src/openvpn/options.c:5310,1
    - Dst: check_inline_file_via_buf
      Src: /src/openvpn/src/openvpn/options.c:5311,1
    - Dst: add_option
      Src: /src/openvpn/src/openvpn/options.c:5312,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:5316,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/options.c:5318,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 17
    argCount: 7
    argNames:
    - prefix
    - options
    - config
    - msglevel
    - permission_mask
    - option_types_found
    - es
    argTypes:
    - char*
    - struct options*
    - char*
    - int
    - unsigned int
    - unsigned int*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 5319
      start: 5288
    functionDepth: 0
    functionLinenumber: 5288
    functionLinenumberEnd: 5319
    functionName: read_config_string
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - parse_line
    - SIZE
    - buf_parse
    - secure_memzero
    - CLEAR
    - bypass_doubledash
    - check_inline_file_via_buf
    - strlen
    - add_option
    linkageType: ''
    returnType: void
    signature: 'static void read_config_string(const char *prefix, struct options
      *options, const char *config, const int msglevel, const unsigned int permission_mask,
      unsigned int *option_types_found, struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6814,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6815,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "http-proxy-timeout") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6817
      start: 6812
    functionDepth: 0
    functionLinenumber: 6812
    functionLinenumberEnd: 6817
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "http-proxy-timeout") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8403,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "passtos") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8405
      start: 8401
    functionDepth: 0
    functionLinenumber: 8401
    functionLinenumberEnd: 8405
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "passtos") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6326,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:6331,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:6327,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "up") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6332
      start: 6324
    functionDepth: 0
    functionLinenumber: 6324
    functionLinenumberEnd: 6332
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "up") && p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6425,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6437,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6426,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - (p[0], "verb") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6441
      start: 6423
    functionDepth: 0
    functionLinenumber: 6423
    functionLinenumberEnd: 6441
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "verb") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7850,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "tcp-nodelay") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7852
      start: 7848
    functionDepth: 0
    functionLinenumber: 7848
    functionLinenumberEnd: 7852
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tcp-nodelay") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6335,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:6340,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:6336,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "down") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6341
      start: 6333
    functionDepth: 0
    functionLinenumber: 6333
    functionLinenumberEnd: 6341
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "down") && p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6444,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6445,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "mute") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6446
      start: 6442
    functionDepth: 0
    functionLinenumber: 6442
    functionLinenumberEnd: 6446
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mute") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7857,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7858,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7861,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7870,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 1
    argNames:
    - (p[0], "stale-routes-check") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7875
      start: 7853
    functionDepth: 0
    functionLinenumber: 7853
    functionLinenumberEnd: 7875
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "stale-routes-check") && p[1] && !p[3]) '
  - BBCount: 81
    BranchProfiles: []
    Callsites:
    - Dst: notnull
      Src: /src/openvpn/src/openvpn/options.c:2410,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2484,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2622,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2633,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/options.c:2657,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2695,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2755,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2778,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2787,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2863,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3008,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3028,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2796,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2954,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2825,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/options.c:3044,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2733,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2529,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2671,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2665,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2849,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2923,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3015,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3021,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3026,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3029,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3030,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3022,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2707,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2444,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2542,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2609,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2699,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2779,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2788,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2792,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2883,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2930,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3005,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3041,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2872,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2616,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2725,1
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/options.c:2420,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2512,1
    - Dst: notnull
      Src: /src/openvpn/src/openvpn/options.c:2973,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2999,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3001,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3020,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2428,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2470,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2739,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2709,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2673,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2655,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/options.c:2693,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2715,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2780,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2781,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2921,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3025,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2800,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2439,1
    - Dst: string_defined_equal
      Src: /src/openvpn/src/openvpn/options.c:2510,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2585,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2703,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2887,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2919,1
    - Dst: notnull
      Src: /src/openvpn/src/openvpn/options.c:2969,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3007,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3012,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3018,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2984,1
    - Dst: MAN_CLIENT_AUTH_ENABLED
      Src: /src/openvpn/src/openvpn/options.c:2746,1
    - Dst: string_defined_equal
      Src: /src/openvpn/src/openvpn/options.c:2468,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2535,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2710,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2782,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2790,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2804,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2813,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2836,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2905,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2936,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2628,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2722,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2489,1
    - Dst: string_defined_equal
      Src: /src/openvpn/src/openvpn/options.c:2503,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2753,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2890,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2894,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2908,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2909,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3003,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2815,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2892,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/options.c:2455,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2495,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/options.c:2596,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2652,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2689,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2646,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2766,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2783,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2791,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2805,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3031,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2452,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2554,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/options.c:2580,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2676,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2891,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2997,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3009,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3017,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2809,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3024,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3013,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2675,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2457,1
    - Dst: string_defined_equal
      Src: /src/openvpn/src/openvpn/options.c:2475,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2506,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2517,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2571,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2729,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2598,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2767,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2784,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2962,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2906,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2674,1
    - Dst: PLUGIN_OPTION_LIST
      Src: /src/openvpn/src/openvpn/options.c:2745,1
    - Dst: init_options
      Src: /src/openvpn/src/openvpn/options.c:2406,1
    - Dst: notnull
      Src: /src/openvpn/src/openvpn/options.c:2414,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2478,1
    - Dst: tls_version_max
      Src: /src/openvpn/src/openvpn/options.c:2549,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2565,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2720,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2777,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2795,1
    - Dst: check_ca_required
      Src: /src/openvpn/src/openvpn/options.c:2868,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2812,1
    - Dst: string_defined_equal
      Src: /src/openvpn/src/openvpn/options.c:2504,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2659,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/options.c:2697,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2650,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2686,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2785,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2816,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2979,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2814,1
    - Dst: string_defined_equal
      Src: /src/openvpn/src/openvpn/options.c:2509,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2579,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2683,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2761,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2797,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3014,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2604,1
    - Dst: string_defined_equal
      Src: /src/openvpn/src/openvpn/options.c:2467,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2750,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2786,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2893,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2907,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2940,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3011,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2789,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2916,1
    - Dst: proto_is_net
      Src: /src/openvpn/src/openvpn/options.c:2502,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:2876,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2896,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2920,1
    - Dst: MUST_BE_FALSE
      Src: /src/openvpn/src/openvpn/options.c:2922,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:2998,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3006,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3010,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3019,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3023,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3000,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3036,1
    - Dst: MUST_BE_UNDEF
      Src: /src/openvpn/src/openvpn/options.c:3016,1
    CyclomaticComplexity: 163
    EdgeCount: 163
    ICount: 462
    argCount: 2
    argNames:
    - options
    - ce
    argTypes:
    - struct options*
    - struct connection_entry*
    constantsTouched: []
    func_position:
      end: 3045
      start: 2398
    functionDepth: 0
    functionLinenumber: 2398
    functionLinenumberEnd: 3045
    functionName: options_postprocess_verify_ce
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - PLUGIN_OPTION_LIST
    - string_defined_equal
    - uninit_options
    - check_ca_required
    - MAN_CLIENT_AUTH_ENABLED
    - msg
    - dev_type_enum
    - tls_version_max
    - proto_is_udp
    - print_tun_backend_driver
    - notnull
    - MUST_BE_UNDEF
    - init_options
    - MUST_BE_FALSE
    - proto_is_dgram
    - proto_is_net
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_verify_ce(const struct options *options,
      const struct connection_entry *ce) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6091,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/options.c:6104,1
    - Dst: read_config_string
      Src: /src/openvpn/src/openvpn/options.c:6099,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6103,1
    - Dst: init_options
      Src: /src/openvpn/src/openvpn/options.c:6097,1
    - Dst: alloc_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:6108,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/options.c:6111,1
    - Dst: gc_transfer
      Src: /src/openvpn/src/openvpn/options.c:6115,1
    - Dst: uninit_options
      Src: /src/openvpn/src/openvpn/options.c:6116,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 19
    argCount: 1
    argNames:
    - (p[0], "connection") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6118
      start: 6089
    functionDepth: 0
    functionLinenumber: 6089
    functionLinenumberEnd: 6118
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - uninit_options
    - msg
    - gc_transfer
    - init_options
    - alloc_connection_entry
    - read_config_string
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "connection") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6449,1
    - Dst: errors_to_stderr
      Src: /src/openvpn/src/openvpn/options.c:6450,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "errors-to-stderr") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6451
      start: 6447
    functionDepth: 0
    functionLinenumber: 6447
    functionLinenumberEnd: 6451
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - errors_to_stderr
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "errors-to-stderr") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6689,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "nobind") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6691
      start: 6687
    functionDepth: 0
    functionLinenumber: 6687
    functionLinenumberEnd: 6691
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "nobind") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7056,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7061,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7057,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "route-up") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7062
      start: 7054
    functionDepth: 0
    functionLinenumber: 7054
    functionLinenumberEnd: 7062
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-up") && p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6454,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6458,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "status") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6460
      start: 6452
    functionDepth: 0
    functionLinenumber: 6452
    functionLinenumberEnd: 6460
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "status") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6694,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "fast-io") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6696
      start: 6692
    functionDepth: 0
    functionLinenumber: 6692
    functionLinenumberEnd: 6696
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "fast-io") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7065,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:7070,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:7066,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "route-pre-down") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7074
      start: 7063
    functionDepth: 0
    functionLinenumber: 7063
    functionLinenumberEnd: 7074
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-pre-down") && p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8391,1
    - Dst: setenv_foreign_option
      Src: /src/openvpn/src/openvpn/options.c:8392,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "dhcp-option") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8393
      start: 8389
    functionDepth: 0
    functionLinenumber: 8389
    functionLinenumberEnd: 8393
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - setenv_foreign_option
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dhcp-option") && p[1] && !p[3]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5166,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/options.c:5172,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5170,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/options.c:5171,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5172,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/options.c:5173,1
    - Dst: read_inline_file
      Src: /src/openvpn/src/openvpn/options.c:5174,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:5174,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/options.c:5176,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 26
    argCount: 3
    argNames:
    - is
    - p
    - gc
    argTypes:
    - struct in_src*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5180
      start: 5158
    functionDepth: 0
    functionLinenumber: 5158
    functionLinenumberEnd: 5180
    functionName: check_inline_file
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - free_buf
    - read_inline_file
    - alloc_buf
    - strlen
    - string_alloc
    linkageType: ''
    returnType: int
    signature: 'static int check_inline_file(struct in_src *is, char *p[], struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: check_inline_file
      Src: /src/openvpn/src/openvpn/options.c:5188,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 3
    argNames:
    - fp
    - p
    - gc
    argTypes:
    - FILE*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5189
      start: 5182
    functionDepth: 0
    functionLinenumber: 5182
    functionLinenumberEnd: 5189
    functionName: check_inline_file_via_fp
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - check_inline_file
    linkageType: ''
    returnType: int
    signature: 'static int check_inline_file_via_fp(FILE *fp, char *p[], struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7510,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7519,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7511,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7514,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "max-clients") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7523
      start: 7506
    functionDepth: 0
    functionLinenumber: 7506
    functionLinenumberEnd: 7523
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "max-clients") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8396,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "route-method") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8398
      start: 8394
    functionDepth: 0
    functionLinenumber: 8394
    functionLinenumberEnd: 8398
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-method") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options.c:4886,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 4888
      start: 4882
    functionDepth: 0
    functionLinenumber: 4882
    functionLinenumberEnd: 4888
    functionName: atou
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - sscanf
    linkageType: ''
    returnType: unsigned int
    signature: 'static unsigned int atou(const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6895,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6896,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "ping-exit") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6898
      start: 6893
    functionDepth: 0
    functionLinenumber: 6893
    functionLinenumberEnd: 6898
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ping-exit") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "dhcp-release") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8298
      start: 8295
    functionDepth: 0
    functionLinenumber: 8295
    functionLinenumberEnd: 8298
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dhcp-release") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8529,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "show-digests") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8531
      start: 8527
    functionDepth: 0
    functionLinenumber: 8527
    functionLinenumberEnd: 8531
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-digests") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6901,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6902,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "ping-restart") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6904
      start: 6899
    functionDepth: 0
    functionLinenumber: 6899
    functionLinenumberEnd: 6904
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ping-restart") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8302,1
    - Dst: atou
      Src: /src/openvpn/src/openvpn/options.c:8304,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/options.c:8303,1
    - Dst: sleep
      Src: /src/openvpn/src/openvpn/options.c:8305,1
    - Dst: dhcp_release_by_adapter_index
      Src: /src/openvpn/src/openvpn/options.c:8308,1
    - Dst: dhcp_renew_by_adapter_index
      Src: /src/openvpn/src/openvpn/options.c:8312,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8314,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "dhcp-internal") && p[1] && !p[2])
    - /* standalone method for internal use */
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8315
      start: 8299
    functionDepth: 0
    functionLinenumber: 8299
    functionLinenumberEnd: 8315
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - sleep
    - dhcp_renew_by_adapter_index
    - dhcp_release_by_adapter_index
    - set_debug_level
    - atou
    - openvpn_exit
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dhcp-internal") && p[1] && !p[2]) /* standalone
      method for internal use */ '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8534,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "show-engines") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8536
      start: 8532
    functionDepth: 0
    functionLinenumber: 8532
    functionLinenumberEnd: 8536
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-engines") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/options.c:4615,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/options.c:4616,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/options.c:4617,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/options.c:4616,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - s
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4618
      start: 4612
    functionDepth: 0
    functionLinenumber: 4612
    functionLinenumberEnd: 4618
    functionName: options_string_version
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strncpynt
    - BSTR
    - alloc_buf_gc
    - BPTR
    linkageType: ''
    returnType: char*
    signature: 'const char *options_string_version(const char *s, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1285,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - name
    - array
    - len
    argTypes:
    - char*
    - char**
    - int
    constantsTouched: []
    func_position:
      end: 1287
      start: 1279
    functionDepth: 0
    functionLinenumber: 1279
    functionLinenumberEnd: 1287
    functionName: show_dhcp_option_list
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void show_dhcp_option_list(const char *name, const char *const
      *array, int len) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:4657,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:4661,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:4665,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4671,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - str
    - msglevel
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 4674
      start: 4654
    functionDepth: 0
    functionLinenumber: 4654
    functionLinenumberEnd: 4674
    functionName: parse_topology
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - streq
    linkageType: ''
    returnType: int
    signature: 'int parse_topology(const char *str, const int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4823,1
    - Dst: get_ssl_library_version
      Src: /src/openvpn/src/openvpn/options.c:4823,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4827
      start: 4814
    functionDepth: 0
    functionLinenumber: 4814
    functionLinenumberEnd: 4827
    functionName: show_library_versions
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - get_ssl_library_version
    linkageType: ''
    returnType: void
    signature: 'void show_library_versions(const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6315,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "setcon") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6317
      start: 6313
    functionDepth: 0
    functionLinenumber: 6313
    functionLinenumberEnd: 6317
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "setcon") && p[1] && !p[2]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9266,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - (p[0], "tls-crypt") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9277
      start: 9264
    functionDepth: 0
    functionLinenumber: 9264
    functionLinenumberEnd: 9277
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-crypt") && p[1] && !p[3]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9335,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9358,1
    - Dst: strtol
      Src: /src/openvpn/src/openvpn/options.c:9345,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9362,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/options.c:9364,1
    - Dst: show_pkcs11_ids
      Src: /src/openvpn/src/openvpn/options.c:9365,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:9366,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - (p[0], "show-pkcs11-ids") && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9367
      start: 9332
    functionDepth: 0
    functionLinenumber: 9332
    functionLinenumberEnd: 9367
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strtol
    - set_debug_level
    - msg
    - atoi_warn
    - openvpn_exit
    - show_pkcs11_ids
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-pkcs11-ids") && !p[3]) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7793,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7797,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7803,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7795,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7805,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:7812,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7815,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 23
    argCount: 1
    argNames:
    - (p[0], "ifconfig-ipv6-push") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7825
      start: 7788
    functionDepth: 0
    functionLinenumber: 7788
    functionLinenumberEnd: 7825
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ifconfig-ipv6-push") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:1292,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1296,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:1301,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/options.c:1299,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 3
    argNames:
    - name
    - array
    - len
    argTypes:
    - char*
    - in_addr_t*
    - int
    constantsTouched: []
    func_position:
      end: 1302
      start: 1289
    functionDepth: 0
    functionLinenumber: 1289
    functionLinenumberEnd: 1302
    functionName: show_dhcp_option_addrs
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void show_dhcp_option_addrs(const char *name, const in_addr_t
      *array, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4625,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:4635,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4636,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:4630,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4631,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/options.c:4637,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/options.c:4638,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/options.c:4641,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 23
    argCount: 3
    argNames:
    - options_string
    - opt_name
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4648
      start: 4620
    functionDepth: 0
    functionLinenumber: 4620
    functionLinenumberEnd: 4648
    functionName: options_string_extract_option
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - memcpy
    - gc_malloc
    - strchr
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'char *options_string_extract_option(const char *options_string, const
      char *opt_name, struct gc_arena *gc) '
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 2
    argCount: 1
    argNames:
    - topology
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 4696
      start: 4676
    functionDepth: 0
    functionLinenumber: 4676
    functionLinenumberEnd: 4696
    functionName: print_topology
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *print_topology(const int topology) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4832,1
    - Dst: show_library_versions
      Src: /src/openvpn/src/openvpn/options.c:4833,1
    - Dst: show_dco_version
      Src: /src/openvpn/src/openvpn/options.c:4837,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4838,1
    - Dst: show_windows_version
      Src: /src/openvpn/src/openvpn/options.c:4835,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4839,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4842,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4845,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:4848,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4849
      start: 4829
    functionDepth: 0
    functionLinenumber: 4829
    functionLinenumberEnd: 4849
    functionName: usage_version
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - show_library_versions
    - show_windows_version
    - show_dco_version
    - openvpn_exit
    linkageType: ''
    returnType: void
    signature: 'static void usage_version(void) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9280,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9302,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9292,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:9296,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 1
    argNames:
    - (p[0], "tls-crypt-v2") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9304
      start: 9278
    functionDepth: 0
    functionLinenumber: 9278
    functionLinenumberEnd: 9304
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-crypt-v2") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9372,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - (p[0], "pkcs11-providers") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9378
      start: 9368
    functionDepth: 0
    functionLinenumber: 9368
    functionLinenumberEnd: 9378
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pkcs11-providers") && p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/options.c:3999,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4013,1
    - Dst: check_file_access_chroot
      Src: /src/openvpn/src/openvpn/options.c:4009,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/options.c:4018,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/options.c:4000,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - command
    - opt
    - chroot
    argTypes:
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4021
      start: 3986
    functionDepth: 0
    functionLinenumber: 3986
    functionLinenumberEnd: 4021
    functionName: check_cmd_access
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - argv_parse_cmd
    - msg
    - check_file_access_chroot
    - argv_free
    - argv_new
    linkageType: ''
    returnType: bool
    signature: 'static bool check_cmd_access(const char *command, const char *opt,
      const char *chroot) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/options.c:1742,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1755,1
    - Dst: show_http_proxy_options
      Src: /src/openvpn/src/openvpn/options.c:1762,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1764,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1768,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1772,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1780,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:1788,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1742,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1752,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1754,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1767,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1758,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1771,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1779,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:1785,1
    - Dst: keydirection2ascii
      Src: /src/openvpn/src/openvpn/options.c:1786,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1748,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/options.c:1749,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1751,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1753,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1757,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1766,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1770,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1777,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1783,1
    - Dst: SHOW_PARM
      Src: /src/openvpn/src/openvpn/options.c:1786,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1745,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1765,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1756,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1769,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1774,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1781,1
    - Dst: SHOW_STR_INLINE
      Src: /src/openvpn/src/openvpn/options.c:1789,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 40
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct connection_entry*
    constantsTouched: []
    func_position:
      end: 1790
      start: 1736
    functionDepth: 0
    functionLinenumber: 1736
    functionLinenumberEnd: 1790
    functionName: show_connection_entry
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - SHOW_INT
    - SHOW_STR_INLINE
    - msg
    - SHOW_STR
    - SHOW_PARM
    - keydirection2ascii
    - SHOW_BOOL
    - proto2ascii
    - show_http_proxy_options
    linkageType: ''
    returnType: void
    signature: 'static void show_connection_entry(const struct connection_entry *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: check_file_access
      Src: /src/openvpn/src/openvpn/options.c:3967,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 5
    argNames:
    - is_inline
    - type
    - file
    - mode
    - opt
    argTypes:
    - bool
    - int
    - char*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 3968
      start: 3958
    functionDepth: 0
    functionLinenumber: 3958
    functionLinenumberEnd: 3968
    functionName: check_file_access_inline
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - check_file_access
    linkageType: ''
    returnType: bool
    signature: 'static bool check_file_access_inline(bool is_inline, const int type,
      const char *file, const int mode, const char *opt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9014,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "single-session") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9016
      start: 9012
    functionDepth: 0
    functionLinenumber: 9012
    functionLinenumberEnd: 9016
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "single-session") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1802,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1808,1
    - Dst: show_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:1809,1
    - Dst: show_connection_entry
      Src: /src/openvpn/src/openvpn/options.c:1803,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:1811,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1812
      start: 1793
    functionDepth: 0
    functionLinenumber: 1793
    functionLinenumberEnd: 1812
    functionName: show_connection_entries
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - show_connection_entry
    linkageType: ''
    returnType: void
    signature: 'static void show_connection_entries(const struct options *o) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7609,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7611,1
    - Dst: valid_integer
      Src: /src/openvpn/src/openvpn/options.c:7616,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7620,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:7618,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7626,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - (p[0], "auth-gen-token")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7630
      start: 7607
    functionDepth: 0
    functionLinenumber: 7607
    functionLinenumberEnd: 7630
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - positive_atoi
    - streq
    - valid_integer
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth-gen-token")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9019,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "push-peer-info") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9021
      start: 9017
    functionDepth: 0
    functionLinenumber: 9017
    functionLinenumberEnd: 9021
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "push-peer-info") && !p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8541,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:8543,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 1
    argNames:
    - (p[0], "key-direction") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8559
      start: 8537
    functionDepth: 0
    functionLinenumber: 8537
    functionLinenumberEnd: 8559
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - ascii2keydirection
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "key-direction") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8318,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "register-dns") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8320
      start: 8316
    functionDepth: 0
    functionLinenumber: 8316
    functionLinenumberEnd: 8320
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "register-dns") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9076,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9077,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "compat-names")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9080
      start: 9074
    functionDepth: 0
    functionLinenumber: 9074
    functionLinenumberEnd: 9080
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "compat-names")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "block-outside-dns") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8325
      start: 8321
    functionDepth: 0
    functionLinenumber: 8321
    functionLinenumberEnd: 8325
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "block-outside-dns") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8562,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8563,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:8570,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 1
    argNames:
    - (p[0], "secret") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8580
      start: 8560
    functionDepth: 0
    functionLinenumber: 8560
    functionLinenumberEnd: 8580
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - ascii2keydirection
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "secret") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9083,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:9084,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "no-name-remapping") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9087
      start: 9081
    functionDepth: 0
    functionLinenumber: 9081
    functionLinenumberEnd: 9087
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "no-name-remapping") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4708
      start: 4704
    functionDepth: 0
    functionLinenumber: 4704
    functionLinenumberEnd: 4708
    functionName: auth_retry_get
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int auth_retry_get(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:3236,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - opt
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 3239
      start: 3228
    functionDepth: 0
    functionLinenumber: 3228
    functionLinenumberEnd: 3239
    functionName: remap_redirect_gateway_flags
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void remap_redirect_gateway_flags(struct options *opt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4877,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - msglevel
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 4878
      start: 4874
    functionDepth: 0
    functionLinenumber: 4874
    functionLinenumberEnd: 4878
    functionName: ping_rec_err
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void ping_rec_err(int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6220,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6221,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6227,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "resolv-retry") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6229
      start: 6218
    functionDepth: 0
    functionLinenumber: 6218
    functionLinenumberEnd: 6229
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "resolv-retry") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7951,1
    - Dst: set_win_sys_path
      Src: /src/openvpn/src/openvpn/options.c:7960,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7954,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7952,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "win-sys") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7962
      start: 7949
    functionDepth: 0
    functionLinenumber: 7949
    functionLinenumberEnd: 7962
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - set_win_sys_path
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "win-sys") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9139,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/options.c:9144,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - (p[0], "remote-cert-ku")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9151
      start: 9137
    functionDepth: 0
    functionLinenumber: 9137
    functionLinenumberEnd: 9151
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - sscanf
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote-cert-ku")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9414,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:9415,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "pkcs11-pin-cache") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9416
      start: 9412
    functionDepth: 0
    functionLinenumber: 9412
    functionLinenumberEnd: 9416
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pkcs11-pin-cache") && p[1] && !p[2]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7965,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7980,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7966,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7970,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7974,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - (p[0], "route-method") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7983
      start: 7963
    functionDepth: 0
    functionLinenumber: 7963
    functionLinenumberEnd: 7983
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-method") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9154,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "remote-cert-eku") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9156
      start: 9152
    functionDepth: 0
    functionLinenumber: 9152
    functionLinenumberEnd: 9156
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote-cert-eku") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9419,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "pkcs11-id") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9421
      start: 9417
    functionDepth: 0
    functionLinenumber: 9417
    functionLinenumberEnd: 9421
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pkcs11-id") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4856,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - arg
    - description
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4858
      start: 4851
    functionDepth: 0
    functionLinenumber: 4851
    functionLinenumberEnd: 4858
    functionName: notnull
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void notnull(const char *arg, const char *description) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:4865,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - s1
    - s2
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4871
      start: 4860
    functionDepth: 0
    functionLinenumber: 4860
    functionLinenumberEnd: 4871
    functionName: string_defined_equal
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: bool
    signature: 'bool string_defined_equal(const char *s1, const char *s2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1004,1
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1009,1
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1014,1
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1005,1
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1010,1
    - Dst: setenv_str_i
      Src: /src/openvpn/src/openvpn/options.c:1015,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 3
    argNames:
    - es
    - e
    - i
    argTypes:
    - struct env_set*
    - struct connection_entry*
    - int
    constantsTouched: []
    func_position:
      end: 1017
      start: 999
    functionDepth: 0
    functionLinenumber: 999
    functionLinenumberEnd: 1017
    functionName: setenv_connection_entry
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - setenv_str_i
    linkageType: ''
    returnType: void
    signature: 'static void setenv_connection_entry(struct env_set *es, const struct
      connection_entry *e, const int i) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7828,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "disable") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7830
      start: 7826
    functionDepth: 0
    functionLinenumber: 7826
    functionLinenumberEnd: 7830
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "disable") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8848,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "cert") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8851
      start: 8846
    functionDepth: 0
    functionLinenumber: 8846
    functionLinenumberEnd: 8851
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "cert") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7833,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7836,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:7834,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - (p[0], "override-username") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7847
      start: 7831
    functionDepth: 0
    functionLinenumber: 7831
    functionLinenumberEnd: 7847
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strlen
    - VERIFY_PERMISSION
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "override-username") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8854,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "extra-certs") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8857
      start: 8852
    functionDepth: 0
    functionLinenumber: 8852
    functionLinenumberEnd: 8857
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "extra-certs") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8631,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "auth") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8633
      start: 8629
    functionDepth: 0
    functionLinenumber: 8629
    functionLinenumberEnd: 8633
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6493,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6494,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "link-mtu") || streq(p[0], "udp-mtu"))
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6496
      start: 6491
    functionDepth: 0
    functionLinenumber: 6491
    functionLinenumberEnd: 6496
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if ((streq(p[0], "link-mtu") || streq(p[0], "udp-mtu")) && p[1]
      && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7077,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "route-noexec") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7079
      start: 7075
    functionDepth: 0
    functionLinenumber: 7075
    functionLinenumberEnd: 7079
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-noexec") && !p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: alloc_pull_filter
      Src: /src/openvpn/src/openvpn/options.c:7089,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7105,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:7099,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:7091,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/options.c:7095,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:7109,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 1
    argNames:
    - (p[0], "pull-filter") && p[1] && p[2] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7110
      start: 7085
    functionDepth: 0
    functionLinenumber: 7085
    functionLinenumberEnd: 7110
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strlen
    - strcmp
    - alloc_pull_filter
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pull-filter") && p[1] && p[2] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7907,1
    - Dst: auth_retry_set
      Src: /src/openvpn/src/openvpn/options.c:7908,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "auth-retry") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7909
      start: 7905
    functionDepth: 0
    functionLinenumber: 7905
    functionLinenumberEnd: 7909
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - auth_retry_set
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth-retry") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6499,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6504,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6500,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "tun-mtu") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6510
      start: 6497
    functionDepth: 0
    functionLinenumber: 6497
    functionLinenumberEnd: 6510
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tun-mtu") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7082,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "route-nopull") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7084
      start: 7080
    functionDepth: 0
    functionLinenumber: 7080
    functionLinenumberEnd: 7084
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "route-nopull") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7113,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "allow-pull-fqdn") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7115
      start: 7111
    functionDepth: 0
    functionLinenumber: 7111
    functionLinenumberEnd: 7115
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "allow-pull-fqdn") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8636,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "cipher") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8638
      start: 8634
    functionDepth: 0
    functionLinenumber: 8634
    functionLinenumberEnd: 8638
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "cipher") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8711,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8713,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "no-replay") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8715
      start: 8709
    functionDepth: 0
    functionLinenumber: 8709
    functionLinenumberEnd: 8715
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "no-replay") && !p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1307,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1310,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1311,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1309,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1308,1
    - Dst: SHOW_UNSIGNED
      Src: /src/openvpn/src/openvpn/options.c:1312,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1313,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1314,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1315,1
    - Dst: SHOW_STR
      Src: /src/openvpn/src/openvpn/options.c:1316,1
    - Dst: SHOW_INT
      Src: /src/openvpn/src/openvpn/options.c:1317,1
    - Dst: SHOW_BOOL
      Src: /src/openvpn/src/openvpn/options.c:1318,1
    - Dst: show_dhcp_option_addrs
      Src: /src/openvpn/src/openvpn/options.c:1323,1
    - Dst: show_dhcp_option_addrs
      Src: /src/openvpn/src/openvpn/options.c:1321,1
    - Dst: show_dhcp_option_addrs
      Src: /src/openvpn/src/openvpn/options.c:1322,1
    - Dst: show_dhcp_option_list
      Src: /src/openvpn/src/openvpn/options.c:1324,1
    - Dst: show_dhcp_option_addrs
      Src: /src/openvpn/src/openvpn/options.c:1320,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct tuntap_options*
    constantsTouched: []
    func_position:
      end: 1325
      start: 1304
    functionDepth: 0
    functionLinenumber: 1304
    functionLinenumberEnd: 1325
    functionName: show_tuntap_options
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - show_dhcp_option_list
    - SHOW_INT
    - SHOW_STR
    - show_dhcp_option_addrs
    - SHOW_BOOL
    - SHOW_UNSIGNED
    linkageType: ''
    returnType: void
    signature: 'static void show_tuntap_options(const struct tuntap_options *o) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8718,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8723,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8726,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8741,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8738,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8752,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 24
    argCount: 1
    argNames:
    - (p[0], "replay-window") && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8755
      start: 8716
    functionDepth: 0
    functionLinenumber: 8716
    functionLinenumberEnd: 8755
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "replay-window") && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9479,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "vlan-tagging") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9481
      start: 9477
    functionDepth: 0
    functionLinenumber: 9477
    functionLinenumberEnd: 9481
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "vlan-tagging") && !p[1]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6365,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6375,1
    - Dst: open_syslog
      Src: /src/openvpn/src/openvpn/options.c:6369,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "daemon") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6379
      start: 6362
    functionDepth: 0
    functionLinenumber: 6362
    functionLinenumberEnd: 6379
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - open_syslog
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "daemon") && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8842,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "dh") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8845
      start: 8840
    functionDepth: 0
    functionLinenumber: 8840
    functionLinenumberEnd: 8845
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dh") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6382,1
    - Dst: redirect_stdout_stderr
      Src: /src/openvpn/src/openvpn/options.c:6384,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "log") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6385
      start: 6380
    functionDepth: 0
    functionLinenumber: 6380
    functionLinenumberEnd: 6385
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - redirect_stdout_stderr
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "log") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8364,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:8366,1
    - Dst: tap_allow_nonadmin_access
      Src: /src/openvpn/src/openvpn/options.c:8365,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "allow-nonadmin") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8367
      start: 8362
    functionDepth: 0
    functionLinenumber: 8362
    functionLinenumberEnd: 8367
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - openvpn_exit
    - VERIFY_PERMISSION
    - tap_allow_nonadmin_access
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "allow-nonadmin") && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: new_route_option_list
      Src: /src/openvpn/src/openvpn/options.c:1713,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1715
      start: 1708
    functionDepth: 0
    functionLinenumber: 1708
    functionLinenumberEnd: 1715
    functionName: rol_check_alloc
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - new_route_option_list
    linkageType: ''
    returnType: void
    signature: 'void rol_check_alloc(struct options *options) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6287,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "float") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6289
      start: 6285
    functionDepth: 0
    functionLinenumber: 6285
    functionLinenumberEnd: 6289
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "float") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7933,1
    - Dst: DuplicateHandle
      Src: /src/openvpn/src/openvpn/options.c:7936,1
    - Dst: GetCurrentProcess
      Src: /src/openvpn/src/openvpn/options.c:7934,1
    - Dst: atoll
      Src: /src/openvpn/src/openvpn/options.c:7935,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7939,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7944,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - (p[0], "msg-channel") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7947
      start: 7930
    functionDepth: 0
    functionLinenumber: 7930
    functionLinenumberEnd: 7947
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - GetCurrentProcess
    - msg
    - DuplicateHandle
    - VERIFY_PERMISSION
    - atoll
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "msg-channel") && p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: new_route_ipv6_option_list
      Src: /src/openvpn/src/openvpn/options.c:1722,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1724
      start: 1717
    functionDepth: 0
    functionLinenumber: 1717
    functionLinenumberEnd: 1724
    functionName: rol6_check_alloc
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - new_route_ipv6_option_list
    linkageType: ''
    returnType: void
    signature: 'static void rol6_check_alloc(struct options *options) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6184,1
    - Dst: ascii2proto
      Src: /src/openvpn/src/openvpn/options.c:6191,1
    - Dst: ascii2af
      Src: /src/openvpn/src/openvpn/options.c:6192,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6195,1
    - Dst: alloc_remote_entry
      Src: /src/openvpn/src/openvpn/options.c:6206,1
    - Dst: connection_entry_load_re
      Src: /src/openvpn/src/openvpn/options.c:6215,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 27
    argCount: 1
    argNames:
    - (p[0], "remote") && p[1] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6217
      start: 6177
    functionDepth: 0
    functionLinenumber: 6177
    functionLinenumberEnd: 6217
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ascii2proto
    - connection_entry_load_re
    - msg
    - alloc_remote_entry
    - ascii2af
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote") && p[1] && !p[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8370,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8371,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "user") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8372
      start: 8368
    functionDepth: 0
    functionLinenumber: 8368
    functionLinenumberEnd: 8372
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "user") && p[1] && !p[2]) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7119,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7124,1
    - Dst: rol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:7120,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7139,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7133,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7143,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7147,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7151,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7155,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7159,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7168,1
    - Dst: rol6_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:7165,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:7163,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7174,1
    - Dst: remap_redirect_gateway_flags
      Src: /src/openvpn/src/openvpn/options.c:7180,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 45
    argCount: 1
    argNames:
    - (p[0], "redirect-gateway") || streq(p[0], "redirect-private"))
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7182
      start: 7116
    functionDepth: 0
    functionLinenumber: 7116
    functionLinenumberEnd: 7182
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - rol_check_alloc
    - remap_redirect_gateway_flags
    - msg
    - streq
    - rol6_check_alloc
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "redirect-gateway") || streq(p[0], "redirect-private")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7889,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:7890,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "push-continuation") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7891
      start: 7887
    functionDepth: 0
    functionLinenumber: 7887
    functionLinenumberEnd: 7891
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "push-continuation") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "show-net-up") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8271
      start: 8267
    functionDepth: 0
    functionLinenumber: 8267
    functionLinenumberEnd: 8271
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-net-up") && !p[1]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/options.c:1113,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 3
    argNames:
    - ip_string
    - msglevel
    - error
    argTypes:
    - char*
    - int
    - bool*
    constantsTouched: []
    func_position:
      end: 1119
      start: 1101
    functionDepth: 0
    functionLinenumber: 1101
    functionLinenumberEnd: 1119
    functionName: get_ip_addr
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - getaddr
    linkageType: ''
    returnType: in_addr_t
    signature: 'static in_addr_t get_ip_addr(const char *ip_string, int msglevel,
      bool *error) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:5074,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/options.c:5074,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - p
    argTypes:
    - char**
    constantsTouched: []
    func_position:
      end: 5078
      start: 5071
    functionDepth: 0
    functionLinenumber: 5071
    functionLinenumberEnd: 5078
    functionName: bypass_doubledash
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'static void bypass_doubledash(char **p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "disable-dco")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5971
      start: 5968
    functionDepth: 0
    functionLinenumber: 5968
    functionLinenumberEnd: 5971
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "disable-dco")) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6754,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:6759,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6773,1
    - Dst: init_http_proxy_options_once
      Src: /src/openvpn/src/openvpn/options.c:6763,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:6777,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 1
    argNames:
    - (p[0], "http-proxy") && p[1] && !p[5])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6796
      start: 6750
    functionDepth: 0
    functionLinenumber: 6750
    functionLinenumberEnd: 6796
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - init_http_proxy_options_once
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "http-proxy") && p[1] && !p[5]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5974,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "dev-node") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5976
      start: 5972
    functionDepth: 0
    functionLinenumber: 5972
    functionLinenumberEnd: 5976
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dev-node") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7185,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - (p[0], "block-ipv6") && !p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7187
      start: 7183
    functionDepth: 0
    functionLinenumber: 7183
    functionLinenumberEnd: 7187
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "block-ipv6") && !p[1]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7894,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "auth-user-pass") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 7904
      start: 7892
    functionDepth: 0
    functionLinenumber: 7892
    functionLinenumberEnd: 7904
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth-user-pass") && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8275,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8279,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8276,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "tap-sleep") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8283
      start: 8272
    functionDepth: 0
    functionLinenumber: 8272
    functionLinenumberEnd: 8283
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - atoi_warn
    - msg
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tap-sleep") && p[1] && !p[2]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:5726,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/options.c:5734,1
    - Dst: get_default_gateway
      Src: /src/openvpn/src/openvpn/options.c:5737,1
    - Dst: net_ctx_init
      Src: /src/openvpn/src/openvpn/options.c:5736,1
    - Dst: get_ip_addr
      Src: /src/openvpn/src/openvpn/options.c:5733,1
    - Dst: get_default_gateway_ipv6
      Src: /src/openvpn/src/openvpn/options.c:5738,1
    - Dst: print_default_gateway
      Src: /src/openvpn/src/openvpn/options.c:5739,1
    - Dst: openvpn_exit
      Src: /src/openvpn/src/openvpn/options.c:5740,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "show-gateway") && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 5741
      start: 5719
    functionDepth: 0
    functionLinenumber: 5719
    functionLinenumberEnd: 5741
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - get_ip_addr
    - net_ctx_init
    - get_default_gateway
    - get_default_gateway_ipv6
    - print_default_gateway
    - VERIFY_PERMISSION
    - openvpn_exit
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "show-gateway") && !p[2]) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8168,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8176,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8181,1
    - Dst: dhcp_option_dns6_parse
      Src: /src/openvpn/src/openvpn/options.c:8198,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8216,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8218,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8229,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:8242,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8170,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8184,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8187,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8193,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8193,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8202,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8234,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8170,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options.c:8194,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8206,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8208,1
    - Dst: ipv6_addr_safe
      Src: /src/openvpn/src/openvpn/options.c:8194,1
    - Dst: dhcp_option_address_parse
      Src: /src/openvpn/src/openvpn/options.c:8213,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8211,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/options.c:8196,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8221,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8248,1
    CyclomaticComplexity: 44
    EdgeCount: 44
    ICount: 101
    argCount: 1
    argNames:
    - (p[0], "dhcp-option") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8251
      start: 8165
    functionDepth: 0
    functionLinenumber: 8165
    functionLinenumberEnd: 8251
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ipv6_addr_safe
    - strstr
    - dhcp_option_dns6_parse
    - msg
    - atoi_warn
    - positive_atoi
    - streq
    - dhcp_option_address_parse
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "dhcp-option") && p[1]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: options_cmp_equal_safe
      Src: /src/openvpn/src/openvpn/options.c:4444,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - actual
    - expected
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4445
      start: 4441
    functionDepth: 0
    functionLinenumber: 4441
    functionLinenumberEnd: 4445
    functionName: options_cmp_equal
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strlen
    - options_cmp_equal_safe
    linkageType: ''
    returnType: bool
    signature: 'bool options_cmp_equal(char *actual, const char *expected) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5606,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/options.c:5615,1
    - Dst: check_cmd_access
      Src: /src/openvpn/src/openvpn/options.c:5618,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5620,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 5
    argNames:
    - options
    - script
    - new_script
    - type
    - in_chroot
    argTypes:
    - struct options*
    - char**
    - char*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 5625
      start: 5597
    functionDepth: 0
    functionLinenumber: 5597
    functionLinenumberEnd: 5625
    functionName: set_user_script
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - check_cmd_access
    linkageType: ''
    returnType: void
    signature: 'static void set_user_script(struct options *options, const char **script,
      const char *new_script, const char *type, bool in_chroot) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6270,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:6271,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "connect-retry-max") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6272
      start: 6268
    functionDepth: 0
    functionLinenumber: 6268
    functionLinenumberEnd: 6272
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "connect-retry-max") && p[1] && !p[2]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: options_warning_safe
      Src: /src/openvpn/src/openvpn/options.c:4450,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/options.c:4450,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - actual
    - expected
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4451
      start: 4447
    functionDepth: 0
    functionLinenumber: 4447
    functionLinenumberEnd: 4451
    functionName: options_warning
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - strlen
    - options_warning_safe
    linkageType: ''
    returnType: void
    signature: 'void options_warning(char *actual, const char *expected) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: comp_non_stub_enabled
      Src: /src/openvpn/src/openvpn/options.c:5630,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:5632,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - info
    argTypes:
    - struct compress_options*
    constantsTouched: []
    func_position:
      end: 5637
      start: 5627
    functionDepth: 0
    functionLinenumber: 5627
    functionLinenumberEnd: 5637
    functionName: show_compression_warning
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - comp_non_stub_enabled
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void show_compression_warning(struct compress_options *info) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:6275,1
    - Dst: string_substitute
      Src: /src/openvpn/src/openvpn/options.c:6282,1
    - Dst: set_user_script
      Src: /src/openvpn/src/openvpn/options.c:6280,1
    - Dst: no_more_than_n_args
      Src: /src/openvpn/src/openvpn/options.c:6276,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "ipchange") && p[1])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 6284
      start: 6273
    functionDepth: 0
    functionLinenumber: 6273
    functionLinenumberEnd: 6284
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - string_substitute
    - set_user_script
    - no_more_than_n_args
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ipchange") && p[1]) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:8589,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8598,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8597,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8597,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8602,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8606,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8614,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8620,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 1
    argNames:
    - (p[0], "genkey") && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8628
      start: 8587
    functionDepth: 0
    functionLinenumber: 8587
    functionLinenumberEnd: 8628
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - VERIFY_PERMISSION
    - streq
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "genkey") && !p[4]) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/options.c:3294,1
    - Dst: rol6_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:3312,1
    - Dst: copy_route_option_list
      Src: /src/openvpn/src/openvpn/options.c:3303,1
    - Dst: rol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:3302,1
    - Dst: copy_route_ipv6_option_list
      Src: /src/openvpn/src/openvpn/options.c:3313,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:3324,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:3325,1
    - Dst: clone_dns_options
      Src: /src/openvpn/src/openvpn/options.c:3326,1
    - Dst: cnol_check_alloc
      Src: /src/openvpn/src/openvpn/options.c:3331,1
    - Dst: copy_client_nat_option_list
      Src: /src/openvpn/src/openvpn/options.c:3332,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 37
    argCount: 2
    argNames:
    - o
    - gc
    argTypes:
    - struct options*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 3355
      start: 3288
    functionDepth: 0
    functionLinenumber: 3288
    functionLinenumberEnd: 3355
    functionName: pre_connect_restore
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - rol_check_alloc
    - cnol_check_alloc
    - copy_route_ipv6_option_list
    - copy_route_option_list
    - gc_new
    - CLEAR
    - gc_free
    - clone_dns_options
    - copy_client_nat_option_list
    - rol6_check_alloc
    linkageType: ''
    returnType: void
    signature: 'void pre_connect_restore(struct options *o, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/options.c:4798,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:4799,1
    - Dst: win32_version_string
      Src: /src/openvpn/src/openvpn/options.c:4799,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/options.c:4800,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4801
      start: 4795
    functionDepth: 0
    functionLinenumber: 4795
    functionLinenumberEnd: 4801
    functionName: show_windows_version
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - gc_new
    - win32_version_string
    linkageType: ''
    returnType: void
    signature: 'void show_windows_version(const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9222,1
    - Dst: positive_atoi
      Src: /src/openvpn/src/openvpn/options.c:9223,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "tran-window") && p[1] && !p[2])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9224
      start: 9220
    functionDepth: 0
    functionLinenumber: 9220
    functionLinenumberEnd: 9224
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - positive_atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tran-window") && p[1] && !p[2]) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/options.c:3361,1
    - Dst: remap_redirect_gateway_flags
      Src: /src/openvpn/src/openvpn/options.c:3389,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 39
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 3419
      start: 3357
    functionDepth: 0
    functionLinenumber: 3357
    functionLinenumberEnd: 3419
    functionName: options_postprocess_mutate_invariant
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - dev_type_enum
    - remap_redirect_gateway_flags
    linkageType: ''
    returnType: void
    signature: 'static void options_postprocess_mutate_invariant(struct options *options) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ascii2ipset
      Src: /src/openvpn/src/openvpn/options.c:7986,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:7993,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/options.c:8009,1
    - Dst: ipset2ascii_all
      Src: /src/openvpn/src/openvpn/options.c:7996,1
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:7989,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8011,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8015,1
    - Dst: atoi_warn
      Src: /src/openvpn/src/openvpn/options.c:8027,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/options.c:8030,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 34
    argCount: 1
    argNames:
    - (p[0], "ip-win32") && p[1] && !p[4])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 8039
      start: 7984
    functionDepth: 0
    functionLinenumber: 7984
    functionLinenumberEnd: 8039
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - ascii2ipset
    - msg
    - atoi_warn
    - streq
    - ipset2ascii_all
    - VERIFY_PERMISSION
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "ip-win32") && p[1] && !p[4]) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: VERIFY_PERMISSION
      Src: /src/openvpn/src/openvpn/options.c:9229,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:9238,1
    - Dst: ascii2keydirection
      Src: /src/openvpn/src/openvpn/options.c:9255,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 29
    argCount: 1
    argNames:
    - (p[0], "tls-auth") && p[1] && !p[3])
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 9263
      start: 9225
    functionDepth: 0
    functionLinenumber: 9225
    functionLinenumberEnd: 9263
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/options.c
    functionUses: []
    functionsReached:
    - VERIFY_PERMISSION
    - ascii2keydirection
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "tls-auth") && p[1] && !p[3]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.h:90,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: dco_start_tun
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static inline void dco_start_tun(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 2
    argNames:
    - rl
    - tt
    argTypes:
    - struct route_list*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 385
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 385
    functionName: test_routes
    functionSourceFile: /src/openvpn/src/openvpn/route.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool test_routes(const struct route_list *rl, const
      struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/route.h:420,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - rl
    argTypes:
    - struct route_list*
    constantsTouched: []
    func_position:
      end: 421
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 421
    functionName: route_did_redirect_default_gateway
    functionSourceFile: /src/openvpn/src/openvpn/route.h
    functionUses: []
    functionsReached:
    - BOOL_CAST
    linkageType: ''
    returnType: int
    signature: 'static inline int route_did_redirect_default_gateway(const struct
      route_list *rl) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - rl
    argTypes:
    - struct route_list*
    constantsTouched: []
    func_position:
      end: 415
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 415
    functionName: route_list_vpn_gateway_needed
    functionSourceFile: /src/openvpn/src/openvpn/route.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool route_list_vpn_gateway_needed(const struct route_list
      *rl) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - netbits
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 402
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 402
    functionName: netbits_to_netmask
    functionSourceFile: /src/openvpn/src/openvpn/route.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: in_addr_t
    signature: 'static inline in_addr_t netbits_to_netmask(const int netbits) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - wes
    - event
    argTypes:
    - struct we_set*
    - event_t
    constantsTouched: []
    func_position:
      end: 170
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 170
    functionName: we_del_event
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void we_del_event(struct we_set *wes, event_t event) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:176,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - wes
    - index
    argTypes:
    - struct we_set*
    - int
    constantsTouched: []
    func_position:
      end: 183
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 183
    functionName: we_del_index
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void we_del_index(struct we_set *wes, int index) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:195,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:200,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 4
    argNames:
    - wes
    - event
    - ri
    - wi
    argTypes:
    - struct we_set*
    - event_t
    - int*
    - int*
    constantsTouched: []
    func_position:
      end: 204
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 204
    functionName: we_get_rw_indices
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void we_get_rw_indices(struct we_set *wes, event_t event, int
      *ri, int *wi) '
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: we_append_event
      Src: /src/openvpn/src/openvpn/event.c:244,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:283,1
    - Dst: we_set_event
      Src: /src/openvpn/src/openvpn/event.c:298,1
    - Dst: we_del_index
      Src: /src/openvpn/src/openvpn/event.c:325,1
    - Dst: we_append_event
      Src: /src/openvpn/src/openvpn/event.c:354,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:346,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:369,1
    - Dst: we_del_index
      Src: /src/openvpn/src/openvpn/event.c:275,1
    - Dst: we_get_rw_indices
      Src: /src/openvpn/src/openvpn/event.c:255,1
    - Dst: we_del_event
      Src: /src/openvpn/src/openvpn/event.c:279,1
    - Dst: we_append_event
      Src: /src/openvpn/src/openvpn/event.c:291,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:306,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:329,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:374,1
    - Dst: we_del_index
      Src: /src/openvpn/src/openvpn/event.c:302,1
    - Dst: we_set_event
      Src: /src/openvpn/src/openvpn/event.c:321,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:361,1
    - Dst: we_append_event
      Src: /src/openvpn/src/openvpn/event.c:347,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:236,1
    - Dst: we_append_event
      Src: /src/openvpn/src/openvpn/event.c:314,1
    - Dst: we_append_event
      Src: /src/openvpn/src/openvpn/event.c:337,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:380,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 56
    argCount: 4
    argNames:
    - es
    - event
    - rwflags
    - arg
    argTypes:
    - struct event_set*
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 381
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 381
    functionName: we_ctl
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - we_get_rw_indices
    - dmsg
    - msg
    - we_set_event
    - we_del_event
    - ASSERT
    - we_append_event
    - we_del_index
    linkageType: ''
    returnType: void
    signature: 'static void we_ctl(struct event_set *es, event_t event, unsigned int
      rwflags, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:714,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 716
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 716
    functionName: po_reset
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void po_reset(struct event_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:924,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:926,1
    - Dst: FD_ZERO
      Src: /src/openvpn/src/openvpn/event.c:929,1
    - Dst: FD_ZERO
      Src: /src/openvpn/src/openvpn/event.c:928,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 935
      start: 919
    functionDepth: 0
    functionLinenumber: 919
    functionLinenumberEnd: 935
    functionName: se_reset
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    - FD_ZERO
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void se_reset(struct event_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:1049,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/event.c:1054,1
    - Dst: se_wait_return
      Src: /src/openvpn/src/openvpn/event.c:1058,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 9
    argCount: 4
    argNames:
    - es
    - tv
    - out
    - outlen
    argTypes:
    - struct event_set*
    - struct timeval*
    - struct event_set_return*
    - int
    constantsTouched: []
    func_position:
      end: 1062
      start: 1042
    functionDepth: 0
    functionLinenumber: 1042
    functionLinenumberEnd: 1062
    functionName: se_wait_fast
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - select
    - se_wait_return
    - dmsg
    linkageType: ''
    returnType: int
    signature: 'static int se_wait_fast(struct event_set *es, const struct timeval
      *tv, struct event_set_return *out, int outlen) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: we_init
      Src: /src/openvpn/src/openvpn/event.c:1128,1
    - Dst: po_init
      Src: /src/openvpn/src/openvpn/event.c:1143,1
    - Dst: se_init
      Src: /src/openvpn/src/openvpn/event.c:1133,1
    - Dst: po_init
      Src: /src/openvpn/src/openvpn/event.c:1148,1
    - Dst: se_init
      Src: /src/openvpn/src/openvpn/event.c:1139,1
    - Dst: se_init
      Src: /src/openvpn/src/openvpn/event.c:1152,1
    - Dst: po_init
      Src: /src/openvpn/src/openvpn/event.c:1156,1
    - Dst: se_init
      Src: /src/openvpn/src/openvpn/event.c:1158,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:1162,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 29
    argCount: 2
    argNames:
    - maxevents
    - flags
    argTypes:
    - int*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1164
      start: 1123
    functionDepth: 0
    functionLinenumber: 1123
    functionLinenumberEnd: 1164
    functionName: event_set_init_simple
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - se_init
    - we_init
    - ASSERT
    - po_init
    linkageType: ''
    returnType: struct event_set*
    signature: 'static struct event_set *event_set_init_simple(int *maxevents, unsigned
      int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:705,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:706,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:707,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 708
      start: 701
    functionDepth: 0
    functionLinenumber: 701
    functionLinenumberEnd: 708
    functionName: po_free
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void po_free(struct event_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/event.c:77,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - tv
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 79
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 79
    functionName: tv_to_ms_timeout
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - max_int
    linkageType: ''
    returnType: int
    signature: 'static inline int tv_to_ms_timeout(const struct timeval *tv) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: we_set_event
      Src: /src/openvpn/src/openvpn/event.c:124,1
    - Dst: we_set_event
      Src: /src/openvpn/src/openvpn/event.c:136,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 4
    argNames:
    - wes
    - event
    - rwflags
    - arg
    argTypes:
    - struct we_set*
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 145
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 145
    functionName: we_append_event
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - we_set_event
    linkageType: ''
    returnType: bool
    signature: 'static inline bool we_append_event(struct we_set *wes, event_t event,
      unsigned int rwflags, void *arg) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:96,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:105,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:100,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:110,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 5
    argNames:
    - wes
    - i
    - event
    - rwflags
    - arg
    argTypes:
    - struct we_set*
    - int
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 115
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 115
    functionName: we_set_event
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - msg
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static inline void we_set_event(struct we_set *wes, int i, event_t
      event, unsigned int rwflags, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:210,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:212,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:211,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 213
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 213
    functionName: we_free
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void we_free(struct event_set *es) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: tv_to_ms_timeout
      Src: /src/openvpn/src/openvpn/event.c:387,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:398,1
    - Dst: WSAWaitForMultipleEvents
      Src: /src/openvpn/src/openvpn/event.c:410,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:390,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/event.c:393,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpn/event.c:431,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:434,1
    - Dst: WSAWaitForMultipleEvents
      Src: /src/openvpn/src/openvpn/event.c:455,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:466,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 44
    argCount: 4
    argNames:
    - es
    - tv
    - out
    - outlen
    argTypes:
    - struct event_set*
    - struct timeval*
    - struct event_set_return*
    - int
    constantsTouched: []
    func_position:
      end: 479
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 479
    functionName: we_wait
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - check_debug_level
    - dmsg
    - tv_to_ms_timeout
    - WSAWaitForMultipleEvents
    - WaitForSingleObject
    linkageType: ''
    returnType: int
    signature: 'static int we_wait(struct event_set *es, const struct timeval *tv,
      struct event_set_return *out, int outlen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/openvpn/src/openvpn/event.c:537,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:538,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:539,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 540
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 540
    functionName: ep_free
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - close
    - free
    linkageType: ''
    returnType: void
    signature: 'static void ep_free(struct event_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:724,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:726,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - es
    - event
    argTypes:
    - struct event_set*
    - event_t
    constantsTouched: []
    func_position:
      end: 741
      start: 718
    functionDepth: 0
    functionLinenumber: 718
    functionLinenumberEnd: 741
    functionName: po_del
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void po_del(struct event_set *es, event_t event) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:915,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/event.c:916,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 917
      start: 911
    functionDepth: 0
    functionLinenumber: 911
    functionLinenumberEnd: 917
    functionName: se_free
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void se_free(struct event_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:941,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:943,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:953,1
    - Dst: FD_CLR
      Src: /src/openvpn/src/openvpn/event.c:948,1
    - Dst: FD_CLR
      Src: /src/openvpn/src/openvpn/event.c:947,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 2
    argNames:
    - es
    - event
    argTypes:
    - struct event_set*
    - event_t
    constantsTouched: []
    func_position:
      end: 956
      start: 937
    functionDepth: 0
    functionLinenumber: 937
    functionLinenumberEnd: 956
    functionName: se_del
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - msg
    - FD_CLR
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void se_del(struct event_set *es, event_t event) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:1091,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:1093,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:1117,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:1112,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/event.c:1113,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 2
    argNames:
    - maxevents
    - flags
    argTypes:
    - int*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1120
      start: 1086
    functionDepth: 0
    functionLinenumber: 1086
    functionLinenumberEnd: 1120
    functionName: se_init
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - dmsg
    - min_int
    - ASSERT
    - ALLOC_OBJ_CLEAR
    - ALLOC_ARRAY_CLEAR
    linkageType: ''
    returnType: struct event_set*
    signature: 'static struct event_set *se_init(int *maxevents, unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:219,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 221
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 221
    functionName: we_reset
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void we_reset(struct event_set *es) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - pfdp
    - rwflags
    argTypes:
    - struct pollfd*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 755
      start: 743
    functionDepth: 0
    functionLinenumber: 743
    functionLinenumberEnd: 755
    functionName: po_set_pollfd_events
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void po_set_pollfd_events(struct pollfd *pfdp, unsigned
      int rwflags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:227,1
    - Dst: we_del_event
      Src: /src/openvpn/src/openvpn/event.c:228,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 2
    argNames:
    - es
    - event
    argTypes:
    - struct event_set*
    - event_t
    constantsTouched: []
    func_position:
      end: 229
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 229
    functionName: we_del
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    - we_del_event
    linkageType: ''
    returnType: void
    signature: 'static void we_del(struct event_set *es, event_t event) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: po_set_pollfd_events
      Src: /src/openvpn/src/openvpn/event.c:765,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 4
    argNames:
    - pos
    - event
    - rwflags
    - arg
    argTypes:
    - struct po_set*
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 773
      start: 757
    functionDepth: 0
    functionLinenumber: 757
    functionLinenumberEnd: 773
    functionName: po_append_event
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - po_set_pollfd_events
    linkageType: ''
    returnType: bool
    signature: 'static inline bool po_append_event(struct po_set *pos, event_t event,
      unsigned int rwflags, void *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_set_init_simple
      Src: /src/openvpn/src/openvpn/event.c:1189,1
    - Dst: event_set_init_scalable
      Src: /src/openvpn/src/openvpn/event.c:1193,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - maxevents
    - flags
    argTypes:
    - int*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1195
      start: 1184
    functionDepth: 0
    functionLinenumber: 1184
    functionLinenumberEnd: 1195
    functionName: event_set_init
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - event_set_init_simple
    - event_set_init_scalable
    linkageType: ''
    returnType: struct event_set*
    signature: 'struct event_set *event_set_init(int *maxevents, unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:546,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 547
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 547
    functionName: ep_reset
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void ep_reset(struct event_set *es) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/event.c:571,1
    - Dst: epoll_ctl
      Src: /src/openvpn/src/openvpn/event.c:593,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:583,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:595,1
    - Dst: epoll_ctl
      Src: /src/openvpn/src/openvpn/event.c:589,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:600,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 21
    argCount: 4
    argNames:
    - es
    - event
    - rwflags
    - arg
    argTypes:
    - struct event_set*
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 603
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 603
    functionName: ep_ctl
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - msg
    - CLEAR
    - epoll_ctl
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void ep_ctl(struct event_set *es, event_t event, unsigned int
      rwflags, void *arg) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:780,1
    - Dst: po_append_event
      Src: /src/openvpn/src/openvpn/event.c:785,1
    - Dst: po_set_pollfd_events
      Src: /src/openvpn/src/openvpn/event.c:799,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:813,1
    - Dst: po_append_event
      Src: /src/openvpn/src/openvpn/event.c:803,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 18
    argCount: 4
    argNames:
    - es
    - event
    - rwflags
    - arg
    argTypes:
    - struct event_set*
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 814
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 814
    functionName: po_ctl
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - msg
    - po_append_event
    - po_set_pollfd_events
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void po_ctl(struct event_set *es, event_t event, unsigned int
      rwflags, void *arg) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:963,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/event.c:985,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/event.c:968,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/event.c:978,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/event.c:974,1
    - Dst: FD_CLR
      Src: /src/openvpn/src/openvpn/event.c:989,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/event.c:993,1
    - Dst: FD_CLR
      Src: /src/openvpn/src/openvpn/event.c:997,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:1003,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 29
    argCount: 4
    argNames:
    - es
    - event
    - rwflags
    - arg
    argTypes:
    - struct event_set*
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 1007
      start: 958
    functionDepth: 0
    functionLinenumber: 958
    functionLinenumberEnd: 1007
    functionName: se_ctl
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - FD_CLR
    - dmsg
    - msg
    - max_int
    - openvpn_fd_set
    linkageType: ''
    returnType: void
    signature: 'static void se_ctl(struct event_set *es, event_t event, unsigned int
      rwflags, void *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ep_init
      Src: /src/openvpn/src/openvpn/event.c:1171,1
    - Dst: event_set_init_simple
      Src: /src/openvpn/src/openvpn/event.c:1178,1
    - Dst: event_set_init_simple
      Src: /src/openvpn/src/openvpn/event.c:1175,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:1180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:1174,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - maxevents
    - flags
    argTypes:
    - int*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1182
      start: 1166
    functionDepth: 0
    functionLinenumber: 1166
    functionLinenumberEnd: 1182
    functionName: event_set_init_scalable
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - msg
    - event_set_init_simple
    - ep_init
    - ASSERT
    linkageType: ''
    returnType: struct event_set*
    signature: 'static struct event_set *event_set_init_scalable(int *maxevents, unsigned
      int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:486,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:488,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/event.c:506,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:504,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/event.c:505,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:509,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:512,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:514,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 2
    argNames:
    - maxevents
    - flags
    argTypes:
    - int*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 518
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 518
    functionName: we_init
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - dmsg
    - min_int
    - ASSERT
    - ALLOC_OBJ_CLEAR
    - ALLOC_ARRAY_CLEAR
    linkageType: ''
    returnType: struct event_set*
    signature: 'static struct event_set *we_init(int *maxevents, unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:555,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/event.c:558,1
    - Dst: epoll_ctl
      Src: /src/openvpn/src/openvpn/event.c:559,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:557,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:561,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - es
    - event
    argTypes:
    - struct event_set*
    - event_t
    constantsTouched: []
    func_position:
      end: 563
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 563
    functionName: ep_del
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - epoll_ctl
    - CLEAR
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void ep_del(struct event_set *es, event_t event) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/openvpn/src/openvpn/event.c:616,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:636,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:617,1
    - Dst: tv_to_ms_timeout
      Src: /src/openvpn/src/openvpn/event.c:616,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 26
    argCount: 4
    argNames:
    - es
    - tv
    - out
    - outlen
    argTypes:
    - struct event_set*
    - struct timeval*
    - struct event_set_return*
    - int
    constantsTouched: []
    func_position:
      end: 643
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 643
    functionName: ep_wait
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - epoll_wait
    - tv_to_ms_timeout
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: int
    signature: 'static int ep_wait(struct event_set *es, const struct timeval *tv,
      struct event_set_return *out, int outlen) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:651,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:678,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/event.c:660,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:662,1
    - Dst: epoll_create
      Src: /src/openvpn/src/openvpn/event.c:654,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:680,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 2
    argNames:
    - maxevents
    - flags
    argTypes:
    - int*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 686
      start: 645
    functionDepth: 0
    functionLinenumber: 645
    functionLinenumberEnd: 686
    functionName: ep_init
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - set_cloexec
    - dmsg
    - ASSERT
    - ALLOC_ARRAY_CLEAR
    - epoll_create
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct event_set*
    signature: 'static struct event_set *ep_init(int *maxevents, unsigned int flags) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: poll
      Src: /src/openvpn/src/openvpn/event.c:822,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:824,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/event.c:851,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:844,1
    - Dst: tv_to_ms_timeout
      Src: /src/openvpn/src/openvpn/event.c:822,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 33
    argCount: 4
    argNames:
    - es
    - tv
    - out
    - outlen
    argTypes:
    - struct event_set*
    - struct timeval*
    - struct event_set_return*
    - int
    constantsTouched: []
    func_position:
      end: 859
      start: 816
    functionDepth: 0
    functionLinenumber: 816
    functionLinenumberEnd: 859
    functionName: po_wait
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - dmsg
    - poll
    - msg
    - tv_to_ms_timeout
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static int po_wait(struct event_set *es, const struct timeval *tv,
      struct event_set_return *out, int outlen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:866,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:889,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/event.c:885,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:892,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/event.c:868,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 2
    argNames:
    - maxevents
    - flags
    argTypes:
    - int*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 895
      start: 861
    functionDepth: 0
    functionLinenumber: 861
    functionLinenumberEnd: 895
    functionName: po_init
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY_CLEAR
    - ALLOC_OBJ_CLEAR
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: struct event_set*
    signature: 'static struct event_set *po_init(int *maxevents, unsigned int flags) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: FD_ISSET
      Src: /src/openvpn/src/openvpn/event.c:1019,1
    - Dst: FD_ISSET
      Src: /src/openvpn/src/openvpn/event.c:1020,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:1033,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 17
    argCount: 5
    argNames:
    - ses
    - read
    - write
    - out
    - outlen
    argTypes:
    - struct se_set*
    - fd_set*
    - fd_set*
    - struct event_set_return*
    - int
    constantsTouched: []
    func_position:
      end: 1040
      start: 1009
    functionDepth: 0
    functionLinenumber: 1009
    functionLinenumberEnd: 1040
    functionName: se_wait_return
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - FD_ISSET
    - dmsg
    linkageType: ''
    returnType: int
    signature: 'static int se_wait_return(struct se_set *ses, fd_set *read, fd_set
      *write, struct event_set_return *out, int outlen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/event.c:1073,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/event.c:1076,1
    - Dst: se_wait_return
      Src: /src/openvpn/src/openvpn/event.c:1080,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 9
    argCount: 4
    argNames:
    - es
    - tv
    - out
    - outlen
    argTypes:
    - struct event_set*
    - struct timeval*
    - struct event_set_return*
    - int
    constantsTouched: []
    func_position:
      end: 1084
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1084
    functionName: se_wait_scalable
    functionSourceFile: /src/openvpn/src/openvpn/event.c
    functionUses: []
    functionsReached:
    - select
    - se_wait_return
    - dmsg
    linkageType: ''
    returnType: int
    signature: 'static int se_wait_scalable(struct event_set *es, const struct timeval
      *tv, struct event_set_return *out, int outlen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NLMSG_ALIGN
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:79,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - nlh
    argTypes:
    - struct nlmsghdr*
    constantsTouched: []
    func_position:
      end: 80
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 80
    functionName: sitnl_nlmsg_tail
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - NLMSG_ALIGN
    linkageType: ''
    returnType: void*
    signature: 'static __attribute__ ((noinline)) void *sitnl_nlmsg_tail(const struct
      nlmsghdr *nlh) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1042,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1044,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1045,1
    - Dst: sitnl_addr_add
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1047,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - int
    constantsTouched: []
    func_position:
      end: 1048
      start: 1030
    functionDepth: 0
    functionLinenumber: 1030
    functionLinenumberEnd: 1048
    functionName: net_addr_v4_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - sitnl_addr_add
    - msg
    - inet_ntop
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v4_add(openvpn_net_ctx_t *ctx, const char *iface, const
      in_addr_t *addr, int prefixlen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1064,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1065,1
    - Dst: sitnl_addr_add
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1067,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - struct in6_addr*
    - int
    constantsTouched: []
    func_position:
      end: 1068
      start: 1050
    functionDepth: 0
    functionLinenumber: 1050
    functionLinenumberEnd: 1068
    functionName: net_addr_v6_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - sitnl_addr_add
    - msg
    - inet_ntop
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v6_add(openvpn_net_ctx_t *ctx, const char *iface, const
      struct in6_addr *addr, int prefixlen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1489,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1496,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1505,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1503,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - ctx
    - iface
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    constantsTouched: []
    func_position:
      end: 1506
      start: 1485
    functionDepth: 0
    functionLinenumber: 1485
    functionLinenumberEnd: 1506
    functionName: net_iface_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_send
    - NLMSG_LENGTH
    linkageType: ''
    returnType: int
    signature: 'int net_iface_del(openvpn_net_ctx_t *ctx, const char *iface) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1124,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1133,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1131,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1128,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1132,1
    - Dst: sitnl_addr_ptp_add
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1135,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 4
    argNames:
    - ctx
    - iface
    - local
    - remote
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - in_addr_t*
    constantsTouched: []
    func_position:
      end: 1136
      start: 1110
    functionDepth: 0
    functionLinenumber: 1110
    functionLinenumberEnd: 1136
    functionName: net_addr_ptp_v4_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - inet_ntop
    - htonl
    - sitnl_addr_ptp_add
    linkageType: ''
    returnType: int
    signature: 'int net_addr_ptp_v4_add(openvpn_net_ctx_t *ctx, const char *iface,
      const in_addr_t *local, const in_addr_t *remote) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: NLMSG_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1419,1
    - Dst: IFLA_RTA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1423,1
    - Dst: IFLA_PAYLOAD
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1423,1
    - Dst: sitnl_parse_rtattr
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1423,1
    - Dst: sitnl_parse_rtattr_nested
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1433,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1445,1
    - Dst: RTA_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1445,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 20
    argCount: 2
    argNames:
    - n
    - arg
    argTypes:
    - struct nlmsghdr*
    - void*
    constantsTouched: []
    func_position:
      end: 1449
      start: 1415
    functionDepth: 0
    functionLinenumber: 1415
    functionLinenumberEnd: 1449
    functionName: sitnl_type_save
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - sitnl_parse_rtattr
    - IFLA_RTA
    - IFLA_PAYLOAD
    - RTA_DATA
    - sitnl_parse_rtattr_nested
    - NLMSG_DATA
    - strncpynt
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_type_save(struct nlmsghdr *n, void *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1151,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1153,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1154,1
    - Dst: sitnl_addr_ptp_del
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1156,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 4
    argNames:
    - ctx
    - iface
    - local
    - remote
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - in_addr_t*
    constantsTouched: []
    func_position:
      end: 1157
      start: 1138
    functionDepth: 0
    functionLinenumber: 1138
    functionLinenumberEnd: 1157
    functionName: net_addr_ptp_v4_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - sitnl_addr_ptp_del
    - inet_ntop
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int net_addr_ptp_v4_del(openvpn_net_ctx_t *ctx, const char *iface,
      const in_addr_t *local, const in_addr_t *remote) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1456,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1475,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1472,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1463,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1470,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1476,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1480,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - ctx
    - iface
    - type
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - char
    constantsTouched: []
    func_position:
      end: 1483
      start: 1451
    functionDepth: 0
    functionLinenumber: 1451
    functionLinenumberEnd: 1483
    functionName: net_iface_type
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_send
    - strerror
    - NLMSG_LENGTH
    - memset
    linkageType: ''
    returnType: int
    signature: 'int net_iface_type(openvpn_net_ctx_t *ctx, const char *iface, char
      type[IFACE_TYPE_LEN_MAX]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sitnl_parse_rtattr_flags
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1408,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 4
    argNames:
    - tb
    - max
    - rta
    - len
    argTypes:
    - struct rtattr*
    - int
    - struct rtattr*
    - int
    constantsTouched: []
    func_position:
      end: 1409
      start: 1405
    functionDepth: 0
    functionLinenumber: 1405
    functionLinenumberEnd: 1409
    functionName: sitnl_parse_rtattr
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - sitnl_parse_rtattr_flags
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_parse_rtattr(struct rtattr *tb[], int max, struct
      rtattr *rta, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1291,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1301,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1300,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1299,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1296,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1302,1
    - Dst: sitnl_route_del
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1304,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - in_addr_t*
    - int
    - in_addr_t*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 1306
      start: 1279
    functionDepth: 0
    functionLinenumber: 1279
    functionLinenumberEnd: 1306
    functionName: net_route_v4_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - sitnl_route_del
    - np
    - inet_ntop
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int net_route_v4_del(openvpn_net_ctx_t *ctx, const in_addr_t *dst,
      int prefixlen, const in_addr_t *gw, const char *iface, uint32_t table, int metric) '
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:330,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:337,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:323,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:385,1
    - Dst: cb
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:395,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:423,1
    - Dst: NLMSG_ALIGN
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:427,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:265,1
    - Dst: time
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:271,1
    - Dst: sitnl_bind
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:286,1
    - Dst: sendmsg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:294,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:312,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:438,1
    - Dst: sitnl_socket
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:279,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:289,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:297,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:315,1
    - Dst: NLMSG_ALIGN
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:426,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:444,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:432,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:282,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:303,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:353,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:320,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:357,1
    - Dst: recvmsg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:314,1
    - Dst: NLMSG_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:382,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:404,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:405,1
    - Dst: cb
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:414,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 127
    argCount: 5
    argNames:
    - payload
    - peer
    - groups
    - cb
    - arg_cb
    argTypes:
    - struct nlmsghdr*
    - pid_t
    - unsigned int
    - sitnl_parse_reply_cb
    - void*
    constantsTouched: []
    func_position:
      end: 447
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 447
    functionName: sitnl_send
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - sendmsg
    - msg
    - sitnl_socket
    - recvmsg
    - strerror
    - NLMSG_DATA
    - CLEAR
    - memset
    - time
    - sitnl_bind
    - close
    - NLMSG_ALIGN
    - cb
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_send(struct nlmsghdr *payload, pid_t peer, unsigned
      int groups, sitnl_parse_reply_cb cb, void *arg_cb) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: NLMSG_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:461,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:463,1
    - Dst: RTA_OK
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:476,1
    - Dst: RTM_RTA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:462,1
    - Dst: RTA_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:482,1
    - Dst: RTA_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:491,1
    - Dst: RTA_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:496,1
    - Dst: RTA_NEXT
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:500,1
    - Dst: if_indextoname
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:509,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:511,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:518,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 30
    argCount: 2
    argNames:
    - n
    - arg
    argTypes:
    - struct nlmsghdr*
    - void*
    constantsTouched: []
    func_position:
      end: 522
      start: 457
    functionDepth: 0
    functionLinenumber: 457
    functionLinenumberEnd: 522
    functionName: sitnl_route_save
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - RTA_NEXT
    - RTM_RTA
    - memcpy
    - if_indextoname
    - RTA_DATA
    - RTA_OK
    - msg
    - NLMSG_DATA
    - NLMSG_LENGTH
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_route_save(struct nlmsghdr *n, void *arg) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:980,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:984,1
    - Dst: sitnl_addr_set
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:992,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:987,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 16
    argCount: 4
    argNames:
    - af_family
    - iface
    - addr
    - prefixlen
    argTypes:
    - sa_family_t
    - char*
    - inet_address_t*
    - int
    constantsTouched: []
    func_position:
      end: 994
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 994
    functionName: sitnl_addr_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_addr_set
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_addr_add(sa_family_t af_family, const char *iface,
      const inet_address_t *addr, int prefixlen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1345,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1347,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1351,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1351,1
    - Dst: SITNL_NEST
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1353,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1354,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1354,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1356,1
    - Dst: SITNL_NEST
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1359,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1360,1
    - Dst: SITNL_NEST_END
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1362,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1371,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1369,1
    - Dst: SITNL_NEST_END
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1365,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 27
    argCount: 4
    argNames:
    - ctx
    - iface
    - type
    - arg
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - char*
    - void*
    constantsTouched: []
    func_position:
      end: 1374
      start: 1338
    functionDepth: 0
    functionLinenumber: 1338
    functionLinenumberEnd: 1374
    functionName: net_iface_new
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - SITNL_NEST_END
    - msg
    - sitnl_send
    - strcmp
    - NLMSG_LENGTH
    - ASSERT
    - SITNL_NEST
    - strlen
    - SITNL_ADDATTR
    linkageType: ''
    returnType: int
    signature: 'int net_iface_new(openvpn_net_ctx_t *ctx, const char *iface, const
      char *type, void *arg) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:532,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:538,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:536,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:533,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:535,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:575,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:577,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:584,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:585,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 32
    argCount: 4
    argNames:
    - af_family
    - dst
    - best_gw
    - best_iface
    argTypes:
    - sa_family_t
    - inet_address_t*
    - void*
    - char*
    constantsTouched: []
    func_position:
      end: 589
      start: 524
    functionDepth: 0
    functionLinenumber: 524
    functionLinenumberEnd: 589
    functionName: sitnl_route_best_gw
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - memcpy
    - sitnl_send
    - CLEAR
    - NLMSG_LENGTH
    - ASSERT
    - strncpy
    - SITNL_ADDATTR
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_route_best_gw(sa_family_t af_family, const inet_address_t
      *dst, void *best_gw, char *best_iface) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:738,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:740,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:748,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:755,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:743,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:757,1
    - Dst: MAC_PRINT_ARG
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:757,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:760,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - ctx
    - iface
    - addr
    argTypes:
    - openvpn_net_ctx_t*
    - openvpn_net_iface_t*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 763
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 763
    functionName: net_addr_ll_set
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - MAC_PRINT_ARG
    - sitnl_send
    - CLEAR
    - NLMSG_LENGTH
    - SITNL_ADDATTR
    linkageType: ''
    returnType: int
    signature: 'int net_addr_ll_set(openvpn_net_ctx_t *ctx, const openvpn_net_iface_t
      *iface, uint8_t *addr) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1014,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1021,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1018,1
    - Dst: sitnl_addr_set
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1026,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 4
    argNames:
    - af_family
    - iface
    - addr
    - prefixlen
    argTypes:
    - sa_family_t
    - char*
    - inet_address_t*
    - int
    constantsTouched: []
    func_position:
      end: 1028
      start: 996
    functionDepth: 0
    functionLinenumber: 996
    functionLinenumberEnd: 1028
    functionName: sitnl_addr_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_addr_set
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_addr_del(sa_family_t af_family, const char *iface,
      inet_address_t *addr, int prefixlen) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1382,1
    - Dst: RTA_NEXT
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1393,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1398,1
    - Dst: RTA_OK
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1384,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 5
    argNames:
    - tb
    - max
    - rta
    - len
    - flags
    argTypes:
    - struct rtattr*
    - int
    - struct rtattr*
    - int
    - unsigned short
    constantsTouched: []
    func_position:
      end: 1403
      start: 1376
    functionDepth: 0
    functionLinenumber: 1376
    functionLinenumberEnd: 1403
    functionName: sitnl_parse_rtattr_flags
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - RTA_NEXT
    - memset
    - RTA_OK
    - msg
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_parse_rtattr_flags(struct rtattr *tb[], int max,
      struct rtattr *rta, int len, unsigned short flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: RTA_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:135,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:140,1
    - Dst: RTA_ALIGN
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:138,1
    - Dst: NLMSG_ALIGN
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:138,1
    - Dst: sitnl_nlmsg_tail
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:145,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:151,1
    - Dst: RTA_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:151,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:155,1
    - Dst: RTA_DATA
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:155,1
    - Dst: NLMSG_ALIGN
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:158,1
    - Dst: RTA_ALIGN
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:158,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 5
    argNames:
    - n
    - maxlen
    - type
    - data
    - alen
    argTypes:
    - struct nlmsghdr*
    - int
    - int
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 161
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 161
    functionName: sitnl_addattr
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - memcpy
    - msg
    - RTA_DATA
    - sitnl_nlmsg_tail
    - memset
    - RTA_LENGTH
    - RTA_ALIGN
    - NLMSG_ALIGN
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_addattr(struct nlmsghdr *n, int maxlen, int type,
      const void *data, int alen) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:206,1
    - Dst: bind
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:211,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:220,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:213,1
    - Dst: getsockname
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:218,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:226,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:232,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 2
    argNames:
    - fd
    - groups
    argTypes:
    - int
    - uint32_t
    constantsTouched: []
    func_position:
      end: 237
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 237
    functionName: sitnl_bind
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - CLEAR
    - bind
    - getsockname
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_bind(int fd, uint32_t groups) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:632,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:635,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:644,1
    - Dst: sitnl_route_best_gw
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:638,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:636,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:645,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:648,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 4
    argNames:
    - ctx
    - dst
    - best_gw
    - best_iface
    argTypes:
    - openvpn_net_ctx_t*
    - in_addr_t*
    - in_addr_t*
    - char*
    constantsTouched: []
    func_position:
      end: 651
      start: 622
    functionDepth: 0
    functionLinenumber: 622
    functionLinenumberEnd: 651
    functionName: net_route_v4_best_gw
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - sitnl_route_best_gw
    - msg
    - ntohl
    - inet_ntop
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int net_route_v4_best_gw(openvpn_net_ctx_t *ctx, const in_addr_t *dst,
      in_addr_t *best_gw, char *best_iface) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:661,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:672,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:669,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:673,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:665,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:677,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:693,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:695,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 3
    argNames:
    - ctx
    - iface
    - up
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 696
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 696
    functionName: net_iface_up
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_send
    - strerror
    - CLEAR
    - NLMSG_LENGTH
    linkageType: ''
    returnType: int
    signature: 'int net_iface_up(openvpn_net_ctx_t *ctx, const char *iface, bool up) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:774,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:794,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:808,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:813,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:776,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:816,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 30
    argCount: 7
    argNames:
    - cmd
    - flags
    - ifindex
    - af_family
    - local
    - remote
    - prefixlen
    argTypes:
    - int
    - uint32_t
    - int
    - sa_family_t
    - inet_address_t*
    - inet_address_t*
    - int
    constantsTouched: []
    func_position:
      end: 823
      start: 765
    functionDepth: 0
    functionLinenumber: 765
    functionLinenumberEnd: 823
    functionName: sitnl_addr_set
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - sitnl_send
    - CLEAR
    - NLMSG_LENGTH
    - SITNL_ADDATTR
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_addr_set(int cmd, uint32_t flags, int ifindex, sa_family_t
      af_family, const inet_address_t *local, const inet_address_t *remote, int prefixlen) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:878,1
    - Dst: sitnl_addr_set
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:889,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:885,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:882,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 3
    argNames:
    - af_family
    - iface
    - local
    argTypes:
    - sa_family_t
    - char*
    - inet_address_t*
    constantsTouched: []
    func_position:
      end: 890
      start: 860
    functionDepth: 0
    functionLinenumber: 860
    functionLinenumberEnd: 890
    functionName: sitnl_addr_ptp_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_addr_set
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_addr_ptp_del(sa_family_t af_family, const char *iface,
      const inet_address_t *local) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1082,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1085,1
    - Dst: sitnl_addr_del
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1087,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1084,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - int
    constantsTouched: []
    func_position:
      end: 1088
      start: 1070
    functionDepth: 0
    functionLinenumber: 1070
    functionLinenumberEnd: 1088
    functionName: net_addr_v4_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - inet_ntop
    - sitnl_addr_del
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v4_del(openvpn_net_ctx_t *ctx, const char *iface, const
      in_addr_t *addr, int prefixlen) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1168,1
    - Dst: sitnl_route_set
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1187,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1171,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 7
    argNames:
    - iface
    - af_family
    - dst
    - prefixlen
    - gw
    - table
    - metric
    argTypes:
    - char*
    - sa_family_t
    - void*
    - int
    - void*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 1190
      start: 1159
    functionDepth: 0
    functionLinenumber: 1159
    functionLinenumberEnd: 1190
    functionName: sitnl_route_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_route_set
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_route_add(const char *iface, sa_family_t af_family,
      const void *dst, int prefixlen, const void *gw, uint32_t table, int metric) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1243,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1246,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1244,1
    - Dst: sitnl_route_add
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1248,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1245,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - struct in6_addr*
    - int
    - struct in6_addr*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 1250
      start: 1223
    functionDepth: 0
    functionLinenumber: 1223
    functionLinenumberEnd: 1250
    functionName: net_route_v6_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - inet_ntop
    - sitnl_route_add
    - np
    linkageType: ''
    returnType: int
    signature: 'int net_route_v6_add(openvpn_net_ctx_t *ctx, const struct in6_addr
      *dst, int prefixlen, const struct in6_addr *gw, const char *iface, uint32_t
      table, int metric) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:705,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:710,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:715,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:707,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:722,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:724,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:726,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 3
    argNames:
    - ctx
    - iface
    - mtu
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 729
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 729
    functionName: net_iface_mtu_set
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_send
    - CLEAR
    - NLMSG_LENGTH
    - SITNL_ADDATTR
    linkageType: ''
    returnType: int
    signature: 'int net_iface_mtu_set(openvpn_net_ctx_t *ctx, const char *iface, uint32_t
      mtu) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:844,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:848,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:851,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:852,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:851,1
    - Dst: sitnl_addr_set
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:856,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 4
    argNames:
    - af_family
    - iface
    - local
    - remote
    argTypes:
    - sa_family_t
    - char*
    - inet_address_t*
    - inet_address_t*
    constantsTouched: []
    func_position:
      end: 858
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 858
    functionName: sitnl_addr_ptp_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_addr_set
    - strerror
    - np
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_addr_ptp_add(sa_family_t af_family, const char *iface,
      const inet_address_t *local, const inet_address_t *remote) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:901,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:944,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:939,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:934,1
    - Dst: NLMSG_LENGTH
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:917,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:949,1
    - Dst: SITNL_ADDATTR
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:954,1
    - Dst: sitnl_send
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:957,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 12
    argNames:
    - cmd
    - flags
    - ifindex
    - af_family
    - dst
    - prefixlen
    - gw
    - table
    - metric
    - scope
    - protocol
    - type
    argTypes:
    - int
    - uint32_t
    - int
    - sa_family_t
    - void*
    - int
    - void*
    - enum rt_class_t
    - int
    - enum rt_scope_t
    - int
    - int
    constantsTouched: []
    func_position:
      end: 960
      start: 892
    functionDepth: 0
    functionLinenumber: 892
    functionLinenumberEnd: 960
    functionName: sitnl_route_set
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - CLEAR
    - sitnl_send
    - NLMSG_LENGTH
    - SITNL_ADDATTR
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_route_set(int cmd, uint32_t flags, int ifindex, sa_family_t
      af_family, const void *dst, int prefixlen, const void *gw, enum rt_class_t table,
      int metric, enum rt_scope_t scope, int protocol, int type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1104,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1105,1
    - Dst: sitnl_addr_del
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1107,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - struct in6_addr*
    - int
    constantsTouched: []
    func_position:
      end: 1108
      start: 1090
    functionDepth: 0
    functionLinenumber: 1090
    functionLinenumberEnd: 1108
    functionName: net_addr_v6_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - inet_ntop
    - sitnl_addr_del
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v6_del(openvpn_net_ctx_t *ctx, const char *iface, const
      struct in6_addr *addr, int prefixlen) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1204,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1216,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1215,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1210,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1214,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1217,1
    - Dst: sitnl_route_add
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1219,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - in_addr_t*
    - int
    - in_addr_t*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 1221
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1221
    functionName: net_route_v4_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - sitnl_route_add
    - msg
    - np
    - inet_ntop
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int net_route_v4_add(openvpn_net_ctx_t *ctx, const in_addr_t *dst,
      int prefixlen, const in_addr_t *gw, const char *iface, uint32_t table, int metric) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1261,1
    - Dst: sitnl_route_set
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1275,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1264,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 7
    argNames:
    - iface
    - af_family
    - dst
    - prefixlen
    - gw
    - table
    - metric
    argTypes:
    - char*
    - sa_family_t
    - inet_address_t*
    - int
    - inet_address_t*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 1277
      start: 1252
    functionDepth: 0
    functionLinenumber: 1252
    functionLinenumberEnd: 1277
    functionName: sitnl_route_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - if_nametoindex
    - msg
    - sitnl_route_set
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_route_del(const char *iface, sa_family_t af_family,
      inet_address_t *dst, int prefixlen, inet_address_t *gw, uint32_t table, int
      metric) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1328,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1329,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1331,1
    - Dst: sitnl_route_del
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1333,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:1330,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - struct in6_addr*
    - int
    - struct in6_addr*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 1335
      start: 1308
    functionDepth: 0
    functionLinenumber: 1308
    functionLinenumberEnd: 1335
    functionName: net_route_v6_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - inet_ntop
    - sitnl_route_del
    - np
    linkageType: ''
    returnType: int
    signature: 'int net_route_v6_del(openvpn_net_ctx_t *ctx, const struct in6_addr
      *dst, int prefixlen, const struct in6_addr *gw, const char *iface, uint32_t
      table, int metric) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:173,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:183,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:176,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:182,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:187,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:189,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:190,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 195
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 195
    functionName: sitnl_socket
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - socket
    - setsockopt
    - close
    linkageType: ''
    returnType: int
    signature: 'static int sitnl_socket(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:605,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:615,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:606,1
    - Dst: sitnl_route_best_gw
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:608,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_sitnl.c:614,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 4
    argNames:
    - ctx
    - dst
    - best_gw
    - best_iface
    argTypes:
    - openvpn_net_ctx_t*
    - struct in6_addr*
    - struct in6_addr*
    - char*
    constantsTouched: []
    func_position:
      end: 619
      start: 592
    functionDepth: 0
    functionLinenumber: 592
    functionLinenumberEnd: 619
    functionName: net_route_v6_best_gw
    functionSourceFile: /src/openvpn/src/openvpn/networking_sitnl.c
    functionUses: []
    functionsReached:
    - msg
    - inet_ntop
    - sitnl_route_best_gw
    linkageType: ''
    returnType: int
    signature: 'int net_route_v6_best_gw(openvpn_net_ctx_t *ctx, const struct in6_addr
      *dst, struct in6_addr *best_gw, char *best_iface) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct platform_state_user*
    constantsTouched: []
    func_position:
      end: 102
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 102
    functionName: platform_state_user_uid
    functionSourceFile: /src/openvpn/src/openvpn/platform.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int platform_state_user_uid(const struct platform_state_user
      *s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct platform_state_group*
    constantsTouched: []
    func_position:
      end: 111
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 111
    functionName: platform_state_group_gid
    functionSourceFile: /src/openvpn/src/openvpn/platform.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int platform_state_group_gid(const struct platform_state_group
      *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: platform_test_file
      Src: /src/openvpn/src/openvpn/multi.c:1664,1
    - Dst: options_server_import
      Src: /src/openvpn/src/openvpn/multi.c:1666,1
    - Dst: multi_set_virtual_addr_env
      Src: /src/openvpn/src/openvpn/multi.c:1680,1
    - Dst: multi_select_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:1679,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 4
    argNames:
    - m
    - mi
    - dc_file
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - char*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 1682
      start: 1657
    functionDepth: 0
    functionLinenumber: 1657
    functionLinenumberEnd: 1682
    functionName: multi_client_connect_post
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_select_virtual_addr
    - platform_test_file
    - multi_set_virtual_addr_env
    - options_server_import
    linkageType: ''
    returnType: void
    signature: 'static void multi_client_connect_post(struct multi_context *m, struct
      multi_instance *mi, const char *dc_file, unsigned int *option_types_found) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:1740,1
    - Dst: multi_set_virtual_addr_env
      Src: /src/openvpn/src/openvpn/multi.c:1764,1
    - Dst: multi_select_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:1763,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/multi.c:1748,1
    - Dst: options_string_import
      Src: /src/openvpn/src/openvpn/multi.c:1749,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 14
    argCount: 4
    argNames:
    - m
    - mi
    - deferred
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - bool
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 1770
      start: 1733
    functionDepth: 0
    functionLinenumber: 1733
    functionLinenumberEnd: 1770
    functionName: multi_client_connect_mda
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - BSTR
    - multi_set_virtual_addr_env
    - options_string_import
    - multi_select_virtual_addr
    - ASSERT
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'enum client_connect_return multi_client_connect_mda(struct multi_context
      *m, struct multi_instance *mi, bool deferred, unsigned int *option_types_found) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:2066,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2069,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.c:2072,1
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/multi.c:2067,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2075
      start: 2060
    functionDepth: 0
    functionLinenumber: 2060
    functionLinenumberEnd: 2075
    functionName: ccs_delete_config_file
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - setenv_del
    - platform_unlink
    - free
    linkageType: ''
    returnType: void
    signature: 'static void ccs_delete_config_file(struct multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1775,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/multi.c:1778,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/multi.c:1781,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:1778,1
    - Dst: setenv_trusted
      Src: /src/openvpn/src/openvpn/multi.c:1781,1
    - Dst: multi_set_virtual_addr_env
      Src: /src/openvpn/src/openvpn/multi.c:1784,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/multi.c:1788,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/multi.c:1789,1
    - Dst: setenv_long_long
      Src: /src/openvpn/src/openvpn/multi.c:1790,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1793,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 1794
      start: 1772
    functionDepth: 0
    functionLinenumber: 1772
    functionLinenumberEnd: 1794
    functionName: multi_client_connect_setenv
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - time_string
    - multi_set_virtual_addr_env
    - tls_common_name
    - gc_new
    - setenv_long_long
    - setenv_str
    - gc_free
    - setenv_trusted
    - get_link_socket_info
    linkageType: ''
    returnType: void
    signature: 'static void multi_client_connect_setenv(struct multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lookup_by_cid
      Src: /src/openvpn/src/openvpn/multi.c:4182,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 4
    argCount: 2
    argNames:
    - arg
    - cid
    argTypes:
    - void*
    - unsigned long
    constantsTouched: []
    func_position:
      end: 4191
      start: 4178
    functionDepth: 0
    functionLinenumber: 4178
    functionLinenumberEnd: 4191
    functionName: management_get_peer_info
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - lookup_by_cid
    linkageType: ''
    returnType: char*
    signature: 'static char *management_get_peer_info(void *arg, const unsigned long
      cid) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3627,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:3631,1
    - Dst: vlan_decapsulate
      Src: /src/openvpn/src/openvpn/multi.c:3645,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.c:3635,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3635,1
    - Dst: mroute_extract_addr_from_packet
      Src: /src/openvpn/src/openvpn/multi.c:3657,1
    - Dst: multi_bcast
      Src: /src/openvpn/src/openvpn/multi.c:3671,1
    - Dst: multi_set_pending
      Src: /src/openvpn/src/openvpn/multi.c:3675,1
    - Dst: multi_get_instance_by_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:3675,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3682,1
    - Dst: process_incoming_tun
      Src: /src/openvpn/src/openvpn/multi.c:3699,1
    - Dst: multi_output_queue_ready
      Src: /src/openvpn/src/openvpn/multi.c:3685,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3704,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.c:3702,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3693,1
    - Dst: buf_reset_len
      Src: /src/openvpn/src/openvpn/multi.c:3694,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 2
    argNames:
    - m
    - mpp_flags
    argTypes:
    - struct multi_context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3710
      start: 3622
    functionDepth: 0
    functionLinenumber: 3622
    functionLinenumberEnd: 3710
    functionName: multi_process_incoming_tun
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - multi_process_post
    - msg
    - multi_output_queue_ready
    - BLEN
    - buf_reset_len
    - multi_set_pending
    - set_prefix
    - vlan_decapsulate
    - multi_bcast
    - multi_get_instance_by_virtual_addr
    - mroute_extract_addr_from_packet
    - clear_prefix
    - process_incoming_tun
    - printf
    linkageType: ''
    returnType: bool
    signature: 'bool multi_process_incoming_tun(struct multi_context *m, const unsigned
      int mpp_flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_trusted
      Src: /src/openvpn/src/openvpn/multi.c:566,1
    - Dst: setenv_long_long
      Src: /src/openvpn/src/openvpn/multi.c:572,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/multi.c:566,1
    - Dst: setenv_stats
      Src: /src/openvpn/src/openvpn/multi.c:569,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 573
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 573
    functionName: multi_client_disconnect_setenv
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - setenv_long_long
    - setenv_trusted
    - get_link_socket_info
    - setenv_stats
    linkageType: ''
    returnType: void
    signature: 'static void multi_client_disconnect_setenv(struct multi_context *m,
      struct multi_instance *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:1960,1
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/multi.c:1961,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1963,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.c:1966,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 1968
      start: 1951
    functionDepth: 0
    functionLinenumber: 1951
    functionLinenumberEnd: 1968
    functionName: ccs_delete_deferred_ret_file
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - setenv_del
    - platform_unlink
    - free
    linkageType: ''
    returnType: void
    signature: 'static void ccs_delete_deferred_ret_file(struct multi_instance *mi) '
  - BBCount: 24
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:3422,1
    - Dst: multi_set_pending
      Src: /src/openvpn/src/openvpn/multi.c:3441,1
    - Dst: multi_set_pending
      Src: /src/openvpn/src/openvpn/multi.c:3445,1
    - Dst: multi_process_float
      Src: /src/openvpn/src/openvpn/multi.c:3482,1
    - Dst: IN6_IS_ADDR_LINKLOCAL
      Src: /src/openvpn/src/openvpn/multi.c:3508,1
    - Dst: multi_get_instance_by_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:3531,1
    - Dst: mroute_extract_addr_from_packet
      Src: /src/openvpn/src/openvpn/multi.c:3563,1
    - Dst: multi_unicast
      Src: /src/openvpn/src/openvpn/multi.c:3587,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3588,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3596,1
    - Dst: multi_get_create_instance_udp
      Src: /src/openvpn/src/openvpn/multi.c:3441,1
    - Dst: process_incoming_link_part2
      Src: /src/openvpn/src/openvpn/multi.c:3485,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3514,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:3515,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:3489,1
    - Dst: register_activity
      Src: /src/openvpn/src/openvpn/multi.c:3538,1
    - Dst: vlan_is_tagged
      Src: /src/openvpn/src/openvpn/multi.c:3551,1
    - Dst: multi_learn_addr
      Src: /src/openvpn/src/openvpn/multi.c:3571,1
    - Dst: multi_bcast
      Src: /src/openvpn/src/openvpn/multi.c:3578,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.c:3609,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:3614,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.c:3439,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3467,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/multi.c:3474,1
    - Dst: process_incoming_link_part1
      Src: /src/openvpn/src/openvpn/multi.c:3477,1
    - Dst: multi_get_instance_by_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:3504,1
    - Dst: mroute_extract_addr_from_packet
      Src: /src/openvpn/src/openvpn/multi.c:3492,1
    - Dst: multi_unicast
      Src: /src/openvpn/src/openvpn/multi.c:3537,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3538,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3554,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3611,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3439,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3450,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/multi.c:3487,1
    - Dst: multi_bcast
      Src: /src/openvpn/src/openvpn/multi.c:3526,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3530,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:3545,1
    - Dst: multi_get_instance_by_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:3582,1
    - Dst: register_activity
      Src: /src/openvpn/src/openvpn/multi.c:3588,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:3597,1
    CyclomaticComplexity: 41
    EdgeCount: 41
    ICount: 111
    argCount: 4
    argNames:
    - m
    - instance
    - mpp_flags
    - sock
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - unsigned int
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 3616
      start: 3418
    functionDepth: 0
    functionLinenumber: 3418
    functionLinenumberEnd: 3616
    functionName: multi_process_incoming_link
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - msg
    - BLEN
    - mroute_addr_print
    - multi_process_post
    - process_incoming_link_part1
    - process_incoming_link_part2
    - perf_pop
    - gc_new
    - set_prefix
    - gc_free
    - multi_learn_addr
    - mroute_extract_addr_from_packet
    - clear_prefix
    - multi_get_create_instance_udp
    - IN6_IS_ADDR_LINKLOCAL
    - perf_push
    - multi_set_pending
    - multi_unicast
    - multi_process_float
    - multi_bcast
    - ASSERT
    - register_activity
    - multi_get_instance_by_virtual_addr
    - vlan_is_tagged
    - printf
    linkageType: ''
    returnType: bool
    signature: 'bool multi_process_incoming_link(struct multi_context *m, struct multi_instance
      *instance, const unsigned int mpp_flags, struct link_socket *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:3807,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3808,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:3810,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:3811,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 3812
      start: 3804
    functionDepth: 0
    functionLinenumber: 3804
    functionLinenumberEnd: 3812
    functionName: route_quota_exceeded
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_instance_string
    - msg
    - gc_free
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void route_quota_exceeded(const struct multi_instance *mi) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: multi_client_disconnect_setenv
      Src: /src/openvpn/src/openvpn/multi.c:578,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:584,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/multi.c:580,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/multi.c:590,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/multi.c:582,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/multi.c:591,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/multi.c:592,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/multi.c:593,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/multi.c:594,1
    - Dst: management_notify_client_close
      Src: /src/openvpn/src/openvpn/multi.c:599,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 602
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 602
    functionName: multi_client_disconnect_script
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - openvpn_run_script
    - argv_parse_cmd
    - msg
    - plugin_call
    - argv_free
    - multi_client_disconnect_setenv
    - management_notify_client_close
    - setenv_str
    - argv_new
    - plugin_defined
    linkageType: ''
    returnType: void
    signature: 'static void multi_client_disconnect_script(struct multi_context *m,
      struct multi_instance *mi) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1829,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/multi.c:1820,1
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/multi.c:1869,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1916,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1923,1
    - Dst: ncp_expanded_ciphers
      Src: /src/openvpn/src/openvpn/multi.c:1918,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/multi.c:1939,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/multi.c:1847,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1871,1
    - Dst: ncp_expanded_ciphers
      Src: /src/openvpn/src/openvpn/multi.c:1912,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/src/openvpn/multi.c:1904,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1943,1
    - Dst: extract_iv_proto
      Src: /src/openvpn/src/openvpn/multi.c:1810,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/multi.c:1816,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1845,1
    - Dst: ncp_get_best_cipher
      Src: /src/openvpn/src/openvpn/multi.c:1882,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/multi.c:1908,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/multi.c:1889,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1901,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1910,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1927,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1818,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1933,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 63
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1945
      start: 1802
    functionDepth: 0
    functionLinenumber: 1802
    functionLinenumberEnd: 1945
    functionName: multi_client_set_protocol_options
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ncp_get_best_cipher
    - msg
    - extract_iv_proto
    - dco_enabled
    - get_primary_key
    - gc_new
    - auth_set_client_reason
    - cipher_kt_mode_aead
    - ncp_expanded_ciphers
    - gc_free
    - strlen
    - tls_peer_ncp_list
    linkageType: ''
    returnType: bool
    signature: 'static bool multi_client_set_protocol_options(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3787,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3789,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/multi.c:3794,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3791,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.c:3796,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3797,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - m
    - mpp_flags
    argTypes:
    - struct multi_context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3798
      start: 3782
    functionDepth: 0
    functionLinenumber: 3782
    functionLinenumberEnd: 3798
    functionName: multi_process_drop_outgoing_tun
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_process_post
    - msg
    - set_prefix
    - ASSERT
    - clear_prefix
    - buf_reset
    linkageType: ''
    returnType: void
    signature: 'void multi_process_drop_outgoing_tun(struct multi_context *m, const
      unsigned int mpp_flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:498,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:509,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:499,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:508,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/multi.c:502,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 510
      start: 495
    functionDepth: 0
    functionLinenumber: 495
    functionLinenumberEnd: 510
    functionName: generate_prefix
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - set_prefix
    - gc_new
    - multi_instance_string
    - strncpynt
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void generate_prefix(struct multi_instance *mi) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: mroute_addr_equal
      Src: /src/openvpn/src/openvpn/multi.c:1170,1
    - Dst: multi_route_defined
      Src: /src/openvpn/src/openvpn/multi.c:1178,1
    - Dst: mroute_addr_mask_host_bits
      Src: /src/openvpn/src/openvpn/multi.c:1196,1
    - Dst: hash_lookup
      Src: /src/openvpn/src/openvpn/multi.c:1175,1
    - Dst: hash_lookup
      Src: /src/openvpn/src/openvpn/multi.c:1199,1
    - Dst: multi_route_defined
      Src: /src/openvpn/src/openvpn/multi.c:1201,1
    - Dst: multi_learn_addr
      Src: /src/openvpn/src/openvpn/multi.c:1205,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/multi.c:1213,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1215,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:1216,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:1219,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1229,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:1233,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:1221,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:1222,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:1226,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 40
    argCount: 3
    argNames:
    - m
    - addr
    - cidr_routing
    argTypes:
    - struct multi_context*
    - struct mroute_addr*
    - bool
    constantsTouched: []
    func_position:
      end: 1235
      start: 1161
    functionDepth: 0
    functionLinenumber: 1161
    functionLinenumberEnd: 1235
    functionName: multi_get_instance_by_virtual_addr
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - hash_lookup
    - check_debug_level
    - dmsg
    - mroute_addr_mask_host_bits
    - gc_new
    - multi_instance_string
    - mroute_addr_equal
    - gc_free
    - ASSERT
    - multi_learn_addr
    - mroute_addr_print
    - multi_route_defined
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static struct multi_instance *multi_get_instance_by_virtual_addr(struct
      multi_context *m, const struct mroute_addr *addr, bool cidr_routing) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2695,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/multi.c:2703,1
    - Dst: strdup
      Src: /src/openvpn/src/openvpn/multi.c:2712,1
    - Dst: set_common_name
      Src: /src/openvpn/src/openvpn/multi.c:2718,1
    - Dst: ssl_verify_username_length
      Src: /src/openvpn/src/openvpn/multi.c:2706,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.c:2719,1
    - Dst: tls_lock_common_name
      Src: /src/openvpn/src/openvpn/multi.c:2721,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:2728,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/multi.c:2729,1
    - Dst: generate_auth_token
      Src: /src/openvpn/src/openvpn/multi.c:2732,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2735,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 26
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2741
      start: 2686
    functionDepth: 0
    functionLinenumber: 2686
    functionLinenumberEnd: 2741
    functionName: override_locked_username
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - tls_lock_common_name
    - msg
    - strdup
    - ssl_verify_username_length
    - generate_auth_token
    - strcmp
    - strncpynt
    - CLEAR
    - free
    - set_common_name
    linkageType: ''
    returnType: bool
    signature: 'static bool override_locked_username(struct multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:516,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 517
      start: 512
    functionDepth: 0
    functionLinenumber: 512
    functionLinenumberEnd: 517
    functionName: ungenerate_prefix
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - set_prefix
    linkageType: ''
    returnType: void
    signature: 'void ungenerate_prefix(struct multi_instance *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: inotify_add_watch
      Src: /src/openvpn/src/openvpn/multi.c:3087,1
    - Dst: hash_add
      Src: /src/openvpn/src/openvpn/multi.c:3096,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3102,1
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:3093,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 4
    argNames:
    - m
    - mi
    - inotify_fd
    - file
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 3104
      start: 3082
    functionDepth: 0
    functionLinenumber: 3082
    functionLinenumberEnd: 3104
    functionName: add_inotify_file_watch
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - hash_add
    - inotify_add_watch
    - hash_remove
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void add_inotify_file_watch(struct multi_context *m, struct
      multi_instance *mi, int inotify_fd, const char *file) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:875,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:923,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:1036,1
    - Dst: multi_route_defined
      Src: /src/openvpn/src/openvpn/multi.c:989,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:1028,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:984,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1055,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:945,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:874,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:892,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:999,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:1012,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:877,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/multi.c:890,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:917,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/multi.c:1003,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:1021,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:981,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/multi.c:875,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:886,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:1035,1
    - Dst: hash_n_elements
      Src: /src/openvpn/src/openvpn/multi.c:1055,1
    - Dst: status_reset
      Src: /src/openvpn/src/openvpn/multi.c:859,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:894,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:898,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1006,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:1000,1
    - Dst: mbuf_maximum_queued
      Src: /src/openvpn/src/openvpn/multi.c:1013,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:1002,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:1001,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:1016,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:941,1
    - Dst: tls_username
      Src: /src/openvpn/src/openvpn/multi.c:968,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1042,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:1027,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:932,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:961,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:983,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:876,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:914,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:915,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:953,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:948,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:942,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:962,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:925,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:928,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:1008,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1049,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/multi.c:1016,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/multi.c:861,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:946,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:960,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:897,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:918,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:977,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:1044,1
    - Dst: status_flush
      Src: /src/openvpn/src/openvpn/multi.c:1048,1
    - Dst: dco_get_peer_stats_multi
      Src: /src/openvpn/src/openvpn/multi.c:863,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:901,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/multi.c:919,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:921,1
    - Dst: translate_cipher_name_to_openvpn
      Src: /src/openvpn/src/openvpn/multi.c:975,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:963,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/multi.c:966,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:855,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:880,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:896,1
    - Dst: mbuf_maximum_queued
      Src: /src/openvpn/src/openvpn/multi.c:929,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:943,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:1017,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:885,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:899,1
    - Dst: multi_route_defined
      Src: /src/openvpn/src/openvpn/multi.c:904,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/multi.c:942,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:986,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/multi.c:1026,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1030,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:878,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:887,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:979,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 130
    argCount: 3
    argNames:
    - m
    - so
    - version
    argTypes:
    - struct multi_context*
    - struct status_output*
    - int
    constantsTouched: []
    func_position:
      end: 1058
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 1058
    functionName: multi_print_status
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - hash_iterator_next
    - mroute_addr_print
    - hash_iterator_init
    - status_flush
    - status_reset
    - gc_new
    - print_in6_addr
    - gc_free
    - mbuf_maximum_queued
    - multi_route_defined
    - dco_get_peer_stats_multi
    - print_in_addr_t
    - tls_username
    - translate_cipher_name_to_openvpn
    - time_string
    - dco_enabled
    - tls_common_name
    - status_printf
    - hash_iterator_free
    - hash_n_elements
    linkageType: ''
    returnType: void
    signature: 'void multi_print_status(struct multi_context *m, struct status_output
      *so, const int version) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: hash_value
      Src: /src/openvpn/src/openvpn/multi.c:1075,1
    - Dst: multi_route_defined
      Src: /src/openvpn/src/openvpn/multi.c:1087,1
    - Dst: route_quota_inc
      Src: /src/openvpn/src/openvpn/multi.c:1119,1
    - Dst: route_quota_inc
      Src: /src/openvpn/src/openvpn/multi.c:1136,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:1146,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1079,1
    - Dst: mroute_addr_equal
      Src: /src/openvpn/src/openvpn/multi.c:1094,1
    - Dst: route_quota_test
      Src: /src/openvpn/src/openvpn/multi.c:1114,1
    - Dst: multi_route_del
      Src: /src/openvpn/src/openvpn/multi.c:1122,1
    - Dst: route_quota_test
      Src: /src/openvpn/src/openvpn/multi.c:1131,1
    - Dst: hash_add_fast
      Src: /src/openvpn/src/openvpn/multi.c:1139,1
    - Dst: learn_address_script
      Src: /src/openvpn/src/openvpn/multi.c:1131,1
    - Dst: hash_bucket
      Src: /src/openvpn/src/openvpn/multi.c:1076,1
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/multi.c:1099,1
    - Dst: hash_lookup_fast
      Src: /src/openvpn/src/openvpn/multi.c:1082,1
    - Dst: mroute_learnable_address
      Src: /src/openvpn/src/openvpn/multi.c:1093,1
    - Dst: learn_address_script
      Src: /src/openvpn/src/openvpn/multi.c:1114,1
    - Dst: multi_instance_inc_refcount
      Src: /src/openvpn/src/openvpn/multi.c:1118,1
    - Dst: multi_instance_inc_refcount
      Src: /src/openvpn/src/openvpn/multi.c:1135,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1143,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:1145,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.c:1150,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1153,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 59
    argCount: 4
    argNames:
    - m
    - mi
    - addr
    - flags
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct mroute_addr*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1156
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1156
    functionName: multi_learn_addr
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - hash_value
    - msg
    - mroute_addr_equal
    - free
    - mroute_addr_print
    - learn_address_script
    - mroute_learnable_address
    - gc_new
    - ALLOC_OBJ
    - route_quota_test
    - multi_route_del
    - multi_instance_string
    - gc_free
    - multi_instance_inc_refcount
    - multi_route_defined
    - hash_add_fast
    - route_quota_inc
    - hash_bucket
    - hash_lookup_fast
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static struct multi_instance *multi_learn_addr(struct multi_context
      *m, struct multi_instance *mi, const struct mroute_addr *addr, const unsigned
      int flags) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:769,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:835,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/multi.c:763,1
    - Dst: generate_prefix
      Src: /src/openvpn/src/openvpn/multi.c:778,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:791,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:806,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:841,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:767,1
    - Dst: generate_prefix
      Src: /src/openvpn/src/openvpn/multi.c:801,1
    - Dst: hash_n_elements
      Src: /src/openvpn/src/openvpn/multi.c:789,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:827,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/multi.c:834,1
    - Dst: multi_close_instance
      Src: /src/openvpn/src/openvpn/multi.c:839,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/multi.c:840,1
    - Dst: hash_add
      Src: /src/openvpn/src/openvpn/multi.c:804,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:760,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:765,1
    - Dst: multi_instance_inc_refcount
      Src: /src/openvpn/src/openvpn/multi.c:770,1
    - Dst: mroute_addr_init
      Src: /src/openvpn/src/openvpn/multi.c:773,1
    - Dst: inherit_context_child
      Src: /src/openvpn/src/openvpn/multi.c:781,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi.c:782,1
    - Dst: multi_tcp_instance_specific_init
      Src: /src/openvpn/src/openvpn/multi.c:797,1
    - Dst: hash_add
      Src: /src/openvpn/src/openvpn/multi.c:816,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.c:825,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:807,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 52
    argCount: 3
    argNames:
    - m
    - real
    - sock
    argTypes:
    - struct multi_context*
    - struct mroute_addr*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 843
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 843
    functionName: multi_create_instance
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - multi_process_post
    - mroute_addr_init
    - msg
    - perf_pop
    - gc_new
    - hash_n_elements
    - gc_free
    - multi_tcp_instance_specific_init
    - multi_instance_inc_refcount
    - mroute_addr_print
    - inherit_context_child
    - ALLOC_OBJ_CLEAR
    - generate_prefix
    - multi_close_instance
    - hash_add
    - perf_push
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'struct multi_instance *multi_create_instance(struct multi_context
      *m, const struct mroute_addr *real, struct link_socket *sock) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:2088,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/multi.c:2102,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:2099,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/multi.c:2096,1
    - Dst: ccs_delete_config_file
      Src: /src/openvpn/src/openvpn/multi.c:2093,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/multi.c:2104,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:2107,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 13
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2109
      start: 2084
    functionDepth: 0
    functionLinenumber: 2084
    functionLinenumberEnd: 2109
    functionName: ccs_gen_config_file
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ccs_delete_config_file
    - gc_new
    - setenv_str
    - gc_free
    - platform_create_temp_file
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'static bool ccs_gen_config_file(struct multi_instance *mi) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi.c:3119,1
    - Dst: ANY_OUT
      Src: /src/openvpn/src/openvpn/multi.c:3119,1
    - Dst: add_inotify_file_watch
      Src: /src/openvpn/src/openvpn/multi.c:3144,1
    - Dst: add_inotify_file_watch
      Src: /src/openvpn/src/openvpn/multi.c:3150,1
    - Dst: pre_select
      Src: /src/openvpn/src/openvpn/multi.c:3133,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi.c:3155,1
    - Dst: is_cas_pending
      Src: /src/openvpn/src/openvpn/multi.c:3160,1
    - Dst: multi_connection_established
      Src: /src/openvpn/src/openvpn/multi.c:3162,1
    - Dst: is_cas_pending
      Src: /src/openvpn/src/openvpn/multi.c:3165,1
    - Dst: add_inotify_file_watch
      Src: /src/openvpn/src/openvpn/multi.c:3168,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi.c:3178,1
    - Dst: ANY_OUT
      Src: /src/openvpn/src/openvpn/multi.c:3189,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.c:3192,1
    - Dst: multi_close_instance_on_signal
      Src: /src/openvpn/src/openvpn/multi.c:3182,1
    - Dst: multi_set_pending
      Src: /src/openvpn/src/openvpn/multi.c:3189,1
    - Dst: multi_schedule_context_wakeup
      Src: /src/openvpn/src/openvpn/multi.c:3174,1
    - Dst: id
      Src: /src/openvpn/src/openvpn/multi.c:3193,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 56
    argCount: 3
    argNames:
    - m
    - mi
    - flags
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3209
      start: 3114
    functionDepth: 0
    functionLinenumber: 3114
    functionLinenumberEnd: 3209
    functionName: multi_process_post
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - multi_close_instance_on_signal
    - multi_connection_established
    - multi_schedule_context_wakeup
    - printf
    - pre_select
    - id
    - is_cas_pending
    - ANY_OUT
    - add_inotify_file_watch
    - multi_set_pending
    linkageType: ''
    returnType: bool
    signature: 'bool multi_process_post(struct multi_context *m, struct multi_instance
      *mi, const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constrain_int
      Src: /src/openvpn/src/openvpn/multi.c:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - n_buckets
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 251
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 251
    functionName: reap_buckets_per_pass
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - constrain_int
    linkageType: ''
    returnType: int
    signature: 'static int reap_buckets_per_pass(int n_buckets) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dco_delete_iroutes
      Src: /src/openvpn/src/openvpn/multi.c:531,1
    - Dst: mroute_helper_del_iroute46
      Src: /src/openvpn/src/openvpn/multi.c:537,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:533,1
    - Dst: mroute_helper_del_iroute46
      Src: /src/openvpn/src/openvpn/multi.c:542,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 545
      start: 524
    functionDepth: 0
    functionLinenumber: 524
    functionLinenumberEnd: 545
    functionName: multi_del_iroutes
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - mroute_helper_del_iroute46
    - dco_delete_iroutes
    linkageType: ''
    returnType: void
    signature: 'static void multi_del_iroutes(struct multi_context *m, struct multi_instance
      *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1329,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:1332,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1339,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:1340,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:1342,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1346,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:1347,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:1348,1
    - Dst: mroute_helper_add_iroute46
      Src: /src/openvpn/src/openvpn/multi.c:1351,1
    - Dst: multi_learn_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:1353,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1367,1
    - Dst: mroute_helper_add_iroute46
      Src: /src/openvpn/src/openvpn/multi.c:1362,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:1358,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1357,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:1360,1
    - Dst: multi_learn_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:1364,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 31
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 1368
      start: 1325
    functionDepth: 0
    functionLinenumber: 1325
    functionLinenumberEnd: 1368
    functionName: multi_add_iroutes
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - mroute_helper_add_iroute46
    - msg
    - print_in_addr_t
    - multi_learn_in6_addr
    - gc_new
    - multi_instance_string
    - print_in6_addr
    - gc_free
    - multi_learn_in_addr_t
    linkageType: ''
    returnType: void
    signature: 'static void multi_add_iroutes(struct multi_context *m, struct multi_instance
      *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/multi.c:550,1
    - Dst: setenv_counter
      Src: /src/openvpn/src/openvpn/multi.c:559,1
    - Dst: setenv_counter
      Src: /src/openvpn/src/openvpn/multi.c:558,1
    - Dst: dco_get_peer_stats_multi
      Src: /src/openvpn/src/openvpn/multi.c:552,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - m
    - c
    argTypes:
    - struct multi_context*
    - struct context*
    constantsTouched: []
    func_position:
      end: 560
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 560
    functionName: setenv_stats
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - dco_get_peer_stats_multi
    - dco_enabled
    - setenv_counter
    linkageType: ''
    returnType: void
    signature: 'static void setenv_stats(struct multi_context *m, struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.c:241,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - mr
    argTypes:
    - struct multi_reap*
    constantsTouched: []
    func_position:
      end: 242
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 242
    functionName: multi_reap_free
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void multi_reap_free(struct multi_reap *mr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: multi_reap_all
      Src: /src/openvpn/src/openvpn/multi.c:725,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/multi.c:735,1
    - Dst: hash_free
      Src: /src/openvpn/src/openvpn/multi.c:738,1
    - Dst: hash_free
      Src: /src/openvpn/src/openvpn/multi.c:728,1
    - Dst: hash_free
      Src: /src/openvpn/src/openvpn/multi.c:729,1
    - Dst: hash_free
      Src: /src/openvpn/src/openvpn/multi.c:731,1
    - Dst: frequency_limit_free
      Src: /src/openvpn/src/openvpn/multi.c:745,1
    - Dst: multi_reap_free
      Src: /src/openvpn/src/openvpn/multi.c:747,1
    - Dst: mroute_helper_free
      Src: /src/openvpn/src/openvpn/multi.c:748,1
    - Dst: ifconfig_pool_free
      Src: /src/openvpn/src/openvpn/multi.c:744,1
    - Dst: multi_io_free
      Src: /src/openvpn/src/openvpn/multi.c:749,1
    - Dst: initial_rate_limit_free
      Src: /src/openvpn/src/openvpn/multi.c:746,1
    - Dst: mbuf_free
      Src: /src/openvpn/src/openvpn/multi.c:743,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:716,1
    - Dst: multi_close_instance
      Src: /src/openvpn/src/openvpn/multi.c:721,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:723,1
    - Dst: hash_free
      Src: /src/openvpn/src/openvpn/multi.c:727,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:717,1
    - Dst: schedule_free
      Src: /src/openvpn/src/openvpn/multi.c:742,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 26
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 751
      start: 708
    functionDepth: 0
    functionLinenumber: 708
    functionLinenumberEnd: 751
    functionName: multi_uninit
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_free
    - mbuf_free
    - hash_free
    - hash_iterator_next
    - multi_reap_free
    - multi_io_free
    - multi_reap_all
    - hash_iterator_free
    - initial_rate_limit_free
    - free
    - schedule_free
    - frequency_limit_free
    - hash_iterator_init
    - multi_close_instance
    - mroute_helper_free
    linkageType: ''
    returnType: void
    signature: 'void multi_uninit(struct multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - key
    - iv
    argTypes:
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 260
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 260
    functionName: cid_hash_function
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static uint32_t cid_hash_function(const void *key, uint32_t iv) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:636,1
    - Dst: set_cc_config
      Src: /src/openvpn/src/openvpn/multi.c:681,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:645,1
    - Dst: multi_client_disconnect_script
      Src: /src/openvpn/src/openvpn/multi.c:686,1
    - Dst: ungenerate_prefix
      Src: /src/openvpn/src/openvpn/multi.c:693,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/multi.c:613,1
    - Dst: multi_set_pending
      Src: /src/openvpn/src/openvpn/multi.c:625,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:640,1
    - Dst: ifconfig_pool_release
      Src: /src/openvpn/src/openvpn/multi.c:664,1
    - Dst: multi_tcp_dereference_instance
      Src: /src/openvpn/src/openvpn/multi.c:674,1
    - Dst: mbuf_dereference_instance
      Src: /src/openvpn/src/openvpn/multi.c:677,1
    - Dst: multi_tcp_instance_specific_free
      Src: /src/openvpn/src/openvpn/multi.c:691,1
    - Dst: multi_instance_dec_refcount
      Src: /src/openvpn/src/openvpn/multi.c:700,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/multi.c:702,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/multi.c:609,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:611,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:636,1
    - Dst: multi_del_iroutes
      Src: /src/openvpn/src/openvpn/multi.c:668,1
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:645,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:615,1
    - Dst: update_mstat_n_clients
      Src: /src/openvpn/src/openvpn/multi.c:619,1
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:640,1
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:652,1
    - Dst: schedule_remove_entry
      Src: /src/openvpn/src/openvpn/multi.c:662,1
    - Dst: close_context
      Src: /src/openvpn/src/openvpn/multi.c:689,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 52
    argCount: 3
    argNames:
    - m
    - mi
    - shutdown
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - bool
    constantsTouched: []
    func_position:
      end: 703
      start: 604
    functionDepth: 0
    functionLinenumber: 604
    functionLinenumberEnd: 703
    functionName: multi_close_instance
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_instance_dec_refcount
    - dmsg
    - schedule_remove_entry
    - multi_tcp_instance_specific_free
    - multi_client_disconnect_script
    - proto_is_dgram
    - update_mstat_n_clients
    - perf_pop
    - hash_remove
    - ungenerate_prefix
    - multi_tcp_dereference_instance
    - mbuf_dereference_instance
    - multi_set_pending
    - perf_push
    - ifconfig_pool_release
    - close_context
    - ASSERT
    - multi_del_iroutes
    - set_cc_config
    linkageType: ''
    returnType: void
    signature: 'void multi_close_instance(struct multi_context *m, struct multi_instance
      *mi, bool shutdown) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: multi_print_status
      Src: /src/openvpn/src/openvpn/multi.c:3984,1
    - Dst: multi_print_status
      Src: /src/openvpn/src/openvpn/multi.c:3988,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 3
    argNames:
    - arg
    - version
    - so
    argTypes:
    - void*
    - int
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 3990
      start: 3977
    functionDepth: 0
    functionLinenumber: 3977
    functionLinenumberEnd: 3990
    functionName: management_callback_status
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_print_status
    linkageType: ''
    returnType: void
    signature: 'static void management_callback_status(void *arg, const int version,
      struct status_output *so) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:4036,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/multi.c:4039,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:4043,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/multi.c:4038,1
    - Dst: mroute_extract_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/multi.c:4040,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:4044,1
    - Dst: mroute_addr_equal
      Src: /src/openvpn/src/openvpn/multi.c:4047,1
    - Dst: multi_signal_instance
      Src: /src/openvpn/src/openvpn/multi.c:4049,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:4053,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 20
    argCount: 4
    argNames:
    - arg
    - addr
    - port
    - proto
    argTypes:
    - void*
    - in_addr_t
    - int
    - int
    constantsTouched: []
    func_position:
      end: 4056
      start: 4025
    functionDepth: 0
    functionLinenumber: 4025
    functionLinenumberEnd: 4056
    functionName: management_callback_kill_by_addr
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - hash_iterator_next
    - mroute_addr_equal
    - CLEAR
    - hash_iterator_free
    - mroute_extract_openvpn_sockaddr
    - hash_iterator_init
    - htonl
    - multi_signal_instance
    - htons
    linkageType: ''
    returnType: int
    signature: 'static int management_callback_kill_by_addr(void *arg, const in_addr_t
      addr, const int port, const int proto) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: lookup_by_cid
      Src: /src/openvpn/src/openvpn/multi.c:4107,1
    - Dst: multi_schedule_context_wakeup
      Src: /src/openvpn/src/openvpn/multi.c:4131,1
    - Dst: reschedule_multi_process
      Src: /src/openvpn/src/openvpn/multi.c:4130,1
    - Dst: send_auth_pending_messages
      Src: /src/openvpn/src/openvpn/multi.c:4128,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 13
    argCount: 5
    argNames:
    - arg
    - cid
    - mda_key_id
    - extra
    - timeout
    argTypes:
    - void*
    - unsigned long
    - unsigned int
    - char*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4135
      start: 4099
    functionDepth: 0
    functionLinenumber: 4099
    functionLinenumberEnd: 4135
    functionName: management_client_pending_auth
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - lookup_by_cid
    - send_auth_pending_messages
    - multi_schedule_context_wakeup
    - reschedule_multi_process
    linkageType: ''
    returnType: bool
    signature: 'static bool management_client_pending_auth(void *arg, const unsigned
      long cid, const unsigned int mda_key_id, const char *extra, unsigned int timeout) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 268
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 268
    functionName: cid_compare_function
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool cid_compare_function(const void *key1, const void *key2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 3997
      start: 3992
    functionDepth: 0
    functionLinenumber: 3992
    functionLinenumberEnd: 3997
    functionName: management_callback_n_clients
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int management_callback_n_clients(void *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: multi_tcp_delete_event
      Src: /src/openvpn/src/openvpn/multi.c:4064,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 2
    argNames:
    - arg
    - event
    argTypes:
    - void*
    - event_t
    constantsTouched: []
    func_position:
      end: 4066
      start: 4058
    functionDepth: 0
    functionLinenumber: 4058
    functionLinenumberEnd: 4066
    functionName: management_delete_event
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_tcp_delete_event
    linkageType: ''
    returnType: void
    signature: 'static void management_delete_event(void *arg, event_t event) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: lookup_by_cid
      Src: /src/openvpn/src/openvpn/multi.c:4148,1
    - Dst: set_cc_config
      Src: /src/openvpn/src/openvpn/multi.c:4161,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/multi.c:4167,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:4167,1
    - Dst: tls_authenticate_key
      Src: /src/openvpn/src/openvpn/multi.c:4154,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/multi.c:4173,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 17
    argCount: 7
    argNames:
    - arg
    - cid
    - mda_key_id
    - auth
    - reason
    - client_reason
    - cc_config
    argTypes:
    - void*
    - unsigned long
    - unsigned int
    - bool
    - char*
    - char*
    - struct buffer_list*
    constantsTouched: []
    func_position:
      end: 4176
      start: 4138
    functionDepth: 0
    functionLinenumber: 4138
    functionLinenumberEnd: 4176
    functionName: management_client_auth
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - msg
    - lookup_by_cid
    - tls_authenticate_key
    - np
    - set_cc_config
    linkageType: ''
    returnType: bool
    signature: 'static bool management_client_auth(void *arg, const unsigned long
      cid, const unsigned int mda_key_id, const bool auth, const char *reason, const
      char *client_reason, struct buffer_list *cc_config) /* ownership transferred
      */ '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: multi_client_connect_early_setup
      Src: /src/openvpn/src/openvpn/multi.c:2780,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2828,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2837,1
    - Dst: override_locked_username
      Src: /src/openvpn/src/openvpn/multi.c:2847,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/multi.c:2854,1
    - Dst: dco_check_option
      Src: /src/openvpn/src/openvpn/multi.c:2855,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2857,1
    - Dst: check_compression_settings_valid
      Src: /src/openvpn/src/openvpn/multi.c:2861,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2863,1
    - Dst: multi_client_connect_late_setup
      Src: /src/openvpn/src/openvpn/multi.c:2869,1
    - Dst: multi_client_disconnect_script
      Src: /src/openvpn/src/openvpn/multi.c:2877,1
    - Dst: update_mstat_n_clients
      Src: /src/openvpn/src/openvpn/multi.c:2885,1
    - Dst: management_connection_established
      Src: /src/openvpn/src/openvpn/multi.c:2891,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 48
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2895
      start: 2761
    functionDepth: 0
    functionLinenumber: 2761
    functionLinenumberEnd: 2895
    functionName: multi_connection_established
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - dco_check_option
    - update_mstat_n_clients
    - multi_client_connect_late_setup
    - msg
    - dco_enabled
    - check_compression_settings_valid
    - multi_client_connect_early_setup
    - management_connection_established
    - multi_client_disconnect_script
    - ASSERT
    - override_locked_username
    linkageType: ''
    returnType: void
    signature: 'static void multi_connection_established(struct multi_context *m,
      struct multi_instance *mi) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3239,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:3240,1
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:3259,1
    - Dst: hash_add
      Src: /src/openvpn/src/openvpn/multi.c:3278,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:3217,1
    - Dst: hash_value
      Src: /src/openvpn/src/openvpn/multi.c:3224,1
    - Dst: hash_lookup_fast
      Src: /src/openvpn/src/openvpn/multi.c:3228,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:3253,1
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:3258,1
    - Dst: generate_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3263,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3274,1
    - Dst: hash_add
      Src: /src/openvpn/src/openvpn/multi.c:3275,1
    - Dst: hash_bucket
      Src: /src/openvpn/src/openvpn/multi.c:3225,1
    - Dst: cert_hash_compare
      Src: /src/openvpn/src/openvpn/multi.c:3237,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3259,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:3254,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3278,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:3282,1
    - Dst: mroute_extract_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/multi.c:3219,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3247,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:3247,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3251,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/multi.c:3255,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3258,1
    - Dst: multi_close_instance
      Src: /src/openvpn/src/openvpn/multi.c:3248,1
    - Dst: tls_update_remote_addr
      Src: /src/openvpn/src/openvpn/multi.c:3272,1
    - Dst: hash_add
      Src: /src/openvpn/src/openvpn/multi.c:3274,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3275,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 40
    argCount: 3
    argNames:
    - m
    - mi
    - sock
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 3283
      start: 3211
    functionDepth: 0
    functionLinenumber: 3211
    functionLinenumberEnd: 3283
    functionName: multi_process_float
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - tls_update_remote_addr
    - hash_bucket
    - hash_value
    - cert_hash_compare
    - hash_lookup_fast
    - msg
    - tls_common_name
    - gc_new
    - multi_instance_string
    - print_link_socket_actual
    - gc_free
    - hash_remove
    - ASSERT
    - mroute_extract_openvpn_sockaddr
    - mroute_addr_print
    - hash_add
    - generate_prefix
    - multi_close_instance
    linkageType: ''
    returnType: void
    signature: 'void multi_process_float(struct multi_context *m, struct multi_instance
      *mi, struct link_socket *sock) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/multi.c:2014,1
    - Dst: fgetc
      Src: /src/openvpn/src/openvpn/multi.c:2021,1
    - Dst: feof
      Src: /src/openvpn/src/openvpn/multi.c:2037,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/multi.c:2050,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2046,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 15
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2053
      start: 2010
    functionDepth: 0
    functionLinenumber: 2010
    functionLinenumberEnd: 2053
    functionName: ccs_test_deferred_ret_file
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - fgetc
    - msg
    - fclose
    - fopen
    - feof
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'static enum client_connect_return ccs_test_deferred_ret_file(struct
      multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1981,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/multi.c:1993,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/multi.c:1987,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1990,1
    - Dst: ccs_delete_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:1985,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/multi.c:1995,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1998,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2000
      start: 1977
    functionDepth: 0
    functionLinenumber: 1977
    functionLinenumberEnd: 2000
    functionName: ccs_gen_deferred_ret_file
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ccs_delete_deferred_ret_file
    - gc_new
    - setenv_str
    - gc_free
    - platform_create_temp_file
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'static bool ccs_gen_deferred_ret_file(struct multi_instance *mi) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: hash_init
      Src: /src/openvpn/src/openvpn/multi.c:317,1
    - Dst: mbuf_init
      Src: /src/openvpn/src/openvpn/multi.c:377,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:297,1
    - Dst: hash_init
      Src: /src/openvpn/src/openvpn/multi.c:326,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/multi.c:337,1
    - Dst: hash_init
      Src: /src/openvpn/src/openvpn/multi.c:353,1
    - Dst: reap_buckets_per_pass
      Src: /src/openvpn/src/openvpn/multi.c:423,1
    - Dst: calloc
      Src: /src/openvpn/src/openvpn/multi.c:437,1
    - Dst: multi_io_init
      Src: /src/openvpn/src/openvpn/multi.c:444,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:456,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/multi.c:458,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:429,1
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/multi.c:304,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:309,1
    - Dst: schedule_init
      Src: /src/openvpn/src/openvpn/multi.c:363,1
    - Dst: mroute_helper_init
      Src: /src/openvpn/src/openvpn/multi.c:418,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/multi.c:354,1
    - Dst: mroute_extract_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:430,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/multi.c:318,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/multi.c:327,1
    - Dst: hash_init
      Src: /src/openvpn/src/openvpn/multi.c:336,1
    - Dst: hash_init
      Src: /src/openvpn/src/openvpn/multi.c:342,1
    - Dst: initial_rate_limit_init
      Src: /src/openvpn/src/openvpn/multi.c:371,1
    - Dst: ifconfig_pool_read
      Src: /src/openvpn/src/openvpn/multi.c:411,1
    - Dst: frequency_limit_init
      Src: /src/openvpn/src/openvpn/multi.c:369,1
    - Dst: ifconfig_pool_init
      Src: /src/openvpn/src/openvpn/multi.c:399,1
    - Dst: multi_reap_new
      Src: /src/openvpn/src/openvpn/multi.c:423,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:428,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 60
    argCount: 2
    argNames:
    - m
    - t
    argTypes:
    - struct multi_context*
    - struct context*
    constantsTouched: []
    func_position:
      end: 462
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 462
    functionName: multi_init
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - get_random
    - msg
    - event_timeout_init
    - calloc
    - hash_init
    - dev_type_enum
    - frequency_limit_init
    - initial_rate_limit_init
    - ifconfig_pool_read
    - mbuf_init
    - multi_io_init
    - mroute_extract_in_addr_t
    - mroute_helper_init
    - CLEAR
    - multi_reap_new
    - schedule_init
    - ASSERT
    - reap_buckets_per_pass
    - ifconfig_pool_init
    linkageType: ''
    returnType: void
    signature: 'void multi_init(struct multi_context *m, struct context *t) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: multi_client_connect_script_deferred
      Src: /src/openvpn/src/openvpn/multi.c:2311,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:2322,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/multi.c:2321,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2314,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2313,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/multi.c:2324,1
    - Dst: ccs_gen_config_file
      Src: /src/openvpn/src/openvpn/multi.c:2326,1
    - Dst: ccs_gen_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2327,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/multi.c:2333,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/multi.c:2334,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/multi.c:2336,1
    - Dst: ccs_delete_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2357,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/multi.c:2359,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:2360,1
    - Dst: ccs_test_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2338,1
    - Dst: multi_client_connect_post
      Src: /src/openvpn/src/openvpn/multi.c:2344,1
    - Dst: ccs_delete_config_file
      Src: /src/openvpn/src/openvpn/multi.c:2356,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 35
    argCount: 4
    argNames:
    - m
    - mi
    - deferred
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - bool
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 2363
      start: 2303
    functionDepth: 0
    functionLinenumber: 2303
    functionLinenumberEnd: 2363
    functionName: multi_client_connect_call_script
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ccs_delete_config_file
    - ccs_delete_deferred_ret_file
    - openvpn_run_script
    - argv_parse_cmd
    - argv_free
    - multi_client_connect_post
    - gc_new
    - setenv_str
    - gc_free
    - ccs_gen_config_file
    - argv_new
    - ASSERT
    - ccs_test_deferred_ret_file
    - multi_client_connect_script_deferred
    - argv_printf_cat
    - ccs_gen_deferred_ret_file
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'static enum client_connect_return multi_client_connect_call_script(struct
      multi_context *m, struct multi_instance *mi, bool deferred, unsigned int *option_types_found) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - n_clients
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 91
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 91
    functionName: update_mstat_n_clients
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void update_mstat_n_clients(const int n_clients) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/multi.c:469,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/multi.c:476,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/multi.c:474,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:470,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:476,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/multi.c:478,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/multi.c:479,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/multi.c:481,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/multi.c:483,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 17
    argCount: 3
    argNames:
    - mi
    - 'null'
    - gc
    argTypes:
    - struct multi_instance*
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 493
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 493
    functionName: multi_instance_string
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - check_debug_level
    - BSTR
    - buf_printf
    - tls_common_name
    - dco_enabled
    - mroute_addr_print
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *multi_instance_string(const struct multi_instance *mi,
      bool null, struct gc_arena *gc) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:1379,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/multi.c:1393,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:1386,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:1387,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:1392,1
    - Dst: multi_close_instance
      Src: /src/openvpn/src/openvpn/multi.c:1396,1
    - Dst: hash_iterator_delete_element
      Src: /src/openvpn/src/openvpn/multi.c:1397,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:1402,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1406,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 23
    argCount: 2
    argNames:
    - m
    - new_mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 1410
      start: 1374
    functionDepth: 0
    functionLinenumber: 1374
    functionLinenumberEnd: 1410
    functionName: multi_delete_dup
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - hash_iterator_next
    - tls_common_name
    - hash_iterator_delete_element
    - strcmp
    - hash_iterator_free
    - hash_iterator_init
    - multi_close_instance
    linkageType: ''
    returnType: void
    signature: 'static void multi_delete_dup(struct multi_context *m, struct multi_instance
      *new_mi) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2265,1
    - Dst: ccs_test_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2270,1
    - Dst: multi_client_connect_post
      Src: /src/openvpn/src/openvpn/multi.c:2287,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2266,1
    - Dst: ccs_delete_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2286,1
    - Dst: ccs_delete_config_file
      Src: /src/openvpn/src/openvpn/multi.c:2289,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2293,1
    - Dst: ccs_delete_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2294,1
    - Dst: ccs_delete_config_file
      Src: /src/openvpn/src/openvpn/multi.c:2295,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 18
    argCount: 3
    argNames:
    - m
    - mi
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 2298
      start: 2260
    functionDepth: 0
    functionLinenumber: 2260
    functionLinenumberEnd: 2298
    functionName: multi_client_connect_script_deferred
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ccs_delete_config_file
    - ccs_delete_deferred_ret_file
    - msg
    - multi_client_connect_post
    - ASSERT
    - ccs_test_deferred_ret_file
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'static enum client_connect_return multi_client_connect_script_deferred(struct
      multi_context *m, struct multi_instance *mi, unsigned int *option_types_found) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GREMLIN_PACKET_FLOOD_LEVEL
      Src: /src/openvpn/src/openvpn/multi.c:3821,1
    - Dst: get_packet_flood_parms
      Src: /src/openvpn/src/openvpn/multi.c:3826,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:3824,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/multi.c:3825,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/multi.c:3825,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3829,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/multi.c:3829,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/multi.c:3830,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3832,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3838,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/multi.c:3838,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:3846,1
    - Dst: multi_bcast
      Src: /src/openvpn/src/openvpn/multi.c:3843,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/multi.c:3838,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 24
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 3848
      start: 3818
    functionDepth: 0
    functionLinenumber: 3818
    functionLinenumberEnd: 3848
    functionName: gremlin_flood_clients
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - get_random
    - buf_init
    - GREMLIN_PACKET_FLOOD_LEVEL
    - BUF_SIZE
    - msg
    - gc_new
    - get_packet_flood_parms
    - min_int
    - multi_bcast
    - ASSERT
    - gc_free
    - buf_write_u8
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void gremlin_flood_clients(struct multi_context *m) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/multi.c:2370,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/multi.c:2379,1
    - Dst: dco_multi_add_new_peer
      Src: /src/openvpn/src/openvpn/multi.c:2375,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2378,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:2379,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 3
    argNames:
    - m
    - mi
    - gc
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 2384
      start: 2365
    functionDepth: 0
    functionLinenumber: 2365
    functionLinenumberEnd: 2384
    functionName: multi_client_setup_dco_initial
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - dco_enabled
    - strerror
    - multi_instance_string
    - dco_multi_add_new_peer
    linkageType: ''
    returnType: bool
    signature: 'static bool multi_client_setup_dco_initial(struct multi_context *m,
      struct multi_instance *mi, struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2617,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:2626,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:2621,1
    - Dst: platform_gen_path
      Src: /src/openvpn/src/openvpn/multi.c:2630,1
    - Dst: platform_gen_path
      Src: /src/openvpn/src/openvpn/multi.c:2625,1
    - Dst: platform_test_file
      Src: /src/openvpn/src/openvpn/multi.c:2635,1
    - Dst: platform_test_file
      Src: /src/openvpn/src/openvpn/multi.c:2640,1
    - Dst: options_server_import
      Src: /src/openvpn/src/openvpn/multi.c:2647,1
    - Dst: multi_select_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:2657,1
    - Dst: multi_client_connect_setenv
      Src: /src/openvpn/src/openvpn/multi.c:2659,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:2663,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 21
    argCount: 4
    argNames:
    - m
    - mi
    - deferred
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - bool
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 2666
      start: 2609
    functionDepth: 0
    functionLinenumber: 2609
    functionLinenumberEnd: 2666
    functionName: multi_client_connect_source_ccd
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - platform_test_file
    - platform_gen_path
    - multi_client_connect_setenv
    - tls_common_name
    - gc_new
    - multi_select_virtual_addr
    - gc_free
    - ASSERT
    - options_server_import
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'static enum client_connect_return multi_client_connect_source_ccd(struct
      multi_context *m, struct multi_instance *mi, bool deferred, unsigned int *option_types_found) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: multi_reap_process
      Src: /src/openvpn/src/openvpn/multi.c:3866,1
    - Dst: multi_ifconfig_pool_persist
      Src: /src/openvpn/src/openvpn/multi.c:3878,1
    - Dst: status_trigger
      Src: /src/openvpn/src/openvpn/multi.c:3871,1
    - Dst: multi_print_status
      Src: /src/openvpn/src/openvpn/multi.c:3873,1
    - Dst: gremlin_flood_clients
      Src: /src/openvpn/src/openvpn/multi.c:3881,1
    - Dst: stale_route_check_trigger
      Src: /src/openvpn/src/openvpn/multi.c:3885,1
    - Dst: check_stale_routes
      Src: /src/openvpn/src/openvpn/multi.c:3887,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 3889
      start: 3862
    functionDepth: 0
    functionLinenumber: 3862
    functionLinenumberEnd: 3889
    functionName: multi_process_per_second_timers_dowork
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - stale_route_check_trigger
    - gremlin_flood_clients
    - check_stale_routes
    - multi_ifconfig_pool_persist
    - multi_print_status
    - status_trigger
    - multi_reap_process
    linkageType: ''
    returnType: void
    signature: 'void multi_process_per_second_timers_dowork(struct multi_context *m) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:4203,1
    - Dst: management_set_callback
      Src: /src/openvpn/src/openvpn/multi.c:4216,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 4219
      start: 4196
    functionDepth: 0
    functionLinenumber: 4196
    functionLinenumberEnd: 4219
    functionName: init_management_callback_multi
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - CLEAR
    - management_set_callback
    linkageType: ''
    returnType: void
    signature: 'void init_management_callback_multi(struct multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: inherit_context_top
      Src: /src/openvpn/src/openvpn/multi.c:3894,1
    - Dst: init_context_buffers
      Src: /src/openvpn/src/openvpn/multi.c:3895,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - m
    - top
    argTypes:
    - struct multi_context*
    - struct context*
    constantsTouched: []
    func_position:
      end: 3896
      start: 3891
    functionDepth: 0
    functionLinenumber: 3891
    functionLinenumberEnd: 3896
    functionName: multi_top_init
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - inherit_context_top
    - init_context_buffers
    linkageType: ''
    returnType: void
    signature: 'void multi_top_init(struct multi_context *m, struct context *top) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/multi.c:4256,1
    - Dst: MULTI_CHECK_SIG
      Src: /src/openvpn/src/openvpn/multi.c:4261,1
    - Dst: multi_process_per_second_timers
      Src: /src/openvpn/src/openvpn/multi.c:4264,1
    - Dst: multi_get_timeout
      Src: /src/openvpn/src/openvpn/multi.c:4259,1
    - Dst: multi_io_wait
      Src: /src/openvpn/src/openvpn/multi.c:4260,1
    - Dst: multi_io_process_io
      Src: /src/openvpn/src/openvpn/multi.c:4270,1
    - Dst: multi_io_action
      Src: /src/openvpn/src/openvpn/multi.c:4274,1
    - Dst: MULTI_CHECK_SIG
      Src: /src/openvpn/src/openvpn/multi.c:4277,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/multi.c:4278,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 16
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 4280
      start: 4249
    functionDepth: 0
    functionLinenumber: 4249
    functionLinenumberEnd: 4280
    functionName: tunnel_server_loop
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_process_per_second_timers
    - multi_io_process_io
    - MULTI_CHECK_SIG
    - perf_pop
    - multi_io_wait
    - multi_io_action
    - multi_get_timeout
    - perf_push
    linkageType: ''
    returnType: void
    signature: 'static void tunnel_server_loop(struct multi_context *multi) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:1604,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:1610,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:1606,1
    - Dst: TUNNEL_TOPOLOGY
      Src: /src/openvpn/src/openvpn/multi.c:1611,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:1605,1
    - Dst: setenv_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:1613,1
    - Dst: setenv_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:1620,1
    - Dst: setenv_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:1627,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:1634,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:1635,1
    - Dst: setenv_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:1640,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/multi.c:1648,1
    - Dst: setenv_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:1644,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/multi.c:1636,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 1652
      start: 1601
    functionDepth: 0
    functionLinenumber: 1601
    functionLinenumberEnd: 1652
    functionName: multi_set_virtual_addr_env
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - TUNNEL_TOPOLOGY
    - TUNNEL_TYPE
    - setenv_in_addr_t
    - setenv_in6_addr
    - setenv_del
    - setenv_int
    linkageType: ''
    returnType: void
    signature: 'static void multi_set_virtual_addr_env(struct multi_instance *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/multi.c:2587,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/multi.c:2596,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/multi.c:2589,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 12
    argCount: 4
    argNames:
    - m
    - mi
    - deferred
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - bool
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 2603
      start: 2575
    functionDepth: 0
    functionLinenumber: 2575
    functionLinenumberEnd: 2603
    functionName: multi_client_connect_compress_migrate
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - push_option
    - strstr
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'static enum client_connect_return multi_client_connect_compress_migrate(struct
      multi_context *m, struct multi_instance *mi, bool deferred, unsigned int *option_types_found) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:4225,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:4239,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 4240
      start: 4221
    functionDepth: 0
    functionLinenumber: 4221
    functionLinenumberEnd: 4240
    functionName: multi_assign_peer_id
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void multi_assign_peer_id(struct multi_context *m, struct multi_instance
      *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: multi_output_queue_ready
      Src: /src/openvpn/src/openvpn/multi.c:2960,1
    - Dst: mbuf_add_item
      Src: /src/openvpn/src/openvpn/multi.c:2965,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2969,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 3
    argNames:
    - m
    - mi
    - mb
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct mbuf_buffer*
    constantsTouched: []
    func_position:
      end: 2971
      start: 2955
    functionDepth: 0
    functionLinenumber: 2955
    functionLinenumberEnd: 2971
    functionName: multi_add_mbuf
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - multi_output_queue_ready
    - mbuf_add_item
    linkageType: ''
    returnType: void
    signature: 'void multi_add_mbuf(struct multi_context *m, struct multi_instance
      *mi, struct mbuf_buffer *mb) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:64,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - mi
    argTypes:
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 70
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 70
    functionName: id
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - tls_common_name
    linkageType: ''
    returnType: char*
    signature: 'static const char *id(struct multi_instance *mi) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1464,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:1503,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1492,1
    - Dst: ifconfig_pool_release
      Src: /src/openvpn/src/openvpn/multi.c:1476,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:1506,1
    - Dst: ifconfig_pool_acquire
      Src: /src/openvpn/src/openvpn/multi.c:1507,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:1510,1
    - Dst: TUNNEL_TOPOLOGY
      Src: /src/openvpn/src/openvpn/multi.c:1511,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1513,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:1515,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:1553,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1569,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:1518,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1551,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:1591,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1595,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:1590,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 72
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 1596
      start: 1461
    functionDepth: 0
    functionLinenumber: 1461
    functionLinenumberEnd: 1596
    functionName: multi_select_virtual_addr
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - TUNNEL_TOPOLOGY
    - TUNNEL_TYPE
    - msg
    - print_in_addr_t
    - ifconfig_pool_release
    - tls_common_name
    - gc_new
    - print_in6_addr
    - multi_instance_string
    - CLEAR
    - gc_free
    - ifconfig_pool_acquire
    linkageType: ''
    returnType: void
    signature: 'static void multi_select_virtual_addr(struct multi_context *m, struct
      multi_instance *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.c:3757,1
    - Dst: id
      Src: /src/openvpn/src/openvpn/multi.c:3757,1
    - Dst: schedule_remove_entry
      Src: /src/openvpn/src/openvpn/multi.c:3765,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3770,1
    - Dst: throw_signal
      Src: /src/openvpn/src/openvpn/multi.c:3766,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.c:3771,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3772,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - m
    - mpp_flags
    argTypes:
    - struct multi_context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3777
      start: 3751
    functionDepth: 0
    functionLinenumber: 3751
    functionLinenumberEnd: 3777
    functionName: multi_process_timeout
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_process_post
    - schedule_remove_entry
    - set_prefix
    - throw_signal
    - id
    - clear_prefix
    - printf
    linkageType: ''
    returnType: bool
    signature: 'bool multi_process_timeout(struct multi_context *m, const unsigned
      int mpp_flags) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2119,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/multi.c:2125,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2120,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/multi.c:2127,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2121,1
    - Dst: ccs_gen_config_file
      Src: /src/openvpn/src/openvpn/multi.c:2133,1
    - Dst: ccs_gen_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2134,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2144,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2145,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/multi.c:2148,1
    - Dst: ccs_delete_config_file
      Src: /src/openvpn/src/openvpn/multi.c:2198,1
    - Dst: ccs_delete_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2199,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/multi.c:2149,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2166,1
    - Dst: ccs_test_deferred_ret_file
      Src: /src/openvpn/src/openvpn/multi.c:2176,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/multi.c:2194,1
    - Dst: multi_client_connect_post
      Src: /src/openvpn/src/openvpn/multi.c:2190,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 49
    argCount: 4
    argNames:
    - m
    - mi
    - deferred
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - bool
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 2204
      start: 2111
    functionDepth: 0
    functionLinenumber: 2111
    functionLinenumberEnd: 2204
    functionName: multi_client_connect_call_plugin_v1
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ccs_delete_config_file
    - ccs_delete_deferred_ret_file
    - argv_printf
    - msg
    - plugin_call
    - multi_client_connect_post
    - argv_free
    - ccs_gen_config_file
    - argv_new
    - ASSERT
    - plugin_defined
    - ccs_test_deferred_ret_file
    - ccs_gen_deferred_ret_file
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'static enum client_connect_return multi_client_connect_call_plugin_v1(struct
      multi_context *m, struct multi_instance *mi, bool deferred, unsigned int *option_types_found) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hash_lookup
      Src: /src/openvpn/src/openvpn/multi.c:4073,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 6
    argCount: 2
    argNames:
    - m
    - cid
    argTypes:
    - struct multi_context*
    - unsigned long
    constantsTouched: []
    func_position:
      end: 4080
      start: 4068
    functionDepth: 0
    functionLinenumber: 4068
    functionLinenumberEnd: 4080
    functionName: lookup_by_cid
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - hash_lookup
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static struct multi_instance *lookup_by_cid(struct multi_context *m,
      const unsigned long cid) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2214,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/multi.c:2221,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2216,1
    - Dst: plugin_return_init
      Src: /src/openvpn/src/openvpn/multi.c:2225,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2215,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/multi.c:2227,1
    - Dst: multi_client_connect_post_plugin
      Src: /src/openvpn/src/openvpn/multi.c:2231,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/multi.c:2237,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2240,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2249,1
    - Dst: plugin_return_free
      Src: /src/openvpn/src/openvpn/multi.c:2254,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 24
    argCount: 4
    argNames:
    - m
    - mi
    - deferred
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - bool
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 2258
      start: 2206
    functionDepth: 0
    functionLinenumber: 2206
    functionLinenumberEnd: 2258
    functionName: multi_client_connect_call_plugin_v2
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - plugin_return_free
    - plugin_return_init
    - msg
    - plugin_call
    - multi_client_connect_post_plugin
    - ASSERT
    - plugin_defined
    linkageType: ''
    returnType: enum client_connect_return
    signature: 'static enum client_connect_return multi_client_connect_call_plugin_v2(struct
      multi_context *m, struct multi_instance *mi, bool deferred, unsigned int *option_types_found) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lookup_by_cid
      Src: /src/openvpn/src/openvpn/multi.c:4086,1
    - Dst: send_restart
      Src: /src/openvpn/src/openvpn/multi.c:4089,1
    - Dst: multi_schedule_context_wakeup
      Src: /src/openvpn/src/openvpn/multi.c:4090,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 6
    argCount: 3
    argNames:
    - arg
    - cid
    - kill_msg
    argTypes:
    - void*
    - unsigned long
    - char*
    constantsTouched: []
    func_position:
      end: 4097
      start: 4082
    functionDepth: 0
    functionLinenumber: 4082
    functionLinenumberEnd: 4097
    functionName: management_kill_by_cid
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - lookup_by_cid
    - multi_schedule_context_wakeup
    - send_restart
    linkageType: ''
    returnType: bool
    signature: 'static bool management_kill_by_cid(void *arg, const unsigned long
      cid, const char *kill_msg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/multi.c:77,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - mi
    - cc_config
    argTypes:
    - struct multi_instance*
    - struct buffer_list*
    constantsTouched: []
    func_position:
      end: 79
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 79
    functionName: set_cc_config
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    linkageType: ''
    returnType: void
    signature: 'static void set_cc_config(struct multi_instance *mi, struct buffer_list
      *cc_config) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: remap_signal
      Src: /src/openvpn/src/openvpn/multi.c:3292,1
    - Dst: multi_close_instance
      Src: /src/openvpn/src/openvpn/multi.c:3296,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3295,1
    - Dst: print_signal
      Src: /src/openvpn/src/openvpn/multi.c:3294,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3293,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 3297
      start: 3289
    functionDepth: 0
    functionLinenumber: 3289
    functionLinenumberEnd: 3297
    functionName: multi_close_instance_on_signal
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - set_prefix
    - multi_close_instance
    - remap_signal
    - clear_prefix
    - print_signal
    linkageType: ''
    returnType: void
    signature: 'void multi_close_instance_on_signal(struct multi_context *m, struct
      multi_instance *mi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: mbuf_extract_item
      Src: /src/openvpn/src/openvpn/multi.c:3721,1
    - Dst: encrypt_sign
      Src: /src/openvpn/src/openvpn/multi.c:3733,1
    - Dst: set_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3725,1
    - Dst: process_ip_header
      Src: /src/openvpn/src/openvpn/multi.c:3731,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/multi.c:3734,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:3736,1
    - Dst: clear_prefix
      Src: /src/openvpn/src/openvpn/multi.c:3738,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct mbuf_set*
    constantsTouched: []
    func_position:
      end: 3745
      start: 3716
    functionDepth: 0
    functionLinenumber: 3716
    functionLinenumberEnd: 3745
    functionName: multi_get_queue
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - dmsg
    - process_ip_header
    - set_prefix
    - mbuf_free_buf
    - mbuf_extract_item
    - encrypt_sign
    - clear_prefix
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'struct multi_instance *multi_get_queue(struct mbuf_set *ms) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:1250,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:1254,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/multi.c:1252,1
    - Dst: mroute_extract_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/multi.c:1254,1
    - Dst: multi_learn_addr
      Src: /src/openvpn/src/openvpn/multi.c:1262,1
    - Dst: management_learn_addr
      Src: /src/openvpn/src/openvpn/multi.c:1266,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:1274,1
    - Dst: dco_install_iroute
      Src: /src/openvpn/src/openvpn/multi.c:1275,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 21
    argCount: 5
    argNames:
    - m
    - mi
    - a
    - netbits
    - '/* -1 if host route, otherwise # of network bits in address */'
    - primary
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - in_addr_t
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 1279
      start: 1240
    functionDepth: 0
    functionLinenumber: 1240
    functionLinenumberEnd: 1279
    functionName: multi_learn_in_addr_t
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - CLEAR
    - ASSERT
    - mroute_extract_openvpn_sockaddr
    - multi_learn_addr
    - dco_install_iroute
    - htonl
    - management_learn_addr
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static struct multi_instance *multi_learn_in_addr_t(struct multi_context
      *m, struct multi_instance *mi, in_addr_t a, int netbits, /* -1 if host route,
      otherwise # of network bits in address */ bool primary) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - delta
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 3065
      start: 3045
    functionDepth: 0
    functionLinenumber: 3045
    functionLinenumberEnd: 3065
    functionName: compute_wakeup_sigma
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int compute_wakeup_sigma(const struct timeval
      *delta) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: mroute_addr_mask_host_bits
      Src: /src/openvpn/src/openvpn/multi.c:1299,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:1314,1
    - Dst: dco_install_iroute
      Src: /src/openvpn/src/openvpn/multi.c:1315,1
    - Dst: multi_learn_addr
      Src: /src/openvpn/src/openvpn/multi.c:1302,1
    - Dst: management_learn_addr
      Src: /src/openvpn/src/openvpn/multi.c:1306,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 19
    argCount: 5
    argNames:
    - m
    - mi
    - a6
    - netbits
    - '/* -1 if host route, otherwise # of network bits in address */'
    - primary
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct in6_addr
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 1319
      start: 1281
    functionDepth: 0
    functionLinenumber: 1281
    functionLinenumberEnd: 1319
    functionName: multi_learn_in6_addr
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - mroute_addr_mask_host_bits
    - ASSERT
    - multi_learn_addr
    - dco_install_iroute
    - management_learn_addr
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'static struct multi_instance *multi_learn_in6_addr(struct multi_context
      *m, struct multi_instance *mi, struct in6_addr a6, int netbits, /* -1 if host
      route, otherwise # of network bits in address */ bool primary) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3071,1
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/multi.c:3071,1
    - Dst: compute_wakeup_sigma
      Src: /src/openvpn/src/openvpn/multi.c:3078,1
    - Dst: schedule_add_entry
      Src: /src/openvpn/src/openvpn/multi.c:3075,1
    - Dst: tv_add
      Src: /src/openvpn/src/openvpn/multi.c:3072,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 3079
      start: 3067
    functionDepth: 0
    functionLinenumber: 3067
    functionLinenumberEnd: 3079
    functionName: multi_schedule_context_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - openvpn_gettimeofday
    - schedule_add_entry
    - compute_wakeup_sigma
    - tv_add
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void multi_schedule_context_wakeup(struct multi_context *m,
      struct multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/multi.c:3855,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/multi.c:3856,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 3857
      start: 3851
    functionDepth: 0
    functionLinenumber: 3851
    functionLinenumberEnd: 3857
    functionName: stale_route_check_trigger
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - CLEAR
    - event_timeout_trigger
    linkageType: ''
    returnType: bool
    signature: 'static bool stale_route_check_trigger(struct multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/multi.c:218,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - buckets_per_pass
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 223
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 223
    functionName: multi_reap_new
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ
    linkageType: ''
    returnType: struct multi_reap*
    signature: 'static struct multi_reap *multi_reap_new(int buckets_per_pass) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/multi.c:3954,1
    - Dst: has_udp_in_local_list
      Src: /src/openvpn/src/openvpn/multi.c:3961,1
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/multi.c:3958,1
    - Dst: multi_print_status
      Src: /src/openvpn/src/openvpn/multi.c:3957,1
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/multi.c:3956,1
    - Dst: is_exit_restart
      Src: /src/openvpn/src/openvpn/multi.c:3962,1
    - Dst: multi_push_restart_schedule_exit
      Src: /src/openvpn/src/openvpn/multi.c:3966,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 17
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 3970
      start: 3951
    functionDepth: 0
    functionLinenumber: 3951
    functionLinenumberEnd: 3970
    functionName: multi_process_signal
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_push_restart_schedule_exit
    - has_udp_in_local_list
    - status_open
    - multi_print_status
    - status_close
    - signal_reset
    - is_exit_restart
    linkageType: ''
    returnType: bool
    signature: 'bool multi_process_signal(struct multi_context *m) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hash_n_buckets
      Src: /src/openvpn/src/openvpn/multi.c:229,1
    - Dst: multi_reap_range
      Src: /src/openvpn/src/openvpn/multi.c:233,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 236
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 236
    functionName: multi_reap_process_dowork
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_reap_range
    - hash_n_buckets
    linkageType: ''
    returnType: void
    signature: 'void multi_reap_process_dowork(const struct multi_context *m) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_session_update_crypto_params
      Src: /src/openvpn/src/openvpn/multi.c:2400,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2405,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/multi.c:2402,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/multi.c:2406,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2411
      start: 2389
    functionDepth: 0
    functionLinenumber: 2389
    functionLinenumberEnd: 2411
    functionName: multi_client_generate_tls_keys
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - get_link_socket_info
    - tls_session_update_crypto_params
    - register_signal
    linkageType: ''
    returnType: bool
    signature: 'static bool multi_client_generate_tls_keys(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:3919,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/multi.c:3925,1
    - Dst: multi_schedule_context_wakeup
      Src: /src/openvpn/src/openvpn/multi.c:3926,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/multi.c:3923,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:3920,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:3929,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:3932,1
    - Dst: openvpn_gettimeofday
      Src: /src/openvpn/src/openvpn/multi.c:3932,1
    - Dst: tv_add
      Src: /src/openvpn/src/openvpn/multi.c:3935,1
    - Dst: schedule_add_entry
      Src: /src/openvpn/src/openvpn/multi.c:3939,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/multi.c:3944,1
    - Dst: compute_wakeup_sigma
      Src: /src/openvpn/src/openvpn/multi.c:3942,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 22
    argCount: 2
    argNames:
    - m
    - next_server
    argTypes:
    - struct multi_context*
    - bool
    constantsTouched: []
    func_position:
      end: 3945
      start: 3911
    functionDepth: 0
    functionLinenumber: 3911
    functionLinenumberEnd: 3945
    functionName: multi_push_restart_schedule_exit
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - openvpn_gettimeofday
    - hash_iterator_next
    - multi_schedule_context_wakeup
    - send_control_channel_string
    - schedule_add_entry
    - compute_wakeup_sigma
    - hash_iterator_free
    - ASSERT
    - tv_add
    - proto_is_dgram
    - signal_reset
    - hash_iterator_init
    linkageType: ''
    returnType: void
    signature: 'static void multi_push_restart_schedule_exit(struct multi_context
      *m, bool next_server) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/openvpn/multi.c:2909,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2918,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2931,1
    - Dst: hash_lookup
      Src: /src/openvpn/src/openvpn/multi.c:2920,1
    - Dst: multi_process_post
      Src: /src/openvpn/src/openvpn/multi.c:2927,1
    - Dst: hash_remove
      Src: /src/openvpn/src/openvpn/multi.c:2939,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2945,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 21
    argCount: 2
    argNames:
    - m
    - mpp_flags
    argTypes:
    - struct multi_context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2948
      start: 2904
    functionDepth: 0
    functionLinenumber: 2904
    functionLinenumberEnd: 2948
    functionName: multi_process_file_closed
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_process_post
    - hash_lookup
    - msg
    - hash_remove
    - read
    linkageType: ''
    returnType: void
    signature: 'void multi_process_file_closed(struct multi_context *m, const unsigned
      int mpp_flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: plugin_return_get_column
      Src: /src/openvpn/src/openvpn/multi.c:1697,1
    - Dst: multi_select_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:1722,1
    - Dst: plugin_return_defined
      Src: /src/openvpn/src/openvpn/multi.c:1700,1
    - Dst: options_string_import
      Src: /src/openvpn/src/openvpn/multi.c:1707,1
    - Dst: multi_set_virtual_addr_env
      Src: /src/openvpn/src/openvpn/multi.c:1723,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 13
    argCount: 4
    argNames:
    - m
    - mi
    - pr
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct plugin_return*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 1725
      start: 1689
    functionDepth: 0
    functionLinenumber: 1689
    functionLinenumberEnd: 1725
    functionName: multi_client_connect_post_plugin
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - plugin_return_get_column
    - multi_set_virtual_addr_env
    - options_string_import
    - multi_select_virtual_addr
    - plugin_return_defined
    linkageType: ''
    returnType: void
    signature: 'static void multi_client_connect_post_plugin(struct multi_context
      *m, struct multi_instance *mi, const struct plugin_return *pr, unsigned int
      *option_types_found) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: multi_signal_instance
      Src: /src/openvpn/src/openvpn/multi.c:3351,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 10
    argCount: 3
    argNames:
    - m
    - mi
    - dco
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 3352
      start: 3310
    functionDepth: 0
    functionLinenumber: 3310
    functionLinenumberEnd: 3352
    functionName: process_incoming_del_peer
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_signal_instance
    linkageType: ''
    returnType: void
    signature: 'static void process_incoming_del_peer(struct multi_context *m, struct
      multi_instance *mi, dco_context_t *dco) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: dco_do_read
      Src: /src/openvpn/src/openvpn/multi.c:3361,1
    - Dst: process_incoming_del_peer
      Src: /src/openvpn/src/openvpn/multi.c:3378,1
    - Dst: tls_session_soft_reset
      Src: /src/openvpn/src/openvpn/multi.c:3382,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:3400,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 3411
      start: 3354
    functionDepth: 0
    functionLinenumber: 3354
    functionLinenumberEnd: 3411
    functionName: multi_process_incoming_dco
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - msg
    - process_incoming_del_peer
    - tls_session_soft_reset
    - dco_do_read
    linkageType: ''
    returnType: bool
    signature: 'bool multi_process_incoming_dco(struct multi_context *m) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/multi.c:145,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:159,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/multi.c:127,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:129,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/multi.c:132,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:132,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:136,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/multi.c:144,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/multi.c:111,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/multi.c:134,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/multi.c:146,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/multi.c:156,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:99,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/multi.c:126,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/multi.c:124,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/multi.c:147,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/multi.c:150,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/multi.c:152,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/multi.c:139,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:150,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:147,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 41
    argCount: 4
    argNames:
    - m
    - mi
    - op
    - addr
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - char*
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 161
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 161
    functionName: learn_address_script
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - openvpn_run_script
    - argv_printf
    - argv_parse_cmd
    - msg
    - plugin_call
    - argv_free
    - tls_common_name
    - gc_new
    - setenv_str
    - gc_free
    - argv_new
    - env_set_create
    - plugin_defined
    - mroute_addr_print
    - argv_printf_cat
    linkageType: ''
    returnType: bool
    signature: 'static bool learn_address_script(const struct multi_context *m, const
      struct multi_instance *mi, const char *op, const struct mroute_addr *addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 2
    argNames:
    - key
    - iv
    argTypes:
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 280
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 280
    functionName: int_hash_function
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static uint32_t /* * inotify watcher descriptors are used as hash
      value */ int_hash_function(const void *key, uint32_t iv) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3006,1
    - Dst: mbuf_alloc_buf
      Src: /src/openvpn/src/openvpn/multi.c:3012,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:3010,1
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/multi.c:3008,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/multi.c:3010,1
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:3013,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:3015,1
    - Dst: multi_add_mbuf
      Src: /src/openvpn/src/openvpn/multi.c:3024,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:3028,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/multi.c:3029,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/multi.c:3030,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 26
    argCount: 4
    argNames:
    - m
    - buf
    - sender_instance
    - vid
    argTypes:
    - struct multi_context*
    - struct buffer*
    - struct multi_instance*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 3032
      start: 2995
    functionDepth: 0
    functionLinenumber: 2995
    functionLinenumberEnd: 3032
    functionName: multi_bcast
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_add_mbuf
    - perf_push
    - hash_iterator_next
    - BLEN
    - perf_pop
    - mbuf_free_buf
    - hash_iterator_free
    - mbuf_alloc_buf
    - hash_iterator_init
    - printf
    linkageType: ''
    returnType: void
    signature: 'static void multi_bcast(struct multi_context *m, const struct buffer
      *buf, const struct multi_instance *sender_instance, uint16_t vid) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: do_deferred_options
      Src: /src/openvpn/src/openvpn/multi.c:2425,1
    - Dst: ifconfig_push_constraint_satisfied
      Src: /src/openvpn/src/openvpn/multi.c:2440,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2495,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:2496,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:2497,1
    - Dst: multi_add_iroutes
      Src: /src/openvpn/src/openvpn/multi.c:2515,1
    - Dst: remove_iroutes_from_push_route_list
      Src: /src/openvpn/src/openvpn/multi.c:2522,1
    - Dst: process_incoming_push_request
      Src: /src/openvpn/src/openvpn/multi.c:2534,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2418,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:2421,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2432,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:2434,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2448,1
    - Dst: multi_client_setup_dco_initial
      Src: /src/openvpn/src/openvpn/multi.c:2471,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:2443,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:2445,1
    - Dst: multi_learn_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:2492,1
    - Dst: TUNNEL_TYPE
      Src: /src/openvpn/src/openvpn/multi.c:2488,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2508,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:2536,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2419,1
    - Dst: multi_client_set_protocol_options
      Src: /src/openvpn/src/openvpn/multi.c:2466,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:2450,1
    - Dst: multi_client_generate_tls_keys
      Src: /src/openvpn/src/openvpn/multi.c:2477,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/multi.c:2451,1
    - Dst: multi_learn_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:2502,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/multi.c:2507,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:2509,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:2526,1
    - Dst: multi_instance_string
      Src: /src/openvpn/src/openvpn/multi.c:2528,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 53
    argCount: 3
    argNames:
    - m
    - mi
    - option_types_found
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2537
      start: 2413
    functionDepth: 0
    functionLinenumber: 2413
    functionLinenumberEnd: 2537
    functionName: multi_client_connect_late_setup
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - TUNNEL_TYPE
    - multi_add_iroutes
    - multi_client_generate_tls_keys
    - remove_iroutes_from_push_route_list
    - msg
    - print_in_addr_t
    - ifconfig_push_constraint_satisfied
    - multi_learn_in6_addr
    - process_incoming_push_request
    - gc_new
    - multi_client_set_protocol_options
    - multi_instance_string
    - print_in6_addr
    - gc_free
    - ASSERT
    - do_deferred_options
    - multi_learn_in_addr_t
    - multi_client_setup_dco_initial
    linkageType: ''
    returnType: void
    signature: 'static void multi_client_connect_late_setup(struct multi_context *m,
      struct multi_instance *mi, const unsigned int option_types_found) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ifconfig_pool_write_trigger
      Src: /src/openvpn/src/openvpn/multi.c:169,1
    - Dst: ifconfig_pool_write
      Src: /src/openvpn/src/openvpn/multi.c:171,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - m
    - force
    argTypes:
    - struct multi_context*
    - bool
    constantsTouched: []
    func_position:
      end: 173
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 173
    functionName: multi_ifconfig_pool_persist
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_write_trigger
    - ifconfig_pool_write
    linkageType: ''
    returnType: void
    signature: 'void multi_ifconfig_pool_persist(struct multi_context *m, bool force) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 286
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 286
    functionName: int_compare_function
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool int_compare_function(const void *key1, const void *key2) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:2543,1
    - Dst: generate_prefix
      Src: /src/openvpn/src/openvpn/multi.c:2552,1
    - Dst: multi_delete_dup
      Src: /src/openvpn/src/openvpn/multi.c:2557,1
    - Dst: tls_lock_common_name
      Src: /src/openvpn/src/openvpn/multi.c:2548,1
    - Dst: tls_lock_cert_hash_set
      Src: /src/openvpn/src/openvpn/multi.c:2549,1
    - Dst: multi_select_virtual_addr
      Src: /src/openvpn/src/openvpn/multi.c:2564,1
    - Dst: multi_client_connect_setenv
      Src: /src/openvpn/src/openvpn/multi.c:2566,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2567
      start: 2539
    functionDepth: 0
    functionLinenumber: 2539
    functionLinenumberEnd: 2567
    functionName: multi_client_connect_early_setup
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - tls_lock_common_name
    - tls_lock_cert_hash_set
    - multi_client_connect_setenv
    - multi_select_virtual_addr
    - ASSERT
    - generate_prefix
    - multi_delete_dup
    linkageType: ''
    returnType: void
    signature: 'static void multi_client_connect_early_setup(struct multi_context
      *m, struct multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/multi.c:2983,1
    - Dst: multi_add_mbuf
      Src: /src/openvpn/src/openvpn/multi.c:2987,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/multi.c:2988,1
    - Dst: mbuf_alloc_buf
      Src: /src/openvpn/src/openvpn/multi.c:2985,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 3
    argNames:
    - m
    - buf
    - mi
    argTypes:
    - struct multi_context*
    - struct buffer*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 2990
      start: 2976
    functionDepth: 0
    functionLinenumber: 2976
    functionLinenumberEnd: 2990
    functionName: multi_unicast
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - mbuf_free_buf
    - BLEN
    - multi_add_mbuf
    - mbuf_alloc_buf
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_unicast(struct multi_context *m, const struct
      buffer *buf, struct multi_instance *mi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1454
      start: 1442
    functionDepth: 0
    functionLinenumber: 1442
    functionLinenumberEnd: 1454
    functionName: ifconfig_push_constraint_satisfied
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool ifconfig_push_constraint_satisfied(const struct context
      *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/multi.c:4288,1
    - Dst: init_instance_handle_signals
      Src: /src/openvpn/src/openvpn/multi.c:4296,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/multi.c:4297,1
    - Dst: context_clear_2
      Src: /src/openvpn/src/openvpn/multi.c:4293,1
    - Dst: multi_init
      Src: /src/openvpn/src/openvpn/multi.c:4303,1
    - Dst: multi_top_init
      Src: /src/openvpn/src/openvpn/multi.c:4306,1
    - Dst: init_management_callback_multi
      Src: /src/openvpn/src/openvpn/multi.c:4309,1
    - Dst: initialization_sequence_completed
      Src: /src/openvpn/src/openvpn/multi.c:4312,1
    - Dst: inotify_init
      Src: /src/openvpn/src/openvpn/multi.c:4315,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/multi.c:4318,1
    - Dst: uninit_management_callback
      Src: /src/openvpn/src/openvpn/multi.c:4329,1
    - Dst: multi_ifconfig_pool_persist
      Src: /src/openvpn/src/openvpn/multi.c:4332,1
    - Dst: multi_uninit
      Src: /src/openvpn/src/openvpn/multi.c:4335,1
    - Dst: close_instance
      Src: /src/openvpn/src/openvpn/multi.c:4337,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/multi.c:4325,1
    - Dst: multi_top_free
      Src: /src/openvpn/src/openvpn/multi.c:4336,1
    - Dst: tunnel_server_loop
      Src: /src/openvpn/src/openvpn/multi.c:4322,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - top
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4339
      start: 4285
    functionDepth: 0
    functionLinenumber: 4285
    functionLinenumberEnd: 4339
    functionName: tunnel_server
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - init_management_callback_multi
    - IS_SIG
    - uninit_management_callback
    - msg
    - multi_ifconfig_pool_persist
    - inotify_init
    - init_instance_handle_signals
    - close_instance
    - context_clear_2
    - multi_top_free
    - multi_init
    - ASSERT
    - tunnel_server_loop
    - close
    - multi_uninit
    - initialization_sequence_completed
    - multi_top_init
    linkageType: ''
    returnType: void
    signature: 'void tunnel_server(struct context *top) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:1416,1
    - Dst: hash_iterator_init_range
      Src: /src/openvpn/src/openvpn/multi.c:1421,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:1420,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:1422,1
    - Dst: hash_n_buckets
      Src: /src/openvpn/src/openvpn/multi.c:1421,1
    - Dst: multi_route_defined
      Src: /src/openvpn/src/openvpn/multi.c:1425,1
    - Dst: difftime
      Src: /src/openvpn/src/openvpn/multi.c:1425,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:1427,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:1428,1
    - Dst: learn_address_script
      Src: /src/openvpn/src/openvpn/multi.c:1429,1
    - Dst: hash_iterator_delete_element
      Src: /src/openvpn/src/openvpn/multi.c:1431,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:1435,1
    - Dst: multi_route_del
      Src: /src/openvpn/src/openvpn/multi.c:1430,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:1434,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 21
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 1436
      start: 1412
    functionDepth: 0
    functionLinenumber: 1412
    functionLinenumberEnd: 1436
    functionName: check_stale_routes
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - learn_address_script
    - dmsg
    - hash_iterator_next
    - hash_n_buckets
    - gc_new
    - multi_route_del
    - difftime
    - hash_iterator_delete_element
    - gc_free
    - hash_iterator_free
    - mroute_addr_print
    - multi_route_defined
    - hash_iterator_init_range
    linkageType: ''
    returnType: void
    signature: 'static void check_stale_routes(struct multi_context *m) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/multi.c:180,1
    - Dst: hash_iterator_init_range
      Src: /src/openvpn/src/openvpn/multi.c:191,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:190,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:192,1
    - Dst: hash_n_buckets
      Src: /src/openvpn/src/openvpn/multi.c:187,1
    - Dst: multi_route_defined
      Src: /src/openvpn/src/openvpn/multi.c:195,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/multi.c:197,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/multi.c:198,1
    - Dst: learn_address_script
      Src: /src/openvpn/src/openvpn/multi.c:199,1
    - Dst: multi_route_del
      Src: /src/openvpn/src/openvpn/multi.c:200,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:204,1
    - Dst: hash_iterator_delete_element
      Src: /src/openvpn/src/openvpn/multi.c:201,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/multi.c:205,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 23
    argCount: 3
    argNames:
    - m
    - start_bucket
    - end_bucket
    argTypes:
    - struct multi_context*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 206
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 206
    functionName: multi_reap_range
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - learn_address_script
    - dmsg
    - hash_iterator_next
    - hash_n_buckets
    - gc_new
    - multi_route_del
    - hash_iterator_delete_element
    - gc_free
    - hash_iterator_free
    - mroute_addr_print
    - multi_route_defined
    - hash_iterator_init_range
    linkageType: ''
    returnType: void
    signature: 'static void multi_reap_range(const struct multi_context *m, int start_bucket,
      int end_bucket) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close_context
      Src: /src/openvpn/src/openvpn/multi.c:3901,1
    - Dst: free_context_buffers
      Src: /src/openvpn/src/openvpn/multi.c:3902,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 3903
      start: 3898
    functionDepth: 0
    functionLinenumber: 3898
    functionLinenumberEnd: 3903
    functionName: multi_top_free
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - free_context_buffers
    - close_context
    linkageType: ''
    returnType: void
    signature: 'void multi_top_free(struct multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: multi_reap_range
      Src: /src/openvpn/src/openvpn/multi.c:211,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 212
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 212
    functionName: multi_reap_all
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_reap_range
    linkageType: ''
    returnType: void
    signature: 'static void multi_reap_all(const struct multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - sig
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 3909
      start: 3905
    functionDepth: 0
    functionLinenumber: 3905
    functionLinenumberEnd: 3909
    functionName: is_exit_restart
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool is_exit_restart(int sig) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hash_iterator_init
      Src: /src/openvpn/src/openvpn/multi.c:4007,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/multi.c:4014,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/multi.c:4013,1
    - Dst: hash_iterator_next
      Src: /src/openvpn/src/openvpn/multi.c:4008,1
    - Dst: multi_signal_instance
      Src: /src/openvpn/src/openvpn/multi.c:4016,1
    - Dst: hash_iterator_free
      Src: /src/openvpn/src/openvpn/multi.c:4021,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 14
    argCount: 2
    argNames:
    - arg
    - del_cn
    argTypes:
    - void*
    - char*
    constantsTouched: []
    func_position:
      end: 4023
      start: 3999
    functionDepth: 0
    functionLinenumber: 3999
    functionLinenumberEnd: 4023
    functionName: management_callback_kill_by_cn
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - hash_iterator_next
    - tls_common_name
    - strcmp
    - hash_iterator_free
    - hash_iterator_init
    - multi_signal_instance
    linkageType: ''
    returnType: int
    signature: 'static int management_callback_kill_by_cn(void *arg, const char *del_cn) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: multi_close_instance_on_signal
      Src: /src/openvpn/src/openvpn/multi.c:3304,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 3
    argNames:
    - m
    - mi
    - sig
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - int
    constantsTouched: []
    func_position:
      end: 3305
      start: 3300
    functionDepth: 0
    functionLinenumber: 3300
    functionLinenumberEnd: 3305
    functionName: multi_signal_instance
    functionSourceFile: /src/openvpn/src/openvpn/multi.c
    functionUses: []
    functionsReached:
    - multi_close_instance_on_signal
    linkageType: ''
    returnType: void
    signature: 'static void multi_signal_instance(struct multi_context *m, struct
      multi_instance *mi, const int sig) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/plugin.c:68,1
    - Dst: plugin_show_string_array
      Src: /src/openvpn/src/openvpn/plugin.c:70,1
    - Dst: plugin_show_string_array
      Src: /src/openvpn/src/openvpn/plugin.c:71,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 3
    argNames:
    - msglevel
    - argv
    - envp
    argTypes:
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 73
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 73
    functionName: plugin_show_args_env
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - plugin_show_string_array
    - check_debug_level
    linkageType: ''
    returnType: void
    signature: 'static void plugin_show_args_env(int msglevel, const char *argv[],
      const char *envp[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/plugin.c:162,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: plugin_option_list_new
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct plugin_option_list*
    signature: 'struct plugin_option_list *plugin_option_list_new(struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/plugin.c:191,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/plugin.c:199,1
    - Dst: print_argv
      Src: /src/openvpn/src/openvpn/plugin.c:196,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:196,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 2
    argNames:
    - list
    - msglevel
    argTypes:
    - struct plugin_option_list*
    - int
    constantsTouched: []
    func_position:
      end: 200
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 200
    functionName: plugin_option_list_print
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_argv
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void plugin_option_list_print(const struct plugin_option_list *list,
      int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct plugin*
    constantsTouched: []
    func_position:
      end: 652
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 652
    functionName: plugin_abort_item
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void plugin_abort_item(const struct plugin *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/plugin.c:710,1
    - Dst: plugin_init_item
      Src: /src/openvpn/src/openvpn/plugin.c:714,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 1
    argNames:
    - list
    argTypes:
    - struct plugin_option_list*
    constantsTouched: []
    func_position:
      end: 721
      start: 704
    functionDepth: 0
    functionLinenumber: 704
    functionLinenumberEnd: 721
    functionName: plugin_common_init
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    - plugin_init_item
    linkageType: ''
    returnType: struct plugin_common*
    signature: 'static struct plugin_common *plugin_common_init(const struct plugin_option_list
      *list) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: plugin_close_item
      Src: /src/openvpn/src/openvpn/plugin.c:768,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/plugin.c:770,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - pc
    argTypes:
    - struct plugin_common*
    constantsTouched: []
    func_position:
      end: 772
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 772
    functionName: plugin_common_close
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - plugin_close_item
    - free
    linkageType: ''
    returnType: void
    signature: 'static void plugin_common_close(struct plugin_common *pc) '
  - BBCount: 17
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 128
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 128
    functionName: plugin_type_name
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *plugin_type_name(const int type) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: make_extended_arg_array
      Src: /src/openvpn/src/openvpn/plugin.c:173,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 8
    argCount: 3
    argNames:
    - list
    - p
    - gc
    argTypes:
    - struct plugin_option_list*
    - char**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 184
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 184
    functionName: plugin_option_list_add
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - make_extended_arg_array
    linkageType: ''
    returnType: bool
    signature: 'bool plugin_option_list_add(struct plugin_option_list *list, char
      **p, struct gc_arena *gc) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/plugin.c:453,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/plugin.c:465,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/plugin.c:463,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/plugin.c:484,1
    - Dst: plugin_show_args_env
      Src: /src/openvpn/src/openvpn/plugin.c:466,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/plugin.c:506,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:509,1
    - Dst: print_argv
      Src: /src/openvpn/src/openvpn/plugin.c:511,1
    - Dst: plugin_supported_types
      Src: /src/openvpn/src/openvpn/plugin.c:520,1
    - Dst: plugin_supported_types
      Src: /src/openvpn/src/openvpn/plugin.c:515,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/plugin.c:529,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:517,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:525,1
    - Dst: plugin_supported_types
      Src: /src/openvpn/src/openvpn/plugin.c:515,1
    - Dst: plugin_mask_string
      Src: /src/openvpn/src/openvpn/plugin.c:512,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 44
    argCount: 5
    argNames:
    - p
    - o
    - retlist
    - envp
    - init_point
    argTypes:
    - struct plugin*
    - struct plugin_option*
    - struct openvpn_plugin_string_list**
    - char**
    - int
    constantsTouched: []
    func_position:
      end: 531
      start: 446
    functionDepth: 0
    functionLinenumber: 446
    functionLinenumberEnd: 531
    functionName: plugin_open_item
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - plugin_supported_types
    - print_argv
    - dmsg
    - msg
    - gc_new
    - CLEAR
    - gc_free
    - ASSERT
    - plugin_mask_string
    - plugin_show_args_env
    linkageType: ''
    returnType: void
    signature: 'static void plugin_open_item(struct plugin *p, const struct plugin_option
      *o, struct openvpn_plugin_string_list **retlist, const char **envp, const int
      init_point) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 12
    argCount: 3
    argNames:
    - pc
    - cli
    - init_point
    argTypes:
    - struct plugin_common*
    - struct plugin_per_client*
    - int
    constantsTouched: []
    func_position:
      end: 672
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 672
    functionName: plugin_per_client_init
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void plugin_per_client_init(const struct plugin_common *pc,
      struct plugin_per_client *cli, const int init_point) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/plugin.c:730,1
    - Dst: plugin_return_init
      Src: /src/openvpn/src/openvpn/plugin.c:738,1
    - Dst: make_env_array
      Src: /src/openvpn/src/openvpn/plugin.c:734,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/plugin.c:755,1
    - Dst: plugin_open_item
      Src: /src/openvpn/src/openvpn/plugin.c:743,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 13
    argCount: 5
    argNames:
    - pc
    - list
    - pr
    - es
    - init_point
    argTypes:
    - struct plugin_common*
    - struct plugin_option_list*
    - struct plugin_return*
    - struct env_set*
    - int
    constantsTouched: []
    func_position:
      end: 756
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 756
    functionName: plugin_common_open
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - make_env_array
    - plugin_return_init
    - plugin_open_item
    - gc_new
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void plugin_common_open(struct plugin_common *pc, const struct
      plugin_option_list *list, struct plugin_return *pr, const struct env_set *es,
      const int init_point) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/plugin.c:778,1
    - Dst: plugin_common_init
      Src: /src/openvpn/src/openvpn/plugin.c:779,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 1
    argNames:
    - list
    argTypes:
    - struct plugin_option_list*
    constantsTouched: []
    func_position:
      end: 782
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 782
    functionName: plugin_list_init
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - plugin_common_init
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct plugin_list*
    signature: 'struct plugin_list *plugin_list_init(const struct plugin_option_list
      *list) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: env_safe_to_print
      Src: /src/openvpn/src/openvpn/plugin.c:58,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:60,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - msglevel
    - name
    - array
    argTypes:
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 63
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 63
    functionName: plugin_show_string_array
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - msg
    - env_safe_to_print
    linkageType: ''
    returnType: void
    signature: 'static void plugin_show_string_array(int msglevel, const char *name,
      const char *array[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/src/openvpn/plugin.c:422,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/plugin.c:424,1
    - Dst: plugin_vlog
      Src: /src/openvpn/src/openvpn/plugin.c:423,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 3
    argNames:
    - flags
    - name
    - format
    - '...'
    argTypes:
    - openvpn_plugin_log_flags_t
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 425
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 425
    functionName: plugin_log
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - va_end
    - plugin_vlog
    - va_start
    linkageType: ''
    returnType: void
    signature: 'static void plugin_log(openvpn_plugin_log_flags_t flags, const char
      *name, const char *format, ...) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: plugin_per_client_destroy
      Src: /src/openvpn/src/openvpn/plugin.c:902,1
    - Dst: plugin_common_close
      Src: /src/openvpn/src/openvpn/plugin.c:906,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/plugin.c:910,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 1
    argNames:
    - pl
    argTypes:
    - struct plugin_list*
    constantsTouched: []
    func_position:
      end: 912
      start: 895
    functionDepth: 0
    functionLinenumber: 895
    functionLinenumberEnd: 912
    functionName: plugin_list_close
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - free
    - plugin_common_close
    - plugin_per_client_destroy
    linkageType: ''
    returnType: void
    signature: 'void plugin_list_close(struct plugin_list *pl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_plugin_string_list_item_free
      Src: /src/openvpn/src/openvpn/plugin.c:979,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - l
    argTypes:
    - struct openvpn_plugin_string_list*
    constantsTouched: []
    func_position:
      end: 982
      start: 972
    functionDepth: 0
    functionLinenumber: 972
    functionLinenumberEnd: 982
    functionName: openvpn_plugin_string_list_free
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - openvpn_plugin_string_list_item_free
    linkageType: ''
    returnType: void
    signature: 'static void openvpn_plugin_string_list_free(struct openvpn_plugin_string_list
      *l) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: plugin_abort_item
      Src: /src/openvpn/src/openvpn/plugin.c:925,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 928
      start: 914
    functionDepth: 0
    functionLinenumber: 914
    functionLinenumberEnd: 928
    functionName: plugin_abort
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - plugin_abort_item
    linkageType: ''
    returnType: void
    signature: 'void plugin_abort(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/plugin.c:989,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 2
    argNames:
    - l
    - name
    argTypes:
    - struct openvpn_plugin_string_list*
    - char*
    constantsTouched: []
    func_position:
      end: 996
      start: 984
    functionDepth: 0
    functionLinenumber: 984
    functionLinenumberEnd: 996
    functionName: openvpn_plugin_string_list_find
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: struct openvpn_plugin_string_list*
    signature: 'static struct openvpn_plugin_string_list *openvpn_plugin_string_list_find(struct
      openvpn_plugin_string_list *l, const char *name) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dlsym
      Src: /src/openvpn/src/openvpn/plugin.c:208,1
    - Dst: dlerror
      Src: /src/openvpn/src/openvpn/plugin.c:211,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:211,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 5
    argNames:
    - handle
    - dest
    - symbol
    - plugin_name
    - flags
    argTypes:
    - void*
    - void**
    - char*
    - char*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 213
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: libdl_resolve_symbol
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - dlsym
    - msg
    - dlerror
    linkageType: ''
    returnType: void
    signature: 'static void libdl_resolve_symbol(void *handle, void **dest, const
      char *symbol, const char *plugin_name, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetProcAddress
      Src: /src/openvpn/src/openvpn/plugin.c:220,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:223,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 5
    argNames:
    - module
    - dest
    - symbol
    - plugin_name
    - flags
    argTypes:
    - HMODULE
    - void**
    - char*
    - char*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 225
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 225
    functionName: dll_resolve_symbol
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - GetProcAddress
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void dll_resolve_symbol(HMODULE module, void **dest, const
      char *symbol, const char *plugin_name, const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:1029,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:1035,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:1038,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 3
    argNames:
    - msglevel
    - prefix
    - pr
    argTypes:
    - int
    - char*
    - struct plugin_return*
    constantsTouched: []
    func_position:
      end: 1045
      start: 1025
    functionDepth: 0
    functionLinenumber: 1025
    functionLinenumberEnd: 1045
    functionName: plugin_return_print
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void plugin_return_print(const int msglevel, const char *prefix, const
      struct plugin_return *pr) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: dlopen
      Src: /src/openvpn/src/openvpn/plugin.c:268,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/plugin.c:279,1
    - Dst: LoadLibraryW
      Src: /src/openvpn/src/openvpn/plugin.c:292,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:307,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:311,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:322,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:351,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/plugin.c:232,1
    - Dst: dlopen
      Src: /src/openvpn/src/openvpn/plugin.c:263,1
    - Dst: platform_absolute_pathname
      Src: /src/openvpn/src/openvpn/plugin.c:257,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:308,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:312,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:333,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/plugin.c:356,1
    - Dst: plugin_supported_types
      Src: /src/openvpn/src/openvpn/plugin.c:236,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:272,1
    - Dst: dlerror
      Src: /src/openvpn/src/openvpn/plugin.c:272,1
    - Dst: GetFullPathNameW
      Src: /src/openvpn/src/openvpn/plugin.c:282,1
    - Dst: plugin_in_trusted_dir
      Src: /src/openvpn/src/openvpn/plugin.c:287,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:289,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:295,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:303,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:302,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:284,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:309,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:317,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:305,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/plugin.c:262,1
    - Dst: platform_absolute_pathname
      Src: /src/openvpn/src/openvpn/plugin.c:267,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:304,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:306,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:310,1
    - Dst: PLUGIN_SYM
      Src: /src/openvpn/src/openvpn/plugin.c:313,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 78
    argCount: 2
    argNames:
    - p
    - o
    argTypes:
    - struct plugin*
    - struct plugin_option*
    constantsTouched: []
    func_position:
      end: 357
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 357
    functionName: plugin_init_item
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - plugin_supported_types
    - GetFullPathNameW
    - msg
    - snprintf
    - wide_string
    - plugin_in_trusted_dir
    - gc_new
    - LoadLibraryW
    - platform_absolute_pathname
    - gc_free
    - dlerror
    - dlopen
    - PLUGIN_SYM
    linkageType: ''
    returnType: void
    signature: 'static void plugin_init_item(struct plugin *p, const struct plugin_option
      *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: plugin_common_open
      Src: /src/openvpn/src/openvpn/plugin.c:791,1
    - Dst: plugin_per_client_init
      Src: /src/openvpn/src/openvpn/plugin.c:792,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 3
    argCount: 5
    argNames:
    - pl
    - list
    - pr
    - es
    - init_point
    argTypes:
    - struct plugin_list*
    - struct plugin_option_list*
    - struct plugin_return*
    - struct env_set*
    - int
    constantsTouched: []
    func_position:
      end: 793
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 793
    functionName: plugin_list_open
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - plugin_common_open
    - plugin_per_client_init
    linkageType: ''
    returnType: void
    signature: 'void plugin_list_open(struct plugin_list *pl, const struct plugin_option_list
      *list, struct plugin_return *pr, const struct env_set *es, const int init_point) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:371,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/plugin.c:409,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/plugin.c:411,1
    - Dst: msg_test
      Src: /src/openvpn/src/openvpn/plugin.c:401,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/plugin.c:410,1
    - Dst: x_msg_va
      Src: /src/openvpn/src/openvpn/plugin.c:412,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/plugin.c:414,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 37
    argCount: 4
    argNames:
    - flags
    - name
    - format
    - arglist
    argTypes:
    - openvpn_plugin_log_flags_t
    - char*
    - char*
    - va_list
    constantsTouched: []
    func_position:
      end: 416
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 416
    functionName: plugin_vlog
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - gc_malloc
    - gc_init
    - gc_free
    - x_msg_va
    - msg_test
    linkageType: ''
    returnType: void
    signature: 'static void plugin_vlog(openvpn_plugin_log_flags_t flags, const char
      *name, const char *format, va_list arglist) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: plugin_return_init
      Src: /src/openvpn/src/openvpn/plugin.c:807,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/plugin.c:819,1
    - Dst: plugin_n
      Src: /src/openvpn/src/openvpn/plugin.c:815,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/plugin.c:812,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/plugin.c:810,1
    - Dst: make_env_array
      Src: /src/openvpn/src/openvpn/plugin.c:820,1
    - Dst: plugin_call_item
      Src: /src/openvpn/src/openvpn/plugin.c:824,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:857,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/plugin.c:880,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 27
    argCount: 7
    argNames:
    - pl
    - type
    - av
    - pr
    - es
    - certdepth
    - current_cert
    argTypes:
    - struct plugin_list*
    - int
    - struct argv*
    - struct plugin_return*
    - struct env_set*
    - int
    - openvpn_x509_cert_t*
    constantsTouched: []
    func_position:
      end: 893
      start: 795
    functionDepth: 0
    functionLinenumber: 795
    functionLinenumberEnd: 893
    functionName: plugin_call_ssl
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - make_env_array
    - plugin_return_init
    - msg
    - plugin_n
    - gc_new
    - gc_free
    - setenv_del
    - plugin_defined
    - plugin_call_item
    linkageType: ''
    returnType: int
    signature: 'int plugin_call_ssl(const struct plugin_list *pl, const int type,
      const struct argv *av, struct plugin_return *pr, struct env_set *es, int certdepth,
      openvpn_x509_cert_t *current_cert ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/plugin.c:133,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/plugin.c:145,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/plugin.c:143,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/src/openvpn/plugin.c:139,1
    - Dst: plugin_type_name
      Src: /src/openvpn/src/openvpn/plugin.c:145,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/plugin.c:149,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 2
    argNames:
    - type_mask
    - gc
    argTypes:
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 150
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 150
    functionName: plugin_mask_string
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - BSTR
    - buf_printf
    - plugin_type_name
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *plugin_mask_string(const unsigned int type_mask,
      struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/src/openvpn/plugin.c:552,1
    - Dst: argv_insert_head
      Src: /src/openvpn/src/openvpn/plugin.c:555,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/plugin.c:554,1
    - Dst: plugin_type_name
      Src: /src/openvpn/src/openvpn/plugin.c:557,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/plugin.c:557,1
    - Dst: plugin_show_args_env
      Src: /src/openvpn/src/openvpn/plugin.c:558,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/plugin.c:575,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/plugin.c:605,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:599,1
    - Dst: plugin_type_name
      Src: /src/openvpn/src/openvpn/plugin.c:600,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/plugin.c:606,1
    - Dst: plugin_type_name
      Src: /src/openvpn/src/openvpn/plugin.c:594,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/plugin.c:589,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:592,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 33
    argCount: 8
    argNames:
    - p
    - per_client_context
    - type
    - av
    - retlist
    - envp
    - certdepth
    - current_cert
    argTypes:
    - struct plugin*
    - void*
    - int
    - struct argv*
    - struct openvpn_plugin_string_list**
    - char**
    - int
    - openvpn_x509_cert_t*
    constantsTouched: []
    func_position:
      end: 609
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 609
    functionName: plugin_call_item
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - dmsg
    - msg
    - argv_free
    - gc_new
    - argv_insert_head
    - CLEAR
    - ASSERT
    - plugin_type_name
    - gc_free
    - plugin_show_args_env
    linkageType: ''
    returnType: int
    signature: 'static int plugin_call_item(const struct plugin *p, void *per_client_context,
      const int type, const struct argv *av, struct openvpn_plugin_string_list **retlist,
      const char **envp, int certdepth, openvpn_x509_cert_t *current_cert ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/plugin.c:690,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 8
    argCount: 2
    argNames:
    - pc
    - cli
    argTypes:
    - struct plugin_common*
    - struct plugin_per_client*
    constantsTouched: []
    func_position:
      end: 691
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 691
    functionName: plugin_per_client_destroy
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void plugin_per_client_destroy(const struct plugin_common *pc,
      struct plugin_per_client *cli) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/plugin.c:965,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/plugin.c:968,1
    - Dst: string_clear
      Src: /src/openvpn/src/openvpn/plugin.c:966,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/plugin.c:967,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - l
    argTypes:
    - struct openvpn_plugin_string_list*
    constantsTouched: []
    func_position:
      end: 970
      start: 960
    functionDepth: 0
    functionLinenumber: 960
    functionLinenumberEnd: 970
    functionName: openvpn_plugin_string_list_item_free
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - string_clear
    - free
    linkageType: ''
    returnType: void
    signature: 'static void openvpn_plugin_string_list_item_free(struct openvpn_plugin_string_list
      *l) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_plugin_string_list_find
      Src: /src/openvpn/src/openvpn/plugin.c:1008,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 3
    argNames:
    - src
    - dest
    - colname
    argTypes:
    - struct plugin_return*
    - struct plugin_return*
    - char*
    constantsTouched: []
    func_position:
      end: 1011
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 1011
    functionName: plugin_return_get_column
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - openvpn_plugin_string_list_find
    linkageType: ''
    returnType: void
    signature: 'void plugin_return_get_column(const struct plugin_return *src, struct
      plugin_return *dest, const char *colname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 156
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 156
    functionName: plugin_supported_types
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int plugin_supported_types(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:616,1
    - Dst: FreeLibrary
      Src: /src/openvpn/src/openvpn/plugin.c:632,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:629,1
    - Dst: dlclose
      Src: /src/openvpn/src/openvpn/plugin.c:627,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/plugin.c:634,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct plugin*
    constantsTouched: []
    func_position:
      end: 640
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 640
    functionName: plugin_close_item
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - msg
    - FreeLibrary
    - dlclose
    linkageType: ''
    returnType: void
    signature: 'static void plugin_close_item(struct plugin *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/plugin.c:697,1
    - Dst: plugin_per_client_init
      Src: /src/openvpn/src/openvpn/plugin.c:700,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/plugin.c:699,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 1
    argNames:
    - src
    argTypes:
    - struct plugin_list*
    constantsTouched: []
    func_position:
      end: 702
      start: 693
    functionDepth: 0
    functionLinenumber: 693
    functionLinenumberEnd: 702
    functionName: plugin_list_inherit
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    - plugin_per_client_init
    - ASSERT
    linkageType: ''
    returnType: struct plugin_list*
    signature: 'struct plugin_list *plugin_list_inherit(const struct plugin_list *src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_plugin_string_list_free
      Src: /src/openvpn/src/openvpn/plugin.c:1019,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - pr
    argTypes:
    - struct plugin_return*
    constantsTouched: []
    func_position:
      end: 1022
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1022
    functionName: plugin_return_free
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - openvpn_plugin_string_list_free
    linkageType: ''
    returnType: void
    signature: 'void plugin_return_free(struct plugin_return *pr) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/src/openvpn/plugin.c:942,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 2
    argNames:
    - pl
    - type
    argTypes:
    - struct plugin_list*
    - int
    constantsTouched: []
    func_position:
      end: 954
      start: 930
    functionDepth: 0
    functionLinenumber: 930
    functionLinenumberEnd: 954
    functionName: plugin_defined
    functionSourceFile: /src/openvpn/src/openvpn/plugin.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    linkageType: ''
    returnType: bool
    signature: 'bool plugin_defined(const struct plugin_list *pl, const int type) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/pool.c:95,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 28
    argCount: 2
    argNames:
    - pool
    - common_name
    argTypes:
    - struct ifconfig_pool*
    - char*
    constantsTouched: []
    func_position:
      end: 114
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 114
    functionName: ifconfig_pool_find
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: int
    signature: 'static int ifconfig_pool_find(struct ifconfig_pool *pool, const char
      *common_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ifconfig_pool_entry_free
      Src: /src/openvpn/src/openvpn/pool.c:491,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/pool.c:493,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 4
    argNames:
    - pool
    - cn
    - h
    - fixed
    argTypes:
    - struct ifconfig_pool*
    - char*
    - ifconfig_pool_handle
    - bool
    constantsTouched: []
    func_position:
      end: 496
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 496
    functionName: ifconfig_pool_set
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_entry_free
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static void ifconfig_pool_set(struct ifconfig_pool *pool, const char
      *cn, ifconfig_pool_handle h, const bool fixed) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/pool.c:538,1
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/pool.c:542,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:539,1
    - Dst: ifconfig_pool_list
      Src: /src/openvpn/src/openvpn/pool.c:541,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/pool.c:540,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - pool
    - msglevel
    argTypes:
    - struct ifconfig_pool*
    - int
    constantsTouched: []
    func_position:
      end: 543
      start: 535
    functionDepth: 0
    functionLinenumber: 535
    functionLinenumberEnd: 543
    functionName: ifconfig_pool_msg
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - status_open
    - status_close
    - status_printf
    - ifconfig_pool_list
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void ifconfig_pool_msg(const struct ifconfig_pool *pool, int
      msglevel) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/pool.c:43,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - ipe
    - hard
    argTypes:
    - struct ifconfig_pool_entry*
    - bool
    constantsTouched: []
    func_position:
      end: 54
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 54
    functionName: ifconfig_pool_entry_free
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void ifconfig_pool_entry_free(struct ifconfig_pool_entry *ipe,
      bool hard) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/pool.c:503,1
    - Dst: ifconfig_pool_handle_to_ip_base
      Src: /src/openvpn/src/openvpn/pool.c:518,1
    - Dst: ifconfig_pool_handle_to_ipv6_base
      Src: /src/openvpn/src/openvpn/pool.c:524,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/pool.c:525,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:519,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/pool.c:528,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/pool.c:531,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 20
    argCount: 2
    argNames:
    - pool
    - out
    argTypes:
    - struct ifconfig_pool*
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 533
      start: 498
    functionDepth: 0
    functionLinenumber: 498
    functionLinenumberEnd: 533
    functionName: ifconfig_pool_list
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - print_in_addr_t
    - gc_new
    - ifconfig_pool_handle_to_ipv6_base
    - print_in6_addr
    - status_printf
    - gc_free
    - ifconfig_pool_handle_to_ip_base
    linkageType: ''
    returnType: void
    signature: 'static void ifconfig_pool_list(const struct ifconfig_pool *pool, struct
      status_output *out) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ifconfig_pool_find
      Src: /src/openvpn/src/openvpn/pool.c:309,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/pool.c:318,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:342,1
    - Dst: ifconfig_pool_entry_free
      Src: /src/openvpn/src/openvpn/pool.c:314,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:313,1
    - Dst: add_in6_addr
      Src: /src/openvpn/src/openvpn/pool.c:349,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 32
    argCount: 5
    argNames:
    - pool
    - local
    - remote
    - remote_ipv6
    - common_name
    argTypes:
    - struct ifconfig_pool*
    - in_addr_t*
    - in_addr_t*
    - struct in6_addr*
    - char*
    constantsTouched: []
    func_position:
      end: 353
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 353
    functionName: ifconfig_pool_acquire
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - add_in6_addr
    - ifconfig_pool_entry_free
    - ASSERT
    - ifconfig_pool_find
    - string_alloc
    linkageType: ''
    returnType: ifconfig_pool_handle
    signature: 'ifconfig_pool_handle ifconfig_pool_acquire(struct ifconfig_pool *pool,
      in_addr_t *local, in_addr_t *remote, struct in6_addr *remote_ipv6, const char
      *common_name) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:466,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 2
    argNames:
    - pool
    - hand
    argTypes:
    - struct ifconfig_pool*
    - ifconfig_pool_handle
    constantsTouched: []
    func_position:
      end: 471
      start: 444
    functionDepth: 0
    functionLinenumber: 444
    functionLinenumberEnd: 471
    functionName: ifconfig_pool_handle_to_ip_base
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: in_addr_t
    signature: 'static in_addr_t ifconfig_pool_handle_to_ip_base(const struct ifconfig_pool
      *pool, ifconfig_pool_handle hand) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ifconfig_pool_entry_free
      Src: /src/openvpn/src/openvpn/pool.c:362,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - pool
    - hand
    - hard
    argTypes:
    - struct ifconfig_pool*
    - ifconfig_pool_handle
    - bool
    constantsTouched: []
    func_position:
      end: 366
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 366
    functionName: ifconfig_pool_release
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_entry_free
    linkageType: ''
    returnType: bool
    signature: 'bool ifconfig_pool_release(struct ifconfig_pool *pool, ifconfig_pool_handle
      hand, const bool hard) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: add_in6_addr
      Src: /src/openvpn/src/openvpn/pool.c:481,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 2
    argNames:
    - pool
    - hand
    argTypes:
    - struct ifconfig_pool*
    - ifconfig_pool_handle
    constantsTouched: []
    func_position:
      end: 484
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 484
    functionName: ifconfig_pool_handle_to_ipv6_base
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - add_in6_addr
    linkageType: ''
    returnType: struct in6_addr
    signature: 'static struct in6_addr ifconfig_pool_handle_to_ipv6_base(const struct
      ifconfig_pool *pool, ifconfig_pool_handle hand) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/pool.c:762,1
    - Dst: ifconfig_pool_acquire
      Src: /src/openvpn/src/openvpn/pool.c:774,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:779,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:790,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/pool.c:807,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:818,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:819,1
    - Dst: ifconfig_pool_free
      Src: /src/openvpn/src/openvpn/pool.c:826,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:781,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/pool.c:798,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:800,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:820,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/pool.c:827,1
    - Dst: ifconfig_pool_init
      Src: /src/openvpn/src/openvpn/pool.c:754,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/pool.c:768,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:780,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/pool.c:801,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:787,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/pool.c:788,1
    - Dst: ifconfig_pool_release
      Src: /src/openvpn/src/openvpn/pool.c:791,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:795,1
    - Dst: ifconfig_pool_acquire
      Src: /src/openvpn/src/openvpn/pool.c:813,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/pool.c:753,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:761,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/pool.c:759,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/pool.c:788,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 58
    argCount: 2
    argNames:
    - start
    - end
    argTypes:
    - in_addr_t
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 828
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 828
    functionName: ifconfig_pool_test
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_free
    - msg
    - SIZE
    - snprintf
    - print_in_addr_t
    - ifconfig_pool_release
    - gc_new
    - CLEAR
    - gc_free
    - ifconfig_pool_init
    - ifconfig_pool_acquire
    linkageType: ''
    returnType: void
    signature: 'void ifconfig_pool_test(in_addr_t start, in_addr_t end) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/pool.c:150,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:182,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/pool.c:155,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:177,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:154,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:186,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:187,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:234,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:246,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:250,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/pool.c:251,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:267,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:280,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/pool.c:284,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/pool.c:282,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:273,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 78
    argCount: 8
    argNames:
    - ipv4_pool
    - type
    - start
    - end
    - duplicate_cn
    - ipv6_pool
    - ipv6_base
    - ipv6_netbits
    argTypes:
    - bool
    - enum pool_type
    - in_addr_t
    - in_addr_t
    - bool
    - bool
    - struct in6_addr
    - int
    constantsTouched: []
    func_position:
      end: 286
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 286
    functionName: ifconfig_pool_init
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - msg
    - print_in_addr_t
    - gc_new
    - print_in6_addr
    - gc_free
    - ASSERT
    - ALLOC_ARRAY_CLEAR
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct ifconfig_pool*
    signature: 'struct ifconfig_pool *ifconfig_pool_init(const bool ipv4_pool, enum
      pool_type type, in_addr_t start, in_addr_t end, const bool duplicate_cn, const
      bool ipv6_pool, const struct in6_addr ipv6_base, const int ipv6_netbits ) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:393,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 2
    argNames:
    - pool
    - addr
    argTypes:
    - struct ifconfig_pool*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 402
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 402
    functionName: ifconfig_pool_ip_base_to_handle
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: ifconfig_pool_handle
    signature: 'static ifconfig_pool_handle ifconfig_pool_ip_base_to_handle(const
      struct ifconfig_pool *pool, const in_addr_t addr) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/pool.c:577,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pool.c:579,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - persist
    argTypes:
    - struct ifconfig_pool_persist*
    constantsTouched: []
    func_position:
      end: 581
      start: 570
    functionDepth: 0
    functionLinenumber: 570
    functionLinenumberEnd: 581
    functionName: ifconfig_pool_persist_close
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - status_close
    - free
    linkageType: ''
    returnType: void
    signature: 'void ifconfig_pool_persist_close(struct ifconfig_pool_persist *persist) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ifconfig_pool_entry_free
      Src: /src/openvpn/src/openvpn/pool.c:297,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pool.c:299,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/pool.c:300,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - pool
    argTypes:
    - struct ifconfig_pool*
    constantsTouched: []
    func_position:
      end: 302
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 302
    functionName: ifconfig_pool_free
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_entry_free
    - free
    linkageType: ''
    returnType: void
    signature: 'void ifconfig_pool_free(struct ifconfig_pool *pool) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 2
    argNames:
    - pool
    - in_addr
    argTypes:
    - struct ifconfig_pool*
    - struct in6_addr*
    constantsTouched: []
    func_position:
      end: 442
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 442
    functionName: ifconfig_pool_ipv6_base_to_handle
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ifconfig_pool_handle
    signature: 'static ifconfig_pool_handle ifconfig_pool_ipv6_base_to_handle(const
      struct ifconfig_pool *pool, const struct in6_addr *in_addr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: status_trigger
      Src: /src/openvpn/src/openvpn/pool.c:588,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - persist
    argTypes:
    - struct ifconfig_pool_persist*
    constantsTouched: []
    func_position:
      end: 594
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 594
    functionName: ifconfig_pool_write_trigger
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - status_trigger
    linkageType: ''
    returnType: bool
    signature: 'bool ifconfig_pool_write_trigger(struct ifconfig_pool_persist *persist) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/pool.c:609,1
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/pool.c:611,1
    - Dst: ifconfig_pool_ip_base_to_handle
      Src: /src/openvpn/src/openvpn/pool.c:664,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:688,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/pool.c:727,1
    - Dst: ifconfig_pool_msg
      Src: /src/openvpn/src/openvpn/pool.c:725,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/pool.c:601,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/pool.c:615,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/pool.c:631,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:631,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/pool.c:651,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/pool.c:674,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/pool.c:674,1
    - Dst: ifconfig_pool_ipv6_base_to_handle
      Src: /src/openvpn/src/openvpn/pool.c:685,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:710,1
    - Dst: ifconfig_pool_set
      Src: /src/openvpn/src/openvpn/pool.c:721,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/pool.c:606,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/pool.c:605,1
    - Dst: status_read
      Src: /src/openvpn/src/openvpn/pool.c:616,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/pool.c:654,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/pool.c:643,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/pool.c:644,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:680,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:720,1
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/pool.c:610,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:615,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/pool.c:620,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:659,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/pool.c:625,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:667,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/pool.c:678,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 74
    argCount: 2
    argNames:
    - persist
    - pool
    argTypes:
    - struct ifconfig_pool_persist*
    - struct ifconfig_pool*
    constantsTouched: []
    func_position:
      end: 729
      start: 596
    functionDepth: 0
    functionLinenumber: 596
    functionLinenumberEnd: 729
    functionName: ifconfig_pool_read
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - msg
    - BLEN
    - ALLOC_ARRAY_CLEAR_GC
    - status_read
    - gc_new
    - gc_free
    - ifconfig_pool_ipv6_base_to_handle
    - buf_init
    - buf_parse
    - update_time
    - getaddr
    - strlen
    - alloc_buf_gc
    - get_ipv6_addr
    - BSTR
    - ifconfig_pool_ip_base_to_handle
    - ifconfig_pool_msg
    - ifconfig_pool_set
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void ifconfig_pool_read(struct ifconfig_pool_persist *persist, struct
      ifconfig_pool *pool) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: status_rw_flags
      Src: /src/openvpn/src/openvpn/pool.c:734,1
    - Dst: status_reset
      Src: /src/openvpn/src/openvpn/pool.c:736,1
    - Dst: ifconfig_pool_list
      Src: /src/openvpn/src/openvpn/pool.c:737,1
    - Dst: status_flush
      Src: /src/openvpn/src/openvpn/pool.c:738,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 2
    argNames:
    - persist
    - pool
    argTypes:
    - struct ifconfig_pool_persist*
    - struct ifconfig_pool*
    constantsTouched: []
    func_position:
      end: 740
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 740
    functionName: ifconfig_pool_write
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_list
    - status_flush
    - status_reset
    - status_rw_flags
    linkageType: ''
    returnType: void
    signature: 'void ifconfig_pool_write(struct ifconfig_pool_persist *persist, const
      struct ifconfig_pool *pool) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/pool.c:122,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:128,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:129,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:134,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/pool.c:127,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:135,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/pool.c:136,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/pool.c:140,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - msglevel
    - start
    - end
    argTypes:
    - int
    - in_addr_t
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 142
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 142
    functionName: ifconfig_pool_verify_range
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: bool
    signature: 'bool ifconfig_pool_verify_range(const int msglevel, const in_addr_t
      start, const in_addr_t end) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/pool.c:554,1
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/pool.c:565,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/pool.c:556,1
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/pool.c:560,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - filename
    - refresh_freq
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 568
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 568
    functionName: ifconfig_pool_persist_init
    functionSourceFile: /src/openvpn/src/openvpn/pool.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    - ASSERT
    - status_open
    linkageType: ''
    returnType: struct ifconfig_pool_persist*
    signature: 'struct ifconfig_pool_persist *ifconfig_pool_persist_init(const char
      *filename, int refresh_freq) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: occ_reset_op
    functionSourceFile: /src/openvpn/src/openvpn/occ.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int occ_reset_op(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_defined
      Src: /src/openvpn/src/openvpn/occ.h:127,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/occ.h:128,1
    - Dst: TO_LINK_DEF
      Src: /src/openvpn/src/openvpn/occ.h:130,1
    - Dst: check_send_occ_load_test_dowork
      Src: /src/openvpn/src/openvpn/occ.h:132,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 134
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 134
    functionName: check_send_occ_load_test
    functionSourceFile: /src/openvpn/src/openvpn/occ.h
    functionUses: []
    functionsReached:
    - event_timeout_defined
    - event_timeout_trigger
    - check_send_occ_load_test_dowork
    - TO_LINK_DEF
    linkageType: ''
    returnType: void
    signature: 'static inline void check_send_occ_load_test(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/occ.h:168,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 170
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 170
    functionName: cc_exit_notify_enabled
    functionSourceFile: /src/openvpn/src/openvpn/occ.h
    functionUses: []
    functionsReached:
    - get_primary_key
    linkageType: ''
    returnType: bool
    signature: 'static inline bool cc_exit_notify_enabled(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_string_match_head
      Src: /src/openvpn/src/openvpn/occ.h:85,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 86
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 86
    functionName: is_occ_msg
    functionSourceFile: /src/openvpn/src/openvpn/occ.h
    functionUses: []
    functionsReached:
    - buf_string_match_head
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_occ_msg(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_defined
      Src: /src/openvpn/src/openvpn/occ.h:112,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/occ.h:113,1
    - Dst: TO_LINK_DEF
      Src: /src/openvpn/src/openvpn/occ.h:115,1
    - Dst: check_send_occ_req_dowork
      Src: /src/openvpn/src/openvpn/occ.h:117,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 119
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 119
    functionName: check_send_occ_req
    functionSourceFile: /src/openvpn/src/openvpn/occ.h
    functionUses: []
    functionsReached:
    - event_timeout_defined
    - event_timeout_trigger
    - check_send_occ_req_dowork
    - TO_LINK_DEF
    linkageType: ''
    returnType: void
    signature: 'static inline void check_send_occ_req(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TO_LINK_DEF
      Src: /src/openvpn/src/openvpn/occ.h:144,1
    - Dst: tv_clear
      Src: /src/openvpn/src/openvpn/occ.h:150,1
    - Dst: check_send_occ_msg_dowork
      Src: /src/openvpn/src/openvpn/occ.h:146,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 153
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 153
    functionName: check_send_occ_msg
    functionSourceFile: /src/openvpn/src/openvpn/occ.h
    functionUses: []
    functionsReached:
    - check_send_occ_msg_dowork
    - tv_clear
    - TO_LINK_DEF
    linkageType: ''
    returnType: void
    signature: 'static inline void check_send_occ_msg(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/run_command.c:154,1
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/run_command.c:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 160
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 160
    functionName: openvpn_execve_allowed
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached:
    - script_security
    linkageType: ''
    returnType: bool
    signature: 'bool openvpn_execve_allowed(const unsigned int flags) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/run_command.c:59,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:73,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:78,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:64,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:69,1
    - Dst: WIFEXITED
      Src: /src/openvpn/src/openvpn/run_command.c:82,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:84,1
    - Dst: WEXITSTATUS
      Src: /src/openvpn/src/openvpn/run_command.c:88,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:91,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:95,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/run_command.c:99,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 21
    argCount: 2
    argNames:
    - stat
    - gc
    argTypes:
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 106
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 106
    functionName: system_error_message
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached:
    - buf_printf
    - WEXITSTATUS
    - WIFEXITED
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *system_error_message(int stat, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 45
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 45
    functionName: script_security
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int script_security(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - level
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: script_security_set
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void script_security_set(int level) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: waitpid
      Src: /src/openvpn/src/openvpn/run_command.c:117,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:134,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:129,1
    - Dst: WEXITSTATUS
      Src: /src/openvpn/src/openvpn/run_command.c:125,1
    - Dst: WIFEXITED
      Src: /src/openvpn/src/openvpn/run_command.c:123,1
    - Dst: WIFSIGNALED
      Src: /src/openvpn/src/openvpn/run_command.c:139,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:141,1
    - Dst: WTERMSIG
      Src: /src/openvpn/src/openvpn/run_command.c:142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 3
    argNames:
    - pid
    - msg_prefix
    - msglevel
    argTypes:
    - pid_t
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 146
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 146
    functionName: openvpn_waitpid_check
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached:
    - WTERMSIG
    - msg
    - WIFEXITED
    - waitpid
    - WIFSIGNALED
    - WEXITSTATUS
    linkageType: ''
    returnType: bool
    signature: 'bool openvpn_waitpid_check(pid_t pid, const char *msg_prefix, int
      msglevel) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/run_command.c:239,1
    - Dst: platform_system_ok
      Src: /src/openvpn/src/openvpn/run_command.c:256,1
    - Dst: platform_ret_code
      Src: /src/openvpn/src/openvpn/run_command.c:245,1
    - Dst: openvpn_execve
      Src: /src/openvpn/src/openvpn/run_command.c:240,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:263,1
    - Dst: system_error_message
      Src: /src/openvpn/src/openvpn/run_command.c:265,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/run_command.c:268,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 22
    argCount: 4
    argNames:
    - a
    - es
    - flags
    - error_message
    argTypes:
    - struct argv*
    - struct env_set*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 271
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 271
    functionName: openvpn_execve_check
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached:
    - system_error_message
    - platform_ret_code
    - msg
    - gc_new
    - openvpn_execve
    - gc_free
    - platform_system_ok
    linkageType: ''
    returnType: int
    signature: 'int openvpn_execve_check(const struct argv *a, const struct env_set
      *es, const unsigned int flags, const char *error_message) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: dup2
      Src: /src/openvpn/src/openvpn/run_command.c:302,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:323,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:318,1
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/run_command.c:327,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/run_command.c:341,1
    - Dst: make_env_array
      Src: /src/openvpn/src/openvpn/run_command.c:292,1
    - Dst: pipe
      Src: /src/openvpn/src/openvpn/run_command.c:296,1
    - Dst: waitpid
      Src: /src/openvpn/src/openvpn/run_command.c:311,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/run_command.c:317,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/run_command.c:316,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:329,1
    - Dst: execve
      Src: /src/openvpn/src/openvpn/run_command.c:303,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:333,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:338,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/run_command.c:281,1
    - Dst: fork
      Src: /src/openvpn/src/openvpn/run_command.c:298,1
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/run_command.c:288,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/run_command.c:301,1
    - Dst: exit
      Src: /src/openvpn/src/openvpn/run_command.c:304,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/run_command.c:310,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 2
    argNames:
    - a
    - es
    argTypes:
    - struct argv*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 343
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 343
    functionName: openvpn_popen
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached:
    - exit
    - make_env_array
    - script_security
    - msg
    - pipe
    - gc_new
    - waitpid
    - gc_free
    - fork
    - dup2
    - execve
    - close
    linkageType: ''
    returnType: int
    signature: 'int openvpn_popen(const struct argv *a, const struct env_set *es) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/run_command.c:174,1
    - Dst: execve
      Src: /src/openvpn/src/openvpn/run_command.c:191,1
    - Dst: make_env_array
      Src: /src/openvpn/src/openvpn/run_command.c:185,1
    - Dst: openvpn_execve_allowed
      Src: /src/openvpn/src/openvpn/run_command.c:181,1
    - Dst: fork
      Src: /src/openvpn/src/openvpn/run_command.c:188,1
    - Dst: exit
      Src: /src/openvpn/src/openvpn/run_command.c:192,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:196,1
    - Dst: waitpid
      Src: /src/openvpn/src/openvpn/run_command.c:204,1
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/run_command.c:213,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:215,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:220,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/run_command.c:225,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/run_command.c:228,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 37
    argCount: 3
    argNames:
    - a
    - es
    - flags
    argTypes:
    - struct argv*
    - struct env_set*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 230
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 230
    functionName: openvpn_execve
    functionSourceFile: /src/openvpn/src/openvpn/run_command.c
    functionUses: []
    functionsReached:
    - exit
    - make_env_array
    - msg
    - openvpn_execve_allowed
    - script_security
    - gc_new
    - waitpid
    - gc_free
    - execve
    - fork
    linkageType: ''
    returnType: int
    signature: 'int openvpn_execve(const struct argv *a, const struct env_set *es,
      const unsigned int flags) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/reflect_filter.c:49,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/reflect_filter.c:65,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 1
    argNames:
    - irl
    argTypes:
    - struct initial_packet_rate_limit*
    constantsTouched: []
    func_position:
      end: 72
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 72
    functionName: reflect_filter_rate_limit_check
    functionSourceFile: /src/openvpn/src/openvpn/reflect_filter.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool reflect_filter_rate_limit_check(struct initial_packet_rate_limit
      *irl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/reflect_filter.c:103,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - irl
    argTypes:
    - struct initial_packet_rate_limit*
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    functionName: initial_rate_limit_free
    functionSourceFile: /src/openvpn/src/openvpn/reflect_filter.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void initial_rate_limit_free(struct initial_packet_rate_limit *irl) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - irl
    argTypes:
    - struct initial_packet_rate_limit*
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: reflect_filter_rate_limit_decrease
    functionSourceFile: /src/openvpn/src/openvpn/reflect_filter.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void reflect_filter_rate_limit_decrease(struct initial_packet_rate_limit
      *irl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/reflect_filter.c:90,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - max_per_period
    - period_length
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 98
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 98
    functionName: initial_rate_limit_init
    functionSourceFile: /src/openvpn/src/openvpn/reflect_filter.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ
    linkageType: ''
    returnType: struct initial_packet_rate_limit*
    signature: 'struct initial_packet_rate_limit *initial_rate_limit_init(int max_per_period,
      int period_length) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 155
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 155
    functionName: tls_clear_error
    functionSourceFile: /src/openvpn/src/openvpn/ssl_mbedtls.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void tls_clear_error(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strtol
      Src: /src/openvpn/src/openvpn/dns.c:171,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 3
    argNames:
    - priority
    - str
    - pulled
    argTypes:
    - long*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 178
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 178
    functionName: dns_server_priority_parse
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - strtol
    linkageType: ''
    returnType: bool
    signature: 'bool dns_server_priority_parse(long *priority, const char *str, bool
      pulled) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/dns.c:245,1
    - Dst: clone_dns_domains
      Src: /src/openvpn/src/openvpn/dns.c:248,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 8
    argCount: 2
    argNames:
    - server
    - gc
    argTypes:
    - struct dns_server*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 254
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 254
    functionName: clone_dns_servers
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    - clone_dns_domains
    linkageType: ''
    returnType: struct dns_server*
    signature: 'static struct dns_server *clone_dns_servers(const struct dns_server
      *server, struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/openvpn/dns.c:364,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:371,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/dns.c:368,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/dns.c:384,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 24
    argCount: 5
    argNames:
    - what
    - src
    - nrpt_domains
    - dst
    - dst_size
    argTypes:
    - char*
    - struct dns_domain*
    - bool
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 393
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 393
    functionName: make_domain_list
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - strlen
    - memset
    - strncpy
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void make_domain_list(const char *what, const struct dns_domain
      *src, bool nrpt_domains, char *dst, size_t dst_size) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dns.c:478,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:487,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/dns.c:490,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/dns.c:482,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 5
    argNames:
    - es
    - format
    - i
    - j
    - value
    argTypes:
    - struct env_set*
    - char*
    - int
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 491
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 491
    functionName: setenv_dns_option
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - setenv_str
    - msg
    - snprintf
    linkageType: ''
    returnType: void
    signature: 'static void setenv_dns_option(struct env_set *es, const char *format,
      int i, int j, const char *value) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dns.c:566,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/dns.c:568,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/dns.c:567,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/dns.c:572,1
    - Dst: updown_env_set
      Src: /src/openvpn/src/openvpn/dns.c:576,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/dns.c:579,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/dns.c:580,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/dns.c:584,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/dns.c:588,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/dns.c:590,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dns.c:591,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 18
    argCount: 4
    argNames:
    - up
    - vars_file
    - o
    - tt
    argTypes:
    - bool
    - char*
    - struct dns_options*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 593
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 593
    functionName: do_run_up_down_command
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - openvpn_run_script
    - argv_msg
    - argv_printf
    - argv_free
    - updown_env_set
    - gc_new
    - setenv_str
    - gc_free
    - argv_new
    - env_set_create
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'static int do_run_up_down_command(bool up, const char *vars_file,
      const struct dns_options *o, const struct tuntap *tt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/dns.c:188,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 13
    argCount: 3
    argNames:
    - entry
    - priority
    - gc
    argTypes:
    - struct dns_server**
    - long
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 200
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 200
    functionName: dns_server_get
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct dns_server*
    signature: 'struct dns_server *dns_server_get(struct dns_server **entry, long
      priority, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/openvpn/dns.c:261,1
    - Dst: clone_dns_domains
      Src: /src/openvpn/src/openvpn/dns.c:262,1
    - Dst: clone_dns_servers
      Src: /src/openvpn/src/openvpn/dns.c:263,1
    - Dst: clone_dns_servers
      Src: /src/openvpn/src/openvpn/dns.c:264,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - o
    - gc
    argTypes:
    - struct dns_options*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 269
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 269
    functionName: clone_dns_options
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - clone_dns_servers
    - memset
    - clone_dns_domains
    linkageType: ''
    returnType: struct dns_options
    signature: 'struct dns_options clone_dns_options(const struct dns_options *o,
      struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:407,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/dns.c:450,1
    - Dst: make_domain_list
      Src: /src/openvpn/src/openvpn/dns.c:457,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:453,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/dns.c:440,1
    - Dst: make_domain_list
      Src: /src/openvpn/src/openvpn/dns.c:460,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/dns.c:463,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 31
    argCount: 3
    argNames:
    - add
    - o
    - tt
    argTypes:
    - bool
    - struct options*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 464
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 464
    functionName: run_up_down_service
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - make_domain_list
    - strncpynt
    - inet_ntop
    linkageType: ''
    returnType: void
    signature: 'static void run_up_down_service(bool add, const struct options *o,
      const struct tuntap *tt) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dns.c:496,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:503,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:517,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:512,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/dns.c:513,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/dns.c:518,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:522,1
    - Dst: print_in_port_t
      Src: /src/openvpn/src/openvpn/dns.c:523,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:531,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:537,1
    - Dst: transport_value
      Src: /src/openvpn/src/openvpn/dns.c:544,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:548,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dns.c:552,1
    - Dst: setenv_dns_option
      Src: /src/openvpn/src/openvpn/dns.c:543,1
    - Dst: dnssec_value
      Src: /src/openvpn/src/openvpn/dns.c:538,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 45
    argCount: 2
    argNames:
    - o
    - es
    argTypes:
    - struct dns_options*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 553
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 553
    functionName: setenv_dns_options
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - dnssec_value
    - print_in_addr_t
    - transport_value
    - setenv_dns_option
    - gc_new
    - print_in6_addr
    - gc_free
    - print_in_port_t
    linkageType: ''
    returnType: void
    signature: 'static void setenv_dns_options(const struct dns_options *o, struct
      env_set *es) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:612,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/dns.c:639,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/dns.c:637,1
    - Dst: exit
      Src: /src/openvpn/src/openvpn/dns.c:675,1
    - Dst: pipe
      Src: /src/openvpn/src/openvpn/dns.c:600,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:609,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:611,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/dns.c:642,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/dns.c:638,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/dns.c:650,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:658,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:674,1
    - Dst: fork
      Src: /src/openvpn/src/openvpn/dns.c:606,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:610,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:619,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/dns.c:641,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:620,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:657,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:603,1
    - Dst: pipe
      Src: /src/openvpn/src/openvpn/dns.c:601,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:613,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:632,1
    - Dst: signal
      Src: /src/openvpn/src/openvpn/dns.c:640,1
    - Dst: exit
      Src: /src/openvpn/src/openvpn/dns.c:659,1
    - Dst: do_run_up_down_command
      Src: /src/openvpn/src/openvpn/dns.c:663,1
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/dns.c:664,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/dns.c:669,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/dns.c:673,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 71
    argCount: 4
    argNames:
    - up
    - o
    - tt
    - updown_runner
    argTypes:
    - bool
    - struct options*
    - struct tuntap*
    - struct dns_updown_runner_info*
    constantsTouched: []
    func_position:
      end: 688
      start: 595
    functionDepth: 0
    functionLinenumber: 595
    functionLinenumberEnd: 688
    functionName: run_updown_runner
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - exit
    - msg
    - signal
    - pipe
    - do_run_up_down_command
    - read
    - write
    - fork
    - platform_unlink
    - close
    linkageType: ''
    returnType: bool
    signature: 'static bool run_updown_runner(bool up, struct options *o, const struct
      tuntap *tt, struct dns_updown_runner_info *updown_runner) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strtoul
      Src: /src/openvpn/src/openvpn/dns.c:51,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 2
    argNames:
    - port
    - port_str
    argTypes:
    - in_port_t*
    - char*
    constantsTouched: []
    func_position:
      end: 58
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 58
    functionName: dns_server_port_parse
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - strtoul
    linkageType: ''
    returnType: bool
    signature: 'static bool dns_server_port_parse(in_port_t *port, char *port_str) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - dnssec
    argTypes:
    - enum dns_security
    constantsTouched: []
    func_position:
      end: 331
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 331
    functionName: dnssec_value
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *dnssec_value(const enum dns_security dnssec) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - transport
    argTypes:
    - enum dns_server_transport
    constantsTouched: []
    func_position:
      end: 350
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 350
    functionName: transport_value
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *transport_value(const enum dns_server_transport
      transport) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/dns.c:558,1
    - Dst: setenv_dns_options
      Src: /src/openvpn/src/openvpn/dns.c:560,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/dns.c:559,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 4
    argNames:
    - up
    - o
    - tt
    - es
    argTypes:
    - bool
    - struct dns_options*
    - struct tuntap*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 561
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 561
    functionName: updown_env_set
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - setenv_str
    - setenv_dns_options
    linkageType: ''
    returnType: void
    signature: 'static void updown_env_set(bool up, const struct dns_options *o, const
      struct tuntap *tt, struct env_set *es) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: do_run_up_down_command
      Src: /src/openvpn/src/openvpn/dns.c:703,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dns.c:716,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/dns.c:717,1
    - Dst: run_updown_runner
      Src: /src/openvpn/src/openvpn/dns.c:710,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:720,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/dns.c:724,1
    - Dst: updown_env_set
      Src: /src/openvpn/src/openvpn/dns.c:725,1
    - Dst: env_set_write_file
      Src: /src/openvpn/src/openvpn/dns.c:726,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/dns.c:729,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/dns.c:732,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dns.c:760,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/dns.c:747,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:763,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:754,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:739,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 45
    argCount: 4
    argNames:
    - up
    - o
    - tt
    - updown_runner
    argTypes:
    - bool
    - struct options*
    - struct tuntap*
    - struct dns_updown_runner_info*
    constantsTouched: []
    func_position:
      end: 764
      start: 690
    functionDepth: 0
    functionLinenumber: 690
    functionLinenumberEnd: 764
    functionName: run_up_down_command
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - msg
    - env_set_write_file
    - updown_env_set
    - gc_new
    - do_run_up_down_command
    - gc_free
    - write
    - env_set_create
    - read
    - strlen
    - platform_create_temp_file
    - run_updown_runner
    linkageType: ''
    returnType: void
    signature: 'static void run_up_down_command(bool up, struct options *o, const
      struct tuntap *tt, struct dns_updown_runner_info *updown_runner) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/dns.c:73,1
    - Dst: dns_server_port_parse
      Src: /src/openvpn/src/openvpn/dns.c:96,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/dns.c:112,1
    - Dst: strrchr
      Src: /src/openvpn/src/openvpn/dns.c:74,1
    - Dst: dns_server_port_parse
      Src: /src/openvpn/src/openvpn/dns.c:81,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/dns.c:117,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/dns.c:122,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/dns.c:142,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 55
    argCount: 2
    argNames:
    - server
    - addr
    argTypes:
    - struct dns_server*
    - char*
    constantsTouched: []
    func_position:
      end: 144
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 144
    functionName: dns_server_addr_parse
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - SIZE
    - strchr
    - openvpn_getaddrinfo
    - dns_server_port_parse
    - strrchr
    - strncpy
    - freeaddrinfo
    linkageType: ''
    returnType: bool
    signature: 'bool dns_server_addr_parse(struct dns_server *server, const char *addr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:211,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 2
    argNames:
    - msglevel
    - o
    argTypes:
    - int
    - struct dns_options*
    constantsTouched: []
    func_position:
      end: 217
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 217
    functionName: dns_options_verify
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool dns_options_verify(int msglevel, const struct dns_options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct dns_options*
    constantsTouched: []
    func_position:
      end: 276
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 276
    functionName: dns_options_preprocess_pull
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void dns_options_preprocess_pull(struct dns_options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/dns.c:158,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 7
    argCount: 3
    argNames:
    - entry
    - domains
    - gc
    argTypes:
    - struct dns_domain**
    - char**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 163
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 163
    functionName: dns_domain_list_append
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: void
    signature: 'void dns_domain_list_append(struct dns_domain **entry, char **domains,
      struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/dns.c:227,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 6
    argCount: 2
    argNames:
    - domain
    - gc
    argTypes:
    - struct dns_domain*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 235
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 235
    functionName: clone_dns_domains
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct dns_domain*
    signature: 'static struct dns_domain *clone_dns_domains(const struct dns_domain
      *domain, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 17
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct dns_options*
    constantsTouched: []
    func_position:
      end: 312
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 312
    functionName: dns_options_postprocess_pull
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void dns_options_postprocess_pull(struct dns_options *o) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:870,1
    - Dst: run_up_down_command
      Src: /src/openvpn/src/openvpn/dns.c:885,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:876,1
    - Dst: run_up_down_service
      Src: /src/openvpn/src/openvpn/dns.c:883,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 23
    argCount: 4
    argNames:
    - up
    - o
    - tt
    - duri
    argTypes:
    - bool
    - struct options*
    - struct tuntap*
    - struct dns_updown_runner_info*
    constantsTouched: []
    func_position:
      end: 887
      start: 847
    functionDepth: 0
    functionLinenumber: 847
    functionLinenumberEnd: 887
    functionName: run_dns_up_down
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - msg
    - run_up_down_command
    - run_up_down_service
    linkageType: ''
    returnType: void
    signature: 'void run_dns_up_down(bool up, struct options *o, const struct tuntap
      *tt, struct dns_updown_runner_info *duri) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dns.c:771,1
    - Dst: print_in_port_t
      Src: /src/openvpn/src/openvpn/dns.c:796,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:777,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/dns.c:785,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/dns.c:790,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:797,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:801,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:807,1
    - Dst: dnssec_value
      Src: /src/openvpn/src/openvpn/dns.c:807,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:812,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:816,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:822,1
    - Dst: transport_value
      Src: /src/openvpn/src/openvpn/dns.c:812,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:836,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:839,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dns.c:844,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dns.c:825,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 40
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct dns_options*
    constantsTouched: []
    func_position:
      end: 845
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 845
    functionName: show_dns_options
    functionSourceFile: /src/openvpn/src/openvpn/dns.c
    functionUses: []
    functionsReached:
    - dnssec_value
    - msg
    - print_in_addr_t
    - transport_value
    - gc_new
    - print_in6_addr
    - gc_free
    - print_in_port_t
    linkageType: ''
    returnType: void
    signature: 'void show_dns_options(const struct dns_options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: query_user_exec_systemd
      Src: /src/openvpn/src/openvpn/console.h:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 97
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 97
    functionName: query_user_exec
    functionSourceFile: /src/openvpn/src/openvpn/console.h
    functionUses: []
    functionsReached:
    - query_user_exec_systemd
    linkageType: ''
    returnType: bool
    signature: 'static inline bool query_user_exec(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: query_user_clear
      Src: /src/openvpn/src/openvpn/console.h:125,1
    - Dst: query_user_exec
      Src: /src/openvpn/src/openvpn/console.h:127,1
    - Dst: query_user_add
      Src: /src/openvpn/src/openvpn/console.h:126,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 5
    argNames:
    - prompt
    - prompt_len
    - resp
    - resp_len
    - echo
    argTypes:
    - char*
    - size_t
    - char*
    - size_t
    - bool
    constantsTouched: []
    func_position:
      end: 128
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 128
    functionName: query_user_SINGLE
    functionSourceFile: /src/openvpn/src/openvpn/console.h
    functionUses: []
    functionsReached:
    - query_user_clear
    - query_user_exec
    - query_user_add
    linkageType: ''
    returnType: bool
    signature: 'static inline bool query_user_SINGLE(char *prompt, size_t prompt_len,
      char *resp, size_t resp_len, bool echo) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: query_user_exec_builtin
      Src: /src/openvpn/src/openvpn/console.h:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 109
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 109
    functionName: query_user_exec
    functionSourceFile: /src/openvpn/src/openvpn/console.h
    functionUses: []
    functionsReached:
    - query_user_exec_builtin
    linkageType: ''
    returnType: bool
    signature: 'static inline bool query_user_exec(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.h:441,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 442
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 442
    functionName: management_query_user_pass_enabled
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached:
    - BOOL_CAST
    linkageType: ''
    returnType: bool
    signature: 'static inline bool management_query_user_pass_enabled(const struct
      management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.h:453,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 454
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 454
    functionName: management_query_proxy_enabled
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached:
    - BOOL_CAST
    linkageType: ''
    returnType: bool
    signature: 'static inline bool management_query_proxy_enabled(const struct management
      *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - h
    argTypes:
    - struct log_history*
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 160
    functionName: log_history_size
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int log_history_size(const struct log_history *h) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 436
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 436
    functionName: management_connected
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool management_connected(const struct management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.h:447,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 448
      start: 444
    functionDepth: 0
    functionLinenumber: 444
    functionLinenumberEnd: 448
    functionName: management_query_remote_enabled
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached:
    - BOOL_CAST
    linkageType: ''
    returnType: bool
    signature: 'static inline bool management_query_remote_enabled(const struct management
      *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.h:460,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 461
      start: 457
    functionDepth: 0
    functionLinenumber: 457
    functionLinenumberEnd: 461
    functionName: management_enable_def_auth
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached:
    - BOOL_CAST
    linkageType: ''
    returnType: bool
    signature: 'static inline bool management_enable_def_auth(const struct management
      *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 3
    argNames:
    - man
    - size_in
    - size_out
    argTypes:
    - struct management*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 531
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 531
    functionName: management_bytes_client
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void management_bytes_client(struct management *man,
      const int size_in, const int size_out) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_bytecount_output_server
      Src: /src/openvpn/src/openvpn/manage.h:548,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 11
    argCount: 4
    argNames:
    - man
    - bytes_in_total
    - bytes_out_total
    - mdac
    argTypes:
    - struct management*
    - counter_type*
    - counter_type*
    - struct man_def_auth_context*
    constantsTouched: []
    func_position:
      end: 550
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 550
    functionName: management_bytes_server
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached:
    - man_bytecount_output_server
    linkageType: ''
    returnType: void
    signature: 'static inline void management_bytes_server(struct management *man,
      const counter_type *bytes_in_total, const counter_type *bytes_out_total, struct
      man_def_auth_context *mdac) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - h
    argTypes:
    - struct log_history*
    constantsTouched: []
    func_position:
      end: 166
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 166
    functionName: log_history_capacity
    functionSourceFile: /src/openvpn/src/openvpn/manage.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int log_history_capacity(const struct log_history *h) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/occ.c:156,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/occ.c:168,1
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/occ.c:178,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 180
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 180
    functionName: check_send_occ_req_dowork
    functionSourceFile: /src/openvpn/src/openvpn/occ.c
    functionUses: []
    functionsReached:
    - event_timeout_reset
    - msg
    - event_timeout_clear
    linkageType: ''
    returnType: void
    signature: 'void check_send_occ_req_dowork(struct context *c) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:403,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/occ.c:416,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/occ.c:399,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/occ.c:425,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:429,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/occ.c:364,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:373,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/occ.c:365,1
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/occ.c:379,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:387,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:378,1
    - Dst: options_cmp_equal_safe
      Src: /src/openvpn/src/openvpn/occ.c:390,1
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/occ.c:405,1
    - Dst: options_warning_safe
      Src: /src/openvpn/src/openvpn/occ.c:394,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/occ.c:430,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/occ.c:364,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:368,1
    - Dst: TLS_MODE
      Src: /src/openvpn/src/openvpn/occ.c:388,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/occ.c:394,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/occ.c:410,1
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/occ.c:404,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/occ.c:390,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/occ.c:421,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 54
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 434
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 434
    functionName: process_received_occ_msg
    functionSourceFile: /src/openvpn/src/openvpn/occ.c
    functionUses: []
    functionsReached:
    - dmsg
    - BPTR
    - options_warning_safe
    - event_timeout_clear
    - msg
    - TLS_MODE
    - register_signal
    - buf_read_u16
    - ASSERT
    - proto_is_dgram
    - buf_read_u8
    - options_cmp_equal_safe
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'void process_received_occ_msg(struct context *c) '
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/occ.c:223,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:250,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:276,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/occ.c:285,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/occ.c:310,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:321,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:340,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/occ.c:221,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/occ.c:222,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:232,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/occ.c:246,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:259,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/occ.c:268,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:281,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:289,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/occ.c:321,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:327,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/occ.c:223,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:264,1
    - Dst: frame_calculate_payload_overhead
      Src: /src/openvpn/src/openvpn/occ.c:305,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/occ.c:344,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/occ.c:334,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/occ.c:221,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/occ.c:222,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:228,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:241,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/occ.c:245,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:255,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/occ.c:272,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/occ.c:297,1
    - Dst: frame_calculate_protocol_header_size
      Src: /src/openvpn/src/openvpn/occ.c:308,1
    - Dst: encrypt_sign
      Src: /src/openvpn/src/openvpn/occ.c:355,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 82
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 359
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 359
    functionName: check_send_occ_msg_dowork
    functionSourceFile: /src/openvpn/src/openvpn/occ.c
    functionUses: []
    functionsReached:
    - get_random
    - buf_safe
    - buf_init
    - buf_write
    - dmsg
    - BLEN
    - frame_calculate_payload_overhead
    - strlen
    - min_int
    - frame_calculate_protocol_header_size
    - ASSERT
    - encrypt_sign
    - buf_write_u8
    - buf_write_u16
    linkageType: ''
    returnType: void
    signature: 'void check_send_occ_msg_dowork(struct context *c) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: connection_established
      Src: /src/openvpn/src/openvpn/occ.c:185,1
    - Dst: frame_calculate_protocol_header_size
      Src: /src/openvpn/src/openvpn/occ.c:201,1
    - Dst: frame_calculate_payload_size
      Src: /src/openvpn/src/openvpn/occ.c:199,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/occ.c:191,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/occ.c:207,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/occ.c:209,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 18
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 213
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 213
    functionName: check_send_occ_load_test_dowork
    functionSourceFile: /src/openvpn/src/openvpn/occ.c
    functionUses: []
    functionsReached:
    - frame_calculate_payload_size
    - connection_established
    - event_timeout_clear
    - msg
    - frame_calculate_protocol_header_size
    linkageType: ''
    returnType: void
    signature: 'void check_send_occ_load_test_dowork(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sigfillset
      Src: /src/openvpn/src/openvpn/sig.c:128,1
    - Dst: sigprocmask
      Src: /src/openvpn/src/openvpn/sig.c:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 131
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 131
    functionName: block_async_signals
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - sigprocmask
    - sigfillset
    linkageType: ''
    returnType: void
    signature: 'static inline void block_async_signals(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: block_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:207,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:212,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:212,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:217,1
    - Dst: try_throw_signal
      Src: /src/openvpn/src/openvpn/sig.c:209,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:217,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:218,1
    - Dst: unblock_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:221,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - signum
    - signal_text
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 222
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 222
    functionName: throw_signal_soft
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - unblock_async_signals
    - block_async_signals
    - msg
    - signal_name
    - try_throw_signal
    linkageType: ''
    returnType: void
    signature: 'void throw_signal_soft(const int signum, const char *signal_text) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/sig.c:402,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:410,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:414,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:411,1
    - Dst: sigfillset
      Src: /src/openvpn/src/openvpn/sig.c:404,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:415,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:416,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:417,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/sig.c:420,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/sig.c:421,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/sig.c:422,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 423
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 423
    functionName: pre_init_signal_catch
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - signal_reset
    - sigaction
    - CLEAR
    - sigfillset
    linkageType: ''
    returnType: void
    signature: 'void pre_init_signal_catch(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_defined
      Src: /src/openvpn/src/openvpn/sig.c:629,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:632,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/sig.c:634,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:633,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 636
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 636
    functionName: remap_restart_signals
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - event_timeout_defined
    - msg
    - signal_name
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'static void remap_restart_signals(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/sig.c:68,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/sig.c:70,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - signame
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 76
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 76
    functionName: parse_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - strcmp
    - SIZE
    linkageType: ''
    returnType: int
    signature: 'int parse_signal(const char *signame) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:114,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - signum
    - sigtext
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 116
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 116
    functionName: signal_description
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - signal_name
    linkageType: ''
    returnType: char*
    signature: 'const char *signal_description(const int signum, const char *sigtext) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:187,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:180,1
    - Dst: try_throw_signal
      Src: /src/openvpn/src/openvpn/sig.c:185,1
    - Dst: block_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:183,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:187,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:188,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:192,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:192,1
    - Dst: unblock_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:195,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - signum
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 196
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 196
    functionName: throw_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - unblock_async_signals
    - msg
    - block_async_signals
    - signal_name
    - try_throw_signal
    linkageType: ''
    returnType: void
    signature: 'void throw_signal(const int signum) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/sig.c:368,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:370,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 1
    argNames:
    - si
    argTypes:
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 378
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 378
    functionName: signal_restart_status
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - signal_name
    - management_set_state
    linkageType: ''
    returnType: void
    signature: 'void signal_restart_status(const struct signal_info *si) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/sig.c:485,1
    - Dst: dco_get_peer_stats
      Src: /src/openvpn/src/openvpn/sig.c:491,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:498,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/sig.c:498,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:502,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:514,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:512,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:522,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/sig.c:489,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:501,1
    - Dst: comp_print_stats
      Src: /src/openvpn/src/openvpn/sig.c:507,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:527,1
    - Dst: status_flush
      Src: /src/openvpn/src/openvpn/sig.c:528,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:497,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:500,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:511,1
    - Dst: tuntap_defined
      Src: /src/openvpn/src/openvpn/sig.c:517,1
    - Dst: tap_win_getinfo
      Src: /src/openvpn/src/openvpn/sig.c:519,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/sig.c:529,1
    - Dst: status_reset
      Src: /src/openvpn/src/openvpn/sig.c:487,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:499,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:503,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/sig.c:513,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 2
    argNames:
    - c
    - so
    argTypes:
    - struct context*
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 530
      start: 482
    functionDepth: 0
    functionLinenumber: 482
    functionLinenumberEnd: 530
    functionName: print_status
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - time_string
    - tap_win_getinfo
    - dco_get_peer_stats
    - dco_enabled
    - status_reset
    - gc_new
    - status_printf
    - comp_print_stats
    - gc_free
    - status_flush
    - tuntap_defined
    linkageType: ''
    returnType: void
    signature: 'void print_status(struct context *c, struct status_output *so) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: process_explicit_exit_notification_init
      Src: /src/openvpn/src/openvpn/sig.c:614,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 618
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 618
    functionName: process_sigterm
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - process_explicit_exit_notification_init
    linkageType: ''
    returnType: bool
    signature: 'static bool process_sigterm(struct context *c) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/sig.c:315,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:329,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:328,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:322,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:323,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:333,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:339,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 15
    argCount: 3
    argNames:
    - si
    - title
    - msglevel
    argTypes:
    - struct signal_info*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 341
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 341
    functionName: print_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - msg
    - signal_name
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void print_signal(const struct signal_info *si, const char *title,
      int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/sig.c:431,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:441,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:439,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:440,1
    - Dst: sigfillset
      Src: /src/openvpn/src/openvpn/sig.c:433,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:442,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:443,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:445,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 447
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 447
    functionName: post_init_signal_catch
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - sigaction
    - CLEAR
    - sigfillset
    linkageType: ''
    returnType: void
    signature: 'void post_init_signal_catch(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pre_init_signal_catch
      Src: /src/openvpn/src/openvpn/sig.c:469,1
    - Dst: post_init_signal_catch
      Src: /src/openvpn/src/openvpn/sig.c:473,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 475
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 475
    functionName: restore_signal_state
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - pre_init_signal_catch
    - post_init_signal_catch
    linkageType: ''
    returnType: void
    signature: 'void restore_signal_state(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/sig.c:454,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:458,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:456,1
    - Dst: sigaction
      Src: /src/openvpn/src/openvpn/sig.c:457,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 461
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 461
    functionName: halt_low_priority_signals
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - sigaction
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void halt_low_priority_signals(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: remap_restart_signals
      Src: /src/openvpn/src/openvpn/sig.c:643,1
    - Dst: process_sigusr2
      Src: /src/openvpn/src/openvpn/sig.c:651,1
    - Dst: process_sigterm
      Src: /src/openvpn/src/openvpn/sig.c:647,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 655
      start: 638
    functionDepth: 0
    functionLinenumber: 638
    functionLinenumberEnd: 655
    functionName: process_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - process_sigterm
    - remap_restart_signals
    - process_sigusr2
    linkageType: ''
    returnType: bool
    signature: 'bool process_signal(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: signal_priority
      Src: /src/openvpn/src/openvpn/sig.c:162,1
    - Dst: signal_priority
      Src: /src/openvpn/src/openvpn/sig.c:162,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 3
    argNames:
    - si
    - signum
    - source
    argTypes:
    - struct signal_info*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 169
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 169
    functionName: try_throw_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - signal_priority
    linkageType: ''
    returnType: bool
    signature: 'static bool try_throw_signal(struct signal_info *si, int signum, int
      source) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: try_throw_signal
      Src: /src/openvpn/src/openvpn/sig.c:385,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - signum
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 386
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 386
    functionName: signal_handler
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - try_throw_signal
    linkageType: ''
    returnType: void
    signature: 'static void signal_handler(const int signum) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sigemptyset
      Src: /src/openvpn/src/openvpn/sig.c:141,1
    - Dst: sigprocmask
      Src: /src/openvpn/src/openvpn/sig.c:142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: unblock_async_signals
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - sigprocmask
    - sigemptyset
    linkageType: ''
    returnType: void
    signature: 'static inline void unblock_async_signals(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: block_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:272,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:281,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:281,1
    - Dst: unblock_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:286,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 18
    argCount: 2
    argNames:
    - si
    - signum
    argTypes:
    - struct signal_info*
    - int
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: signal_reset
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - block_async_signals
    - unblock_async_signals
    - signal_name
    - msg
    linkageType: ''
    returnType: int
    signature: 'int signal_reset(struct signal_info *si, int signum) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/sig.c:81,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - sig
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 89
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 89
    functionName: signal_priority
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - SIZE
    linkageType: ''
    returnType: int
    signature: 'static int signal_priority(int sig) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: block_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:234,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/sig.c:240,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:244,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:244,1
    - Dst: try_throw_signal
      Src: /src/openvpn/src/openvpn/sig.c:237,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:249,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:249,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/sig.c:250,1
    - Dst: unblock_async_signals
      Src: /src/openvpn/src/openvpn/sig.c:255,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 3
    argNames:
    - si
    - signum
    - signal_text
    argTypes:
    - struct signal_info*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 257
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 257
    functionName: register_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - unblock_async_signals
    - block_async_signals
    - msg
    - signal_name
    - try_throw_signal
    - strcmp
    linkageType: ''
    returnType: void
    signature: 'void register_signal(struct signal_info *si, int signum, const char
      *signal_text) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/sig.c:539,1
    - Dst: halt_non_edge_triggered_signals
      Src: /src/openvpn/src/openvpn/sig.c:547,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/sig.c:543,1
    - Dst: reset_coarse_timers
      Src: /src/openvpn/src/openvpn/sig.c:544,1
    - Dst: halt_low_priority_signals
      Src: /src/openvpn/src/openvpn/sig.c:552,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/sig.c:553,1
    - Dst: cc_exit_notify_enabled
      Src: /src/openvpn/src/openvpn/sig.c:559,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/sig.c:561,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 563
      start: 536
    functionDepth: 0
    functionLinenumber: 536
    functionLinenumberEnd: 563
    functionName: process_explicit_exit_notification_init
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - msg
    - event_timeout_init
    - halt_non_edge_triggered_signals
    - send_control_channel_string
    - halt_low_priority_signals
    - signal_reset
    - reset_coarse_timers
    - cc_exit_notify_enabled
    linkageType: ''
    returnType: void
    signature: 'static void process_explicit_exit_notification_init(struct context
      *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/sig.c:594,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 596
      start: 589
    functionDepth: 0
    functionLinenumber: 589
    functionLinenumberEnd: 596
    functionName: remap_signal
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'void remap_signal(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/sig.c:95,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - sig
    - upper
    argTypes:
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 103
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 103
    functionName: signal_name
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - SIZE
    linkageType: ''
    returnType: char*
    signature: 'const char *signal_name(const int sig, const bool upper) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/sig.c:568,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/sig.c:576,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/sig.c:572,1
    - Dst: cc_exit_notify_enabled
      Src: /src/openvpn/src/openvpn/sig.c:578,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/sig.c:575,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 583
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 583
    functionName: process_explicit_exit_notification_timer_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - event_timeout_clear
    - register_signal
    - event_timeout_trigger
    - ASSERT
    - cc_exit_notify_enabled
    linkageType: ''
    returnType: void
    signature: 'void process_explicit_exit_notification_timer_wakeup(struct context
      *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/sig.c:601,1
    - Dst: print_status
      Src: /src/openvpn/src/openvpn/sig.c:602,1
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/sig.c:603,1
    - Dst: signal_reset
      Src: /src/openvpn/src/openvpn/sig.c:604,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 605
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 605
    functionName: process_sigusr2
    functionSourceFile: /src/openvpn/src/openvpn/sig.c
    functionUses: []
    functionsReached:
    - signal_reset
    - status_close
    - status_open
    - print_status
    linkageType: ''
    returnType: void
    signature: 'static void process_sigusr2(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:452,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:454,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:456,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:453,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:455,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:457,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:458,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:459,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 4
    argNames:
    - es
    - name
    - value
    - depth
    argTypes:
    - struct env_set*
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 460
      start: 446
    functionDepth: 0
    functionLinenumber: 446
    functionLinenumberEnd: 460
    functionName: do_setenv_x509
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - setenv_str
    - malloc
    - free
    - strlen
    - string_mod
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'static void do_setenv_x509(struct env_set *es, const char *name, char
      *value, int depth) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_subject_name
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:563,1
    - Dst: X509_NAME_get_entry
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:568,1
    - Dst: X509_NAME_entry_count
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:565,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:578,1
    - Dst: X509_NAME_ENTRY_get_object
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:573,1
    - Dst: OBJ_obj2nid
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:583,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:588,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:593,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:597,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:598,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:600,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:599,1
    - Dst: setenv_str_incr
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:604,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:605,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:606,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:602,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:603,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - es
    - cert_depth
    - peer_cert
    argTypes:
    - struct env_set*
    - int
    - openvpn_x509_cert_t*
    constantsTouched: []
    func_position:
      end: 608
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 608
    functionName: x509_setenv
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - OBJ_obj2nid
    - X509_NAME_ENTRY_get_object
    - OBJ_nid2sn
    - X509_NAME_entry_count
    - snprintf
    - check_malloc_return
    - ASN1_STRING_to_UTF8
    - OPENSSL_free
    - X509_get_subject_name
    - malloc
    - free
    - strlen
    - X509_NAME_get_entry
    - string_mod
    - X509_NAME_ENTRY_get_data
    - setenv_str_incr
    linkageType: ''
    returnType: void
    signature: 'void x509_setenv(struct env_set *es, int cert_depth, openvpn_x509_cert_t
      *peer_cert) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:465,1
    - Dst: X509_get_subject_name
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:466,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:490,1
    - Dst: X509_NAME_get_index_by_NID
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:498,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:506,1
    - Dst: BIO_s_mem
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:521,1
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:521,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:543,1
    - Dst: x509_get_sha1_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:483,1
    - Dst: X509_get_ext
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:518,1
    - Dst: do_setenv_x509
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:508,1
    - Dst: do_setenv_x509
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:530,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:490,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:490,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:504,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:509,1
    - Dst: BIO_write
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:526,1
    - Dst: x509_get_sha256_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:487,1
    - Dst: do_setenv_x509
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:492,1
    - Dst: X509_NAME_get_entry
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:501,1
    - Dst: X509_get_ext_by_NID
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:515,1
    - Dst: X509V3_EXT_print
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:524,1
    - Dst: BIO_get_mem_data
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:529,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:533,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 55
    argCount: 4
    argNames:
    - xt
    - es
    - depth
    - x509
    argTypes:
    - struct x509_track*
    - struct env_set*
    - int
    - X509*
    constantsTouched: []
    func_position:
      end: 544
      start: 462
    functionDepth: 0
    functionLinenumber: 462
    functionLinenumberEnd: 544
    functionName: x509_setenv_track
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - BIO_new
    - do_setenv_x509
    - BIO_s_mem
    - BLEN
    - X509_NAME_get_entry
    - X509_NAME_ENTRY_get_data
    - BIO_write
    - BPTR
    - gc_new
    - format_hex_ex
    - gc_free
    - X509_get_ext
    - ASN1_STRING_to_UTF8
    - BIO_get_mem_data
    - OPENSSL_free
    - x509_get_sha256_fingerprint
    - BIO_free
    - X509_NAME_get_index_by_NID
    - X509_get_ext_by_NID
    - x509_get_sha1_fingerprint
    - X509_get_subject_name
    - X509V3_EXT_print
    linkageType: ''
    returnType: void
    signature: 'void x509_setenv_track(const struct x509_track *xt, struct env_set
      *es, const int depth, X509 *x509) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: X509_check_purpose
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:623,1
    - Dst: ASN1_BIT_STRING_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:641,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:638,1
    - Dst: X509_check_purpose
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:651,1
    - Dst: X509_get_ext_d2i
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:634,1
    - Dst: X509_get_ext_d2i
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:662,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:666,1
    - Dst: ASN1_BIT_STRING_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:669,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 35
    argCount: 2
    argNames:
    - peer_cert
    - usage
    argTypes:
    - openvpn_x509_cert_t*
    - int
    constantsTouched: []
    func_position:
      end: 675
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 675
    functionName: x509_verify_ns_cert_type
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - msg
    - X509_get_ext_d2i
    - ASN1_BIT_STRING_free
    - X509_check_purpose
    linkageType: ''
    returnType: result_t
    signature: 'result_t x509_verify_ns_cert_type(openvpn_x509_cert_t *peer_cert,
      const int usage) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:426,1
    - Dst: OBJ_txt2nid
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:433,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:441,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 14
    argCount: 4
    argNames:
    - ll_head
    - name
    - msglevel
    - gc
    argTypes:
    - struct x509_track**
    - char*
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 443
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 443
    functionName: x509_track_add
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - msg
    - ALLOC_OBJ_CLEAR_GC
    - OBJ_txt2nid
    linkageType: ''
    returnType: void
    signature: 'void x509_track_add(const struct x509_track **ll_head, const char
      *name, int msglevel, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:373,1
    - Dst: BIO_eof
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:383,1
    - Dst: BIO_s_mem
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:373,1
    - Dst: X509_get_subject_name
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:379,1
    - Dst: X509_NAME_print_ex
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:379,1
    - Dst: BIO_get_mem_ptr
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:388,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:390,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:392,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:396,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 20
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - X509*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 398
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 398
    functionName: x509_get_subject
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - BIO_new
    - memcpy
    - BIO_s_mem
    - gc_malloc
    - BIO_free
    - BIO_get_mem_ptr
    - X509_get_subject_name
    - X509_NAME_print_ex
    - BIO_eof
    linkageType: ''
    returnType: char*
    signature: 'char *x509_get_subject(X509 *cert, struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_ext_d2i
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:681,1
    - Dst: ASN1_BIT_STRING_get_bit
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:699,1
    - Dst: ASN1_BIT_STRING_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:692,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:685,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:713,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:725,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:729,1
    - Dst: ASN1_BIT_STRING_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:733,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 38
    argCount: 3
    argNames:
    - x509
    - expected_ku
    - expected_len
    argTypes:
    - X509*
    - unsigned*
    - int
    constantsTouched: []
    func_position:
      end: 736
      start: 677
    functionDepth: 0
    functionLinenumber: 677
    functionLinenumberEnd: 736
    functionName: x509_verify_cert_ku
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - msg
    - X509_get_ext_d2i
    - ASN1_BIT_STRING_free
    - ASN1_BIT_STRING_get_bit
    linkageType: ''
    returnType: result_t
    signature: 'result_t x509_verify_cert_ku(X509 *x509, const unsigned *const expected_ku,
      int expected_len) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_ex_data_X509_STORE_CTX_idx
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:58,1
    - Dst: SSL_get_ex_data
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:60,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:61,1
    - Dst: X509_STORE_CTX_get_current_cert
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:63,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:82,1
    - Dst: X509_STORE_CTX_get_error_depth
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:92,1
    - Dst: X509_STORE_CTX_get_error_depth
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:83,1
    - Dst: x509_get_subject
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:71,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:55,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:59,1
    - Dst: X509_STORE_CTX_get_error_depth
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:65,1
    - Dst: backend_x509_get_serial
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:72,1
    - Dst: X509_STORE_CTX_get_error
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:80,1
    - Dst: X509_verify_cert_error_string
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:84,1
    - Dst: X509_verify_cert_error_string
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:93,1
    - Dst: ERR_clear_error
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:96,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:110,1
    - Dst: x509_get_sha256_fingerprint
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:64,1
    - Dst: X509_STORE_CTX_get_ex_data
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:58,1
    - Dst: cert_hash_remember
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:65,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:91,1
    - Dst: X509_STORE_CTX_get_error
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:84,1
    - Dst: X509_STORE_CTX_get_error
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:93,1
    - Dst: verify_cert
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:102,1
    - Dst: X509_STORE_CTX_get_error_depth
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:102,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 2
    argNames:
    - preverify_ok
    - ctx
    argTypes:
    - int
    - X509_STORE_CTX*
    constantsTouched: []
    func_position:
      end: 113
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 113
    functionName: verify_callback
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - X509_verify_cert_error_string
    - msg
    - SSL_get_ex_data
    - x509_get_subject
    - gc_new
    - ERR_clear_error
    - verify_cert
    - gc_free
    - SSL_get_ex_data_X509_STORE_CTX_idx
    - ASSERT
    - cert_hash_remember
    - X509_STORE_CTX_get_error
    - x509_get_sha256_fingerprint
    - backend_x509_get_serial
    - X509_STORE_CTX_get_ex_data
    - X509_STORE_CTX_get_current_cert
    - X509_STORE_CTX_get_error_depth
    linkageType: ''
    returnType: int
    signature: 'int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_ext_d2i
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:744,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:753,1
    - Dst: sk_ASN1_OBJECT_num
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:754,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:747,1
    - Dst: sk_ASN1_OBJECT_value
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:756,1
    - Dst: OBJ_obj2txt
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:759,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:761,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:763,1
    - Dst: OBJ_obj2txt
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:768,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:770,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:772,1
    - Dst: sk_ASN1_OBJECT_pop_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:782,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 38
    argCount: 2
    argNames:
    - x509
    - expected_oid
    argTypes:
    - X509*
    - char*
    constantsTouched: []
    func_position:
      end: 786
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 786
    functionName: x509_verify_cert_eku
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - sk_ASN1_OBJECT_num
    - sk_ASN1_OBJECT_value
    - sk_ASN1_OBJECT_pop_free
    - msg
    - strcmp
    - X509_get_ext_d2i
    - OBJ_obj2txt
    linkageType: ''
    returnType: result_t
    signature: 'result_t x509_verify_cert_eku(X509 *x509, const char *const expected_oid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_serialNumber
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:318,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:320,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - openvpn_x509_cert_t*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 321
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 321
    functionName: backend_x509_get_serial_hex
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - format_hex_ex
    - X509_get_serialNumber
    linkageType: ''
    returnType: char*
    signature: 'char *backend_x509_get_serial_hex(openvpn_x509_cert_t *cert, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_sha1
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:349,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:350,1
    - Dst: EVP_sha1
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:351,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:350,1
    - Dst: X509_digest
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:351,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:351,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:352,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:352,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:352,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - X509*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 354
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 354
    functionName: x509_get_sha1_fingerprint
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - EVP_sha1
    - BPTR
    - EVP_MD_size
    - ASSERT
    - X509_digest
    - buf_inc_len
    - alloc_buf_gc
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer x509_get_sha1_fingerprint(X509 *cert, struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_file
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:326,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:341,1
    - Dst: PEM_write_bio_X509
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:332,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:336,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:340,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - cert
    - filename
    argTypes:
    - openvpn_x509_cert_t*
    - char*
    constantsTouched: []
    func_position:
      end: 344
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 344
    functionName: backend_x509_write_pem
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - PEM_write_bio_X509
    - BIO_free
    - crypto_msg
    - BIO_new_file
    linkageType: ''
    returnType: result_t
    signature: 'result_t backend_x509_write_pem(openvpn_x509_cert_t *cert, const char
      *filename) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_sha256
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:359,1
    - Dst: X509_digest
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:361,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:360,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:360,1
    - Dst: EVP_sha256
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:361,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:361,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:362,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:362,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:362,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - X509*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 364
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 364
    functionName: x509_get_sha256_fingerprint
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - BPTR
    - EVP_MD_size
    - ASSERT
    - X509_digest
    - buf_inc_len
    - EVP_sha256
    - alloc_buf_gc
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer x509_get_sha256_fingerprint(X509 *cert, struct gc_arena
      *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_get_cert_store
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:796,1
    - Dst: STACK_OF
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:802,1
    - Dst: sk_X509_OBJECT_num
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:803,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:799,1
    - Dst: X509_STORE_get0_objects
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:802,1
    - Dst: sk_X509_OBJECT_value
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:805,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:806,1
    - Dst: X509_OBJECT_get_type
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:807,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 21
    argCount: 1
    argNames:
    - opt
    argTypes:
    - struct tls_options*
    constantsTouched: []
    func_position:
      end: 813
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 813
    functionName: tls_verify_crl_missing
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - STACK_OF
    - crypto_msg
    - sk_X509_OBJECT_num
    - X509_STORE_get0_objects
    - sk_X509_OBJECT_value
    - ASSERT
    - SSL_CTX_get_cert_store
    - X509_OBJECT_get_type
    linkageType: ''
    returnType: bool
    signature: 'bool tls_verify_crl_missing(const struct tls_options *opt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OBJ_txt2nid
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - fieldname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 121
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 121
    functionName: x509_username_field_ext_supported
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - OBJ_txt2nid
    linkageType: ''
    returnType: bool
    signature: 'bool x509_username_field_ext_supported(const char *fieldname) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:263,1
    - Dst: X509_get_serialNumber
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:272,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:273,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:270,1
    - Dst: extract_x509_extension
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:265,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:274,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:277,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:279,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:282,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:283,1
    - Dst: X509_get_subject_name
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:287,1
    - Dst: extract_x509_field_ssl
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:287,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 4
    argNames:
    - common_name
    - cn_len
    - x509_username_field
    - peer_cert
    argTypes:
    - char*
    - int
    - char*
    - X509*
    constantsTouched: []
    func_position:
      end: 294
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 294
    functionName: backend_x509_get_username
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - extract_x509_field_ssl
    - snprintf
    - gc_new
    - X509_get_serialNumber
    - extract_x509_extension
    - strcmp
    - format_hex_ex
    - gc_free
    - X509_get_subject_name
    - strlen
    - strncmp
    linkageType: ''
    returnType: result_t
    signature: 'result_t backend_x509_get_username(char *common_name, int cn_len,
      char *x509_username_field, X509 *peer_cert) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: x509_username_field_ext_supported
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:130,1
    - Dst: OBJ_txt2nid
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:137,1
    - Dst: sk_GENERAL_NAME_num
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:148,1
    - Dst: X509_get_ext_d2i
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:138,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:132,1
    - Dst: sk_GENERAL_NAME_value
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:154,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:159,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:163,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:165,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:166,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:170,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:171,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:177,1
    - Dst: GENERAL_NAMES_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:182,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 29
    argCount: 4
    argNames:
    - cert
    - fieldname
    - out
    - size
    argTypes:
    - X509*
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 185
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 185
    functionName: extract_x509_extension
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - x509_username_field_ext_supported
    - msg
    - ASN1_STRING_to_UTF8
    - sk_GENERAL_NAME_value
    - strncpynt
    - X509_get_ext_d2i
    - OPENSSL_free
    - GENERAL_NAMES_free
    - sk_GENERAL_NAME_num
    - strlen
    - OBJ_txt2nid
    linkageType: ''
    returnType: bool
    signature: 'static bool extract_x509_extension(X509 *cert, char *fieldname, char
      *out, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_serialNumber
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:303,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:307,1
    - Dst: BN_bn2dec
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:305,1
    - Dst: ASN1_INTEGER_to_BN
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:304,1
    - Dst: BN_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:309,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:310,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - cert
    - gc
    argTypes:
    - openvpn_x509_cert_t*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 313
      start: 296
    functionDepth: 0
    functionLinenumber: 296
    functionLinenumberEnd: 313
    functionName: backend_x509_get_serial
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - BN_bn2dec
    - X509_get_serialNumber
    - OPENSSL_free
    - BN_free
    - ASN1_INTEGER_to_BN
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'char *backend_x509_get_serial(openvpn_x509_cert_t *cert, struct gc_arena
      *gc) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: OBJ_txt2obj
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:209,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:217,1
    - Dst: X509_NAME_get_index_by_OBJ
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:222,1
    - Dst: ASN1_OBJECT_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:225,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:213,1
    - Dst: X509_NAME_get_entry
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:233,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:239,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:244,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:249,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:252,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/ssl_verify_openssl.c:253,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 32
    argCount: 4
    argNames:
    - x509
    - field_name
    - out
    - size
    argTypes:
    - X509_NAME*
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 256
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 256
    functionName: extract_x509_field_ssl
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify_openssl.c
    functionUses: []
    functionsReached:
    - ASN1_OBJECT_free
    - OBJ_txt2obj
    - X509_NAME_get_index_by_OBJ
    - msg
    - ASN1_STRING_to_UTF8
    - strncpynt
    - OPENSSL_free
    - ASSERT
    - strlen
    - X509_NAME_get_entry
    - X509_NAME_ENTRY_get_data
    linkageType: ''
    returnType: result_t
    signature: 'static result_t extract_x509_field_ssl(X509_NAME *x509, const char
      *field_name, char *out, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - struct fragment_master*
    constantsTouched: []
    func_position:
      end: 427
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 427
    functionName: fragment_outgoing_defined
    functionSourceFile: /src/openvpn/src/openvpn/fragment.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool fragment_outgoing_defined(struct fragment_master
      *f) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/fragment.h:454,1
    - Dst: fragment_wakeup
      Src: /src/openvpn/src/openvpn/fragment.h:456,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 4
    argCount: 3
    argNames:
    - f
    - frame
    - tv
    argTypes:
    - struct fragment_master*
    - struct frame*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 458
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 458
    functionName: fragment_housekeeping
    functionSourceFile: /src/openvpn/src/openvpn/fragment.h
    functionUses: []
    functionsReached:
    - event_timeout_trigger
    - fragment_wakeup
    linkageType: ''
    returnType: void
    signature: 'static inline void fragment_housekeeping(struct fragment_master *f,
      struct frame *frame, struct timeval *tv) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:296,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:300,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 2
    argNames:
    - status
    - command
    argTypes:
    - bool
    - char*
    constantsTouched: []
    func_position:
      end: 302
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 302
    functionName: report_command_status
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void report_command_status(const bool status, const char *command) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/manage.c:530,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:532,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/manage.c:531,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - bytes_in_total
    - bytes_out_total
    - mdac
    argTypes:
    - counter_type*
    - counter_type*
    - struct man_def_auth_context*
    constantsTouched: []
    func_position:
      end: 534
      start: 522
    functionDepth: 0
    functionLinenumber: 522
    functionLinenumberEnd: 534
    functionName: man_bytecount_output_server
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    linkageType: ''
    returnType: void
    signature: 'void man_bytecount_output_server(const counter_type *bytes_in_total,
      const counter_type *bytes_out_total, struct man_def_auth_context *mdac) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1389,1
    - Dst: man_network_change
      Src: /src/openvpn/src/openvpn/manage.c:1394,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - (p[0], "network-change")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1395
      start: 1386
    functionDepth: 0
    functionLinenumber: 1386
    functionLinenumberEnd: 1395
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - streq
    - man_network_change
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "network-change")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1589,1
    - Dst: man_client_auth
      Src: /src/openvpn/src/openvpn/manage.c:1591,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "client-auth-nt")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1593
      start: 1587
    functionDepth: 0
    functionLinenumber: 1587
    functionLinenumberEnd: 1593
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_client_auth
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-auth-nt")) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:1855,1
    - Dst: socket_bind_unix
      Src: /src/openvpn/src/openvpn/manage.c:1873,1
    - Dst: create_socket_unix
      Src: /src/openvpn/src/openvpn/manage.c:1872,1
    - Dst: create_socket_tcp
      Src: /src/openvpn/src/openvpn/manage.c:1878,1
    - Dst: man_delete_unix_socket
      Src: /src/openvpn/src/openvpn/manage.c:1871,1
    - Dst: socket_bind
      Src: /src/openvpn/src/openvpn/manage.c:1879,1
    - Dst: listen
      Src: /src/openvpn/src/openvpn/manage.c:1886,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1888,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/manage.c:1894,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1899,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1917,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:1926,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/manage.c:1918,1
    - Dst: getsockname
      Src: /src/openvpn/src/openvpn/manage.c:1908,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1914,1
    - Dst: man_start_ne32
      Src: /src/openvpn/src/openvpn/manage.c:1923,1
    - Dst: sockaddr_unix_name
      Src: /src/openvpn/src/openvpn/manage.c:1900,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 36
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1927
      start: 1852
    functionDepth: 0
    functionLinenumber: 1852
    functionLinenumberEnd: 1927
    functionName: man_listen
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - create_socket_unix
    - print_sockaddr
    - set_nonblock
    - msg
    - listen
    - socket_bind_unix
    - gc_new
    - create_socket_tcp
    - sockaddr_unix_name
    - getsockname
    - gc_free
    - socket_bind
    - man_delete_unix_socket
    - man_start_ne32
    linkageType: ''
    returnType: void
    signature: 'static void man_listen(struct management *man) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: env_filter_match
      Src: /src/openvpn/src/openvpn/manage.c:2863,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2871,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2865,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 14
    argCount: 4
    argNames:
    - es
    - tail
    - env_filter_level
    - prefix
    argTypes:
    - struct env_set*
    - bool
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 2873
      start: 2855
    functionDepth: 0
    functionLinenumber: 2855
    functionLinenumberEnd: 2873
    functionName: man_output_env
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - env_filter_match
    linkageType: ''
    returnType: void
    signature: 'static void man_output_env(const struct env_set *es, const bool tail,
      const int env_filter_level, const char *prefix) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:3412,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3417,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3421,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3425,1
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3412,1
    - Dst: man_standalone_event_loop
      Src: /src/openvpn/src/openvpn/manage.c:3429,1
    - Dst: man_password_needed
      Src: /src/openvpn/src/openvpn/manage.c:3434,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 21
    argCount: 4
    argNames:
    - man
    - signal_received
    - expire
    - flags
    argTypes:
    - struct management*
    - int*
    - time_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3436
      start: 3406
    functionDepth: 0
    functionLinenumber: 3406
    functionLinenumberEnd: 3436
    functionName: man_wait_for_client_connection
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_standalone_ok
    - man_password_needed
    - msg
    - man_standalone_event_loop
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void man_wait_for_client_connection(struct management *man,
      volatile int *signal_received, const time_t expire, unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: log_history_free_contents
      Src: /src/openvpn/src/openvpn/manage.c:4060,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:4061,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - h
    argTypes:
    - struct log_history*
    constantsTouched: []
    func_position:
      end: 4062
      start: 4057
    functionDepth: 0
    functionLinenumber: 4057
    functionLinenumberEnd: 4062
    functionName: log_history_close
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - log_history_free_contents
    - free
    linkageType: ''
    returnType: void
    signature: 'void log_history_close(struct log_history *h) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_delete_unix
      Src: /src/openvpn/src/openvpn/manage.c:310,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 313
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 313
    functionName: man_delete_unix_socket
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - socket_delete_unix
    linkageType: ''
    returnType: void
    signature: 'static void man_delete_unix_socket(struct management *man) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:554,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:554,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:604,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:609,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:614,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:617,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:539,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/manage.c:549,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:563,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/manage.c:573,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:561,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:600,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/manage.c:551,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/manage.c:550,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/manage.c:552,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:562,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:570,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/manage.c:572,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/manage.c:580,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:591,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:549,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:554,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/manage.c:558,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:578,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/manage.c:579,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:586,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:594,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 57
    argCount: 2
    argNames:
    - man
    - victim
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 618
      start: 536
    functionDepth: 0
    functionLinenumber: 536
    functionLinenumberEnd: 618
    functionName: man_kill
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - atoi
    - man_command_unsupported
    - msg
    - print_in_addr_t
    - gc_new
    - buf_parse
    - gc_free
    - getaddr
    - proto2ascii
    - strlen
    - streq
    linkageType: ''
    returnType: void
    signature: 'static void man_kill(struct management *man, const char *victim) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1596,1
    - Dst: man_client_auth
      Src: /src/openvpn/src/openvpn/manage.c:1598,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "client-auth")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1600
      start: 1594
    functionDepth: 0
    functionLinenumber: 1594
    functionLinenumberEnd: 1600
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_client_auth
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-auth")) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:1932,1
    - Dst: man_verify_unix_peer_uid_gid
      Src: /src/openvpn/src/openvpn/manage.c:1947,1
    - Dst: sd_close
      Src: /src/openvpn/src/openvpn/manage.c:1954,1
    - Dst: create_socket_unix
      Src: /src/openvpn/src/openvpn/manage.c:1945,1
    - Dst: socket_connect_unix
      Src: /src/openvpn/src/openvpn/manage.c:1946,1
    - Dst: create_socket_tcp
      Src: /src/openvpn/src/openvpn/manage.c:1960,1
    - Dst: openvpn_connect
      Src: /src/openvpn/src/openvpn/manage.c:1961,1
    - Dst: throw_signal
      Src: /src/openvpn/src/openvpn/manage.c:1969,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1978,1
    - Dst: sockaddr_unix_name
      Src: /src/openvpn/src/openvpn/manage.c:1980,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/manage.c:1987,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1985,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:1996,1
    - Dst: man_new_connection_post
      Src: /src/openvpn/src/openvpn/manage.c:1993,1
    - Dst: throw_signal_soft
      Src: /src/openvpn/src/openvpn/manage.c:1989,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1997
      start: 1929
    functionDepth: 0
    functionLinenumber: 1929
    functionLinenumberEnd: 1997
    functionName: man_connect
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - create_socket_unix
    - print_sockaddr
    - socket_connect_unix
    - man_verify_unix_peer_uid_gid
    - openvpn_connect
    - msg
    - throw_signal_soft
    - gc_new
    - create_socket_tcp
    - throw_signal
    - sockaddr_unix_name
    - man_new_connection_post
    - gc_free
    - sd_close
    linkageType: ''
    returnType: void
    signature: 'static void man_connect(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:2878,1
    - Dst: man_output_env
      Src: /src/openvpn/src/openvpn/manage.c:2885,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/manage.c:2883,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/manage.c:2879,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:2886,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 2
    argNames:
    - man
    - prefix
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 2887
      start: 2875
    functionDepth: 0
    functionLinenumber: 2875
    functionLinenumberEnd: 2887
    functionName: man_output_extra_env
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_output_env
    - gc_new
    - gc_free
    - setenv_int
    - env_set_create
    linkageType: ''
    returnType: void
    signature: 'static void man_output_extra_env(struct management *man, const char
      *prefix) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:4068,1
    - Dst: log_index
      Src: /src/openvpn/src/openvpn/manage.c:4077,1
    - Dst: log_index
      Src: /src/openvpn/src/openvpn/manage.c:4073,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/manage.c:4082,1
    - Dst: log_entry_free_contents
      Src: /src/openvpn/src/openvpn/manage.c:4072,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - h
    - le
    argTypes:
    - struct log_history*
    - struct log_entry*
    constantsTouched: []
    func_position:
      end: 4083
      start: 4064
    functionDepth: 0
    functionLinenumber: 4064
    functionLinenumberEnd: 4083
    functionName: log_history_add
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - log_index
    - log_entry_free_contents
    - ASSERT
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void log_history_add(struct log_history *h, const struct log_entry
      *le) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/manage.c:3883,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/manage.c:3884,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - cl
    argTypes:
    - struct command_line*
    constantsTouched: []
    func_position:
      end: 3885
      start: 3880
    functionDepth: 0
    functionLinenumber: 3880
    functionLinenumberEnd: 3885
    functionName: command_line_reset
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_clear
    linkageType: ''
    returnType: void
    signature: 'void command_line_reset(struct command_line *cl) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: management_would_hold
      Src: /src/openvpn/src/openvpn/manage.c:3821,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3836,1
    - Dst: man_wait_for_client_connection
      Src: /src/openvpn/src/openvpn/manage.c:3831,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:3825,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/manage.c:3835,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/manage.c:3837,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3838,1
    - Dst: man_standalone_event_loop
      Src: /src/openvpn/src/openvpn/manage.c:3843,1
    - Dst: man_check_for_signals
      Src: /src/openvpn/src/openvpn/manage.c:3846,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:3860,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 2
    argNames:
    - man
    - holdtime
    argTypes:
    - struct management*
    - int
    constantsTouched: []
    func_position:
      end: 3864
      start: 3818
    functionDepth: 0
    functionLinenumber: 3818
    functionLinenumberEnd: 3864
    functionName: management_hold
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_check_for_signals
    - BSTR
    - buf_printf
    - msg
    - management_would_hold
    - man_standalone_event_loop
    - gc_new
    - gc_free
    - man_wait_for_client_connection
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool management_hold(struct management *man, int holdtime) '
  - BBCount: 45
    BranchProfiles: []
    Callsites:
    - Dst: man_help
      Src: /src/openvpn/src/openvpn/manage.c:1349,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1358,1
    - Dst: platform_getpid
      Src: /src/openvpn/src/openvpn/manage.c:1363,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1369,1
    - Dst: man_status
      Src: /src/openvpn/src/openvpn/manage.c:1408,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1365,1
    - Dst: man_echo
      Src: /src/openvpn/src/openvpn/manage.c:1515,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1440,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1629,1
    - Dst: man_client_n_clients
      Src: /src/openvpn/src/openvpn/manage.c:1367,1
    - Dst: get_mute_cutoff
      Src: /src/openvpn/src/openvpn/manage.c:1452,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1596,1
    - Dst: man_client_auth
      Src: /src/openvpn/src/openvpn/manage.c:1598,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1603,1
    - Dst: man_pk_sig
      Src: /src/openvpn/src/openvpn/manage.c:1610,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1653,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1664,1
    - Dst: man_proxy
      Src: /src/openvpn/src/openvpn/manage.c:1648,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1378,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1507,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1570,1
    - Dst: man_remote_entry_count
      Src: /src/openvpn/src/openvpn/manage.c:1635,1
    - Dst: man_query_password
      Src: /src/openvpn/src/openvpn/manage.c:1530,1
    - Dst: man_state
      Src: /src/openvpn/src/openvpn/manage.c:1487,1
    - Dst: man_echo
      Src: /src/openvpn/src/openvpn/manage.c:1511,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1406,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1428,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1546,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1347,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1351,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1421,1
    - Dst: man_log
      Src: /src/openvpn/src/openvpn/manage.c:1501,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1412,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1470,1
    - Dst: man_pk_sig
      Src: /src/openvpn/src/openvpn/manage.c:1614,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1361,1
    - Dst: man_env_filter
      Src: /src/openvpn/src/openvpn/manage.c:1376,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1424,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1433,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1465,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1553,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1539,1
    - Dst: man_remote_entry_get
      Src: /src/openvpn/src/openvpn/manage.c:1641,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1493,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1380,1
    - Dst: man_load_stats
      Src: /src/openvpn/src/openvpn/manage.c:1399,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/manage.c:1422,1
    - Dst: man_state
      Src: /src/openvpn/src/openvpn/manage.c:1477,1
    - Dst: man_state
      Src: /src/openvpn/src/openvpn/manage.c:1483,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1589,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1575,1
    - Dst: man_client_auth
      Src: /src/openvpn/src/openvpn/manage.c:1591,1
    - Dst: man_client_pending_auth
      Src: /src/openvpn/src/openvpn/manage.c:1605,1
    - Dst: man_log
      Src: /src/openvpn/src/openvpn/manage.c:1497,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1374,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1389,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1461,1
    - Dst: man_query_username
      Src: /src/openvpn/src/openvpn/manage.c:1523,1
    - Dst: set_client_version
      Src: /src/openvpn/src/openvpn/manage.c:1353,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1359,1
    - Dst: auth_retry_set
      Src: /src/openvpn/src/openvpn/manage.c:1459,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1582,1
    - Dst: auth_retry_print
      Src: /src/openvpn/src/openvpn/manage.c:1470,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1627,1
    - Dst: get_debug_level
      Src: /src/openvpn/src/openvpn/manage.c:1433,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1447,1
    - Dst: man_hold
      Src: /src/openvpn/src/openvpn/manage.c:1564,1
    - Dst: man_send_cc_message
      Src: /src/openvpn/src/openvpn/manage.c:1555,1
    - Dst: man_pkcs11_id_get
      Src: /src/openvpn/src/openvpn/manage.c:1629,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:1339,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1568,1
    - Dst: man_query_need_str
      Src: /src/openvpn/src/openvpn/manage.c:1548,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1646,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1661,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1667,1
    - Dst: man_bytecount
      Src: /src/openvpn/src/openvpn/manage.c:1570,1
    - Dst: man_net
      Src: /src/openvpn/src/openvpn/manage.c:1560,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1342,1
    - Dst: man_network_change
      Src: /src/openvpn/src/openvpn/manage.c:1394,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1443,1
    - Dst: man_forget_passwords
      Src: /src/openvpn/src/openvpn/manage.c:1535,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1355,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1357,1
    - Dst: man_kill
      Src: /src/openvpn/src/openvpn/manage.c:1414,1
    - Dst: set_mute_cutoff
      Src: /src/openvpn/src/openvpn/manage.c:1441,1
    - Dst: man_query_need_ok
      Src: /src/openvpn/src/openvpn/manage.c:1541,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1363,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1528,1
    - Dst: man_certificate
      Src: /src/openvpn/src/openvpn/manage.c:1618,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:1341,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1452,1
    - Dst: man_client_deny
      Src: /src/openvpn/src/openvpn/manage.c:1584,1
    - Dst: man_client_kill
      Src: /src/openvpn/src/openvpn/manage.c:1577,1
    - Dst: man_remote
      Src: /src/openvpn/src/openvpn/manage.c:1655,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1674,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:1678,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1521,1
    - Dst: man_signal
      Src: /src/openvpn/src/openvpn/manage.c:1382,1
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1639,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:1342,1
    - Dst: man_pkcs11_id_count
      Src: /src/openvpn/src/openvpn/manage.c:1623,1
    CyclomaticComplexity: 90
    EdgeCount: 90
    ICount: 199
    argCount: 4
    argNames:
    - man
    - so
    - p
    - nparms
    argTypes:
    - struct management*
    - struct status_output*
    - char**
    - int
    constantsTouched: []
    func_position:
      end: 1679
      start: 1336
    functionDepth: 0
    functionLinenumber: 1336
    functionLinenumberEnd: 1679
    functionName: man_dispatch_command
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_net
    - man_client_pending_auth
    - man_client_kill
    - man_bytecount
    - man_query_need_str
    - msg
    - auth_retry_print
    - man_status
    - man_certificate
    - man_forget_passwords
    - man_proxy
    - man_pk_sig
    - platform_getpid
    - atoi
    - gc_new
    - man_client_auth
    - man_log
    - gc_free
    - man_hold
    - man_env_filter
    - man_load_stats
    - man_pkcs11_id_get
    - man_signal
    - streq
    - man_state
    - man_network_change
    - man_client_deny
    - set_mute_cutoff
    - man_pkcs11_id_count
    - auth_retry_set
    - man_query_need_ok
    - man_echo
    - man_query_username
    - get_debug_level
    - set_debug_level
    - man_kill
    - set_client_version
    - man_send_cc_message
    - man_remote_entry_get
    - man_query_password
    - get_mute_cutoff
    - man_remote
    - man_need
    - man_client_n_clients
    - ASSERT
    - man_help
    - man_remote_entry_count
    linkageType: ''
    returnType: void
    signature: 'static void man_dispatch_command(struct management *man, struct status_output
      *so, const char **p, const int nparms) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: man_password_needed
      Src: /src/openvpn/src/openvpn/manage.c:198,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/manage.c:205,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:204,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:208,1
    - Dst: min_uint
      Src: /src/openvpn/src/openvpn/manage.c:204,1
    - Dst: man_welcome
      Src: /src/openvpn/src/openvpn/manage.c:209,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:214,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:217,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 2
    argNames:
    - man
    - line
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 223
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 223
    functionName: man_check_password
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_password_needed
    - msg
    - man_welcome
    - min_uint
    - memcmp_constant_time
    - strlen
    linkageType: ''
    returnType: void
    signature: 'static void man_check_password(struct management *man, const char
      *line) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: parse_cid
      Src: /src/openvpn/src/openvpn/manage.c:1104,1
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:1108,1
    - Dst: in_extra_dispatch
      Src: /src/openvpn/src/openvpn/manage.c:1111,1
    - Dst: parse_uint
      Src: /src/openvpn/src/openvpn/manage.c:1105,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 4
    argNames:
    - man
    - cid_str
    - kid_str
    - extra
    argTypes:
    - struct management*
    - char*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1114
      start: 1098
    functionDepth: 0
    functionLinenumber: 1098
    functionLinenumberEnd: 1114
    functionName: man_client_auth
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - parse_cid
    - parse_uint
    - in_extra_reset
    - in_extra_dispatch
    linkageType: ''
    returnType: void
    signature: 'static void man_client_auth(struct management *man, const char *cid_str,
      const char *kid_str, const bool extra) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_pk_sig
      Src: /src/openvpn/src/openvpn/manage.c:1614,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "pk-sig")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1615
      start: 1612
    functionDepth: 0
    functionLinenumber: 1612
    functionLinenumberEnd: 1615
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_pk_sig
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pk-sig")) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/manage.c:228,1
    - Dst: buffer_list_defined
      Src: /src/openvpn/src/openvpn/manage.c:230,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 239
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 239
    functionName: man_update_io_state
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buffer_list_defined
    - socket_defined
    linkageType: ''
    returnType: void
    signature: 'static void man_update_io_state(struct management *man) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: parse_cid
      Src: /src/openvpn/src/openvpn/manage.c:1121,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1139,1
    - Dst: parse_uint
      Src: /src/openvpn/src/openvpn/manage.c:1121,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1135,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:1144,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 13
    argCount: 5
    argNames:
    - man
    - cid_str
    - kid_str
    - reason
    - client_reason
    argTypes:
    - struct management*
    - char*
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 1147
      start: 1116
    functionDepth: 0
    functionLinenumber: 1116
    functionLinenumberEnd: 1147
    functionName: man_client_deny
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - parse_cid
    - parse_uint
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_client_deny(struct management *man, const char *cid_str,
      const char *kid_str, const char *reason, const char *client_reason) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_certificate
      Src: /src/openvpn/src/openvpn/manage.c:1618,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "certificate")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1619
      start: 1616
    functionDepth: 0
    functionLinenumber: 1616
    functionLinenumberEnd: 1619
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_certificate
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "certificate")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:4040,1
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/manage.c:4041,1
    - Dst: log_history_obj_init
      Src: /src/openvpn/src/openvpn/manage.c:4042,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - capacity
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 4044
      start: 4036
    functionDepth: 0
    functionLinenumber: 4036
    functionLinenumberEnd: 4044
    functionName: log_history_init
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - log_history_obj_init
    - ASSERT
    - ALLOC_OBJ
    linkageType: ''
    returnType: struct log_history*
    signature: 'struct log_history *log_history_init(const int capacity) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3444,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/manage.c:3454,1
    - Dst: man_wait_for_client_connection
      Src: /src/openvpn/src/openvpn/manage.c:3461,1
    - Dst: man_standalone_event_loop
      Src: /src/openvpn/src/openvpn/manage.c:3470,1
    - Dst: man_check_for_signals
      Src: /src/openvpn/src/openvpn/manage.c:3473,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/manage.c:3479,1
    - Dst: sleep
      Src: /src/openvpn/src/openvpn/manage.c:3487,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 24
    argCount: 2
    argNames:
    - man
    - sec
    argTypes:
    - struct management*
    - int
    constantsTouched: []
    func_position:
      end: 3489
      start: 3441
    functionDepth: 0
    functionLinenumber: 3441
    functionLinenumberEnd: 3489
    functionName: management_event_loop_n_seconds
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_check_for_signals
    - sleep
    - man_standalone_ok
    - man_standalone_event_loop
    - update_time
    - man_wait_for_client_connection
    linkageType: ''
    returnType: void
    signature: 'void management_event_loop_n_seconds(struct management *man, int sec) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: management_connected
      Src: /src/openvpn/src/openvpn/manage.c:244,1
    - Dst: man_output_standalone
      Src: /src/openvpn/src/openvpn/manage.c:250,1
    - Dst: man_update_io_state
      Src: /src/openvpn/src/openvpn/manage.c:246,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 253
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 253
    functionName: man_output_list_push_finalize
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - management_connected
    - man_update_io_state
    - man_output_standalone
    linkageType: ''
    returnType: void
    signature: 'static void man_output_list_push_finalize(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/manage.c:496,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/manage.c:503,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:505,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 2
    argNames:
    - man
    - update_seconds
    argTypes:
    - struct management*
    - int
    constantsTouched: []
    func_position:
      end: 506
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 506
    functionName: man_bytecount
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - event_timeout_init
    - msg
    - event_timeout_clear
    linkageType: ''
    returnType: void
    signature: 'static void man_bytecount(struct management *man, const int update_seconds) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:1260,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1265,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 4
    argNames:
    - man
    - p
    - n
    - flags
    argTypes:
    - struct management*
    - char**
    - int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1274
      start: 1256
    functionDepth: 0
    functionLinenumber: 1256
    functionLinenumberEnd: 1274
    functionName: man_need
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static bool man_need(struct management *man, const char **p, const
      int n, unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1653,1
    - Dst: man_remote
      Src: /src/openvpn/src/openvpn/manage.c:1655,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "remote")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1657
      start: 1651
    functionDepth: 0
    functionLinenumber: 1651
    functionLinenumberEnd: 1657
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_remote
    - man_need
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2908,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - man
    - str
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 2909
      start: 2905
    functionDepth: 0
    functionLinenumber: 2905
    functionLinenumberEnd: 2909
    functionName: management_notify_generic
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void management_notify_generic(struct management *man, const char
      *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: management_connected
      Src: /src/openvpn/src/openvpn/manage.c:258,1
    - Dst: buffer_list_push
      Src: /src/openvpn/src/openvpn/manage.c:260,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - man
    - str
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 262
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 262
    functionName: man_output_list_push_str
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buffer_list_push
    - management_connected
    linkageType: ''
    returnType: void
    signature: 'static void man_output_list_push_str(struct management *man, const
      char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/manage.c:517,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:519,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/manage.c:518,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - man
    - dco_read_bytes
    - dco_write_bytes
    argTypes:
    - struct management*
    - counter_type
    - counter_type
    constantsTouched: []
    func_position:
      end: 520
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 520
    functionName: man_bytecount_output_client
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    linkageType: ''
    returnType: void
    signature: 'static void man_bytecount_output_client(struct management *man, counter_type
      dco_read_bytes, counter_type dco_write_bytes) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/manage.c:2921,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/manage.c:2924,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:2921,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/manage.c:2922,1
    - Dst: validate_peer_info_line
      Src: /src/openvpn/src/openvpn/manage.c:2925,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2927,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2931,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 14
    argCount: 2
    argNames:
    - man
    - mdac
    argTypes:
    - struct management*
    - struct man_def_auth_context*
    constantsTouched: []
    func_position:
      end: 2936
      start: 2911
    functionDepth: 0
    functionLinenumber: 2911
    functionLinenumberEnd: 2936
    functionName: man_output_peer_info_env
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_set_read
    - msg
    - validate_peer_info_line
    - buf_parse
    - chomp
    - strlen
    linkageType: ''
    returnType: void
    signature: 'static void man_output_peer_info_env(struct management *man, const
      struct man_def_auth_context *mdac) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: win32_sleep
      Src: /src/openvpn/src/openvpn/manage.c:4191,1
    - Dst: sleep
      Src: /src/openvpn/src/openvpn/manage.c:4195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 4198
      start: 4187
    functionDepth: 0
    functionLinenumber: 4187
    functionLinenumberEnd: 4198
    functionName: management_sleep
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - sleep
    - win32_sleep
    linkageType: ''
    returnType: void
    signature: 'void management_sleep(const int n) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/manage.c:1783,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1804,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1791,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1797,1
    - Dst: unix_socket_get_peer_uid_gid
      Src: /src/openvpn/src/openvpn/manage.c:1787,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 21
    argCount: 2
    argNames:
    - man
    - sd
    argTypes:
    - struct management*
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 1809
      start: 1780
    functionDepth: 0
    functionLinenumber: 1780
    functionLinenumberEnd: 1809
    functionName: man_verify_unix_peer_uid_gid
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - socket_defined
    - unix_socket_get_peer_uid_gid
    linkageType: ''
    returnType: bool
    signature: 'static bool man_verify_unix_peer_uid_gid(struct management *man, const
      socket_descriptor_t sd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_output_list_push_str
      Src: /src/openvpn/src/openvpn/manage.c:267,1
    - Dst: man_output_list_push_finalize
      Src: /src/openvpn/src/openvpn/manage.c:268,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - man
    - str
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 269
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 269
    functionName: man_output_list_push
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_output_list_push_str
    - man_output_list_push_finalize
    linkageType: ''
    returnType: void
    signature: 'static void man_output_list_push(struct management *man, const char
      *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_close_socket
      Src: /src/openvpn/src/openvpn/manage.c:328,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - man
    - sd
    argTypes:
    - struct management*
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 329
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 329
    functionName: man_close_socket
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - openvpn_close_socket
    linkageType: ''
    returnType: void
    signature: 'static void man_close_socket(struct management *man, const socket_descriptor_t
      sd) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/manage.c:1018,1
    - Dst: report_command_status
      Src: /src/openvpn/src/openvpn/manage.c:1001,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:1005,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/manage.c:1011,1
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:1023,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1024
      start: 984
    functionDepth: 0
    functionLinenumber: 984
    functionLinenumberEnd: 1024
    functionName: in_extra_dispatch
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - report_command_status
    - in_extra_reset
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void in_extra_dispatch(struct management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2390,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - mc
    argTypes:
    - struct man_connection*
    constantsTouched: []
    func_position:
      end: 2398
      start: 2387
    functionDepth: 0
    functionLinenumber: 2387
    functionLinenumberEnd: 2398
    functionName: man_connection_clear
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void man_connection_clear(struct man_connection *mc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2894,1
    - Dst: man_output_env
      Src: /src/openvpn/src/openvpn/manage.c:2895,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 3
    argNames:
    - man
    - updown
    - es
    argTypes:
    - struct management*
    - char*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 2897
      start: 2889
    functionDepth: 0
    functionLinenumber: 2889
    functionLinenumberEnd: 2897
    functionName: management_up_down
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_output_env
    linkageType: ''
    returnType: void
    signature: 'void management_up_down(struct management *man, const char *updown,
      const struct env_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_password_needed
      Src: /src/openvpn/src/openvpn/manage.c:274,1
    - Dst: man_output_list_push
      Src: /src/openvpn/src/openvpn/manage.c:276,1
    - Dst: man_output_list_push
      Src: /src/openvpn/src/openvpn/manage.c:281,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 284
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 284
    functionName: man_prompt
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_password_needed
    - man_output_list_push
    linkageType: ''
    returnType: void
    signature: 'static void man_prompt(struct management *man) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:341,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:348,1
    - Dst: man_password_needed
      Src: /src/openvpn/src/openvpn/manage.c:364,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/manage.c:349,1
    - Dst: log_history_add
      Src: /src/openvpn/src/openvpn/manage.c:361,1
    - Dst: log_entry_print
      Src: /src/openvpn/src/openvpn/manage.c:368,1
    - Dst: log_entry_print
      Src: /src/openvpn/src/openvpn/manage.c:372,1
    - Dst: man_output_list_push_str
      Src: /src/openvpn/src/openvpn/manage.c:379,1
    - Dst: log_entry_print
      Src: /src/openvpn/src/openvpn/manage.c:384,1
    - Dst: man_output_list_push_str
      Src: /src/openvpn/src/openvpn/manage.c:387,1
    - Dst: man_output_list_push_finalize
      Src: /src/openvpn/src/openvpn/manage.c:397,1
    - Dst: man_reset_client_socket
      Src: /src/openvpn/src/openvpn/manage.c:401,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:393,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/manage.c:409,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 49
    argCount: 3
    argNames:
    - arg
    - flags
    - str
    argTypes:
    - void*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 412
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 412
    functionName: virtual_output_callback_func
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_password_needed
    - man_output_list_push_finalize
    - gc_new
    - log_history_add
    - man_reset_client_socket
    - CLEAR
    - update_time
    - log_entry_print
    - gc_free
    - man_output_list_push_str
    - printf
    linkageType: ''
    returnType: void
    signature: 'static void virtual_output_callback_func(void *arg, const unsigned
      int flags, const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/manage.c:1029,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1035,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - str
    - cid
    argTypes:
    - char*
    - unsigned long*
    constantsTouched: []
    func_position:
      end: 1038
      start: 1026
    functionDepth: 0
    functionLinenumber: 1026
    functionLinenumberEnd: 1038
    functionName: parse_cid
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - sscanf
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool parse_cid(const char *str, unsigned long *cid) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2409,1
    - Dst: log_history_init
      Src: /src/openvpn/src/openvpn/manage.c:2427,1
    - Dst: log_history_init
      Src: /src/openvpn/src/openvpn/manage.c:2432,1
    - Dst: log_history_init
      Src: /src/openvpn/src/openvpn/manage.c:2412,1
    - Dst: msg_set_virtual_output
      Src: /src/openvpn/src/openvpn/manage.c:2422,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 4
    argNames:
    - man
    - log_history_cache
    - echo_buffer_size
    - state_buffer_size
    argTypes:
    - struct management*
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 2436
      start: 2400
    functionDepth: 0
    functionLinenumber: 2400
    functionLinenumberEnd: 2436
    functionName: man_persist_init
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - log_history_init
    - CLEAR
    - msg_set_virtual_output
    linkageType: ''
    returnType: void
    signature: 'static void man_persist_init(struct management *man, const int log_history_cache,
      const int echo_buffer_size, const int state_buffer_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2902,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 4
    argNames:
    - man
    - severity
    - type
    - text
    argTypes:
    - struct management*
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 2903
      start: 2899
    functionDepth: 0
    functionLinenumber: 2899
    functionLinenumberEnd: 2903
    functionName: management_notify
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void management_notify(struct management *man, const char *severity,
      const char *type, const char *text) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:710,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:730,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:719,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 10
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 732
      start: 704
    functionDepth: 0
    functionLinenumber: 704
    functionLinenumberEnd: 732
    functionName: man_up_finalize
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - strlen
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void man_up_finalize(struct management *man) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2951,1
    - Dst: man_output_peer_info_env
      Src: /src/openvpn/src/openvpn/manage.c:2955,1
    - Dst: man_output_env
      Src: /src/openvpn/src/openvpn/manage.c:2957,1
    - Dst: man_output_extra_env
      Src: /src/openvpn/src/openvpn/manage.c:2952,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 14
    argCount: 4
    argNames:
    - management
    - mda_key_id
    - mdac
    - es
    argTypes:
    - struct management*
    - unsigned int
    - struct man_def_auth_context*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 2960
      start: 2938
    functionDepth: 0
    functionLinenumber: 2938
    functionLinenumberEnd: 2960
    functionName: management_notify_client_needing_auth
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_output_env
    - man_output_extra_env
    - man_output_peer_info_env
    linkageType: ''
    returnType: void
    signature: 'void management_notify_client_needing_auth(struct management *management,
      const unsigned int mda_key_id, struct man_def_auth_context *mdac, const struct
      env_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_substring_len
      Src: /src/openvpn/src/openvpn/manage.c:3922,1
    - Dst: buf_copy_excess
      Src: /src/openvpn/src/openvpn/manage.c:3925,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/manage.c:3927,1
    - Dst: buf_chomp
      Src: /src/openvpn/src/openvpn/manage.c:3926,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - cl
    argTypes:
    - struct command_line*
    constantsTouched: []
    func_position:
      end: 3930
      start: 3916
    functionDepth: 0
    functionLinenumber: 3916
    functionLinenumberEnd: 3930
    functionName: command_line_get
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_copy_excess
    - buf_chomp
    - buf_substring_len
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *command_line_get(struct command_line *cl) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:4093,1
    - Dst: log_history_add
      Src: /src/openvpn/src/openvpn/manage.c:4098,1
    - Dst: log_history_obj_init
      Src: /src/openvpn/src/openvpn/manage.c:4094,1
    - Dst: log_history_free_contents
      Src: /src/openvpn/src/openvpn/manage.c:4101,1
    - Dst: log_index
      Src: /src/openvpn/src/openvpn/manage.c:4098,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 2
    argNames:
    - h
    - capacity
    argTypes:
    - struct log_history*
    - int
    constantsTouched: []
    func_position:
      end: 4104
      start: 4085
    functionDepth: 0
    functionLinenumber: 4085
    functionLinenumberEnd: 4104
    functionName: log_history_resize
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - log_history_free_contents
    - log_index
    - log_history_add
    - ASSERT
    - log_history_obj_init
    linkageType: ''
    returnType: void
    signature: 'void log_history_resize(struct log_history *h, const int capacity) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:745,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:746,1
    - Dst: man_up_finalize
      Src: /src/openvpn/src/openvpn/manage.c:749,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/manage.c:748,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:750,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:756,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:764,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 7
    argNames:
    - man
    - type
    - string
    - needed
    - prompt
    - dest
    - len
    argTypes:
    - struct management*
    - char*
    - char*
    - bool
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 766
      start: 734
    functionDepth: 0
    functionLinenumber: 734
    functionLinenumberEnd: 766
    functionName: man_query_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_up_finalize
    - msg
    - strncpynt
    - ASSERT
    - streq
    linkageType: ''
    returnType: void
    signature: 'static void man_query_user_pass(struct management *man, const char
      *type, const char *string, const bool needed, const char *prompt, char *dest,
      int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:2971,1
    - Dst: man_output_extra_env
      Src: /src/openvpn/src/openvpn/manage.c:2975,1
    - Dst: man_output_peer_info_env
      Src: /src/openvpn/src/openvpn/manage.c:2978,1
    - Dst: man_output_env
      Src: /src/openvpn/src/openvpn/manage.c:2980,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2973,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:2981,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 4
    argNames:
    - mda_key_id
    - mdac
    - es
    - response
    argTypes:
    - unsigned
    - struct man_def_auth_context*
    - struct env_set*
    - char*
    constantsTouched: []
    func_position:
      end: 2983
      start: 2962
    functionDepth: 0
    functionLinenumber: 2962
    functionLinenumberEnd: 2983
    functionName: management_notify_client_cr_response
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_output_env
    - msg
    - gc_new
    - gc_free
    - man_output_peer_info_env
    - man_output_extra_env
    linkageType: ''
    returnType: void
    signature: 'void management_notify_client_cr_response(unsigned mda_key_id, const
      struct man_def_auth_context *mdac, const struct env_set *es, const char *response) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/manage.c:3935,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/manage.c:3936,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/manage.c:3937,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - cl
    argTypes:
    - struct command_line*
    constantsTouched: []
    func_position:
      end: 3938
      start: 3932
    functionDepth: 0
    functionLinenumber: 3932
    functionLinenumberEnd: 3938
    functionName: command_line_next
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_copy
    - buf_clear
    linkageType: ''
    returnType: void
    signature: 'void command_line_next(struct command_line *cl) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: log_index
      Src: /src/openvpn/src/openvpn/manage.c:4111,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 2
    argNames:
    - h
    - index
    argTypes:
    - struct log_history*
    - int
    constantsTouched: []
    func_position:
      end: 4117
      start: 4106
    functionDepth: 0
    functionLinenumber: 4106
    functionLinenumberEnd: 4117
    functionName: log_history_ref
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - log_index
    linkageType: ''
    returnType: struct log_entry*
    signature: 'const struct log_entry *log_history_ref(const struct log_history *h,
      const int index) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2207,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/manage.c:2211,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/manage.c:2214,1
    - Dst: management_query_user_pass
      Src: /src/openvpn/src/openvpn/manage.c:2213,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2210,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 3
    argNames:
    - man
    - command
    - msg
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 2215
      start: 2202
    functionDepth: 0
    functionLinenumber: 2202
    functionLinenumberEnd: 2215
    functionName: management_android_control
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - management_query_user_pass
    - strcmp
    - CLEAR
    - strncpy
    linkageType: ''
    returnType: bool
    signature: 'bool management_android_control(struct management *man, const char
      *command, const char *msg) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2227,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/manage.c:2228,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/manage.c:2235,1
    - Dst: management_query_user_pass
      Src: /src/openvpn/src/openvpn/manage.c:2229,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/manage.c:2231,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2241,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:2244,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 2246
      start: 2223
    functionDepth: 0
    functionLinenumber: 2223
    functionLinenumberEnd: 2246
    functionName: managment_android_persisttun_action
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - management_query_user_pass
    - strcmp
    - strcpy
    - CLEAR
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int managment_android_persisttun_action(struct management *man) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: man_recv_with_fd
      Src: /src/openvpn/src/openvpn/manage.c:2262,1
    - Dst: command_line_add
      Src: /src/openvpn/src/openvpn/manage.c:2280,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:2279,1
    - Dst: recv
      Src: /src/openvpn/src/openvpn/manage.c:2268,1
    - Dst: man_reset_client_socket
      Src: /src/openvpn/src/openvpn/manage.c:2273,1
    - Dst: buffer_list_reset
      Src: /src/openvpn/src/openvpn/manage.c:2285,1
    - Dst: command_line_get
      Src: /src/openvpn/src/openvpn/manage.c:2292,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/manage.c:2296,1
    - Dst: in_extra_dispatch
      Src: /src/openvpn/src/openvpn/manage.c:2298,1
    - Dst: buffer_list_push
      Src: /src/openvpn/src/openvpn/manage.c:2302,1
    - Dst: command_line_next
      Src: /src/openvpn/src/openvpn/manage.c:2313,1
    - Dst: man_reset_client_socket
      Src: /src/openvpn/src/openvpn/manage.c:2323,1
    - Dst: man_prompt
      Src: /src/openvpn/src/openvpn/manage.c:2330,1
    - Dst: man_process_command
      Src: /src/openvpn/src/openvpn/manage.c:2307,1
    - Dst: man_io_error
      Src: /src/openvpn/src/openvpn/manage.c:2337,1
    - Dst: man_update_io_state
      Src: /src/openvpn/src/openvpn/manage.c:2332,1
    - Dst: man_reset_client_socket
      Src: /src/openvpn/src/openvpn/manage.c:2339,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 44
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 2343
      start: 2251
    functionDepth: 0
    functionLinenumber: 2251
    functionLinenumberEnd: 2343
    functionName: man_read
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - command_line_add
    - buffer_list_push
    - recv
    - man_update_io_state
    - in_extra_dispatch
    - command_line_next
    - man_recv_with_fd
    - man_process_command
    - man_reset_client_socket
    - strcmp
    - command_line_get
    - ASSERT
    - man_prompt
    - man_io_error
    - buffer_list_reset
    linkageType: ''
    returnType: int
    signature: 'static int man_read(struct management *man) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:3501,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:3518,1
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3504,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3548,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/manage.c:3508,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3555,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3560,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.c:3561,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.c:3562,1
    - Dst: man_wait_for_client_connection
      Src: /src/openvpn/src/openvpn/manage.c:3566,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3575,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:3606,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/manage.c:3619,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:3622,1
    - Dst: man_standalone_event_loop
      Src: /src/openvpn/src/openvpn/manage.c:3584,1
    - Dst: man_check_for_signals
      Src: /src/openvpn/src/openvpn/manage.c:3587,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/manage.c:3574,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/manage.c:3604,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 73
    argCount: 5
    argNames:
    - man
    - up
    - type
    - flags
    - static_challenge
    argTypes:
    - struct management*
    - struct user_pass*
    - char*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 3624
      start: 3494
    functionDepth: 0
    functionLinenumber: 3494
    functionLinenumberEnd: 3624
    functionName: management_query_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_check_for_signals
    - man_standalone_ok
    - BSTR
    - buf_printf
    - msg
    - BOOL_CAST
    - man_standalone_event_loop
    - gc_new
    - strcmp
    - secure_memzero
    - CLEAR
    - gc_free
    - man_wait_for_client_connection
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool management_query_user_pass(struct management *man, struct user_pass
      *up, const char *type, const unsigned int flags, const char *static_challenge) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3637,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/manage.c:3647,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3686,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3690,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:3699,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:3630,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3647,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3647,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/manage.c:3652,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3652,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/manage.c:3663,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3664,1
    - Dst: man_wait_for_client_connection
      Src: /src/openvpn/src/openvpn/manage.c:3656,1
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/manage.c:3633,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3648,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3653,1
    - Dst: man_check_for_signals
      Src: /src/openvpn/src/openvpn/manage.c:3672,1
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:3696,1
    - Dst: man_standalone_event_loop
      Src: /src/openvpn/src/openvpn/manage.c:3669,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 49
    argCount: 6
    argNames:
    - man
    - b64_data
    - prompt
    - cmd
    - state
    - input
    argTypes:
    - struct management*
    - char*
    - char*
    - char*
    - int*
    - struct buffer_list**
    constantsTouched: []
    func_position:
      end: 3701
      start: 3626
    functionDepth: 0
    functionLinenumber: 3626
    functionLinenumberEnd: 3701
    functionName: management_query_multiline
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_check_for_signals
    - clear_buf
    - man_standalone_ok
    - in_extra_reset
    - BSTR
    - buf_printf
    - msg
    - man_standalone_event_loop
    - gc_new
    - gc_free
    - man_wait_for_client_connection
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: int
    signature: 'static int management_query_multiline(struct management *man, const
      char *b64_data, const char *prompt, const char *cmd, int *state, struct buffer_list
      **input) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1507,1
    - Dst: man_echo
      Src: /src/openvpn/src/openvpn/manage.c:1515,1
    - Dst: man_echo
      Src: /src/openvpn/src/openvpn/manage.c:1511,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "echo")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1518
      start: 1505
    functionDepth: 0
    functionLinenumber: 1505
    functionLinenumberEnd: 1518
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_echo
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "echo")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:181,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:185,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 187
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 187
    functionName: man_welcome
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void man_welcome(struct management *man) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:632,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:643,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:640,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:635,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:638,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:645,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:645,1
    - Dst: log_history_size
      Src: /src/openvpn/src/openvpn/manage.c:647,1
    - Dst: log_history_ref
      Src: /src/openvpn/src/openvpn/manage.c:653,1
    - Dst: log_entry_print
      Src: /src/openvpn/src/openvpn/manage.c:656,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:660,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:667,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:664,1
    - Dst: virtual_output_callback_func
      Src: /src/openvpn/src/openvpn/manage.c:657,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 29
    argCount: 6
    argNames:
    - man
    - parm
    - type
    - log
    - realtime
    - lep_flags
    argTypes:
    - struct management*
    - char*
    - char*
    - struct log_history*
    - bool*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 668
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 668
    functionName: man_history
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - atoi
    - virtual_output_callback_func
    - msg
    - gc_new
    - gc_free
    - log_entry_print
    - streq
    - log_history_ref
    - log_history_size
    linkageType: ''
    returnType: void
    signature: 'static void man_history(struct management *man, const char *parm,
      const char *type, struct log_history *log, bool *realtime, const unsigned int
      lep_flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_history
      Src: /src/openvpn/src/openvpn/manage.c:684,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - man
    - parm
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 690
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 690
    functionName: man_echo
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_history
    linkageType: ''
    returnType: void
    signature: 'static void man_echo(struct management *man, const char *parm) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_query_user_pass
      Src: /src/openvpn/src/openvpn/manage.c:793,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 3
    argNames:
    - man
    - type
    - action
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 794
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 794
    functionName: man_query_need_ok
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_query_user_pass
    linkageType: ''
    returnType: void
    signature: 'static void man_query_need_ok(struct management *man, const char *type,
      const char *action) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1440,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1447,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1443,1
    - Dst: set_mute_cutoff
      Src: /src/openvpn/src/openvpn/manage.c:1441,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1452,1
    - Dst: get_mute_cutoff
      Src: /src/openvpn/src/openvpn/manage.c:1452,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "mute")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1454
      start: 1436
    functionDepth: 0
    functionLinenumber: 1436
    functionLinenumberEnd: 1454
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - set_mute_cutoff
    - msg
    - get_mute_cutoff
    - atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "mute")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1528,1
    - Dst: man_query_password
      Src: /src/openvpn/src/openvpn/manage.c:1530,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "password")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1532
      start: 1526
    functionDepth: 0
    functionLinenumber: 1526
    functionLinenumberEnd: 1532
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_query_password
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "password")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1553,1
    - Dst: man_send_cc_message
      Src: /src/openvpn/src/openvpn/manage.c:1555,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "cr-response")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1557
      start: 1551
    functionDepth: 0
    functionLinenumber: 1551
    functionLinenumberEnd: 1557
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_send_cc_message
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "cr-response")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_net
      Src: /src/openvpn/src/openvpn/manage.c:1560,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "net")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1561
      start: 1558
    functionDepth: 0
    functionLinenumber: 1558
    functionLinenumberEnd: 1561
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_net
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "net")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 193
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 193
    functionName: man_password_needed
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool man_password_needed(struct management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_history
      Src: /src/openvpn/src/openvpn/manage.c:673,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - man
    - parm
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 679
      start: 670
    functionDepth: 0
    functionLinenumber: 670
    functionLinenumberEnd: 679
    functionName: man_log
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_history
    linkageType: ''
    returnType: void
    signature: 'static void man_log(struct management *man, const char *parm) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_history
      Src: /src/openvpn/src/openvpn/manage.c:695,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - man
    - parm
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 702
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 702
    functionName: man_state
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_history
    linkageType: ''
    returnType: void
    signature: 'static void man_state(struct management *man, const char *parm) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_query_user_pass
      Src: /src/openvpn/src/openvpn/manage.c:800,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 3
    argNames:
    - man
    - type
    - action
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 801
      start: 796
    functionDepth: 0
    functionLinenumber: 796
    functionLinenumberEnd: 801
    functionName: man_query_need_str
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_query_user_pass
    linkageType: ''
    returnType: void
    signature: 'static void man_query_need_str(struct management *man, const char
      *type, const char *action) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: auth_retry_set
      Src: /src/openvpn/src/openvpn/manage.c:1459,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1470,1
    - Dst: auth_retry_print
      Src: /src/openvpn/src/openvpn/manage.c:1470,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1461,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1465,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - (p[0], "auth-retry")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1472
      start: 1455
    functionDepth: 0
    functionLinenumber: 1455
    functionLinenumberEnd: 1472
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - auth_retry_print
    - auth_retry_set
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "auth-retry")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1521,1
    - Dst: man_query_username
      Src: /src/openvpn/src/openvpn/manage.c:1523,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "username")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1525
      start: 1519
    functionDepth: 0
    functionLinenumber: 1519
    functionLinenumberEnd: 1525
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_query_username
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "username")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_forget_passwords
      Src: /src/openvpn/src/openvpn/manage.c:1535,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "forget-passwords")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1536
      start: 1533
    functionDepth: 0
    functionLinenumber: 1533
    functionLinenumberEnd: 1536
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_forget_passwords
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "forget-passwords")) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_aggregate
      Src: /src/openvpn/src/openvpn/manage.c:2352,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/src/openvpn/manage.c:2353,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:2354,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:2356,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/manage.c:2356,1
    - Dst: man_send_with_fd
      Src: /src/openvpn/src/openvpn/manage.c:2360,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/manage.c:2360,1
    - Dst: send
      Src: /src/openvpn/src/openvpn/manage.c:2365,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/manage.c:2365,1
    - Dst: buffer_list_advance
      Src: /src/openvpn/src/openvpn/manage.c:2368,1
    - Dst: man_reset_client_socket
      Src: /src/openvpn/src/openvpn/manage.c:2374,1
    - Dst: man_io_error
      Src: /src/openvpn/src/openvpn/manage.c:2372,1
    - Dst: man_update_io_state
      Src: /src/openvpn/src/openvpn/manage.c:2382,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 27
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 2385
      start: 2345
    functionDepth: 0
    functionLinenumber: 2345
    functionLinenumberEnd: 2385
    functionName: man_write
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_update_io_state
    - buffer_list_aggregate
    - BPTR
    - buffer_list_advance
    - send
    - BLEN
    - man_send_with_fd
    - buffer_list_peek
    - man_reset_client_socket
    - min_int
    - man_io_error
    linkageType: ''
    returnType: int
    signature: 'static int man_write(struct management *man) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/manage.c:3290,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - signal_received
    argTypes:
    - int*
    constantsTouched: []
    func_position:
      end: 3297
      start: 3285
    functionDepth: 0
    functionLinenumber: 3285
    functionLinenumberEnd: 3297
    functionName: man_check_for_signals
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - get_signal
    linkageType: ''
    returnType: bool
    signature: 'static bool man_check_for_signals(volatile int *signal_received) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3309,1
    - Dst: event_reset
      Src: /src/openvpn/src/openvpn/manage.c:3320,1
    - Dst: event_wait
      Src: /src/openvpn/src/openvpn/manage.c:3327,1
    - Dst: management_socket_set
      Src: /src/openvpn/src/openvpn/manage.c:3321,1
    - Dst: man_check_for_signals
      Src: /src/openvpn/src/openvpn/manage.c:3322,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/manage.c:3328,1
    - Dst: man_check_for_signals
      Src: /src/openvpn/src/openvpn/manage.c:3329,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 27
    argCount: 3
    argNames:
    - man
    - signal_received
    - expire
    argTypes:
    - struct management*
    - int*
    - time_t
    constantsTouched: []
    func_position:
      end: 3356
      start: 3302
    functionDepth: 0
    functionLinenumber: 3302
    functionLinenumberEnd: 3356
    functionName: man_block
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_check_for_signals
    - man_standalone_ok
    - event_wait
    - event_reset
    - update_time
    - management_socket_set
    linkageType: ''
    returnType: int
    signature: 'static int man_block(struct management *man, volatile int *signal_received,
      const time_t expire) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1661,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1664,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1667,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - (p[0], "test")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1670
      start: 1659
    functionDepth: 0
    functionLinenumber: 1659
    functionLinenumberEnd: 1670
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_need
    - atoi
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "test")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1412,1
    - Dst: man_kill
      Src: /src/openvpn/src/openvpn/manage.c:1414,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "kill")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1416
      start: 1410
    functionDepth: 0
    functionLinenumber: 1410
    functionLinenumberEnd: 1416
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_kill
    - man_need
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "kill")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2991,1
    - Dst: man_output_env
      Src: /src/openvpn/src/openvpn/manage.c:2993,1
    - Dst: man_output_extra_env
      Src: /src/openvpn/src/openvpn/manage.c:2992,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 3
    argNames:
    - management
    - mdac
    - es
    argTypes:
    - struct management*
    - struct man_def_auth_context*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 2994
      start: 2985
    functionDepth: 0
    functionLinenumber: 2985
    functionLinenumberEnd: 2994
    functionName: management_connection_established
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_output_env
    - man_output_extra_env
    linkageType: ''
    returnType: void
    signature: 'void management_connection_established(struct management *management,
      struct man_def_auth_context *mdac, const struct env_set *es) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/manage.c:3768,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3768,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3776,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3768,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/manage.c:3776,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/manage.c:3779,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3779,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/manage.c:3780,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3780,1
    - Dst: management_query_multiline_flatten
      Src: /src/openvpn/src/openvpn/manage.c:3782,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/manage.c:3785,1
    - Dst: buf_bptr
      Src: /src/openvpn/src/openvpn/manage.c:3783,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 21
    argCount: 3
    argNames:
    - man
    - b64_data
    - algorithm
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 3787
      start: 3761
    functionDepth: 0
    functionLinenumber: 3761
    functionLinenumberEnd: 3787
    functionName: management_query_pk_sig
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_write
    - free_buf
    - buf_bptr
    - management_query_multiline_flatten
    - alloc_buf
    - strlen
    linkageType: ''
    returnType: char*
    signature: 'char */* returns allocated base64 signature */management_query_pk_sig(struct
      management *man, const char *b64_data, const char *algorithm) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: modulo_add
      Src: /src/openvpn/src/openvpn/manage.c:4025,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - h
    - i
    argTypes:
    - struct log_history*
    - int
    constantsTouched: []
    func_position:
      end: 4026
      start: 4022
    functionDepth: 0
    functionLinenumber: 4022
    functionLinenumberEnd: 4026
    functionName: log_index
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - modulo_add
    linkageType: ''
    returnType: int
    signature: 'static inline int log_index(const struct log_history *h, int i) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1421,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1433,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1428,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1424,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/manage.c:1422,1
    - Dst: get_debug_level
      Src: /src/openvpn/src/openvpn/manage.c:1433,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - (p[0], "verb")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1435
      start: 1417
    functionDepth: 0
    functionLinenumber: 1417
    functionLinenumberEnd: 1435
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - get_debug_level
    - atoi
    - set_debug_level
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "verb")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3003,1
    - Dst: man_output_env
      Src: /src/openvpn/src/openvpn/manage.c:3004,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 3
    argNames:
    - management
    - mdac
    - es
    argTypes:
    - struct management*
    - struct man_def_auth_context*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 3007
      start: 2996
    functionDepth: 0
    functionLinenumber: 2996
    functionLinenumberEnd: 3007
    functionName: management_notify_client_close
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_output_env
    linkageType: ''
    returnType: void
    signature: 'void management_notify_client_close(struct management *management,
      struct man_def_auth_context *mdac, const struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/manage.c:3793,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/manage.c:3795,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3794,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/manage.c:3794,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3793,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:3795,1
    - Dst: management_query_multiline_flatten_newline
      Src: /src/openvpn/src/openvpn/manage.c:3798,1
    - Dst: buf_bptr
      Src: /src/openvpn/src/openvpn/manage.c:3799,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/manage.c:3801,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - man
    - cert_name
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 3803
      start: 3789
    functionDepth: 0
    functionLinenumber: 3789
    functionLinenumberEnd: 3803
    functionName: management_query_cert
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_write
    - free_buf
    - buf_bptr
    - alloc_buf
    - strlen
    - management_query_multiline_flatten_newline
    linkageType: ''
    returnType: char*
    signature: 'char *management_query_cert(struct management *man, const char *cert_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:4031,1
    - Dst: ALLOC_ARRAY_CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:4033,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - h
    - capacity
    argTypes:
    - struct log_history*
    - int
    constantsTouched: []
    func_position:
      end: 4034
      start: 4028
    functionDepth: 0
    functionLinenumber: 4028
    functionLinenumberEnd: 4034
    functionName: log_history_obj_init
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - CLEAR
    - ALLOC_ARRAY_CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void log_history_obj_init(struct log_history *h, int capacity) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: man_persist_state
      Src: /src/openvpn/src/openvpn/manage.c:3224,1
    - Dst: man_persist_state
      Src: /src/openvpn/src/openvpn/manage.c:3231,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/manage.c:3226,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/manage.c:3233,1
    - Dst: man_persist_state
      Src: /src/openvpn/src/openvpn/manage.c:3238,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/manage.c:3240,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:3248,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 12
    argCount: 4
    argNames:
    - man
    - es
    - arg
    - persistent
    argTypes:
    - struct management*
    - struct event_set*
    - void*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 3250
      start: 3215
    functionDepth: 0
    functionLinenumber: 3215
    functionLinenumberEnd: 3250
    functionName: management_socket_set
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - event_ctl
    - man_persist_state
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void management_socket_set(struct management *man, struct event_set
      *es, void *arg, unsigned int *persistent) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_query_user_pass
      Src: /src/openvpn/src/openvpn/manage.c:773,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 3
    argNames:
    - man
    - type
    - string
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 774
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 774
    functionName: man_query_username
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_query_user_pass
    linkageType: ''
    returnType: void
    signature: 'static void man_query_username(struct management *man, const char
      *type, const char *string) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_pkcs11_id_count
      Src: /src/openvpn/src/openvpn/manage.c:1623,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "pkcs11-id-count")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1624
      start: 1621
    functionDepth: 0
    functionLinenumber: 1621
    functionLinenumberEnd: 1624
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_pkcs11_id_count
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pkcs11-id-count")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_query_user_pass
      Src: /src/openvpn/src/openvpn/manage.c:786,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 3
    argNames:
    - man
    - type
    - string
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 787
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 787
    functionName: man_query_password
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_query_user_pass
    linkageType: ''
    returnType: void
    signature: 'static void man_query_password(struct management *man, const char
      *type, const char *string) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/manage.c:974,1
    - Dst: buffer_list_new
      Src: /src/openvpn/src/openvpn/manage.c:979,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - mc
    - mode
    argTypes:
    - struct man_connection*
    - int
    constantsTouched: []
    func_position:
      end: 982
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 982
    functionName: in_extra_reset
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - buffer_list_new
    linkageType: ''
    returnType: void
    signature: 'static void in_extra_reset(struct man_connection *mc, const int mode) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1627,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1629,1
    - Dst: man_pkcs11_id_get
      Src: /src/openvpn/src/openvpn/manage.c:1629,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "pkcs11-id-get")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1631
      start: 1625
    functionDepth: 0
    functionLinenumber: 1625
    functionLinenumberEnd: 1631
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - atoi
    - man_pkcs11_id_get
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "pkcs11-id-get")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:72,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:102,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:99,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:118,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:95,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:114,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:111,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:105,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:122,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:75,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:73,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:77,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:79,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:81,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:83,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:90,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:87,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:85,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:92,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:98,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:117,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:94,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:113,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:110,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:104,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:121,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:97,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:116,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:93,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:112,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:120,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:109,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:126,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:107,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:123,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:124,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:119,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:76,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:74,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:78,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:80,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:82,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:84,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:89,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:88,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:86,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:91,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:96,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:101,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:115,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:108,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 54
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 127
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 127
    functionName: man_help
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void man_help(void) '
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 16
    argCount: 2
    argNames:
    - man
    - signum
    argTypes:
    - struct management*
    - int
    constantsTouched: []
    func_position:
      end: 442
      start: 418
    functionDepth: 0
    functionLinenumber: 418
    functionLinenumberEnd: 442
    functionName: man_mod_signal
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int man_mod_signal(const struct management *man, const int
      signum) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:474,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - command_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 475
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 475
    functionName: man_command_unsupported
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void man_command_unsupported(const char *command_name) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:932,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:942,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:940,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:937,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:935,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:945,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:949,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:954,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.c:954,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 2
    argNames:
    - man
    - cmd
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 956
      start: 927
    functionDepth: 0
    functionLinenumber: 927
    functionLinenumberEnd: 956
    functionName: man_hold
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - streq
    - BOOL_CAST
    linkageType: ''
    returnType: void
    signature: 'static void man_hold(struct management *man, const char *cmd) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1539,1
    - Dst: man_query_need_ok
      Src: /src/openvpn/src/openvpn/manage.c:1541,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "needok")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1543
      start: 1537
    functionDepth: 0
    functionLinenumber: 1537
    functionLinenumberEnd: 1543
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_query_need_ok
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "needok")) '
  - BBCount: 15
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 176
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 176
    functionName: man_state_name
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *man_state_name(const int state) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: parse_signal
      Src: /src/openvpn/src/openvpn/manage.c:447,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:454,1
    - Dst: signal_name
      Src: /src/openvpn/src/openvpn/manage.c:454,1
    - Dst: man_mod_signal
      Src: /src/openvpn/src/openvpn/manage.c:450,1
    - Dst: throw_signal
      Src: /src/openvpn/src/openvpn/manage.c:453,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:458,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:461,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:467,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 2
    argNames:
    - man
    - name
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 469
      start: 444
    functionDepth: 0
    functionLinenumber: 444
    functionLinenumberEnd: 469
    functionName: man_signal
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - parse_signal
    - msg
    - signal_name
    - throw_signal
    - man_mod_signal
    linkageType: ''
    returnType: void
    signature: 'static void man_signal(struct management *man, const char *name) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:486,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 3
    argNames:
    - man
    - version
    - so
    argTypes:
    - struct management*
    - int
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 488
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 488
    functionName: man_status
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_status(struct management *man, const int version,
      struct status_output *so) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1546,1
    - Dst: man_query_need_str
      Src: /src/openvpn/src/openvpn/manage.c:1548,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "needstr")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1550
      start: 1544
    functionDepth: 0
    functionLinenumber: 1544
    functionLinenumberEnd: 1550
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_query_need_str
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "needstr")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ssl_purge_auth
      Src: /src/openvpn/src/openvpn/manage.c:806,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:808,1
    - Dst: ssl_clean_auth_token
      Src: /src/openvpn/src/openvpn/manage.c:807,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 809
      start: 803
    functionDepth: 0
    functionLinenumber: 803
    functionLinenumberEnd: 809
    functionName: man_forget_passwords
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - ssl_clean_auth_token
    - ssl_purge_auth
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void man_forget_passwords(struct management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_hold
      Src: /src/openvpn/src/openvpn/manage.c:1564,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "hold")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1565
      start: 1562
    functionDepth: 0
    functionLinenumber: 1562
    functionLinenumberEnd: 1565
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_hold
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "hold")) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: event_free
      Src: /src/openvpn/src/openvpn/manage.c:2626,1
    - Dst: man_delete_unix_socket
      Src: /src/openvpn/src/openvpn/manage.c:2633,1
    - Dst: net_event_win32_close
      Src: /src/openvpn/src/openvpn/manage.c:2628,1
    - Dst: man_close_socket
      Src: /src/openvpn/src/openvpn/manage.c:2632,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/manage.c:2630,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/manage.c:2635,1
    - Dst: man_close_socket
      Src: /src/openvpn/src/openvpn/manage.c:2637,1
    - Dst: command_line_free
      Src: /src/openvpn/src/openvpn/manage.c:2640,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/manage.c:2641,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/manage.c:2643,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/manage.c:2646,1
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:2645,1
    - Dst: man_connection_clear
      Src: /src/openvpn/src/openvpn/manage.c:2647,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 2648
      start: 2621
    functionDepth: 0
    functionLinenumber: 2621
    functionLinenumberEnd: 2648
    functionName: man_connection_close
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - command_line_free
    - in_extra_reset
    - man_connection_clear
    - event_timeout_clear
    - event_free
    - net_event_win32_close
    - man_close_socket
    - man_delete_unix_socket
    - socket_defined
    linkageType: ''
    returnType: void
    signature: 'static void man_connection_close(struct management *man) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: man_settings_init
      Src: /src/openvpn/src/openvpn/manage.c:2685,1
    - Dst: log_history_resize
      Src: /src/openvpn/src/openvpn/manage.c:2702,1
    - Dst: log_history_resize
      Src: /src/openvpn/src/openvpn/manage.c:2701,1
    - Dst: log_history_resize
      Src: /src/openvpn/src/openvpn/manage.c:2703,1
    - Dst: man_connection_init
      Src: /src/openvpn/src/openvpn/manage.c:2713,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 11
    argCount: 11
    argNames:
    - man
    - addr
    - port
    - pass_file
    - client_user
    - client_group
    - log_history_cache
    - echo_buffer_size
    - state_buffer_size
    - remap_sigusr1
    - flags
    argTypes:
    - struct management*
    - char*
    - char*
    - char*
    - char*
    - char*
    - int
    - int
    - int
    - int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2719
      start: 2666
    functionDepth: 0
    functionLinenumber: 2666
    functionLinenumberEnd: 2719
    functionName: management_open
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_connection_init
    - log_history_resize
    - man_settings_init
    linkageType: ''
    returnType: bool
    signature: 'bool management_open(struct management *man, const char *addr, const
      char *port, const char *pass_file, const char *client_user, const char *client_group,
      const int log_history_cache, const int echo_buffer_size, const int state_buffer_size,
      const int remap_sigusr1, const unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/manage.c:3072,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/manage.c:3074,1
    - Dst: man_connection_init
      Src: /src/openvpn/src/openvpn/manage.c:3077,1
    - Dst: inet_ntop
      Src: /src/openvpn/src/openvpn/manage.c:3073,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:3076,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - man
    - tun_local_ip
    argTypes:
    - struct management*
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 3080
      start: 3057
    functionDepth: 0
    functionLinenumber: 3057
    functionLinenumberEnd: 3080
    functionName: management_post_tunnel_open
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_connection_init
    - openvpn_getaddrinfo
    - ASSERT
    - inet_ntop
    - htonl
    linkageType: ''
    returnType: void
    signature: 'void management_post_tunnel_open(struct management *man, const in_addr_t
      tun_local_ip) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3096,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3100,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 3
    argNames:
    - man
    - type
    - reason
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 3102
      start: 3091
    functionDepth: 0
    functionLinenumber: 3091
    functionLinenumberEnd: 3102
    functionName: management_auth_failure
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void management_auth_failure(struct management *man, const char *type,
      const char *reason) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: net_event_win32_get_event
      Src: /src/openvpn/src/openvpn/manage.c:3134,1
    - Dst: man_persist_state
      Src: /src/openvpn/src/openvpn/manage.c:3140,1
    - Dst: net_event_win32_reset_write
      Src: /src/openvpn/src/openvpn/manage.c:3135,1
    - Dst: man_persist_state
      Src: /src/openvpn/src/openvpn/manage.c:3147,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/manage.c:3142,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/manage.c:3149,1
    - Dst: man_persist_state
      Src: /src/openvpn/src/openvpn/manage.c:3154,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/manage.c:3156,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:3161,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 17
    argCount: 4
    argNames:
    - man
    - es
    - arg
    - persistent
    argTypes:
    - struct management*
    - struct event_set*
    - void*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 3164
      start: 3126
    functionDepth: 0
    functionLinenumber: 3126
    functionLinenumberEnd: 3164
    functionName: management_socket_set
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - net_event_win32_reset_write
    - man_persist_state
    - ASSERT
    - event_ctl
    - net_event_win32_get_event
    linkageType: ''
    returnType: void
    signature: 'void management_socket_set(struct management *man, struct event_set
      *es, void *arg, unsigned int *persistent) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:820,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 822
      start: 811
    functionDepth: 0
    functionLinenumber: 811
    functionLinenumberEnd: 822
    functionName: man_net
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_net(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1568,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1570,1
    - Dst: man_bytecount
      Src: /src/openvpn/src/openvpn/manage.c:1570,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "bytecount")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1572
      start: 1566
    functionDepth: 0
    functionLinenumber: 1566
    functionLinenumberEnd: 1572
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - atoi
    - man_bytecount
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "bytecount")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2654,1
    - Dst: man_connection_clear
      Src: /src/openvpn/src/openvpn/manage.c:2661,1
    - Dst: man_persist_init
      Src: /src/openvpn/src/openvpn/manage.c:2656,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2664
      start: 2650
    functionDepth: 0
    functionLinenumber: 2650
    functionLinenumberEnd: 2664
    functionName: management_init
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_persist_init
    - ALLOC_OBJ_CLEAR
    - man_connection_clear
    linkageType: ''
    returnType: struct management*
    signature: 'struct management *management_init(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_output_list_push_finalize
      Src: /src/openvpn/src/openvpn/manage.c:2724,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:2728,1
    - Dst: man_connection_close
      Src: /src/openvpn/src/openvpn/manage.c:2725,1
    - Dst: man_settings_close
      Src: /src/openvpn/src/openvpn/manage.c:2726,1
    - Dst: man_persist_close
      Src: /src/openvpn/src/openvpn/manage.c:2727,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 2729
      start: 2721
    functionDepth: 0
    functionLinenumber: 2721
    functionLinenumberEnd: 2729
    functionName: management_close
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_persist_close
    - man_output_list_push_finalize
    - man_connection_close
    - free
    - man_settings_close
    linkageType: ''
    returnType: void
    signature: 'void management_close(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_connection_close
      Src: /src/openvpn/src/openvpn/manage.c:3087,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 3089
      start: 3082
    functionDepth: 0
    functionLinenumber: 3082
    functionLinenumberEnd: 3089
    functionName: management_pre_tunnel_close
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_connection_close
    linkageType: ''
    returnType: void
    signature: 'void management_pre_tunnel_close(struct management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3107,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - man
    - token
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 3108
      start: 3104
    functionDepth: 0
    functionLinenumber: 3104
    functionLinenumberEnd: 3108
    functionName: management_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void management_auth_token(struct management *man, const char *token) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: net_event_win32_reset
      Src: /src/openvpn/src/openvpn/manage.c:3172,1
    - Dst: net_event_win32_clear_selected_events
      Src: /src/openvpn/src/openvpn/manage.c:3186,1
    - Dst: man_accept
      Src: /src/openvpn/src/openvpn/manage.c:3185,1
    - Dst: net_event_win32_get_event_mask
      Src: /src/openvpn/src/openvpn/manage.c:3173,1
    - Dst: man_reset_client_socket
      Src: /src/openvpn/src/openvpn/manage.c:3177,1
    - Dst: man_read
      Src: /src/openvpn/src/openvpn/manage.c:3193,1
    - Dst: net_event_win32_clear_selected_events
      Src: /src/openvpn/src/openvpn/manage.c:3196,1
    - Dst: man_write
      Src: /src/openvpn/src/openvpn/manage.c:3202,1
    - Dst: WSAGetLastError
      Src: /src/openvpn/src/openvpn/manage.c:3203,1
    - Dst: net_event_win32_clear_selected_events
      Src: /src/openvpn/src/openvpn/manage.c:3205,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 36
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 3211
      start: 3166
    functionDepth: 0
    functionLinenumber: 3166
    functionLinenumberEnd: 3211
    functionName: management_io
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_write
    - man_read
    - net_event_win32_reset
    - WSAGetLastError
    - man_reset_client_socket
    - net_event_win32_get_event_mask
    - man_accept
    - net_event_win32_clear_selected_events
    linkageType: ''
    returnType: void
    signature: 'void management_io(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/manage.c:4178,1
    - Dst: dco_get_peer_stats
      Src: /src/openvpn/src/openvpn/manage.c:4178,1
    - Dst: management_bytes_client
      Src: /src/openvpn/src/openvpn/manage.c:4180,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - man
    - c
    argTypes:
    - struct management*
    - struct context*
    constantsTouched: []
    func_position:
      end: 4182
      start: 4174
    functionDepth: 0
    functionLinenumber: 4174
    functionLinenumberEnd: 4182
    functionName: man_persist_client_stats
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - management_bytes_client
    - dco_get_peer_stats
    - dco_enabled
    linkageType: ''
    returnType: void
    signature: 'void man_persist_client_stats(struct management *man, struct context
      *c) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: parse_cid
      Src: /src/openvpn/src/openvpn/manage.c:1153,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1164,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1160,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:1169,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 3
    argNames:
    - man
    - cid_str
    - kill_msg
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 1172
      start: 1149
    functionDepth: 0
    functionLinenumber: 1149
    functionLinenumberEnd: 1172
    functionName: man_client_kill
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - parse_cid
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_client_kill(struct management *man, const char *cid_str,
      const char *kill_msg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:1220,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1224,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1226
      start: 1212
    functionDepth: 0
    functionLinenumber: 1212
    functionLinenumberEnd: 1226
    functionName: man_certificate
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - in_extra_reset
    linkageType: ''
    returnType: void
    signature: 'static void man_certificate(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: report_command_status
      Src: /src/openvpn/src/openvpn/manage.c:1282,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:1286,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - man
    - p
    argTypes:
    - struct management*
    - char**
    constantsTouched: []
    func_position:
      end: 1288
      start: 1276
    functionDepth: 0
    functionLinenumber: 1276
    functionLinenumberEnd: 1288
    functionName: man_proxy
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - report_command_status
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_proxy(struct management *man, const char **p) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: man_signal
      Src: /src/openvpn/src/openvpn/manage.c:1321,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1318,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - man
    - samenetwork
    argTypes:
    - struct management*
    - bool
    constantsTouched: []
    func_position:
      end: 1324
      start: 1305
    functionDepth: 0
    functionLinenumber: 1305
    functionLinenumberEnd: 1324
    functionName: man_network_change
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_signal
    linkageType: ''
    returnType: void
    signature: 'static void man_network_change(struct management *man, bool samenetwork) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1639,1
    - Dst: man_remote_entry_get
      Src: /src/openvpn/src/openvpn/manage.c:1641,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "remote-entry-get")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1643
      start: 1637
    functionDepth: 0
    functionLinenumber: 1637
    functionLinenumberEnd: 1643
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_remote_entry_get
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote-entry-get")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/manage.c:2124,1
    - Dst: sendmsg
      Src: /src/openvpn/src/openvpn/manage.c:2145,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/manage.c:2135,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/manage.c:2131,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/manage.c:2132,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 19
    argCount: 5
    argNames:
    - fd
    - ptr
    - nbytes
    - flags
    - sendfd
    argTypes:
    - int
    - void*
    - size_t
    - int
    - int
    constantsTouched: []
    func_position:
      end: 2146
      start: 2116
    functionDepth: 0
    functionLinenumber: 2116
    functionLinenumberEnd: 2146
    functionName: man_send_with_fd
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - CMSG_DATA
    - sendmsg
    - CMSG_SPACE
    - CMSG_FIRSTHDR
    - CMSG_LEN
    linkageType: ''
    returnType: ssize_t
    signature: 'static ssize_t man_send_with_fd(int fd, void *ptr, size_t nbytes,
      int flags, int sendfd) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:3015,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:3018,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:3023,1
    - Dst: mroute_addr_print_ex
      Src: /src/openvpn/src/openvpn/manage.c:3020,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.c:3021,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 11
    argCount: 4
    argNames:
    - management
    - mdac
    - addr
    - primary
    argTypes:
    - struct management*
    - struct man_def_auth_context*
    - struct mroute_addr*
    - bool
    constantsTouched: []
    func_position:
      end: 3024
      start: 3009
    functionDepth: 0
    functionLinenumber: 3009
    functionLinenumberEnd: 3024
    functionName: management_learn_addr
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - mroute_addr_print_ex
    - gc_new
    - gc_free
    - BOOL_CAST
    linkageType: ''
    returnType: void
    signature: 'void management_learn_addr(struct management *management, struct man_def_auth_context
      *mdac, const struct mroute_addr *addr, const bool primary) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: command_line_reset
      Src: /src/openvpn/src/openvpn/manage.c:3894,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/manage.c:3895,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/manage.c:3896,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:3897,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - cl
    argTypes:
    - struct command_line*
    constantsTouched: []
    func_position:
      end: 3898
      start: 3887
    functionDepth: 0
    functionLinenumber: 3887
    functionLinenumberEnd: 3898
    functionName: command_line_free
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - command_line_reset
    - free_buf
    - free
    linkageType: ''
    returnType: void
    signature: 'void command_line_free(struct command_line *cl) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:1184,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1180,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1186
      start: 1174
    functionDepth: 0
    functionLinenumber: 1174
    functionLinenumberEnd: 1186
    functionName: man_client_n_clients
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_client_n_clients(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1239,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1243
      start: 1228
    functionDepth: 0
    functionLinenumber: 1228
    functionLinenumberEnd: 1243
    functionName: man_load_stats
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void man_load_stats(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: report_command_status
      Src: /src/openvpn/src/openvpn/manage.c:1296,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:1300,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - man
    - p
    argTypes:
    - struct management*
    - char**
    constantsTouched: []
    func_position:
      end: 1302
      start: 1290
    functionDepth: 0
    functionLinenumber: 1290
    functionLinenumberEnd: 1302
    functionName: man_remote
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - report_command_status
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_remote(struct management *man, const char **p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1646,1
    - Dst: man_proxy
      Src: /src/openvpn/src/openvpn/manage.c:1648,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "proxy")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1650
      start: 1644
    functionDepth: 0
    functionLinenumber: 1644
    functionLinenumberEnd: 1650
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_proxy
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "proxy")) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CMSG_SPACE
      Src: /src/openvpn/src/openvpn/manage.c:2157,1
    - Dst: CMSG_LEN
      Src: /src/openvpn/src/openvpn/manage.c:2178,1
    - Dst: recvmsg
      Src: /src/openvpn/src/openvpn/manage.c:2172,1
    - Dst: CMSG_FIRSTHDR
      Src: /src/openvpn/src/openvpn/manage.c:2177,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2182,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2186,1
    - Dst: CMSG_DATA
      Src: /src/openvpn/src/openvpn/manage.c:2188,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 31
    argCount: 5
    argNames:
    - fd
    - ptr
    - nbytes
    - flags
    - recvfd
    argTypes:
    - int
    - void*
    - size_t
    - int
    - int*
    constantsTouched: []
    func_position:
      end: 2196
      start: 2148
    functionDepth: 0
    functionLinenumber: 2148
    functionLinenumberEnd: 2196
    functionName: man_recv_with_fd
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - CMSG_DATA
    - CMSG_SPACE
    - CMSG_FIRSTHDR
    - msg
    - recvmsg
    - CMSG_LEN
    linkageType: ''
    returnType: ssize_t
    signature: 'static ssize_t man_recv_with_fd(int fd, void *ptr, size_t nbytes,
      int flags, int *recvfd) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:3031,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:3036,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/manage.c:3039,1
    - Dst: log_history_add
      Src: /src/openvpn/src/openvpn/manage.c:3041,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/manage.c:3035,1
    - Dst: log_entry_print
      Src: /src/openvpn/src/openvpn/manage.c:3045,1
    - Dst: man_output_list_push
      Src: /src/openvpn/src/openvpn/manage.c:3050,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:3053,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 3
    argNames:
    - man
    - string
    - pull
    argTypes:
    - struct management*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 3055
      start: 3026
    functionDepth: 0
    functionLinenumber: 3026
    functionLinenumberEnd: 3055
    functionName: management_echo
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - gc_new
    - log_history_add
    - CLEAR
    - update_time
    - log_entry_print
    - man_output_list_push
    - gc_free
    - BOOL_CAST
    linkageType: ''
    returnType: void
    signature: 'void management_echo(struct management *man, const char *string, const
      bool pull) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: char_class
      Src: /src/openvpn/src/openvpn/manage.c:3906,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/manage.c:3908,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/manage.c:3910,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 3
    argNames:
    - cl
    - buf
    - len
    argTypes:
    - struct command_line*
    - unsigned char*
    - int
    constantsTouched: []
    func_position:
      end: 3914
      start: 3900
    functionDepth: 0
    functionLinenumber: 3900
    functionLinenumberEnd: 3914
    functionName: command_line_add
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buf_write_u8
    - char_class
    - buf_clear
    linkageType: ''
    returnType: void
    signature: 'void command_line_add(struct command_line *cl, const unsigned char
      *buf, const int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: log_entry_free_contents
      Src: /src/openvpn/src/openvpn/manage.c:4052,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:4054,1
    - Dst: log_index
      Src: /src/openvpn/src/openvpn/manage.c:4052,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - h
    argTypes:
    - struct log_history*
    constantsTouched: []
    func_position:
      end: 4055
      start: 4046
    functionDepth: 0
    functionLinenumber: 4046
    functionLinenumberEnd: 4055
    functionName: log_history_free_contents
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - log_index
    - log_entry_free_contents
    - free
    linkageType: ''
    returnType: void
    signature: 'static void log_history_free_contents(struct log_history *h) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:842,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:837,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:833,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 3
    argNames:
    - man
    - message
    - parameters
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 844
      start: 824
    functionDepth: 0
    functionLinenumber: 824
    functionLinenumberEnd: 844
    functionName: man_send_cc_message
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_send_cc_message(struct management *man, const char
      *message, const char *parameters) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_load_stats
      Src: /src/openvpn/src/openvpn/manage.c:1399,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "load-stats")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1400
      start: 1397
    functionDepth: 0
    functionLinenumber: 1397
    functionLinenumberEnd: 1400
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_load_stats
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "load-stats")) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: man_state
      Src: /src/openvpn/src/openvpn/manage.c:1477,1
    - Dst: man_state
      Src: /src/openvpn/src/openvpn/manage.c:1487,1
    - Dst: man_state
      Src: /src/openvpn/src/openvpn/manage.c:1483,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - (p[0], "state")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1490
      start: 1473
    functionDepth: 0
    functionLinenumber: 1473
    functionLinenumberEnd: 1490
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_state
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "state")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1575,1
    - Dst: man_client_kill
      Src: /src/openvpn/src/openvpn/manage.c:1577,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "client-kill")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1579
      start: 1573
    functionDepth: 0
    functionLinenumber: 1573
    functionLinenumberEnd: 1579
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_client_kill
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-kill")) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg_set_virtual_output
      Src: /src/openvpn/src/openvpn/manage.c:2443,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2457,1
    - Dst: log_history_close
      Src: /src/openvpn/src/openvpn/manage.c:2454,1
    - Dst: log_history_close
      Src: /src/openvpn/src/openvpn/manage.c:2449,1
    - Dst: log_history_close
      Src: /src/openvpn/src/openvpn/manage.c:2444,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - mp
    argTypes:
    - struct man_persist*
    constantsTouched: []
    func_position:
      end: 2458
      start: 2438
    functionDepth: 0
    functionLinenumber: 2438
    functionLinenumberEnd: 2458
    functionName: man_persist_close
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg_set_virtual_output
    - CLEAR
    - log_history_close
    linkageType: ''
    returnType: void
    signature: 'static void man_persist_close(struct man_persist *mp) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/manage.c:2570,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2572,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct man_settings*
    constantsTouched: []
    func_position:
      end: 2573
      start: 2565
    functionDepth: 0
    functionLinenumber: 2565
    functionLinenumberEnd: 2573
    functionName: man_settings_close
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - freeaddrinfo
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void man_settings_close(struct man_settings *ms) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:2759,1
    - Dst: log_entry_print
      Src: /src/openvpn/src/openvpn/manage.c:2789,1
    - Dst: log_history_add
      Src: /src/openvpn/src/openvpn/manage.c:2785,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2764,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/manage.c:2763,1
    - Dst: man_output_list_push
      Src: /src/openvpn/src/openvpn/manage.c:2800,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:2803,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 34
    argCount: 7
    argNames:
    - man
    - state
    - detail
    - tun_local_ip
    - tun_local_ip6
    - local
    - remote
    argTypes:
    - struct management*
    - int
    - char*
    - in_addr_t*
    - struct in6_addr*
    - struct openvpn_sockaddr*
    - struct openvpn_sockaddr*
    constantsTouched: []
    func_position:
      end: 2805
      start: 2748
    functionDepth: 0
    functionLinenumber: 2748
    functionLinenumberEnd: 2805
    functionName: management_set_state
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - gc_new
    - log_history_add
    - CLEAR
    - update_time
    - log_entry_print
    - man_output_list_push
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void management_set_state(struct management *man, const int state,
      const char *detail, const in_addr_t *tun_local_ip, const struct in6_addr *tun_local_ip6,
      const struct openvpn_sockaddr *local, const struct openvpn_sockaddr *remote) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_errno_maybe_crt
      Src: /src/openvpn/src/openvpn/manage.c:2099,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2104,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/manage.c:2105,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:2103,1
    - Dst: ignore_sys_error
      Src: /src/openvpn/src/openvpn/manage.c:2101,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:2106,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - man
    - prefix
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 2113
      start: 2095
    functionDepth: 0
    functionLinenumber: 2095
    functionLinenumberEnd: 2113
    functionName: man_io_error
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - strerror
    - ignore_sys_error
    - gc_free
    - openvpn_errno_maybe_crt
    linkageType: ''
    returnType: bool
    signature: 'static bool man_io_error(struct management *man, const char *prefix) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1406,1
    - Dst: man_status
      Src: /src/openvpn/src/openvpn/manage.c:1408,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - (p[0], "status")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1409
      start: 1401
    functionDepth: 0
    functionLinenumber: 1401
    functionLinenumberEnd: 1409
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - atoi
    - man_status
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "status")) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1493,1
    - Dst: man_log
      Src: /src/openvpn/src/openvpn/manage.c:1497,1
    - Dst: man_log
      Src: /src/openvpn/src/openvpn/manage.c:1501,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - (p[0], "log")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1504
      start: 1491
    functionDepth: 0
    functionLinenumber: 1491
    functionLinenumberEnd: 1504
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_log
    - man_need
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "log")) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_need
      Src: /src/openvpn/src/openvpn/manage.c:1582,1
    - Dst: man_client_deny
      Src: /src/openvpn/src/openvpn/manage.c:1584,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - (p[0], "client-deny")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1586
      start: 1580
    functionDepth: 0
    functionLinenumber: 1580
    functionLinenumberEnd: 1586
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_need
    - man_client_deny
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "client-deny")) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2475,1
    - Dst: platform_state_user_uid
      Src: /src/openvpn/src/openvpn/manage.c:2496,1
    - Dst: platform_user_get
      Src: /src/openvpn/src/openvpn/manage.c:2495,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2497,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/manage.c:2486,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:2498,1
    - Dst: platform_group_get
      Src: /src/openvpn/src/openvpn/manage.c:2503,1
    - Dst: platform_state_group_gid
      Src: /src/openvpn/src/openvpn/manage.c:2504,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2505,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:2506,1
    - Dst: sockaddr_unix_init
      Src: /src/openvpn/src/openvpn/manage.c:2512,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:2522,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:2538,1
    - Dst: openvpn_getaddrinfo
      Src: /src/openvpn/src/openvpn/manage.c:2536,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 54
    argCount: 11
    argNames:
    - ms
    - addr
    - port
    - pass_file
    - client_user
    - client_group
    - log_history_cache
    - echo_buffer_size
    - state_buffer_size
    - remap_sigusr1
    - flags
    argTypes:
    - struct man_settings*
    - char*
    - char*
    - char*
    - char*
    - char*
    - int
    - int
    - int
    - int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2563
      start: 2460
    functionDepth: 0
    functionLinenumber: 2460
    functionLinenumberEnd: 2563
    functionName: man_settings_init
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - platform_group_get
    - sockaddr_unix_init
    - msg
    - platform_state_group_gid
    - platform_state_user_uid
    - CLEAR
    - openvpn_getaddrinfo
    - ASSERT
    - get_user_pass
    - streq
    - platform_user_get
    linkageType: ''
    returnType: void
    signature: 'static void man_settings_init(struct man_settings *ms, const char
      *addr, const char *port, const char *pass_file, const char *client_user, const
      char *client_group, const int log_history_cache, const int echo_buffer_size,
      const int state_buffer_size, const int remap_sigusr1, const unsigned int flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: net_event_win32_init
      Src: /src/openvpn/src/openvpn/manage.c:2586,1
    - Dst: event_set_init
      Src: /src/openvpn/src/openvpn/manage.c:2602,1
    - Dst: buffer_list_new
      Src: /src/openvpn/src/openvpn/manage.c:2594,1
    - Dst: command_line_new
      Src: /src/openvpn/src/openvpn/manage.c:2593,1
    - Dst: man_connect
      Src: /src/openvpn/src/openvpn/manage.c:2612,1
    - Dst: man_listen
      Src: /src/openvpn/src/openvpn/manage.c:2616,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 2619
      start: 2576
    functionDepth: 0
    functionLinenumber: 2576
    functionLinenumberEnd: 2619
    functionName: man_connection_init
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_connect
    - net_event_win32_init
    - event_set_init
    - buffer_list_new
    - command_line_new
    - man_listen
    linkageType: ''
    returnType: void
    signature: 'static void man_connection_init(struct management *man) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/manage.c:2834,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/manage.c:2841,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/manage.c:2845,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/manage.c:2844,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 2
    argNames:
    - env_str
    - env_filter_level
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 2853
      start: 2807
    functionDepth: 0
    functionLinenumber: 2807
    functionLinenumberEnd: 2853
    functionName: env_filter_match
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - strlen
    - SIZE
    - strncmp
    linkageType: ''
    returnType: bool
    signature: 'static bool env_filter_match(const char *env_str, const int env_filter_level) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: man_accept
      Src: /src/openvpn/src/openvpn/manage.c:3258,1
    - Dst: man_read
      Src: /src/openvpn/src/openvpn/manage.c:3262,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:3273,1
    - Dst: man_write
      Src: /src/openvpn/src/openvpn/manage.c:3266,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 6
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 3275
      start: 3252
    functionDepth: 0
    functionLinenumber: 3252
    functionLinenumberEnd: 3275
    functionName: management_io
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_read
    - man_write
    - ASSERT
    - man_accept
    linkageType: ''
    returnType: void
    signature: 'void management_io(struct management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:4014,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:4015,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - e
    argTypes:
    - struct log_entry*
    constantsTouched: []
    func_position:
      end: 4016
      start: 4010
    functionDepth: 0
    functionLinenumber: 4010
    functionLinenumberEnd: 4016
    functionName: log_entry_free_contents
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - CLEAR
    - free
    linkageType: ''
    returnType: void
    signature: 'static void log_entry_free_contents(struct log_entry *e) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:850,1
    - Dst: pkcs11_management_id_count
      Src: /src/openvpn/src/openvpn/manage.c:850,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 851
      start: 847
    functionDepth: 0
    functionLinenumber: 847
    functionLinenumberEnd: 851
    functionName: man_pkcs11_id_count
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - pkcs11_management_id_count
    linkageType: ''
    returnType: void
    signature: 'static void man_pkcs11_id_count(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:882,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:881,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:886,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 888
      start: 874
    functionDepth: 0
    functionLinenumber: 874
    functionLinenumberEnd: 888
    functionName: man_remote_entry_count
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_remote_entry_count(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/manage.c:1043,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1049,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - str
    - what
    - uint
    argTypes:
    - char*
    - char*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 1052
      start: 1040
    functionDepth: 0
    functionLinenumber: 1040
    functionLinenumberEnd: 1052
    functionName: parse_uint
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - sscanf
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool parse_uint(const char *str, const char *what, unsigned
      int *uint) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1192,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - man
    - level
    argTypes:
    - struct management*
    - int
    constantsTouched: []
    func_position:
      end: 1193
      start: 1188
    functionDepth: 0
    functionLinenumber: 1188
    functionLinenumberEnd: 1193
    functionName: man_env_filter
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void man_env_filter(struct management *man, const int level) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1721
      start: 1710
    functionDepth: 0
    functionLinenumber: 1710
    functionLinenumberEnd: 1721
    functionName: man_connection_settings_reset
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void man_connection_settings_reset(struct management *man) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:1816,1
    - Dst: sd_close
      Src: /src/openvpn/src/openvpn/manage.c:1828,1
    - Dst: man_verify_unix_peer_uid_gid
      Src: /src/openvpn/src/openvpn/manage.c:1826,1
    - Dst: socket_accept_unix
      Src: /src/openvpn/src/openvpn/manage.c:1825,1
    - Dst: socket_do_accept
      Src: /src/openvpn/src/openvpn/manage.c:1834,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/manage.c:1837,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/manage.c:1841,1
    - Dst: man_stop_ne32
      Src: /src/openvpn/src/openvpn/manage.c:1844,1
    - Dst: man_new_connection_post
      Src: /src/openvpn/src/openvpn/manage.c:1848,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1850
      start: 1812
    functionDepth: 0
    functionLinenumber: 1812
    functionLinenumberEnd: 1850
    functionName: man_accept
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_verify_unix_peer_uid_gid
    - man_stop_ne32
    - man_new_connection_post
    - CLEAR
    - sd_close
    - socket_accept_unix
    - socket_do_accept
    - socket_defined
    linkageType: ''
    returnType: void
    signature: 'static void man_accept(struct management *man) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11_management_id_get
      Src: /src/openvpn/src/openvpn/manage.c:859,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:865,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:861,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:868,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:869,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - man
    - index
    argTypes:
    - struct management*
    - int
    constantsTouched: []
    func_position:
      end: 870
      start: 853
    functionDepth: 0
    functionLinenumber: 853
    functionLinenumberEnd: 870
    functionName: man_pkcs11_id_get
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - pkcs11_management_id_get
    - free
    linkageType: ''
    returnType: void
    signature: 'static void man_pkcs11_id_get(struct management *man, const int index) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:893,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:900,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/manage.c:903,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:901,1
    - Dst: min_uint
      Src: /src/openvpn/src/openvpn/manage.c:909,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:915,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/manage.c:917,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:919,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:923,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 24
    argCount: 3
    argNames:
    - man
    - p1
    - p2
    argTypes:
    - struct management*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 925
      start: 890
    functionDepth: 0
    functionLinenumber: 890
    functionLinenumberEnd: 925
    functionName: man_remote_entry_get
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - atoi
    - man_command_unsupported
    - msg
    - strcmp
    - min_uint
    - ASSERT
    - free
    linkageType: ''
    returnType: void
    signature: 'static void man_remote_entry_get(struct management *man, const char
      *p1, const char *p2) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:1204,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1208,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 2
    argNames:
    - man
    - cmd_name
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 1210
      start: 1196
    functionDepth: 0
    functionLinenumber: 1196
    functionLinenumberEnd: 1210
    functionName: man_pk_sig
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - in_extra_reset
    linkageType: ''
    returnType: void
    signature: 'static void man_pk_sig(struct management *man, const char *cmd_name) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/manage.c:1332,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - man
    - version
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 1334
      start: 1327
    functionDepth: 0
    functionLinenumber: 1327
    functionLinenumberEnd: 1334
    functionName: set_client_version
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - atoi
    linkageType: ''
    returnType: void
    signature: 'static void set_client_version(struct management *man, const char
      *version) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_pk_sig
      Src: /src/openvpn/src/openvpn/manage.c:1610,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "rsa-sig")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1611
      start: 1608
    functionDepth: 0
    functionLinenumber: 1608
    functionLinenumberEnd: 1611
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_pk_sig
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "rsa-sig")) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_remote_entry_count
      Src: /src/openvpn/src/openvpn/manage.c:1635,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - (p[0], "remote-entry-count")
    argTypes:
    - streq
    constantsTouched: []
    func_position:
      end: 1636
      start: 1633
    functionDepth: 0
    functionLinenumber: 1633
    functionLinenumberEnd: 1636
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_remote_entry_count
    linkageType: ''
    returnType: else
    signature: 'else if (streq(p[0], "remote-entry-count")) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:1726,1
    - Dst: man_connection_settings_reset
      Src: /src/openvpn/src/openvpn/manage.c:1730,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1739,1
    - Dst: man_start_ne32
      Src: /src/openvpn/src/openvpn/manage.c:1733,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/manage.c:1728,1
    - Dst: sockaddr_unix_name
      Src: /src/openvpn/src/openvpn/manage.c:1741,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1747,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/manage.c:1749,1
    - Dst: getpeername
      Src: /src/openvpn/src/openvpn/manage.c:1755,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1758,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/manage.c:1759,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1763,1
    - Dst: man_password_needed
      Src: /src/openvpn/src/openvpn/manage.c:1769,1
    - Dst: man_prompt
      Src: /src/openvpn/src/openvpn/manage.c:1773,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:1776,1
    - Dst: man_welcome
      Src: /src/openvpn/src/openvpn/manage.c:1771,1
    - Dst: buffer_list_reset
      Src: /src/openvpn/src/openvpn/manage.c:1767,1
    - Dst: man_update_io_state
      Src: /src/openvpn/src/openvpn/manage.c:1774,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 29
    argCount: 2
    argNames:
    - man
    - description
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 1777
      start: 1723
    functionDepth: 0
    functionLinenumber: 1723
    functionLinenumberEnd: 1777
    functionName: man_new_connection_post
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - print_sockaddr
    - man_password_needed
    - man_update_io_state
    - set_nonblock
    - msg
    - man_connection_settings_reset
    - man_welcome
    - gc_new
    - sockaddr_unix_name
    - gc_free
    - getpeername
    - man_prompt
    - man_start_ne32
    - buffer_list_reset
    linkageType: ''
    returnType: void
    signature: 'static void man_new_connection_post(struct management *man, const
      char *description) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3954,1
    - Dst: addr_defined
      Src: /src/openvpn/src/openvpn/manage.c:3992,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/manage.c:3986,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3990,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3986,1
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/manage.c:3993,1
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/manage.c:3995,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3997,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/manage.c:3997,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/manage.c:4007,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/manage.c:3947,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3950,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3966,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3974,1
    - Dst: man_state_name
      Src: /src/openvpn/src/openvpn/manage.c:3974,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3978,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3982,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:4001,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/manage.c:4001,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3962,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3970,1
    - Dst: msg_flags_string
      Src: /src/openvpn/src/openvpn/manage.c:3970,1
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/manage.c:3991,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3992,1
    - Dst: addr_defined
      Src: /src/openvpn/src/openvpn/manage.c:3990,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:3958,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/manage.c:4005,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 61
    argCount: 3
    argNames:
    - e
    - flags
    - gc
    argTypes:
    - struct log_entry*
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4008
      start: 3944
    functionDepth: 0
    functionLinenumber: 3944
    functionLinenumberEnd: 4008
    functionName: log_entry_print
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg_flags_string
    - man_state_name
    - BSTR
    - buf_printf
    - print_in_addr_t
    - msg
    - print_sockaddr_ex
    - print_in6_addr
    - IN6_IS_ADDR_UNSPECIFIED
    - addr_defined
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *log_entry_print(const struct log_entry *e, unsigned int
      flags, struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: net_event_win32_start
      Src: /src/openvpn/src/openvpn/manage.c:1689,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/manage.c:1698,1
    - Dst: net_event_win32_start
      Src: /src/openvpn/src/openvpn/manage.c:1694,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1700
      start: 1683
    functionDepth: 0
    functionLinenumber: 1683
    functionLinenumberEnd: 1700
    functionName: man_start_ne32
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - ASSERT
    - net_event_win32_start
    linkageType: ''
    returnType: void
    signature: 'static void man_start_ne32(struct management *man) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/manage.c:2002,1
    - Dst: man_stop_ne32
      Src: /src/openvpn/src/openvpn/manage.c:2005,1
    - Dst: buffer_list_reset
      Src: /src/openvpn/src/openvpn/manage.c:2011,1
    - Dst: man_close_socket
      Src: /src/openvpn/src/openvpn/manage.c:2007,1
    - Dst: command_line_reset
      Src: /src/openvpn/src/openvpn/manage.c:2010,1
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:2012,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2013,1
    - Dst: ssl_purge_auth
      Src: /src/openvpn/src/openvpn/manage.c:2019,1
    - Dst: ssl_clean_auth_token
      Src: /src/openvpn/src/openvpn/manage.c:2020,1
    - Dst: man_mod_signal
      Src: /src/openvpn/src/openvpn/manage.c:2025,1
    - Dst: throw_signal_soft
      Src: /src/openvpn/src/openvpn/manage.c:2036,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2035,1
    - Dst: throw_signal_soft
      Src: /src/openvpn/src/openvpn/manage.c:2029,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2028,1
    - Dst: man_listen
      Src: /src/openvpn/src/openvpn/manage.c:2040,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 30
    argCount: 2
    argNames:
    - man
    - exiting
    argTypes:
    - struct management*
    - bool
    constantsTouched: []
    func_position:
      end: 2043
      start: 1999
    functionDepth: 0
    functionLinenumber: 1999
    functionLinenumberEnd: 2043
    functionName: man_reset_client_socket
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - in_extra_reset
    - man_stop_ne32
    - msg
    - ssl_clean_auth_token
    - throw_signal_soft
    - command_line_reset
    - man_mod_signal
    - man_close_socket
    - socket_defined
    - ssl_purge_auth
    - man_listen
    - buffer_list_reset
    linkageType: ''
    returnType: void
    signature: 'static void man_reset_client_socket(struct management *man, const
      bool exiting) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - man
    - cb
    argTypes:
    - struct management*
    - struct management_callback*
    constantsTouched: []
    func_position:
      end: 2737
      start: 2731
    functionDepth: 0
    functionLinenumber: 2731
    functionLinenumberEnd: 2737
    functionName: management_set_callback
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void management_set_callback(struct management *man, const struct
      management_callback *cb) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3388,1
    - Dst: management_io
      Src: /src/openvpn/src/openvpn/manage.c:3393,1
    - Dst: man_block
      Src: /src/openvpn/src/openvpn/manage.c:3390,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - man
    - signal_received
    - expire
    argTypes:
    - struct management*
    - int*
    - time_t
    constantsTouched: []
    func_position:
      end: 3397
      start: 3384
    functionDepth: 0
    functionLinenumber: 3384
    functionLinenumberEnd: 3397
    functionName: man_standalone_event_loop
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - management_io
    - man_block
    - man_standalone_ok
    linkageType: ''
    returnType: int
    signature: 'static int man_standalone_event_loop(struct management *man, volatile
      int *signal_received, const time_t expire) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3364,1
    - Dst: management_io
      Src: /src/openvpn/src/openvpn/manage.c:3368,1
    - Dst: man_block
      Src: /src/openvpn/src/openvpn/manage.c:3371,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - man
    - signal_received
    argTypes:
    - struct management*
    - int*
    constantsTouched: []
    func_position:
      end: 3379
      start: 3361
    functionDepth: 0
    functionLinenumber: 3361
    functionLinenumberEnd: 3379
    functionName: man_output_standalone
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - management_io
    - man_block
    - man_standalone_ok
    linkageType: ''
    returnType: void
    signature: 'static void man_output_standalone(struct management *man, volatile
      int *signal_received) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: net_event_win32_stop
      Src: /src/openvpn/src/openvpn/manage.c:1705,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 1706
      start: 1702
    functionDepth: 0
    functionLinenumber: 1702
    functionLinenumberEnd: 1706
    functionName: man_stop_ne32
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - net_event_win32_stop
    linkageType: ''
    returnType: void
    signature: 'static void man_stop_ne32(struct management *man) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/manage.c:2048,1
    - Dst: man_password_needed
      Src: /src/openvpn/src/openvpn/manage.c:2057,1
    - Dst: in_extra_reset
      Src: /src/openvpn/src/openvpn/manage.c:2055,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2053,1
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/manage.c:2054,1
    - Dst: man_check_password
      Src: /src/openvpn/src/openvpn/manage.c:2059,1
    - Dst: parse_line
      Src: /src/openvpn/src/openvpn/manage.c:2063,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:2064,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2066,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/manage.c:2068,1
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/manage.c:2091,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2090,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/manage.c:2092,1
    - Dst: man_dispatch_command
      Src: /src/openvpn/src/openvpn/manage.c:2086,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2070,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:2079,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 32
    argCount: 2
    argNames:
    - man
    - line
    argTypes:
    - struct management*
    - char*
    constantsTouched: []
    func_position:
      end: 2093
      start: 2045
    functionDepth: 0
    functionLinenumber: 2045
    functionLinenumberEnd: 2093
    functionName: man_process_command
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_dispatch_command
    - man_password_needed
    - in_extra_reset
    - status_open
    - parse_line
    - msg
    - gc_new
    - status_close
    - CLEAR
    - gc_free
    - streq
    - man_check_password
    linkageType: ''
    returnType: void
    signature: 'static void man_process_command(struct management *man, const char
      *line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:2744,1
    - Dst: man_output_list_push_finalize
      Src: /src/openvpn/src/openvpn/manage.c:2745,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 2746
      start: 2739
    functionDepth: 0
    functionLinenumber: 2739
    functionLinenumberEnd: 2746
    functionName: management_clear_callback
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_output_list_push_finalize
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void management_clear_callback(struct management *man) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: parse_cid
      Src: /src/openvpn/src/openvpn/manage.c:1073,1
    - Dst: parse_uint
      Src: /src/openvpn/src/openvpn/manage.c:1073,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1083,1
    - Dst: parse_uint
      Src: /src/openvpn/src/openvpn/manage.c:1074,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/manage.c:1087,1
    - Dst: man_command_unsupported
      Src: /src/openvpn/src/openvpn/manage.c:1093,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 5
    argNames:
    - man
    - cid_str
    - kid_str
    - extra
    - timeout_str
    argTypes:
    - struct management*
    - char*
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 1096
      start: 1065
    functionDepth: 0
    functionLinenumber: 1065
    functionLinenumberEnd: 1096
    functionName: man_client_pending_auth
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - msg
    - parse_cid
    - parse_uint
    - man_command_unsupported
    linkageType: ''
    returnType: void
    signature: 'static void man_client_pending_auth(struct management *man, const
      char *cid_str, const char *kid_str, const char *extra, const char *timeout_str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 3283
      start: 3279
    functionDepth: 0
    functionLinenumber: 3279
    functionLinenumberEnd: 3283
    functionName: man_standalone_ok
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool man_standalone_ok(const struct management *man) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: management_event_loop_n_seconds
      Src: /src/openvpn/src/openvpn/manage.c:4128,1
    - Dst: sleep
      Src: /src/openvpn/src/openvpn/manage.c:4137,1
    - Dst: win32_sleep
      Src: /src/openvpn/src/openvpn/manage.c:4133,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 4141
      start: 4119
    functionDepth: 0
    functionLinenumber: 4119
    functionLinenumberEnd: 4141
    functionName: management_sleep
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - management_event_loop_n_seconds
    - sleep
    - win32_sleep
    linkageType: ''
    returnType: void
    signature: 'void management_sleep(const int n) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - persistent
    - n
    argTypes:
    - unsigned int*
    - int
    constantsTouched: []
    func_position:
      end: 3122
      start: 3110
    functionDepth: 0
    functionLinenumber: 3110
    functionLinenumberEnd: 3122
    functionName: man_persist_state
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool man_persist_state(unsigned int *persistent, const
      int n) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: management_query_multiline
      Src: /src/openvpn/src/openvpn/manage.c:3712,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/src/openvpn/manage.c:3716,1
    - Dst: buffer_list_aggregate_separator
      Src: /src/openvpn/src/openvpn/manage.c:3715,1
    - Dst: buffer_list_defined
      Src: /src/openvpn/src/openvpn/manage.c:3713,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3717,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/manage.c:3719,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3719,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/manage.c:3720,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/manage.c:3721,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3721,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3722,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/manage.c:3726,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 24
    argCount: 6
    argNames:
    - man
    - b64_data
    - prompt
    - cmd
    - state
    - input
    argTypes:
    - struct management*
    - char*
    - char*
    - char*
    - int*
    - struct buffer_list**
    constantsTouched: []
    func_position:
      end: 3730
      start: 3703
    functionDepth: 0
    functionLinenumber: 3703
    functionLinenumberEnd: 3730
    functionName: management_query_multiline_flatten_newline
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - memcpy
    - buffer_list_aggregate_separator
    - management_query_multiline
    - BLEN
    - buffer_list_peek
    - malloc
    - buffer_list_defined
    - check_malloc_return
    linkageType: ''
    returnType: char*
    signature: 'static char */* returns allocated base64 signature */management_query_multiline_flatten_newline(struct
      management *man, const char *b64_data, const char *prompt, const char *cmd,
      int *state, struct buffer_list **input) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: man_standalone_ok
      Src: /src/openvpn/src/openvpn/manage.c:3811,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - man
    argTypes:
    - struct management*
    constantsTouched: []
    func_position:
      end: 3812
      start: 3808
    functionDepth: 0
    functionLinenumber: 3808
    functionLinenumberEnd: 3812
    functionName: management_would_hold
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - man_standalone_ok
    linkageType: ''
    returnType: bool
    signature: 'bool management_would_hold(struct management *man) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/manage.c:3874,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/manage.c:3876,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/manage.c:3875,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 3878
      start: 3870
    functionDepth: 0
    functionLinenumber: 3870
    functionLinenumberEnd: 3878
    functionName: command_line_new
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    - alloc_buf
    linkageType: ''
    returnType: struct command_line*
    signature: 'struct command_line *command_line_new(const int buf_len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: management_query_multiline
      Src: /src/openvpn/src/openvpn/manage.c:3741,1
    - Dst: buffer_list_defined
      Src: /src/openvpn/src/openvpn/manage.c:3742,1
    - Dst: buffer_list_peek
      Src: /src/openvpn/src/openvpn/manage.c:3745,1
    - Dst: buffer_list_aggregate
      Src: /src/openvpn/src/openvpn/manage.c:3744,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3746,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/manage.c:3748,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3748,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/manage.c:3749,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/manage.c:3750,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3750,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/manage.c:3751,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/manage.c:3755,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 24
    argCount: 6
    argNames:
    - man
    - b64_data
    - prompt
    - cmd
    - state
    - input
    argTypes:
    - struct management*
    - char*
    - char*
    - char*
    - int*
    - struct buffer_list**
    constantsTouched: []
    func_position:
      end: 3759
      start: 3732
    functionDepth: 0
    functionLinenumber: 3732
    functionLinenumberEnd: 3759
    functionName: management_query_multiline_flatten
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - buffer_list_free
    - memcpy
    - buffer_list_aggregate
    - management_query_multiline
    - BLEN
    - buffer_list_peek
    - malloc
    - buffer_list_defined
    - check_malloc_return
    linkageType: ''
    returnType: char*
    signature: 'static char */* returns allocated base64 signature */management_query_multiline_flatten(struct
      management *man, const char *b64_data, const char *prompt, const char *cmd,
      int *state, struct buffer_list **input) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/manage.c:4146,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/manage.c:4152,1
    - Dst: dco_get_peer_stats
      Src: /src/openvpn/src/openvpn/manage.c:4154,1
    - Dst: man_bytecount_output_client
      Src: /src/openvpn/src/openvpn/manage.c:4165,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 14
    argCount: 3
    argNames:
    - c
    - man
    - timeval
    argTypes:
    - struct context*
    - struct management*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 4168
      start: 4143
    functionDepth: 0
    functionLinenumber: 4143
    functionLinenumberEnd: 4168
    functionName: management_check_bytecount
    functionSourceFile: /src/openvpn/src/openvpn/manage.c
    functionUses: []
    functionsReached:
    - dco_get_peer_stats
    - dco_enabled
    - event_timeout_trigger
    - man_bytecount_output_client
    linkageType: ''
    returnType: void
    signature: 'void management_check_bytecount(struct context *c, struct management
      *man, struct timeval *timeval) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: CreateEvent
      Src: /src/openvpn/src/openvpn/win32.c:231,1
    - Dst: WSAEventSelect
      Src: /src/openvpn/src/openvpn/win32.c:254,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:234,1
    - Dst: CreateEvent
      Src: /src/openvpn/src/openvpn/win32.c:246,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:249,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:256,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 30
    argCount: 4
    argNames:
    - event
    - network_events
    - sd
    - flags
    argTypes:
    - struct rw_handle*
    - long
    - socket_descriptor_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 258
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 258
    functionName: init_net_event_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - CreateEvent
    - WSAEventSelect
    - msg
    linkageType: ''
    returnType: void
    signature: 'void init_net_event_win32(struct rw_handle *event, long network_events,
      socket_descriptor_t sd, unsigned int flags) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:457,1
    - Dst: GetStdHandle
      Src: /src/openvpn/src/openvpn/win32.c:470,1
    - Dst: SetConsoleMode
      Src: /src/openvpn/src/openvpn/win32.c:485,1
    - Dst: GetConsoleMode
      Src: /src/openvpn/src/openvpn/win32.c:473,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:487,1
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:505,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/win32.c:508,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/win32.c:509,1
    - Dst: init_security_attributes_allow_all
      Src: /src/openvpn/src/openvpn/win32.c:511,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:513,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:526,1
    - Dst: SetConsoleCtrlHandler
      Src: /src/openvpn/src/openvpn/win32.c:536,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:538,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/win32.c:533,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpn/win32.c:524,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:520,1
    - Dst: CreateEventW
      Src: /src/openvpn/src/openvpn/win32.c:516,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 66
    argCount: 4
    argNames:
    - ws
    - force
    - exit_event_name
    - exit_event_initial_state
    argTypes:
    - struct win32_signal*
    - int
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 540
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 540
    functionName: win32_signal_open
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - HANDLE_DEFINED
    - CreateEventW
    - SetConsoleCtrlHandler
    - msg
    - wide_string
    - gc_new
    - GetStdHandle
    - CLEAR
    - init_security_attributes_allow_all
    - gc_free
    - WaitForSingleObject
    - SetConsoleMode
    - GetConsoleMode
    linkageType: ''
    returnType: void
    signature: 'void win32_signal_open(struct win32_signal *ws, int force, const char
      *exit_event_name, bool exit_event_initial_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:699,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - wt
    argTypes:
    - struct window_title*
    constantsTouched: []
    func_position:
      end: 700
      start: 696
    functionDepth: 0
    functionLinenumber: 696
    functionLinenumberEnd: 700
    functionName: window_title_clear
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void window_title_clear(struct window_title *wt) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/win32.c:888,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/win32.c:890,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/win32.c:906,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:893,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/win32.c:909,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/win32.c:911,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/win32.c:912,1
    - Dst: env_allowed
      Src: /src/openvpn/src/openvpn/win32.c:917,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/win32.c:919,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/win32.c:920,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/win32.c:922,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/win32.c:933,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/win32.c:932,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:931,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 44
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 943
      start: 884
    functionDepth: 0
    functionLinenumber: 884
    functionLinenumberEnd: 943
    functionName: env_block
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - get_win_sys_path
    - msg
    - snprintf
    - strcpy
    - malloc
    - strlen
    - env_allowed
    - check_malloc_return
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static char *env_block(const struct env_set *es) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: GetProcAddress
      Src: /src/openvpn/src/openvpn/win32.c:1301,1
    - Dst: GetModuleHandle
      Src: /src/openvpn/src/openvpn/win32.c:1301,1
    - Dst: is_wow64_process2
      Src: /src/openvpn/src/openvpn/win32.c:1326,1
    - Dst: is_wow64_process2
      Src: /src/openvpn/src/openvpn/win32.c:1313,1
    - Dst: GetCurrentProcess
      Src: /src/openvpn/src/openvpn/win32.c:1313,1
    - Dst: GetCurrentProcess
      Src: /src/openvpn/src/openvpn/win32.c:1326,1
    - Dst: IsWow64Process
      Src: /src/openvpn/src/openvpn/win32.c:1349,1
    - Dst: GetCurrentProcess
      Src: /src/openvpn/src/openvpn/win32.c:1349,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 29
    argCount: 2
    argNames:
    - process_arch
    - host_arch
    argTypes:
    - arch_t*
    - arch_t*
    constantsTouched: []
    func_position:
      end: 1358
      start: 1293
    functionDepth: 0
    functionLinenumber: 1293
    functionLinenumberEnd: 1358
    functionName: win32_get_arch
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - GetModuleHandle
    - GetCurrentProcess
    - is_wow64_process2
    - IsWow64Process
    - GetProcAddress
    linkageType: ''
    returnType: void
    signature: 'static void win32_get_arch(arch_t *process_arch, arch_t *host_arch) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/win32.c:1434,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1441,1
    - Dst: ReadFile
      Src: /src/openvpn/src/openvpn/win32.c:1439,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/win32.c:1443,1
    - Dst: WriteFile
      Src: /src/openvpn/src/openvpn/win32.c:1438,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/win32.c:1443,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/win32.c:1443,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/win32.c:1447,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 5
    argNames:
    - pipe
    - data
    - size
    - ack
    - context
    argTypes:
    - HANDLE
    - void*
    - size_t
    - ack_message_t*
    - char*
    constantsTouched: []
    func_position:
      end: 1449
      start: 1430
    functionDepth: 0
    functionLinenumber: 1430
    functionLinenumberEnd: 1449
    functionName: send_msg_iservice
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - GetLastError
    - gc_new
    - strerror_win32
    - gc_free
    - WriteFile
    - ReadFile
    linkageType: ''
    returnType: bool
    signature: 'bool send_msg_iservice(HANDLE pipe, const void *data, size_t size,
      ack_message_t *ack, const char *context) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: WSAEnumNetworkEvents
      Src: /src/openvpn/src/openvpn/win32.c:264,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:266,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - event
    - sd
    argTypes:
    - struct rw_handle*
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 273
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 273
    functionName: reset_net_event_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - WSAEnumNetworkEvents
    linkageType: ''
    returnType: long
    signature: 'long reset_net_event_win32(struct rw_handle *event, socket_descriptor_t
      sd) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/win32.c:545,1
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:546,1
    - Dst: GetNumberOfConsoleInputEvents
      Src: /src/openvpn/src/openvpn/win32.c:549,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 555
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 555
    functionName: keyboard_input_available
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - HANDLE_DEFINED
    - ASSERT
    - GetNumberOfConsoleInputEvents
    linkageType: ''
    returnType: bool
    signature: 'static bool keyboard_input_available(struct win32_signal *ws) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetConsoleTitle
      Src: /src/openvpn/src/openvpn/win32.c:707,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - wt
    argTypes:
    - struct window_title*
    constantsTouched: []
    func_position:
      end: 717
      start: 702
    functionDepth: 0
    functionLinenumber: 702
    functionLinenumberEnd: 717
    functionName: window_title_save
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - GetConsoleTitle
    linkageType: ''
    returnType: void
    signature: 'void window_title_save(struct window_title *wt) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1366,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1370,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1374,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1378,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 6
    argCount: 2
    argNames:
    - arch
    - out
    argTypes:
    - arch_t
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1384
      start: 1360
    functionDepth: 0
    functionLinenumber: 1360
    functionLinenumberEnd: 1384
    functionName: win32_print_arch
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - buf_printf
    linkageType: ''
    returnType: void
    signature: 'static void win32_print_arch(arch_t arch, struct buffer *out) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swprintf
      Src: /src/openvpn/src/openvpn/win32.c:1456,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1456,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpn/win32.c:1466,1
    - Dst: RegGetValueW
      Src: /src/openvpn/src/openvpn/win32.c:1464,1
    - Dst: RegOpenKeyExW
      Src: /src/openvpn/src/openvpn/win32.c:1458,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 3
    argNames:
    - key
    - value
    - size
    argTypes:
    - WCHAR*
    - WCHAR*
    - DWORD
    constantsTouched: []
    func_position:
      end: 1469
      start: 1451
    functionDepth: 0
    functionLinenumber: 1451
    functionLinenumberEnd: 1469
    functionName: get_openvpn_reg_value
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - _countof
    - RegCloseKey
    - swprintf
    - RegOpenKeyExW
    - RegGetValueW
    linkageType: ''
    returnType: bool
    signature: 'bool get_openvpn_reg_value(const WCHAR *key, WCHAR *value, DWORD size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:325,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 327
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 327
    functionName: net_event_win32_init
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void net_event_win32_init(struct net_event_win32 *ne) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: semaphore_release
      Src: /src/openvpn/src/openvpn/win32.c:875,1
    - Dst: semaphore_close
      Src: /src/openvpn/src/openvpn/win32.c:877,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 878
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 878
    functionName: netcmd_semaphore_release
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - semaphore_release
    - semaphore_close
    linkageType: ''
    returnType: void
    signature: 'void netcmd_semaphore_release(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:192,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:194,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/win32.c:197,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct overlapped_io*
    constantsTouched: []
    func_position:
      end: 198
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 198
    functionName: overlapped_io_close
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - free_buf
    - CloseHandle
    linkageType: ''
    returnType: void
    signature: 'void overlapped_io_close(struct overlapped_io *o) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/win32.c:280,1
    - Dst: WSAEventSelect
      Src: /src/openvpn/src/openvpn/win32.c:282,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:289,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/win32.c:287,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:284,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:293,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:295,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/win32.c:303,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:305,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:309,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:311,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 38
    argCount: 3
    argNames:
    - event
    - sd
    - flags
    argTypes:
    - struct rw_handle*
    - socket_descriptor_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 316
      start: 275
    functionDepth: 0
    functionLinenumber: 275
    functionLinenumberEnd: 316
    functionName: close_net_event_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - CloseHandle
    - msg
    - WSAEventSelect
    - socket_defined
    - ResetEvent
    linkageType: ''
    returnType: void
    signature: 'void close_net_event_win32(struct rw_handle *event, socket_descriptor_t
      sd, unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/win32.c:332,1
    - Dst: socket_defined
      Src: /src/openvpn/src/openvpn/win32.c:332,1
    - Dst: init_net_event_win32
      Src: /src/openvpn/src/openvpn/win32.c:335,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ne
    - network_events
    - sd
    argTypes:
    - struct net_event_win32*
    - long
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 336
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 336
    functionName: net_event_win32_start
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - socket_defined
    - init_net_event_win32
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void net_event_win32_start(struct net_event_win32 *ne, long network_events,
      socket_descriptor_t sd) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/win32.c:1077,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:1082,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:1080,1
    - Dst: GetModuleFileName
      Src: /src/openvpn/src/openvpn/win32.c:1084,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:1081,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1087,1
    - Dst: GetStartupInfo
      Src: /src/openvpn/src/openvpn/win32.c:1092,1
    - Dst: CreateProcess
      Src: /src/openvpn/src/openvpn/win32.c:1097,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:1099,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:1100,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1104,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/win32.c:1108,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 1
    argNames:
    - cmdline
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1109
      start: 1071
    functionDepth: 0
    functionLinenumber: 1071
    functionLinenumberEnd: 1109
    functionName: fork_to_self
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - GetStartupInfo
    - CreateProcess
    - msg
    - CloseHandle
    - free
    - CLEAR
    - GetModuleFileName
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void fork_to_self(const char *cmdline) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1602,1
    - Dst: wcsnicmp
      Src: /src/openvpn/src/openvpn/win32.c:1609,1
    - Dst: get_openvpn_reg_value
      Src: /src/openvpn/src/openvpn/win32.c:1572,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1563,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1572,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1574,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1596,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1603,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1584,1
    - Dst: wcsncmp
      Src: /src/openvpn/src/openvpn/win32.c:1561,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1571,1
    - Dst: get_openvpn_reg_value
      Src: /src/openvpn/src/openvpn/win32.c:1571,1
    - Dst: GetSystemDirectoryW
      Src: /src/openvpn/src/openvpn/win32.c:1579,1
    - Dst: GetFullPathNameW
      Src: /src/openvpn/src/openvpn/win32.c:1594,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1584,1
    - Dst: wcsnicmp
      Src: /src/openvpn/src/openvpn/win32.c:1602,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1579,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1581,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1592,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1609,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 44
    argCount: 1
    argNames:
    - plugin_path
    argTypes:
    - WCHAR*
    constantsTouched: []
    func_position:
      end: 1610
      start: 1557
    functionDepth: 0
    functionLinenumber: 1557
    functionLinenumberEnd: 1610
    functionName: plugin_in_trusted_dir
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - GetSystemDirectoryW
    - GetFullPathNameW
    - _countof
    - get_openvpn_reg_value
    - msg
    - wcslen
    - wcsncmp
    - wcsnicmp
    linkageType: ''
    returnType: bool
    signature: 'bool plugin_in_trusted_dir(const WCHAR *plugin_path) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: WSAStartup
      Src: /src/openvpn/src/openvpn/win32.c:110,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:112,1
    - Dst: win32_signal_clear
      Src: /src/openvpn/src/openvpn/win32.c:115,1
    - Dst: set_openssl_env_vars
      Src: /src/openvpn/src/openvpn/win32.c:117,1
    - Dst: window_title_clear
      Src: /src/openvpn/src/openvpn/win32.c:114,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 118
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 118
    functionName: init_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - set_openssl_env_vars
    - window_title_clear
    - win32_signal_clear
    - WSAStartup
    linkageType: ''
    returnType: void
    signature: 'void init_win32(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 2
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct overlapped_io*
    constantsTouched: []
    func_position:
      end: 215
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 215
    functionName: overlapped_io_state_ascii
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'char *overlapped_io_state_ascii(const struct overlapped_io *o) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/win32.c:344,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/win32.c:348,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:352,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 354
      start: 338
    functionDepth: 0
    functionLinenumber: 338
    functionLinenumberEnd: 354
    functionName: net_event_win32_reset_write
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - SetEvent
    - ResetEvent
    linkageType: ''
    returnType: void
    signature: 'void net_event_win32_reset_write(struct net_event_win32 *ne) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/win32.c:1114,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1116
      start: 1111
    functionDepth: 0
    functionLinenumber: 1111
    functionLinenumberEnd: 1116
    functionName: get_win_sys_path
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: char*
    signature: 'char *get_win_sys_path(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1618,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1625,1
    - Dst: CryptProtectMemory
      Src: /src/openvpn/src/openvpn/win32.c:1622,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 1628
      start: 1612
    functionDepth: 0
    functionLinenumber: 1612
    functionLinenumberEnd: 1628
    functionName: protect_buffer_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - CryptProtectMemory
    linkageType: ''
    returnType: bool
    signature: 'bool protect_buffer_win32(char *buf, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: semaphore_open
      Src: /src/openvpn/src/openvpn/win32.c:847,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 848
      start: 844
    functionDepth: 0
    functionLinenumber: 844
    functionLinenumberEnd: 848
    functionName: netcmd_semaphore_init
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - semaphore_open
    linkageType: ''
    returnType: void
    signature: 'void netcmd_semaphore_init(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_openvpn_reg_value
      Src: /src/openvpn/src/openvpn/win32.c:1477,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpn/win32.c:1482,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1485,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1477,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1482,1
    - Dst: wcslen
      Src: /src/openvpn/src/openvpn/win32.c:1487,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/win32.c:1499,1
    - Dst: _wgetenv_s
      Src: /src/openvpn/src/openvpn/win32.c:1503,1
    - Dst: swprintf
      Src: /src/openvpn/src/openvpn/win32.c:1507,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1507,1
    - Dst: _wputenv_s
      Src: /src/openvpn/src/openvpn/win32.c:1508,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1511
      start: 1471
    functionDepth: 0
    functionLinenumber: 1471
    functionLinenumberEnd: 1511
    functionName: set_openssl_env_vars
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - _countof
    - get_openvpn_reg_value
    - SIZE
    - _wputenv_s
    - wcslen
    - swprintf
    - _wgetenv_s
    linkageType: ''
    returnType: void
    signature: 'static void set_openssl_env_vars(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/win32.c:1177,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1196,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/win32.c:1189,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/win32.c:1197,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1203,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/win32.c:1205,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 4
    argNames:
    - add
    - dns_only
    - index
    - pipe
    argTypes:
    - bool
    - bool
    - int
    - HANDLE
    constantsTouched: []
    func_position:
      end: 1207
      start: 1172
    functionDepth: 0
    functionLinenumber: 1172
    functionLinenumberEnd: 1207
    functionName: win_wfp_block_service
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - gc_free
    linkageType: ''
    returnType: bool
    signature: 'static bool win_wfp_block_service(bool add, bool dns_only, int index,
      const HANDLE pipe) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_net_event_win32
      Src: /src/openvpn/src/openvpn/win32.c:359,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 360
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 360
    functionName: net_event_win32_reset
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - reset_net_event_win32
    linkageType: ''
    returnType: void
    signature: 'void net_event_win32_reset(struct net_event_win32 *ne) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:394,1
    - Dst: GetStdHandle
      Src: /src/openvpn/src/openvpn/win32.c:402,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/win32.c:396,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:404,1
    - Dst: WriteConsoleInput
      Src: /src/openvpn/src/openvpn/win32.c:407,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:409,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 412
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 412
    functionName: win_trigger_event
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - HANDLE_DEFINED
    - msg
    - GetStdHandle
    - CLEAR
    - WriteConsoleInput
    - SetEvent
    linkageType: ''
    returnType: void
    signature: 'static void win_trigger_event(struct win32_signal *ws) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - ir
    argTypes:
    - INPUT_RECORD*
    constantsTouched: []
    func_position:
      end: 573
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 573
    functionName: keyboard_ir_to_key
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static unsigned int keyboard_ir_to_key(INPUT_RECORD *ir) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: win32_service_interrupt
      Src: /src/openvpn/src/openvpn/win32.c:644,1
    - Dst: throw_signal
      Src: /src/openvpn/src/openvpn/win32.c:676,1
    - Dst: win32_keyboard_get
      Src: /src/openvpn/src/openvpn/win32.c:651,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 17
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 679
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 679
    functionName: win32_signal_get
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - throw_signal
    - win32_service_interrupt
    - win32_keyboard_get
    linkageType: ''
    returnType: int
    signature: 'int win32_signal_get(struct win32_signal *ws) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SetConsoleTitle
      Src: /src/openvpn/src/openvpn/win32.c:724,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - wt
    argTypes:
    - struct window_title*
    constantsTouched: []
    func_position:
      end: 726
      start: 719
    functionDepth: 0
    functionLinenumber: 719
    functionLinenumberEnd: 726
    functionName: window_title_restore
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - SetConsoleTitle
    linkageType: ''
    returnType: void
    signature: 'void window_title_restore(const struct window_title *wt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/win32.c:782,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:790,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpn/win32.c:787,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:795,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:784,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:800,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - s
    - timeout_milliseconds
    argTypes:
    - struct semaphore*
    - int
    constantsTouched: []
    func_position:
      end: 806
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 806
    functionName: semaphore_lock
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - WaitForSingleObject
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'bool semaphore_lock(struct semaphore *s, int timeout_milliseconds) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: semaphore_release
      Src: /src/openvpn/src/openvpn/win32.c:831,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:834,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:833,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct semaphore*
    constantsTouched: []
    func_position:
      end: 837
      start: 824
    functionDepth: 0
    functionLinenumber: 824
    functionLinenumberEnd: 837
    functionName: semaphore_close
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - semaphore_release
    - CloseHandle
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void semaphore_close(struct semaphore *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetModuleFileNameW
      Src: /src/openvpn/src/openvpn/win32.c:1145,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1148,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - path
    - size
    argTypes:
    - PWCHAR
    - DWORD
    constantsTouched: []
    func_position:
      end: 1152
      start: 1142
    functionDepth: 0
    functionLinenumber: 1142
    functionLinenumberEnd: 1152
    functionName: win_get_exe_path
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - GetModuleFileNameW
    linkageType: ''
    returnType: bool
    signature: 'static bool win_get_exe_path(PWCHAR path, DWORD size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: net_event_win32_defined
      Src: /src/openvpn/src/openvpn/win32.c:365,1
    - Dst: close_net_event_win32
      Src: /src/openvpn/src/openvpn/win32.c:367,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 371
      start: 362
    functionDepth: 0
    functionLinenumber: 362
    functionLinenumberEnd: 371
    functionName: net_event_win32_stop
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - close_net_event_win32
    - net_event_win32_defined
    linkageType: ''
    returnType: void
    signature: 'void net_event_win32_stop(struct net_event_win32 *ne) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/win32.c:578,1
    - Dst: keyboard_ir_to_key
      Src: /src/openvpn/src/openvpn/win32.c:595,1
    - Dst: ReadConsoleInput
      Src: /src/openvpn/src/openvpn/win32.c:589,1
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:579,1
    - Dst: keyboard_input_available
      Src: /src/openvpn/src/openvpn/win32.c:585,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 601
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 601
    functionName: win32_keyboard_get
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - ReadConsoleInput
    - HANDLE_DEFINED
    - ASSERT
    - keyboard_input_available
    - keyboard_ir_to_key
    linkageType: ''
    returnType: unsigned int
    signature: 'static unsigned int win32_keyboard_get(struct win32_signal *ws) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:684,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:686,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpn/win32.c:689,1
    - Dst: win32_keyboard_get
      Src: /src/openvpn/src/openvpn/win32.c:690,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 692
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 692
    functionName: win32_pause
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - HANDLE_DEFINED
    - win32_keyboard_get
    - WaitForSingleObject
    linkageType: ''
    returnType: void
    signature: 'void win32_pause(struct win32_signal *ws) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/win32.c:731,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:737,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/win32.c:732,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/win32.c:738,1
    - Dst: SetConsoleTitle
      Src: /src/openvpn/src/openvpn/win32.c:738,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/win32.c:739,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - title
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 740
      start: 728
    functionDepth: 0
    functionLinenumber: 728
    functionLinenumberEnd: 740
    functionName: window_title_generate
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - SetConsoleTitle
    - BSTR
    - buf_printf
    - gc_new
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void window_title_generate(const char *title) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/win32.c:813,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:817,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:814,1
    - Dst: ReleaseSemaphore
      Src: /src/openvpn/src/openvpn/win32.c:815,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct semaphore*
    constantsTouched: []
    func_position:
      end: 822
      start: 808
    functionDepth: 0
    functionLinenumber: 808
    functionLinenumberEnd: 822
    functionName: semaphore_release
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - ReleaseSemaphore
    - ASSERT
    - msg
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void semaphore_release(struct semaphore *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/win32.c:1157,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/win32.c:1169,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/win32.c:1166,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1161,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1165,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 2
    argNames:
    - err
    - msg
    argTypes:
    - DWORD
    - char*
    constantsTouched: []
    func_position:
      end: 1170
      start: 1154
    functionDepth: 0
    functionLinenumber: 1154
    functionLinenumberEnd: 1170
    functionName: win_wfp_msg_handler
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - gc_new
    - strerror_win32
    linkageType: ''
    returnType: void
    signature: 'static void win_wfp_msg_handler(DWORD err, const char *msg) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:1218,1
    - Dst: win_wfp_block_service
      Src: /src/openvpn/src/openvpn/win32.c:1219,1
    - Dst: add_wfp_block_filters
      Src: /src/openvpn/src/openvpn/win32.c:1229,1
    - Dst: win_get_exe_path
      Src: /src/openvpn/src/openvpn/win32.c:1223,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/win32.c:1223,1
    - Dst: get_interface_metric
      Src: /src/openvpn/src/openvpn/win32.c:1234,1
    - Dst: get_interface_metric
      Src: /src/openvpn/src/openvpn/win32.c:1239,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpn/win32.c:1244,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpn/win32.c:1247,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 3
    argNames:
    - index
    - msg_channel
    - dns_only
    argTypes:
    - NET_IFINDEX
    - HANDLE
    - BOOL
    constantsTouched: []
    func_position:
      end: 1256
      start: 1209
    functionDepth: 0
    functionLinenumber: 1209
    functionLinenumberEnd: 1256
    functionName: win_wfp_block
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - win_wfp_block_service
    - _countof
    - dmsg
    - win_get_exe_path
    - add_wfp_block_filters
    - get_interface_metric
    - set_interface_metric
    linkageType: ''
    returnType: bool
    signature: 'bool win_wfp_block(const NET_IFINDEX index, const HANDLE msg_channel,
      BOOL dns_only) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: net_event_win32_defined
      Src: /src/openvpn/src/openvpn/win32.c:376,1
    - Dst: close_net_event_win32
      Src: /src/openvpn/src/openvpn/win32.c:378,1
    - Dst: net_event_win32_init
      Src: /src/openvpn/src/openvpn/win32.c:380,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 381
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 381
    functionName: net_event_win32_close
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - close_net_event_win32
    - net_event_win32_defined
    - net_event_win32_init
    linkageType: ''
    returnType: void
    signature: 'void net_event_win32_close(struct net_event_win32 *ne) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CreateProcessW
      Src: /src/openvpn/src/openvpn/win32.c:1029,1
    - Dst: openvpn_execve_allowed
      Src: /src/openvpn/src/openvpn/win32.c:1007,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/win32.c:1009,1
    - Dst: GetStartupInfoW
      Src: /src/openvpn/src/openvpn/win32.c:1024,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:1032,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/win32.c:1048,1
    - Dst: env_block
      Src: /src/openvpn/src/openvpn/win32.c:1013,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/win32.c:1015,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:1021,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1046,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/win32.c:1049,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:1042,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1056,1
    - Dst: wide_cmd_line
      Src: /src/openvpn/src/openvpn/win32.c:1014,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:1020,1
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/win32.c:1054,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpn/win32.c:1033,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1040,1
    - Dst: GetExitCodeProcess
      Src: /src/openvpn/src/openvpn/win32.c:1034,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1063,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 42
    argCount: 3
    argNames:
    - a
    - es
    - flags
    argTypes:
    - struct argv*
    - struct env_set*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1066
      start: 999
    functionDepth: 0
    functionLinenumber: 999
    functionLinenumberEnd: 1066
    functionName: openvpn_execve
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - env_block
    - GetExitCodeProcess
    - CloseHandle
    - msg
    - openvpn_execve_allowed
    - script_security
    - wide_string
    - gc_new
    - CreateProcessW
    - wide_cmd_line
    - free
    - CLEAR
    - gc_free
    - WaitForSingleObject
    - GetStartupInfoW
    linkageType: ''
    returnType: int
    signature: 'int openvpn_execve(const struct argv *a, const struct env_set *es,
      const unsigned int flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: netcmd_semaphore_close
      Src: /src/openvpn/src/openvpn/win32.c:123,1
    - Dst: win32_signal_open
      Src: /src/openvpn/src/openvpn/win32.c:129,1
    - Dst: win32_pause
      Src: /src/openvpn/src/openvpn/win32.c:135,1
    - Dst: win32_pause
      Src: /src/openvpn/src/openvpn/win32.c:130,1
    - Dst: win32_signal_close
      Src: /src/openvpn/src/openvpn/win32.c:131,1
    - Dst: window_title_restore
      Src: /src/openvpn/src/openvpn/win32.c:138,1
    - Dst: win32_signal_close
      Src: /src/openvpn/src/openvpn/win32.c:139,1
    - Dst: WSACleanup
      Src: /src/openvpn/src/openvpn/win32.c:140,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/win32.c:141,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 142
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 142
    functionName: uninit_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - window_title_restore
    - WSACleanup
    - netcmd_semaphore_close
    - win32_signal_open
    - free
    - win32_signal_close
    - win32_pause
    linkageType: ''
    returnType: void
    signature: 'void uninit_win32(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:153,1
    - Dst: SetSecurityDescriptorDacl
      Src: /src/openvpn/src/openvpn/win32.c:162,1
    - Dst: InitializeSecurityDescriptor
      Src: /src/openvpn/src/openvpn/win32.c:158,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - obj
    argTypes:
    - struct security_attributes*
    constantsTouched: []
    func_position:
      end: 167
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 167
    functionName: init_security_attributes_allow_all
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - InitializeSecurityDescriptor
    - SetSecurityDescriptorDacl
    - CLEAR
    linkageType: ''
    returnType: bool
    signature: 'bool init_security_attributes_allow_all(struct security_attributes
      *obj) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:420,1
    - Dst: win_trigger_event
      Src: /src/openvpn/src/openvpn/win32.c:433,1
    - Dst: throw_signal
      Src: /src/openvpn/src/openvpn/win32.c:431,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:438,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - signum
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 443
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 443
    functionName: win_ctrl_handler
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - throw_signal
    - msg
    - win_trigger_event
    linkageType: ''
    returnType: bool
    signature: 'static bool WINAPI win_ctrl_handler(DWORD signum) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:628,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpn/win32.c:629,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 635
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 635
    functionName: win32_service_interrupt
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - HANDLE_DEFINED
    - WaitForSingleObject
    linkageType: ''
    returnType: bool
    signature: 'bool win32_service_interrupt(struct win32_signal *ws) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:747,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct semaphore*
    constantsTouched: []
    func_position:
      end: 748
      start: 744
    functionDepth: 0
    functionLinenumber: 744
    functionLinenumberEnd: 748
    functionName: semaphore_clear
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void semaphore_clear(struct semaphore *s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: semaphore_close
      Src: /src/openvpn/src/openvpn/win32.c:853,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 854
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 854
    functionName: netcmd_semaphore_close
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - semaphore_close
    linkageType: ''
    returnType: void
    signature: 'void netcmd_semaphore_close(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/win32.c:962,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/win32.c:972,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/win32.c:971,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/win32.c:977,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/win32.c:970,1
    - Dst: string_mod
      Src: /src/openvpn/src/openvpn/win32.c:978,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:981,1
    - Dst: string_class
      Src: /src/openvpn/src/openvpn/win32.c:983,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:985,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:989,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/win32.c:993,1
    - Dst: wide_string
      Src: /src/openvpn/src/openvpn/win32.c:993,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 33
    argCount: 2
    argNames:
    - a
    - gc
    argTypes:
    - struct argv*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 994
      start: 945
    functionDepth: 0
    functionLinenumber: 945
    functionLinenumberEnd: 994
    functionName: wide_cmd_line
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - string_class
    - gc_malloc
    - wide_string
    - strcpy
    - strlen
    - string_mod
    - check_malloc_return
    - alloc_buf_gc
    linkageType: ''
    returnType: WCHAR*
    signature: 'static WCHAR *wide_cmd_line(const struct argv *a, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/win32.c:1121,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/win32.c:1123,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/win32.c:1122,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - newpath
    - es
    argTypes:
    - char*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 1124
      start: 1118
    functionDepth: 0
    functionLinenumber: 1118
    functionLinenumberEnd: 1124
    functionName: set_win_sys_path
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - string_alloc
    - setenv_str
    - free
    linkageType: ''
    returnType: void
    signature: 'void set_win_sys_path(const char *newpath, struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: set_pause_exit_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_pause_exit_win32(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:174,1
    - Dst: CreateEvent
      Src: /src/openvpn/src/openvpn/win32.c:177,1
    - Dst: alloc_buf_sock_tun
      Src: /src/openvpn/src/openvpn/win32.c:184,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:180,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - o
    - frame
    - event_state
    argTypes:
    - struct overlapped_io*
    - struct frame*
    - BOOL
    constantsTouched: []
    func_position:
      end: 185
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 185
    functionName: overlapped_io_init
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - CreateEvent
    - CLEAR
    - msg
    - alloc_buf_sock_tun
    linkageType: ''
    returnType: void
    signature: 'void overlapped_io_init(struct overlapped_io *o, const struct frame
      *frame, BOOL event_state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:448,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 449
      start: 445
    functionDepth: 0
    functionLinenumber: 445
    functionLinenumberEnd: 449
    functionName: win32_signal_clear
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void win32_signal_clear(struct win32_signal *ws) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init_security_attributes_allow_all
      Src: /src/openvpn/src/openvpn/win32.c:759,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:770,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:766,1
    - Dst: CreateSemaphore
      Src: /src/openvpn/src/openvpn/win32.c:761,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - s
    - name
    argTypes:
    - struct semaphore*
    - char*
    constantsTouched: []
    func_position:
      end: 772
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 772
    functionName: semaphore_open
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - init_security_attributes_allow_all
    - CreateSemaphore
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void semaphore_open(struct semaphore *s, const char *name) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: netcmd_semaphore_init
      Src: /src/openvpn/src/openvpn/win32.c:863,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:868,1
    - Dst: semaphore_lock
      Src: /src/openvpn/src/openvpn/win32.c:866,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 870
      start: 856
    functionDepth: 0
    functionLinenumber: 856
    functionLinenumberEnd: 870
    functionName: netcmd_semaphore_lock
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - semaphore_lock
    - msg
    - netcmd_semaphore_init
    linkageType: ''
    returnType: void
    signature: 'void netcmd_semaphore_lock(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetEnvironmentVariable
      Src: /src/openvpn/src/openvpn/win32.c:1130,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1137,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1133,1
    - Dst: set_win_sys_path
      Src: /src/openvpn/src/openvpn/win32.c:1139,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 1140
      start: 1126
    functionDepth: 0
    functionLinenumber: 1126
    functionLinenumberEnd: 1140
    functionName: set_win_sys_path_via_env
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - GetEnvironmentVariable
    - set_win_sys_path
    - msg
    linkageType: ''
    returnType: void
    signature: 'void set_win_sys_path_via_env(struct env_set *es) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetModuleHandleW
      Src: /src/openvpn/src/openvpn/win32.c:1391,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1412,1
    - Dst: fn
      Src: /src/openvpn/src/openvpn/win32.c:1405,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/win32.c:1410,1
    - Dst: GetProcAddress
      Src: /src/openvpn/src/openvpn/win32.c:1397,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1414,1
    - Dst: win32_get_arch
      Src: /src/openvpn/src/openvpn/win32.c:1417,1
    - Dst: win32_print_arch
      Src: /src/openvpn/src/openvpn/win32.c:1418,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1422,1
    - Dst: win32_print_arch
      Src: /src/openvpn/src/openvpn/win32.c:1423,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/win32.c:1424,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1428
      start: 1388
    functionDepth: 0
    functionLinenumber: 1388
    functionLinenumberEnd: 1428
    functionName: win32_version_string
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - fn
    - buf_printf
    - win32_print_arch
    - GetProcAddress
    - GetModuleHandleW
    - alloc_buf_gc
    - win32_get_arch
    linkageType: ''
    returnType: char*
    signature: 'const char *win32_version_string(struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:1523,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/win32.c:1532,1
    - Dst: WaitForSingleObject
      Src: /src/openvpn/src/openvpn/win32.c:1537,1
    - Dst: Sleep
      Src: /src/openvpn/src/openvpn/win32.c:1527,1
    - Dst: win32_signal_get
      Src: /src/openvpn/src/openvpn/win32.c:1538,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/win32.c:1544,1
    - Dst: Sleep
      Src: /src/openvpn/src/openvpn/win32.c:1550,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 31
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 1555
      start: 1513
    functionDepth: 0
    functionLinenumber: 1513
    functionLinenumberEnd: 1555
    functionName: win32_sleep
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - HANDLE_DEFINED
    - Sleep
    - update_time
    - WaitForSingleObject
    - win32_signal_get
    linkageType: ''
    returnType: void
    signature: 'void win32_sleep(const int n) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/win32.c:606,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:614,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/win32.c:617,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/win32.c:608,1
    - Dst: SetConsoleMode
      Src: /src/openvpn/src/openvpn/win32.c:612,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - ws
    argTypes:
    - struct win32_signal*
    constantsTouched: []
    func_position:
      end: 618
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 618
    functionName: win32_signal_close
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - HANDLE_DEFINED
    - CloseHandle
    - msg
    - CLEAR
    - SetConsoleMode
    linkageType: ''
    returnType: void
    signature: 'void win32_signal_close(struct win32_signal *ws) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/win32.c:1261,1
    - Dst: win_wfp_block_service
      Src: /src/openvpn/src/openvpn/win32.c:1266,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpn/win32.c:1274,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1265,1
    - Dst: delete_wfp_block_filters
      Src: /src/openvpn/src/openvpn/win32.c:1270,1
    - Dst: set_interface_metric
      Src: /src/openvpn/src/openvpn/win32.c:1278,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - index
    - msg_channel
    argTypes:
    - NET_IFINDEX
    - HANDLE
    constantsTouched: []
    func_position:
      end: 1283
      start: 1258
    functionDepth: 0
    functionLinenumber: 1258
    functionLinenumberEnd: 1283
    functionName: win_wfp_uninit
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - win_wfp_block_service
    - dmsg
    - msg
    - set_interface_metric
    - delete_wfp_block_filters
    linkageType: ''
    returnType: bool
    signature: 'bool win_wfp_uninit(const NET_IFINDEX index, const HANDLE msg_channel) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1636,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/win32.c:1643,1
    - Dst: CryptUnprotectMemory
      Src: /src/openvpn/src/openvpn/win32.c:1640,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 1646
      start: 1630
    functionDepth: 0
    functionLinenumber: 1630
    functionLinenumberEnd: 1646
    functionName: unprotect_buffer_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.c
    functionUses: []
    functionsReached:
    - msg
    - CryptUnprotectMemory
    linkageType: ''
    returnType: bool
    signature: 'bool unprotect_buffer_win32(char *buf, size_t len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_free
      Src: /src/openvpn/src/openvpn/init.c:4169,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4173
      start: 4164
    functionDepth: 0
    functionLinenumber: 4164
    functionLinenumberEnd: 4173
    functionName: do_close_event_set
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - event_free
    linkageType: ''
    returnType: void
    signature: 'static void do_close_event_set(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: management_clear_callback
      Src: /src/openvpn/src/openvpn/init.c:4546,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4549
      start: 4540
    functionDepth: 0
    functionLinenumber: 4540
    functionLinenumberEnd: 4549
    functionName: uninit_management_callback
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - management_clear_callback
    linkageType: ''
    returnType: void
    signature: 'void uninit_management_callback(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init_context_buffers
      Src: /src/openvpn/src/openvpn/init.c:3810,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3812
      start: 3807
    functionDepth: 0
    functionLinenumber: 3807
    functionLinenumberEnd: 3812
    functionName: do_init_buffers
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - init_context_buffers
    linkageType: ''
    returnType: void
    signature: 'static void do_init_buffers(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ifconfig_pool_persist_init
      Src: /src/openvpn/src/openvpn/init.c:4215,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4219
      start: 4210
    functionDepth: 0
    functionLinenumber: 4210
    functionLinenumberEnd: 4219
    functionName: do_open_ifconfig_pool_persist
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_persist_init
    linkageType: ''
    returnType: void
    signature: 'static void do_open_ifconfig_pool_persist(struct context *c) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2104,1
    - Dst: close_tun_afunix
      Src: /src/openvpn/src/openvpn/init.c:2115,1
    - Dst: ifconfig_noexec_enabled
      Src: /src/openvpn/src/openvpn/init.c:2109,1
    - Dst: undo_ifconfig
      Src: /src/openvpn/src/openvpn/init.c:2111,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/init.c:2105,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/init.c:2119,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/init.c:2120,1
    - Dst: close_tun
      Src: /src/openvpn/src/openvpn/init.c:2124,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:2129,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2130
      start: 2101
    functionDepth: 0
    functionLinenumber: 2101
    functionLinenumberEnd: 2130
    functionName: do_close_tun_simple
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - print_tun_backend_driver
    - CLEAR
    - undo_ifconfig
    - close_tun
    - free
    - close_tun_afunix
    - ifconfig_noexec_enabled
    linkageType: ''
    returnType: void
    signature: 'static void do_close_tun_simple(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: plugin_list_init
      Src: /src/openvpn/src/openvpn/init.c:4306,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4309
      start: 4301
    functionDepth: 0
    functionLinenumber: 4301
    functionLinenumberEnd: 4309
    functionName: init_plugins
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - plugin_list_init
    linkageType: ''
    returnType: void
    signature: 'void init_plugins(struct context *c) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: run_dns_up_down
      Src: /src/openvpn/src/openvpn/init.c:2159,1
    - Dst: management_pre_tunnel_close
      Src: /src/openvpn/src/openvpn/init.c:2169,1
    - Dst: delete_routes
      Src: /src/openvpn/src/openvpn/init.c:2194,1
    - Dst: signal_description
      Src: /src/openvpn/src/openvpn/init.c:2189,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2187,1
    - Dst: do_close_tun_simple
      Src: /src/openvpn/src/openvpn/init.c:2229,1
    - Dst: run_up_down
      Src: /src/openvpn/src/openvpn/init.c:2237,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2246,1
    - Dst: del_wfp_block
      Src: /src/openvpn/src/openvpn/init.c:2255,1
    - Dst: tuntap_is_dco_win
      Src: /src/openvpn/src/openvpn/init.c:2139,1
    - Dst: do_close_tun_simple
      Src: /src/openvpn/src/openvpn/init.c:2141,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:2150,1
    - Dst: management_up_down
      Src: /src/openvpn/src/openvpn/init.c:2170,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2186,1
    - Dst: run_up_down
      Src: /src/openvpn/src/openvpn/init.c:2207,1
    - Dst: ROUTE_OPTION_FLAGS
      Src: /src/openvpn/src/openvpn/init.c:2195,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2247,1
    - Dst: signal_description
      Src: /src/openvpn/src/openvpn/init.c:2249,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:2257,1
    - Dst: signal_description
      Src: /src/openvpn/src/openvpn/init.c:2219,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2217,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/init.c:2151,1
    - Dst: is_tun_type_set
      Src: /src/openvpn/src/openvpn/init.c:2139,1
    - Dst: run_up_down
      Src: /src/openvpn/src/openvpn/init.c:2177,1
    - Dst: do_close_tun_simple
      Src: /src/openvpn/src/openvpn/init.c:2202,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2216,1
    - Dst: del_wfp_block
      Src: /src/openvpn/src/openvpn/init.c:2224,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 50
    argCount: 2
    argNames:
    - c
    - force
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 2258
      start: 2132
    functionDepth: 0
    functionLinenumber: 2132
    functionLinenumberEnd: 2258
    functionName: do_close_tun
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - do_close_tun_simple
    - management_up_down
    - management_pre_tunnel_close
    - delete_routes
    - ROUTE_OPTION_FLAGS
    - is_tun_type_set
    - run_up_down
    - run_dns_up_down
    - print_in_addr_t
    - gc_new
    - del_wfp_block
    - signal_description
    - gc_free
    - tuntap_is_dco_win
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static void do_close_tun(struct context *c, bool force) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: plugin_return_init
      Src: /src/openvpn/src/openvpn/init.c:4319,1
    - Dst: plugin_return_defined
      Src: /src/openvpn/src/openvpn/init.c:4322,1
    - Dst: options_string_import
      Src: /src/openvpn/src/openvpn/init.c:4330,1
    - Dst: plugin_list_open
      Src: /src/openvpn/src/openvpn/init.c:4320,1
    - Dst: plugin_return_get_column
      Src: /src/openvpn/src/openvpn/init.c:4321,1
    - Dst: plugin_return_free
      Src: /src/openvpn/src/openvpn/init.c:4339,1
    - Dst: plugin_list_open
      Src: /src/openvpn/src/openvpn/init.c:4343,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 21
    argCount: 3
    argNames:
    - c
    - import_options
    - init_point
    argTypes:
    - struct context*
    - bool
    - int
    constantsTouched: []
    func_position:
      end: 4346
      start: 4311
    functionDepth: 0
    functionLinenumber: 4311
    functionLinenumberEnd: 4346
    functionName: open_plugins
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - plugin_return_get_column
    - plugin_return_free
    - plugin_return_init
    - options_string_import
    - plugin_return_defined
    - plugin_list_open
    linkageType: ''
    returnType: void
    signature: 'void open_plugins(struct context *c, const bool import_options, int
      init_point) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:5203,1
    - Dst: options_detach
      Src: /src/openvpn/src/openvpn/init.c:5207,1
    - Dst: context_clear
      Src: /src/openvpn/src/openvpn/init.c:5205,1
    - Dst: test_crypto_thread
      Src: /src/openvpn/src/openvpn/init.c:5209,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 5213
      start: 5195
    functionDepth: 0
    functionLinenumber: 5195
    functionLinenumberEnd: 5213
    functionName: do_test_crypto
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - options_detach
    - test_crypto_thread
    - context_clear
    linkageType: ''
    returnType: bool
    signature: 'bool do_test_crypto(const struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/init.c:4184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4191
      start: 4179
    functionDepth: 0
    functionLinenumber: 4179
    functionLinenumberEnd: 4191
    functionName: do_open_status_output
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - status_open
    linkageType: ''
    returnType: void
    signature: 'static void do_open_status_output(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:84,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 85
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 85
    functionName: context_clear_1
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void context_clear_1(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/openvpn/src/openvpn/init.c:343,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:357,1
    - Dst: assert
      Src: /src/openvpn/src/openvpn/init.c:344,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:357,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/init.c:353,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:357,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:358,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/init.c:359,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/init.c:360,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/init.c:362,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:368,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 23
    argCount: 3
    argNames:
    - arg
    - index
    - remote
    argTypes:
    - void*
    - unsigned int
    - char**
    constantsTouched: []
    func_position:
      end: 372
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 372
    functionName: management_callback_remote_entry_get
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - malloc
    - proto2ascii
    - strlen
    - assert
    - check_malloc_return
    linkageType: ''
    returnType: bool
    signature: 'static bool management_callback_remote_entry_get(void *arg, unsigned
      int index, char **remote) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: notnull
      Src: /src/openvpn/src/openvpn/init.c:1122,1
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/init.c:1143,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1129,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1145,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:1134,1
    - Dst: tuncfg
      Src: /src/openvpn/src/openvpn/init.c:1153,1
    - Dst: set_lladdr
      Src: /src/openvpn/src/openvpn/init.c:1159,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1163,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 25
    argCount: 2
    argNames:
    - options
    - ctx
    argTypes:
    - struct options*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1170
      start: 1113
    functionDepth: 0
    functionLinenumber: 1113
    functionLinenumberEnd: 1170
    functionName: do_persist_tuntap
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - dev_type_enum
    - dco_enabled
    - notnull
    - set_lladdr
    - tuncfg
    linkageType: ''
    returnType: bool
    signature: 'bool do_persist_tuntap(struct options *options, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - dco_enabled(&c->options)
    argTypes:
    - dco_enabled(&c->options)
    constantsTouched: []
    func_position:
      end: 1810
      start: 1807
    functionDepth: 0
    functionLinenumber: 1807
    functionLinenumberEnd: 1810
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: else
    signature: 'else if (dco_enabled(&c->options)) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: do_init_crypto_static
      Src: /src/openvpn/src/openvpn/init.c:3611,1
    - Dst: do_init_crypto_tls
      Src: /src/openvpn/src/openvpn/init.c:3615,1
    - Dst: do_init_crypto_none
      Src: /src/openvpn/src/openvpn/init.c:3619,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3621
      start: 3606
    functionDepth: 0
    functionLinenumber: 3606
    functionLinenumberEnd: 3621
    functionName: do_init_crypto
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - do_init_crypto_static
    - do_init_crypto_none
    - do_init_crypto_tls
    linkageType: ''
    returnType: void
    signature: 'static void do_init_crypto(struct context *c, const unsigned int flags) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:4960,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/init.c:4967,1
    - Dst: packet_id_persist_init
      Src: /src/openvpn/src/openvpn/init.c:4970,1
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/init.c:4963,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:4965,1
    - Dst: do_link_socket_addr_new
      Src: /src/openvpn/src/openvpn/init.c:4972,1
    - Dst: options_detach
      Src: /src/openvpn/src/openvpn/init.c:4990,1
    - Dst: do_inherit_plugins
      Src: /src/openvpn/src/openvpn/init.c:5005,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:5018,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:5019,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/openvpn/src/openvpn/init.c:5029,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/init.c:5030,1
    - Dst: init_instance
      Src: /src/openvpn/src/openvpn/init.c:5038,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/openvpn/src/openvpn/init.c:5024,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:5039,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 44
    argCount: 3
    argNames:
    - dest
    - src
    - sock
    argTypes:
    - struct context*
    - struct context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 5043
      start: 4955
    functionDepth: 0
    functionLinenumber: 4955
    functionLinenumberEnd: 5043
    functionName: inherit_context_child
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - packet_id_persist_init
    - ALLOC_OBJ_GC
    - init_instance
    - IS_SIG
    - gc_new
    - do_link_socket_addr_new
    - ALLOC_OBJ_CLEAR_GC
    - CLEAR
    - ASSERT
    - proto_is_dgram
    - options_detach
    - do_inherit_plugins
    - ALLOC_ARRAY_GC
    linkageType: ''
    returnType: void
    signature: 'void inherit_context_child(struct context *dest, const struct context
      *src, struct link_socket *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:78,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 79
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 79
    functionName: context_clear
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void context_clear(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:90,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: context_clear_2
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void context_clear_2(struct context *c) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/init.c:383,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:396,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/init.c:392,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/init.c:394,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/init.c:388,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:396,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/init.c:401,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/init.c:404,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/init.c:405,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 46
    argCount: 2
    argNames:
    - arg
    - p
    argTypes:
    - void*
    - char**
    constantsTouched: []
    func_position:
      end: 420
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 420
    functionName: management_callback_remote_cmd
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - atoi
    - strcmp
    - ALLOC_OBJ_CLEAR_GC
    - strncpynt
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'static bool management_callback_remote_cmd(void *arg, const char **p) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: frame_finalize_options
      Src: /src/openvpn/src/openvpn/init.c:3638,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3655,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3647,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3662,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 19
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3666
      start: 3623
    functionDepth: 0
    functionLinenumber: 3623
    functionLinenumberEnd: 3666
    functionName: do_init_frame
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - frame_finalize_options
    linkageType: ''
    returnType: void
    signature: 'static void do_init_frame(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: options_detach
      Src: /src/openvpn/src/openvpn/init.c:5064,1
    - Dst: do_event_set_init
      Src: /src/openvpn/src/openvpn/init.c:5085,1
    - Dst: gc_detach
      Src: /src/openvpn/src/openvpn/init.c:5066,1
    - Dst: gc_detach
      Src: /src/openvpn/src/openvpn/init.c:5065,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct context*
    - struct context*
    constantsTouched: []
    func_position:
      end: 5090
      start: 5045
    functionDepth: 0
    functionLinenumber: 5045
    functionLinenumberEnd: 5090
    functionName: inherit_context_top
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - options_detach
    - do_event_set_init
    - gc_detach
    linkageType: ''
    returnType: void
    signature: 'void inherit_context_top(struct context *dest, const struct context
      *src) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: block_local_needed
      Src: /src/openvpn/src/openvpn/init.c:1881,1
    - Dst: win_wfp_uninit
      Src: /src/openvpn/src/openvpn/init.c:1883,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1885,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - c
    - adapter_index
    argTypes:
    - struct context*
    - unsigned long
    constantsTouched: []
    func_position:
      end: 1889
      start: 1877
    functionDepth: 0
    functionLinenumber: 1877
    functionLinenumberEnd: 1889
    functionName: del_wfp_block
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - win_wfp_uninit
    - block_local_needed
    linkageType: ''
    returnType: void
    signature: 'static void del_wfp_block(struct context *c, unsigned long adapter_index) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pem_password_setup
      Src: /src/openvpn/src/openvpn/init.c:655,1
    - Dst: auth_user_pass_setup
      Src: /src/openvpn/src/openvpn/init.c:667,1
    - Dst: enable_auth_user_pass
      Src: /src/openvpn/src/openvpn/init.c:661,1
    - Dst: auth_user_pass_setup
      Src: /src/openvpn/src/openvpn/init.c:663,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 671
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 671
    functionName: init_query_passwords
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - pem_password_setup
    - auth_user_pass_setup
    - enable_auth_user_pass
    linkageType: ''
    returnType: void
    signature: 'void init_query_passwords(const struct context *c) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:1368,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1380,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:1385,1
    - Dst: reset_coarse_timers
      Src: /src/openvpn/src/openvpn/init.c:1369,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1374,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/init.c:1388,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/init.c:1389,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1395,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1400,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1412,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1419,1
    - Dst: TLS_MODE
      Src: /src/openvpn/src/openvpn/init.c:1424,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1427,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1432,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1438,1
    - Dst: interval_init
      Src: /src/openvpn/src/openvpn/init.c:1443,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 35
    argCount: 2
    argNames:
    - c
    - deferred
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 1445
      start: 1365
    functionDepth: 0
    functionLinenumber: 1365
    functionLinenumberEnd: 1445
    functionName: do_init_timers
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - event_timeout_clear
    - event_timeout_init
    - dco_enabled
    - TLS_MODE
    - update_time
    - interval_init
    - reset_coarse_timers
    linkageType: ''
    returnType: void
    signature: 'static void do_init_timers(struct context *c, bool deferred) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 2
    argNames:
    - o
    - tt
    argTypes:
    - struct options*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1710
      start: 1704
    functionDepth: 0
    functionLinenumber: 1704
    functionLinenumberEnd: 1710
    functionName: route_noexec_enabled
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool route_noexec_enabled(const struct options *o, const struct
      tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2626
      start: 2599
    functionDepth: 0
    functionLinenumber: 2599
    functionLinenumberEnd: 2626
    functionName: pull_permission_mask
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int pull_permission_mask(const struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3843,1
    - Dst: link_socket_new
      Src: /src/openvpn/src/openvpn/init.c:3850,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/openvpn/src/openvpn/init.c:3845,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3853
      start: 3840
    functionDepth: 0
    functionLinenumber: 3840
    functionLinenumberEnd: 3853
    functionName: do_link_socket_new
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - link_socket_new
    - ASSERT
    - ALLOC_ARRAY_GC
    linkageType: ''
    returnType: void
    signature: 'static void do_link_socket_new(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/init.c:4036,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:4038,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/init.c:4039,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:4040,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/src/openvpn/init.c:4037,1
    - Dst: key_schedule_free
      Src: /src/openvpn/src/openvpn/init.c:4044,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - c
    - free_ssl_ctx
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 4046
      start: 4029
    functionDepth: 0
    functionLinenumber: 4029
    functionLinenumberEnd: 4046
    functionName: do_close_free_key_schedule
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - key_schedule_free
    - buf_clear
    - free_key_ctx_bi
    - free_buf
    - CLEAR
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'static void do_close_free_key_schedule(struct context *c, bool free_ssl_ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: management_init
      Src: /src/openvpn/src/openvpn/init.c:4473,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4475
      start: 4468
    functionDepth: 0
    functionLinenumber: 4468
    functionLinenumberEnd: 4475
    functionName: init_management
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - management_init
    linkageType: ''
    returnType: void
    signature: 'void init_management(void) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: get_p2p_ncp_cipher
      Src: /src/openvpn/src/openvpn/init.c:2640,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/init.c:2665,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2668,1
    - Dst: tls_session_update_crypto_params
      Src: /src/openvpn/src/openvpn/init.c:2663,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2649,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 17
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2672
      start: 2628
    functionDepth: 0
    functionLinenumber: 2628
    functionLinenumberEnd: 2672
    functionName: do_deferred_p2p_ncp
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - get_p2p_ncp_cipher
    - get_link_socket_info
    - tls_session_update_crypto_params
    linkageType: ''
    returnType: bool
    signature: 'static bool do_deferred_p2p_ncp(struct context *c) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: management_open
      Src: /src/openvpn/src/openvpn/init.c:4490,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:4513,1
    - Dst: do_hold
      Src: /src/openvpn/src/openvpn/init.c:4512,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:4515,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/init.c:4502,1
    - Dst: close_management
      Src: /src/openvpn/src/openvpn/init.c:4521,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4525
      start: 4477
    functionDepth: 0
    functionLinenumber: 4477
    functionLinenumberEnd: 4525
    functionName: open_management
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - management_set_state
    - management_open
    - msg
    - do_hold
    - close_management
    linkageType: ''
    returnType: bool
    signature: 'bool open_management(struct context *c) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: clear_remote_addrlist
      Src: /src/openvpn/src/openvpn/init.c:561,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:567,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:599,1
    - Dst: management_query_remote_enabled
      Src: /src/openvpn/src/openvpn/init.c:616,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:566,1
    - Dst: ce_management_query_remote
      Src: /src/openvpn/src/openvpn/init.c:619,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:620,1
    - Dst: management_query_proxy_enabled
      Src: /src/openvpn/src/openvpn/init.c:625,1
    - Dst: ce_management_query_proxy
      Src: /src/openvpn/src/openvpn/init.c:627,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:628,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:640,1
    - Dst: update_options_ce_post
      Src: /src/openvpn/src/openvpn/init.c:643,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 67
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 644
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 644
    functionName: next_connection_entry
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - ce_management_query_remote
    - ce_management_query_proxy
    - msg
    - update_options_ce_post
    - management_query_proxy_enabled
    - clear_remote_addrlist
    - ASSERT
    - management_query_remote_enabled
    linkageType: ''
    returnType: void
    signature: 'static void next_connection_entry(struct context *c) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: sd_notify
      Src: /src/openvpn/src/openvpn/init.c:1183,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1199,1
    - Dst: set_std_files_to_null
      Src: /src/openvpn/src/openvpn/init.c:1207,1
    - Dst: daemon
      Src: /src/openvpn/src/openvpn/init.c:1197,1
    - Dst: restore_signal_state
      Src: /src/openvpn/src/openvpn/init.c:1204,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1213
      start: 1176
    functionDepth: 0
    functionLinenumber: 1176
    functionLinenumberEnd: 1213
    functionName: possibly_become_daemon
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - daemon
    - set_std_files_to_null
    - msg
    - restore_signal_state
    - sd_notify
    linkageType: ''
    returnType: bool
    signature: 'bool possibly_become_daemon(const struct options *options) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:1355,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:1358,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1360
      start: 1352
    functionDepth: 0
    functionLinenumber: 1352
    functionLinenumberEnd: 1360
    functionName: do_init_server_poll_timeout
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - event_timeout_init
    - update_time
    linkageType: ''
    returnType: void
    signature: 'static void do_init_server_poll_timeout(struct context *c) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: do_uid_gid_chroot
      Src: /src/openvpn/src/openvpn/init.c:1598,1
    - Dst: sd_notifyf
      Src: /src/openvpn/src/openvpn/init.c:1609,1
    - Dst: show_adapters
      Src: /src/openvpn/src/openvpn/init.c:1605,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1606,1
    - Dst: show_routes
      Src: /src/openvpn/src/openvpn/init.c:1604,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1611,1
    - Dst: sd_notifyf
      Src: /src/openvpn/src/openvpn/init.c:1617,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1619,1
    - Dst: fork_register_dns_action
      Src: /src/openvpn/src/openvpn/init.c:1629,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:1656,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/init.c:1685,1
    - Dst: management_post_tunnel_open
      Src: /src/openvpn/src/openvpn/init.c:1694,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/init.c:1657,1
    - Dst: addr_defined
      Src: /src/openvpn/src/openvpn/init.c:1661,1
    - Dst: getsockname
      Src: /src/openvpn/src/openvpn/init.c:1659,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 47
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1698
      start: 1589
    functionDepth: 0
    functionLinenumber: 1589
    functionLinenumberEnd: 1698
    functionName: initialization_sequence_completed
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - management_set_state
    - sd_notifyf
    - show_routes
    - msg
    - fork_register_dns_action
    - show_adapters
    - do_uid_gid_chroot
    - getsockname
    - CLEAR
    - management_post_tunnel_open
    - addr_defined
    - get_link_socket_info
    linkageType: ''
    returnType: void
    signature: 'void initialization_sequence_completed(struct context *c, const unsigned
      int flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_multi_free
      Src: /src/openvpn/src/openvpn/init.c:4007,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/init.c:4013,1
    - Dst: md_ctx_free
      Src: /src/openvpn/src/openvpn/init.c:4020,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/init.c:4012,1
    - Dst: md_ctx_cleanup
      Src: /src/openvpn/src/openvpn/init.c:4019,1
    - Dst: tls_auth_standalone_free
      Src: /src/openvpn/src/openvpn/init.c:4023,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4024
      start: 4002
    functionDepth: 0
    functionLinenumber: 4002
    functionLinenumberEnd: 4024
    functionName: do_close_tls
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - tls_auth_standalone_free
    - md_ctx_free
    - tls_multi_free
    - free
    - md_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'static void do_close_tls(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init_proxy_dowork
      Src: /src/openvpn/src/openvpn/init.c:729,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 730
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 730
    functionName: init_proxy
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - init_proxy_dowork
    linkageType: ''
    returnType: void
    signature: 'static void init_proxy(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init_tun
      Src: /src/openvpn/src/openvpn/init.c:1777,1
    - Dst: is_dev_type
      Src: /src/openvpn/src/openvpn/init.c:1797,1
    - Dst: is_tun_afunix
      Src: /src/openvpn/src/openvpn/init.c:1792,1
    - Dst: init_tun_post
      Src: /src/openvpn/src/openvpn/init.c:1817,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1822
      start: 1774
    functionDepth: 0
    functionLinenumber: 1774
    functionLinenumberEnd: 1822
    functionName: do_init_tun
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - is_dev_type
    - is_tun_afunix
    - init_tun_post
    - init_tun
    linkageType: ''
    returnType: void
    signature: 'static void do_init_tun(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/init.c:2296,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:2296,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2298,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - buf
    - header
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 2300
      start: 2293
    functionDepth: 0
    functionLinenumber: 2293
    functionLinenumberEnd: 2300
    functionName: add_delim_if_non_empty
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - buf_printf
    - strlen
    - buf_len
    linkageType: ''
    returnType: void
    signature: 'static void add_delim_if_non_empty(struct buffer *buf, const char
      *header) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_session_update_crypto_params
      Src: /src/openvpn/src/openvpn/init.c:2449,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/init.c:2452,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2455,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2460
      start: 2437
    functionDepth: 0
    functionLinenumber: 2437
    functionLinenumberEnd: 2460
    functionName: do_deferred_options_part2
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - get_link_socket_info
    - tls_session_update_crypto_params
    linkageType: ''
    returnType: bool
    signature: 'static bool do_deferred_options_part2(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: uninit_proxy_dowork
      Src: /src/openvpn/src/openvpn/init.c:735,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 736
      start: 732
    functionDepth: 0
    functionLinenumber: 732
    functionLinenumberEnd: 736
    functionName: uninit_proxy
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - uninit_proxy_dowork
    linkageType: ''
    returnType: void
    signature: 'static void uninit_proxy(struct context *c) '
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2474,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:2483,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2496,1
    - Dst: do_close_tun
      Src: /src/openvpn/src/openvpn/init.c:2499,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/init.c:2510,1
    - Dst: do_open_tun
      Src: /src/openvpn/src/openvpn/init.c:2511,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:2512,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/init.c:2532,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2556,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:2570,1
    - Dst: reset_coarse_timers
      Src: /src/openvpn/src/openvpn/init.c:2468,1
    - Dst: PULL_DEFINED
      Src: /src/openvpn/src/openvpn/init.c:2490,1
    - Dst: tuntap_is_dco_win
      Src: /src/openvpn/src/openvpn/init.c:2498,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2503,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2532,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/init.c:2569,1
    - Dst: options_hash_changed_or_zero
      Src: /src/openvpn/src/openvpn/init.c:2492,1
    - Dst: do_deferred_options_part2
      Src: /src/openvpn/src/openvpn/init.c:2545,1
    - Dst: dco_p2p_add_new_peer
      Src: /src/openvpn/src/openvpn/init.c:2529,1
    - Dst: initialization_sequence_completed
      Src: /src/openvpn/src/openvpn/init.c:2582,1
    - Dst: tls_print_deferred_options_results
      Src: /src/openvpn/src/openvpn/init.c:2585,1
    - Dst: do_deferred_options
      Src: /src/openvpn/src/openvpn/init.c:2472,1
    - Dst: PULL_DEFINED
      Src: /src/openvpn/src/openvpn/init.c:2480,1
    - Dst: do_open_tun
      Src: /src/openvpn/src/openvpn/init.c:2482,1
    - Dst: do_deferred_p2p_ncp
      Src: /src/openvpn/src/openvpn/init.c:2554,1
    - Dst: route_order
      Src: /src/openvpn/src/openvpn/init.c:2567,1
    - Dst: tun_standby_init
      Src: /src/openvpn/src/openvpn/init.c:2571,1
    - Dst: initialization_sequence_completed
      Src: /src/openvpn/src/openvpn/init.c:2576,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 76
    argCount: 3
    argNames:
    - c
    - pulled_options
    - option_types_found
    argTypes:
    - struct context*
    - bool
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2594
      start: 2462
    functionDepth: 0
    functionLinenumber: 2462
    functionLinenumberEnd: 2594
    functionName: do_up
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - event_timeout_init
    - do_deferred_options
    - tls_print_deferred_options_results
    - reset_coarse_timers
    - do_open_tun
    - route_order
    - do_deferred_options_part2
    - strerror
    - tun_standby_init
    - PULL_DEFINED
    - options_hash_changed_or_zero
    - dco_p2p_add_new_peer
    - do_close_tun
    - management_sleep
    - update_time
    - initialization_sequence_completed
    - do_deferred_p2p_ncp
    - tuntap_is_dco_win
    linkageType: ''
    returnType: bool
    signature: 'bool do_up(struct context *c, bool pulled_options, unsigned int option_types_found) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: route_noexec_enabled
      Src: /src/openvpn/src/openvpn/init.c:1726,1
    - Dst: add_routes
      Src: /src/openvpn/src/openvpn/init.c:1728,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/init.c:1750,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/init.c:1751,1
    - Dst: management_up_down
      Src: /src/openvpn/src/openvpn/init.c:1735,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/init.c:1741,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/init.c:1753,1
    - Dst: route_did_redirect_default_gateway
      Src: /src/openvpn/src/openvpn/init.c:1730,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/init.c:1730,1
    - Dst: ROUTE_OPTION_FLAGS
      Src: /src/openvpn/src/openvpn/init.c:1728,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/init.c:1739,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1743,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/init.c:1752,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/init.c:1749,1
    - Dst: show_routes
      Src: /src/openvpn/src/openvpn/init.c:1759,1
    - Dst: show_routes
      Src: /src/openvpn/src/openvpn/init.c:1764,1
    - Dst: show_adapters
      Src: /src/openvpn/src/openvpn/init.c:1765,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/init.c:1762,1
    - Dst: show_adapters
      Src: /src/openvpn/src/openvpn/init.c:1760,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 36
    argCount: 7
    argNames:
    - options
    - route_list
    - route_ipv6_list
    - tt
    - plugins
    - es
    - ctx
    argTypes:
    - struct options*
    - struct route_list*
    - struct route_ipv6_list*
    - struct tuntap*
    - struct plugin_list*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1769
      start: 1716
    functionDepth: 0
    functionLinenumber: 1716
    functionLinenumberEnd: 1769
    functionName: do_route
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - ROUTE_OPTION_FLAGS
    - openvpn_run_script
    - check_debug_level
    - argv_parse_cmd
    - msg
    - plugin_call
    - argv_free
    - show_routes
    - show_adapters
    - setenv_str
    - setenv_int
    - argv_new
    - plugin_defined
    - route_did_redirect_default_gateway
    - add_routes
    - route_noexec_enabled
    - management_up_down
    linkageType: ''
    returnType: bool
    signature: 'bool do_route(const struct options *options, struct route_list *route_list,
      struct route_ipv6_list *route_ipv6_list, const struct tuntap *tt, const struct
      plugin_list *plugins, struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1902
      start: 1896
    functionDepth: 0
    functionLinenumber: 1896
    functionLinenumberEnd: 1902
    functionName: ifconfig_noexec_enabled
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool ifconfig_noexec_enabled(const struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:4449,1
    - Dst: management_set_callback
      Src: /src/openvpn/src/openvpn/init.c:4461,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4464
      start: 4442
    functionDepth: 0
    functionLinenumber: 4442
    functionLinenumberEnd: 4464
    functionName: init_management_callback_p2p
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - CLEAR
    - management_set_callback
    linkageType: ''
    returnType: void
    signature: 'void init_management_callback_p2p(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:311,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/init.c:318,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:317,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:319,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:311,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:319,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:322,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:322,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/init.c:324,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:324,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:326,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 18
    argCount: 3
    argNames:
    - arg
    - command
    - parameters
    argTypes:
    - void*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 328
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 328
    functionName: management_callback_send_cc_message
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - gc_new
    - send_control_channel_string
    - gc_free
    - ASSERT
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'static bool management_callback_send_cc_message(void *arg, const char
      *command, const char *parameters) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: http_proxy_close
      Src: /src/openvpn/src/openvpn/init.c:682,1
    - Dst: socks_proxy_close
      Src: /src/openvpn/src/openvpn/init.c:688,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 692
      start: 677
    functionDepth: 0
    functionLinenumber: 677
    functionLinenumberEnd: 692
    functionName: uninit_proxy_dowork
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - socks_proxy_close
    - http_proxy_close
    linkageType: ''
    returnType: void
    signature: 'static void uninit_proxy_dowork(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/src/openvpn/init.c:3064,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/init.c:3068,1
    - Dst: tls_ctx_initialised
      Src: /src/openvpn/src/openvpn/init.c:3065,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:3070,1
    - Dst: tls_ctx_free
      Src: /src/openvpn/src/openvpn/init.c:3067,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - ks
    - free_ssl_ctx
    argTypes:
    - struct key_schedule*
    - bool
    constantsTouched: []
    func_position:
      end: 3071
      start: 3061
    functionDepth: 0
    functionLinenumber: 3061
    functionLinenumberEnd: 3071
    functionName: key_schedule_free
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - tls_ctx_free
    - free_key_ctx_bi
    - tls_ctx_initialised
    - CLEAR
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'static void key_schedule_free(struct key_schedule *ks, bool free_ssl_ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print_status
      Src: /src/openvpn/src/openvpn/init.c:4377,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 3
    argNames:
    - arg
    - version
    - so
    argTypes:
    - void*
    - int
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 4378
      start: 4373
    functionDepth: 0
    functionLinenumber: 4373
    functionLinenumberEnd: 4378
    functionName: management_callback_status_p2p
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - print_status
    linkageType: ''
    returnType: void
    signature: 'static void management_callback_status_p2p(void *arg, const int version,
      struct status_output *so) '
  - BBCount: 38
    BranchProfiles: []
    Callsites:
    - Dst: do_inherit_env
      Src: /src/openvpn/src/openvpn/init.c:4600,1
    - Dst: init_verb_mute
      Src: /src/openvpn/src/openvpn/init.c:4646,1
    - Dst: do_event_set_init
      Src: /src/openvpn/src/openvpn/init.c:4698,1
    - Dst: init_proxy
      Src: /src/openvpn/src/openvpn/init.c:4706,1
    - Dst: do_link_socket_new
      Src: /src/openvpn/src/openvpn/init.c:4711,1
    - Dst: do_init_frame
      Src: /src/openvpn/src/openvpn/init.c:4753,1
    - Dst: close_context
      Src: /src/openvpn/src/openvpn/init.c:4873,1
    - Dst: do_init_frame_tls
      Src: /src/openvpn/src/openvpn/init.c:4756,1
    - Dst: comp_enabled
      Src: /src/openvpn/src/openvpn/init.c:4746,1
    - Dst: do_init_traffic_shaper
      Src: /src/openvpn/src/openvpn/init.c:4798,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:4861,1
    - Dst: do_init_socket_phase1
      Src: /src/openvpn/src/openvpn/init.c:4775,1
    - Dst: do_startup_pause
      Src: /src/openvpn/src/openvpn/init.c:4611,1
    - Dst: do_event_set_init
      Src: /src/openvpn/src/openvpn/init.c:4702,1
    - Dst: comp_init
      Src: /src/openvpn/src/openvpn/init.c:4748,1
    - Dst: do_init_buffers
      Src: /src/openvpn/src/openvpn/init.c:4761,1
    - Dst: do_open_ifconfig_pool_persist
      Src: /src/openvpn/src/openvpn/init.c:4686,1
    - Dst: PULL_DEFINED
      Src: /src/openvpn/src/openvpn/init.c:4780,1
    - Dst: open_plugins
      Src: /src/openvpn/src/openvpn/init.c:4808,1
    - Dst: do_init_server_poll_timeout
      Src: /src/openvpn/src/openvpn/init.c:4813,1
    - Dst: do_init_socket_phase2
      Src: /src/openvpn/src/openvpn/init.c:4818,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/src/openvpn/init.c:4827,1
    - Dst: do_compute_occ_strings
      Src: /src/openvpn/src/openvpn/init.c:4792,1
    - Dst: do_init_fragment
      Src: /src/openvpn/src/openvpn/init.c:4768,1
    - Dst: do_open_tun
      Src: /src/openvpn/src/openvpn/init.c:4783,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:4612,1
    - Dst: do_preresolve
      Src: /src/openvpn/src/openvpn/init.c:4620,1
    - Dst: next_connection_entry
      Src: /src/openvpn/src/openvpn/init.c:4631,1
    - Dst: do_option_warnings
      Src: /src/openvpn/src/openvpn/init.c:4657,1
    - Dst: do_signal_on_tls_errors
      Src: /src/openvpn/src/openvpn/init.c:4675,1
    - Dst: do_setup_fast_io
      Src: /src/openvpn/src/openvpn/init.c:4671,1
    - Dst: occ_reset_op
      Src: /src/openvpn/src/openvpn/init.c:4692,1
    - Dst: SHAPER_DEFINED
      Src: /src/openvpn/src/openvpn/init.c:4698,1
    - Dst: fragment_init
      Src: /src/openvpn/src/openvpn/init.c:4718,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:4738,1
    - Dst: init_port_share
      Src: /src/openvpn/src/openvpn/init.c:4856,1
    - Dst: do_print_data_channel_mtu_parms
      Src: /src/openvpn/src/openvpn/init.c:4787,1
    - Dst: do_init_timers
      Src: /src/openvpn/src/openvpn/init.c:4841,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/init.c:4595,1
    - Dst: init_management_callback_p2p
      Src: /src/openvpn/src/openvpn/init.c:4605,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:4621,1
    - Dst: pre_connect_restore
      Src: /src/openvpn/src/openvpn/init.c:4628,1
    - Dst: platform_mlockall
      Src: /src/openvpn/src/openvpn/init.c:4636,1
    - Dst: do_open_status_output
      Src: /src/openvpn/src/openvpn/init.c:4680,1
    - Dst: auth_retry_get
      Src: /src/openvpn/src/openvpn/init.c:4640,1
    - Dst: set_check_status_error_delay
      Src: /src/openvpn/src/openvpn/init.c:4651,1
    - Dst: open_plugins
      Src: /src/openvpn/src/openvpn/init.c:4664,1
    - Dst: init_query_passwords
      Src: /src/openvpn/src/openvpn/init.c:4642,1
    - Dst: do_init_crypto
      Src: /src/openvpn/src/openvpn/init.c:4737,1
    - Dst: do_init_first_time
      Src: /src/openvpn/src/openvpn/init.c:4802,1
    - Dst: open_plugins
      Src: /src/openvpn/src/openvpn/init.c:4848,1
    - Dst: do_uid_gid_chroot
      Src: /src/openvpn/src/openvpn/init.c:4836,1
    CyclomaticComplexity: 81
    EdgeCount: 81
    ICount: 184
    argCount: 3
    argNames:
    - c
    - env
    - flags
    argTypes:
    - struct context*
    - struct env_set*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4875
      start: 4588
    functionDepth: 0
    functionLinenumber: 4588
    functionLinenumberEnd: 4875
    functionName: init_instance
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - do_setup_fast_io
    - do_event_set_init
    - gc_init
    - comp_enabled
    - do_preresolve
    - platform_mlockall
    - do_link_socket_new
    - do_signal_on_tls_errors
    - do_print_data_channel_mtu_parms
    - do_open_tun
    - auth_retry_get
    - do_init_frame
    - next_connection_entry
    - do_init_traffic_shaper
    - do_compute_occ_strings
    - do_inherit_env
    - do_init_fragment
    - do_init_frame_tls
    - set_check_status_error_delay
    - do_uid_gid_chroot
    - do_open_ifconfig_pool_persist
    - PULL_DEFINED
    - init_proxy
    - open_plugins
    - do_init_socket_phase1
    - comp_init
    - pre_connect_restore
    - do_init_crypto
    - init_query_passwords
    - do_init_socket_phase2
    - fragment_init
    - do_startup_pause
    - do_init_server_poll_timeout
    - do_open_status_output
    - SHAPER_DEFINED
    - init_verb_mute
    - init_management_callback_p2p
    - occ_reset_op
    - do_option_warnings
    - close_context
    - frame_calculate_dynamic
    - do_init_buffers
    - init_port_share
    - do_init_first_time
    - do_init_timers
    linkageType: ''
    returnType: void
    signature: 'void init_instance(struct context *c, const struct env_set *env, const
      unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/openvpn/src/openvpn/init.c:333,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 338
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 338
    functionName: management_callback_remote_entry_count
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - assert
    linkageType: ''
    returnType: unsigned int
    signature: 'static unsigned int management_callback_remote_entry_count(void *arg) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: uninit_proxy_dowork
      Src: /src/openvpn/src/openvpn/init.c:699,1
    - Dst: http_proxy_new
      Src: /src/openvpn/src/openvpn/init.c:706,1
    - Dst: socks_proxy_new
      Src: /src/openvpn/src/openvpn/init.c:716,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 724
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 724
    functionName: init_proxy_dowork
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - socks_proxy_new
    - uninit_proxy_dowork
    - http_proxy_new
    linkageType: ''
    returnType: void
    signature: 'static void init_proxy_dowork(struct context *c) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: crypto_init_lib_engine
      Src: /src/openvpn/src/openvpn/init.c:3078,1
    - Dst: packet_id_persist_load
      Src: /src/openvpn/src/openvpn/init.c:3086,1
    - Dst: rand_ctx_enable_prediction_resistance
      Src: /src/openvpn/src/openvpn/init.c:3093,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3096
      start: 3073
    functionDepth: 0
    functionLinenumber: 3073
    functionLinenumberEnd: 3096
    functionName: init_crypto_pre
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - crypto_init_lib_engine
    - rand_ctx_enable_prediction_resistance
    - packet_id_persist_load
    linkageType: ''
    returnType: void
    signature: 'static void init_crypto_pre(struct context *c, const unsigned int
      flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: show_routes
      Src: /src/openvpn/src/openvpn/init.c:4384,1
    - Dst: show_adapters
      Src: /src/openvpn/src/openvpn/init.c:4385,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:4388,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:4386,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - arg
    - msglevel
    argTypes:
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 4390
      start: 4380
    functionDepth: 0
    functionLinenumber: 4380
    functionLinenumberEnd: 4390
    functionName: management_show_net_callback
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - show_routes
    - msg
    - show_adapters
    linkageType: ''
    returnType: void
    signature: 'void management_show_net_callback(void *arg, const int msglevel) '
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/init.c:2314,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/init.c:2325,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2330,1
    - Dst: add_delim_if_non_empty
      Src: /src/openvpn/src/openvpn/init.c:2370,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2382,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/init.c:2385,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:2385,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2387,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:2387,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2392,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:2423,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2324,1
    - Dst: md_kt_name
      Src: /src/openvpn/src/openvpn/init.c:2325,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/init.c:2342,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2346,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2372,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2375,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/init.c:2390,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2407,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2415,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/init.c:2423,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2336,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2340,1
    - Dst: add_delim_if_non_empty
      Src: /src/openvpn/src/openvpn/init.c:2356,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:2340,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2396,1
    - Dst: add_delim_if_non_empty
      Src: /src/openvpn/src/openvpn/init.c:2401,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2425,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/init.c:2320,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/init.c:2317,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2319,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2350,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2360,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2364,1
    - Dst: add_delim_if_non_empty
      Src: /src/openvpn/src/openvpn/init.c:2381,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2403,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2411,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:2419,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:2425,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 68
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2427
      start: 2307
    functionDepth: 0
    functionLinenumber: 2307
    functionLinenumberEnd: 2427
    functionName: tls_print_deferred_options_results
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - buf_clear
    - BSTR
    - buf_printf
    - msg
    - add_delim_if_non_empty
    - buf_len
    - strlen
    - cipher_kt_mode_aead
    - buf_set_write
    - md_kt_name
    - cipher_kt_name
    linkageType: ''
    returnType: void
    signature: 'static void tls_print_deferred_options_results(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_set_init
      Src: /src/openvpn/src/openvpn/init.c:4160,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - c
    - need_us_timeout
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 4162
      start: 4145
    functionDepth: 0
    functionLinenumber: 4145
    functionLinenumberEnd: 4162
    functionName: do_event_set_init
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - event_set_init
    linkageType: ''
    returnType: void
    signature: 'static void do_event_set_init(struct context *c, bool need_us_timeout) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: set_check_status
      Src: /src/openvpn/src/openvpn/init.c:963,1
    - Dst: set_mute_cutoff
      Src: /src/openvpn/src/openvpn/init.c:965,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/init.c:971,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/init.c:971,1
    - Dst: set_debug_level
      Src: /src/openvpn/src/openvpn/init.c:964,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 973
      start: 957
    functionDepth: 0
    functionLinenumber: 957
    functionLinenumberEnd: 973
    functionName: init_verb_mute
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - set_check_status
    - set_mute_cutoff
    - set_debug_level
    - check_debug_level
    linkageType: ''
    returnType: void
    signature: 'void init_verb_mute(struct context *c, unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: env_set_destroy
      Src: /src/openvpn/src/openvpn/init.c:4252,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4256
      start: 4247
    functionDepth: 0
    functionLinenumber: 4247
    functionLinenumberEnd: 4256
    functionName: do_env_set_destroy
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - env_set_destroy
    linkageType: ''
    returnType: void
    signature: 'static void do_env_set_destroy(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pre_init_signal_catch
      Src: /src/openvpn/src/openvpn/init.c:4569,1
    - Dst: remap_signal
      Src: /src/openvpn/src/openvpn/init.c:4580,1
    - Dst: post_init_signal_catch
      Src: /src/openvpn/src/openvpn/init.c:4571,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:4578,1
    - Dst: init_instance
      Src: /src/openvpn/src/openvpn/init.c:4570,1
    - Dst: uninit_management_callback
      Src: /src/openvpn/src/openvpn/init.c:4581,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - c
    - env
    - flags
    argTypes:
    - struct context*
    - struct env_set*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 4583
      start: 4566
    functionDepth: 0
    functionLinenumber: 4566
    functionLinenumberEnd: 4583
    functionName: init_instance_handle_signals
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - init_instance
    - IS_SIG
    - uninit_management_callback
    - post_init_signal_catch
    - remap_signal
    - pre_init_signal_catch
    linkageType: ''
    returnType: void
    signature: 'void init_instance_handle_signals(struct context *c, const struct
      env_set *env, const unsigned int flags) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:5095,1
    - Dst: close_instance
      Src: /src/openvpn/src/openvpn/init.c:5114,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:5096,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/init.c:5108,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/init.c:5100,1
    - Dst: context_gc_free
      Src: /src/openvpn/src/openvpn/init.c:5119,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 3
    argNames:
    - c
    - sig
    - flags
    argTypes:
    - struct context*
    - int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 5121
      start: 5092
    functionDepth: 0
    functionLinenumber: 5092
    functionLinenumberEnd: 5121
    functionName: close_context
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - context_gc_free
    - ASSERT
    - close_instance
    - register_signal
    linkageType: ''
    returnType: void
    signature: 'void close_context(struct context *c, int sig, unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: plugin_list_inherit
      Src: /src/openvpn/src/openvpn/init.c:4364,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - c
    - src
    argTypes:
    - struct context*
    - struct context*
    constantsTouched: []
    func_position:
      end: 4367
      start: 4359
    functionDepth: 0
    functionLinenumber: 4359
    functionLinenumberEnd: 4367
    functionName: do_inherit_plugins
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - plugin_list_inherit
    linkageType: ''
    returnType: void
    signature: 'static void do_inherit_plugins(struct context *c, const struct context
      *src) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: management_close
      Src: /src/openvpn/src/openvpn/init.c:4532,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4535
      start: 4527
    functionDepth: 0
    functionLinenumber: 4527
    functionLinenumberEnd: 4535
    functionName: close_management
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - management_close
    linkageType: ''
    returnType: void
    signature: 'void close_management(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: man_persist_client_stats
      Src: /src/openvpn/src/openvpn/init.c:4557,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4560
      start: 4551
    functionDepth: 0
    functionLinenumber: 4551
    functionLinenumberEnd: 4560
    functionName: persist_client_stats
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - man_persist_client_stats
    linkageType: ''
    returnType: void
    signature: 'void persist_client_stats(struct context *c) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: do_close_event_set
      Src: /src/openvpn/src/openvpn/init.c:4884,1
    - Dst: dco_remove_peer
      Src: /src/openvpn/src/openvpn/init.c:4904,1
    - Dst: comp_uninit
      Src: /src/openvpn/src/openvpn/init.c:4894,1
    - Dst: do_close_tls
      Src: /src/openvpn/src/openvpn/init.c:4907,1
    - Dst: do_close_free_buf
      Src: /src/openvpn/src/openvpn/init.c:4900,1
    - Dst: do_close_free_key_schedule
      Src: /src/openvpn/src/openvpn/init.c:4910,1
    - Dst: do_close_link_socket
      Src: /src/openvpn/src/openvpn/init.c:4913,1
    - Dst: do_close_tun
      Src: /src/openvpn/src/openvpn/init.c:4916,1
    - Dst: management_notify_client_close
      Src: /src/openvpn/src/openvpn/init.c:4921,1
    - Dst: do_close_plugins
      Src: /src/openvpn/src/openvpn/init.c:4927,1
    - Dst: do_close_packet_id
      Src: /src/openvpn/src/openvpn/init.c:4931,1
    - Dst: do_close_fragment
      Src: /src/openvpn/src/openvpn/init.c:4938,1
    - Dst: uninit_proxy
      Src: /src/openvpn/src/openvpn/init.c:4948,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:4951,1
    - Dst: do_env_set_destroy
      Src: /src/openvpn/src/openvpn/init.c:4945,1
    - Dst: do_close_status_output
      Src: /src/openvpn/src/openvpn/init.c:4934,1
    - Dst: do_close_ifconfig_pool_persist
      Src: /src/openvpn/src/openvpn/init.c:4942,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4953
      start: 4880
    functionDepth: 0
    functionLinenumber: 4880
    functionLinenumberEnd: 4953
    functionName: close_instance
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - do_close_tun
    - uninit_proxy
    - do_close_plugins
    - do_close_ifconfig_pool_persist
    - do_close_free_key_schedule
    - do_close_link_socket
    - do_close_status_output
    - dco_remove_peer
    - do_close_free_buf
    - do_env_set_destroy
    - management_notify_client_close
    - gc_free
    - do_close_packet_id
    - do_close_fragment
    - do_close_tls
    - do_close_event_set
    - comp_uninit
    linkageType: ''
    returnType: void
    signature: 'void close_instance(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ISC_ROUTE_ERRORS
    argTypes:
    - flags
    constantsTouched: []
    func_position:
      end: 1653
      start: 1650
    functionDepth: 0
    functionLinenumber: 1650
    functionLinenumberEnd: 1653
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: else
    signature: 'else if (flags & ISC_ROUTE_ERRORS) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/init.c:741,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 743
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 743
    functionName: do_link_socket_addr_new
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY_CLEAR_GC
    linkageType: ''
    returnType: void
    signature: 'static void do_link_socket_addr_new(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: port_share_close
      Src: /src/openvpn/src/openvpn/init.c:811,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 814
      start: 806
    functionDepth: 0
    functionLinenumber: 806
    functionLinenumberEnd: 814
    functionName: close_port_share
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - port_share_close
    linkageType: ''
    returnType: void
    signature: 'static void close_port_share(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_multi_init_finalize
      Src: /src/openvpn/src/openvpn/init.c:3566,1
    - Dst: tls_init_control_channel_frame_parameters
      Src: /src/openvpn/src/openvpn/init.c:3578,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3567,1
    - Dst: frame_print
      Src: /src/openvpn/src/openvpn/init.c:3569,1
    - Dst: frame_print
      Src: /src/openvpn/src/openvpn/init.c:3579,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/init.c:3581,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/init.c:3581,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/init.c:3582,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/init.c:3582,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3584
      start: 3561
    functionDepth: 0
    functionLinenumber: 3561
    functionLinenumberEnd: 3584
    functionName: do_init_frame_tls
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - BUF_SIZE
    - frame_print
    - tls_init_control_channel_frame_parameters
    - tls_multi_init_finalize
    - ASSERT
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void do_init_frame_tls(struct context *c) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_init_phase1
      Src: /src/openvpn/src/openvpn/init.c:3883,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3885
      start: 3858
    functionDepth: 0
    functionLinenumber: 3858
    functionLinenumberEnd: 3885
    functionName: do_init_socket_phase1
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - link_socket_init_phase1
    linkageType: ''
    returnType: void
    signature: 'static void do_init_socket_phase1(struct context *c) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/init.c:4422,1
    - Dst: proto_is_tcp
      Src: /src/openvpn/src/openvpn/init.c:4423,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 19
    argCount: 2
    argNames:
    - arg
    - samenetwork
    argTypes:
    - void*
    - bool
    constantsTouched: []
    func_position:
      end: 4437
      start: 4393
    functionDepth: 0
    functionLinenumber: 4393
    functionLinenumberEnd: 4437
    functionName: management_callback_network_change
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - proto_is_tcp
    - get_link_socket_info
    linkageType: ''
    returnType: int
    signature: 'int management_callback_network_change(void *arg, bool samenetwork) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: context_clear_1
      Src: /src/openvpn/src/openvpn/init.c:748,1
    - Dst: pkcs11_initialize
      Src: /src/openvpn/src/openvpn/init.c:762,1
    - Dst: do_link_socket_addr_new
      Src: /src/openvpn/src/openvpn/init.c:756,1
    - Dst: init_connection_list
      Src: /src/openvpn/src/openvpn/init.c:752,1
    - Dst: packet_id_persist_init
      Src: /src/openvpn/src/openvpn/init.c:750,1
    - Dst: pkcs11_addProvider
      Src: /src/openvpn/src/openvpn/init.c:765,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:777,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/init.c:778,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/init.c:779,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:780,1
    - Dst: getpid
      Src: /src/openvpn/src/openvpn/init.c:791,1
    - Dst: sd_notifyf
      Src: /src/openvpn/src/openvpn/init.c:790,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 794
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 794
    functionName: context_init_1
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - packet_id_persist_init
    - getpid
    - context_clear_1
    - pkcs11_addProvider
    - msg
    - sd_notifyf
    - init_connection_list
    - do_link_socket_addr_new
    - CLEAR
    - strcpy
    - get_user_pass
    - pkcs11_initialize
    linkageType: ''
    returnType: void
    signature: 'void context_init_1(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: port_share_open
      Src: /src/openvpn/src/openvpn/init.c:821,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:827,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 830
      start: 816
    functionDepth: 0
    functionLinenumber: 816
    functionLinenumberEnd: 830
    functionName: init_port_share
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - port_share_open
    linkageType: ''
    returnType: void
    signature: 'static void init_port_share(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: plugin_list_close
      Src: /src/openvpn/src/openvpn/init.c:4353,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4357
      start: 4348
    functionDepth: 0
    functionLinenumber: 4348
    functionLinenumberEnd: 4357
    functionName: do_close_plugins
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - plugin_list_close
    linkageType: ''
    returnType: void
    signature: 'static void do_close_plugins(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/init.c:986,1
    - Dst: basename
      Src: /src/openvpn/src/openvpn/init.c:987,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 989
      start: 980
    functionDepth: 0
    functionLinenumber: 980
    functionLinenumberEnd: 989
    functionName: init_options_dev
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - basename
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void init_options_dev(struct options *options) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:4272,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:4276,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4284
      start: 4266
    functionDepth: 0
    functionLinenumber: 4266
    functionLinenumberEnd: 4284
    functionName: do_setup_fast_io
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void do_setup_fast_io(struct context *c) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/init.c:5130,1
    - Dst: platform_getpid
      Src: /src/openvpn/src/openvpn/init.c:5137,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/init.c:5139,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:5133,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/init.c:5138,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:5141,1
    - Dst: strdup
      Src: /src/openvpn/src/openvpn/init.c:5148,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:5151,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 2
    argNames:
    - filename
    - chroot_dir
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 5155
      start: 5124
    functionDepth: 0
    functionLinenumber: 5124
    functionLinenumberEnd: 5155
    functionName: write_pid_file
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - platform_getpid
    - fclose
    - msg
    - strdup
    - platform_fopen
    - fprintf
    linkageType: ''
    returnType: void
    signature: 'void write_pid_file(const char *filename, const char *chroot_dir) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: platform_mlockall
      Src: /src/openvpn/src/openvpn/init.c:1036,1
    - Dst: write_key_file
      Src: /src/openvpn/src/openvpn/init.c:1070,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1046,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1055,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1065,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1073,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1076,1
    - Dst: tls_crypt_v2_write_server_key_file
      Src: /src/openvpn/src/openvpn/init.c:1083,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1090,1
    - Dst: tls_crypt_v2_write_client_key_file
      Src: /src/openvpn/src/openvpn/init.c:1094,1
    - Dst: auth_token_write_server_key_file
      Src: /src/openvpn/src/openvpn/init.c:1101,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 41
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1108
      start: 1030
    functionDepth: 0
    functionLinenumber: 1030
    functionLinenumberEnd: 1108
    functionName: do_genkey
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - tls_crypt_v2_write_client_key_file
    - auth_token_write_server_key_file
    - msg
    - platform_mlockall
    - tls_crypt_v2_write_server_key_file
    - write_key_file
    linkageType: ''
    returnType: bool
    signature: 'bool do_genkey(const struct options *options) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_restart_pause
      Src: /src/openvpn/src/openvpn/init.c:2941,1
    - Dst: do_hold
      Src: /src/openvpn/src/openvpn/init.c:2945,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2947
      start: 2936
    functionDepth: 0
    functionLinenumber: 2936
    functionLinenumberEnd: 2947
    functionName: do_startup_pause
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - socket_restart_pause
    - do_hold
    linkageType: ''
    returnType: void
    signature: 'static void do_startup_pause(struct context *c) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:425,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:429,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/init.c:432,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:434,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/init.c:434,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/init.c:435,1
    - Dst: management_notify_generic
      Src: /src/openvpn/src/openvpn/init.c:436,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:436,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:437,1
    - Dst: management_event_loop_n_seconds
      Src: /src/openvpn/src/openvpn/init.c:444,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:453,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:445,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 32
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 465
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 465
    functionName: ce_management_query_remote
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - management_notify_generic
    - BSTR
    - buf_printf
    - management_event_loop_n_seconds
    - gc_new
    - gc_free
    - update_time
    - np
    - proto2ascii
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'static bool ce_management_query_remote(struct context *c) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: show_available_ciphers
      Src: /src/openvpn/src/openvpn/init.c:1002,1
    - Dst: show_available_tls_ciphers
      Src: /src/openvpn/src/openvpn/init.c:1014,1
    - Dst: show_available_curves
      Src: /src/openvpn/src/openvpn/init.c:1020,1
    - Dst: show_available_engines
      Src: /src/openvpn/src/openvpn/init.c:1010,1
    - Dst: show_available_digests
      Src: /src/openvpn/src/openvpn/init.c:1006,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 16
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1025
      start: 991
    functionDepth: 0
    functionLinenumber: 991
    functionLinenumberEnd: 1025
    functionName: print_openssl_info
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - show_available_curves
    - show_available_tls_ciphers
    - show_available_digests
    - show_available_ciphers
    - show_available_engines
    linkageType: ''
    returnType: bool
    signature: 'bool print_openssl_info(const struct options *options) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: GREMLIN_CONNECTION_FLOOD_LEVEL
      Src: /src/openvpn/src/openvpn/init.c:2877,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/init.c:2896,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/init.c:2896,1
    - Dst: auth_retry_get
      Src: /src/openvpn/src/openvpn/init.c:2883,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/init.c:2900,1
    - Dst: do_hold
      Src: /src/openvpn/src/openvpn/init.c:2921,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2928,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/init.c:2929,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 47
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 2931
      start: 2858
    functionDepth: 0
    functionLinenumber: 2858
    functionLinenumberEnd: 2931
    functionName: socket_restart_pause
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - auth_retry_get
    - management_sleep
    - msg
    - max_int
    - min_int
    - GREMLIN_CONNECTION_FLOOD_LEVEL
    - do_hold
    linkageType: ''
    returnType: void
    signature: 'static void socket_restart_pause(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3592,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3599,1
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/init.c:3596,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3604
      start: 3589
    functionDepth: 0
    functionLinenumber: 3589
    functionLinenumberEnd: 3604
    functionName: do_init_crypto_none
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - init_key_type
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void do_init_crypto_none(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_init_phase2
      Src: /src/openvpn/src/openvpn/init.c:3895,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3897
      start: 3890
    functionDepth: 0
    functionLinenumber: 3890
    functionLinenumberEnd: 3897
    functionName: do_init_socket_phase2
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - link_socket_init_phase2
    linkageType: ''
    returnType: void
    signature: 'static void do_init_socket_phase2(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: context_clear
      Src: /src/openvpn/src/openvpn/init.c:98,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 101
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 101
    functionName: context_clear_all_except_first_time
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - context_clear
    linkageType: ''
    returnType: void
    signature: 'void context_clear_all_except_first_time(struct context *c) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:217,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:229,1
    - Dst: init_http_proxy_options_once
      Src: /src/openvpn/src/openvpn/init.c:232,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/init.c:218,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/init.c:224,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/init.c:233,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/init.c:234,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/init.c:235,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/init.c:238,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/init.c:240,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/init.c:241,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:247,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 35
    argCount: 2
    argNames:
    - arg
    - p
    argTypes:
    - void*
    - char**
    constantsTouched: []
    func_position:
      end: 253
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 253
    functionName: management_callback_proxy_cmd
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - init_http_proxy_options_once
    - msg
    - update_time
    - streq
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'static bool management_callback_proxy_cmd(void *arg, const char **p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4297
      start: 4286
    functionDepth: 0
    functionLinenumber: 4286
    functionLinenumberEnd: 4297
    functionName: do_signal_on_tls_errors
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void do_signal_on_tls_errors(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:263,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:269,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:266,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/init.c:268,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/init.c:270,1
    - Dst: np
      Src: /src/openvpn/src/openvpn/init.c:270,1
    - Dst: management_notify_generic
      Src: /src/openvpn/src/openvpn/init.c:271,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:271,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:272,1
    - Dst: management_event_loop_n_seconds
      Src: /src/openvpn/src/openvpn/init.c:277,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:278,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:285,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 24
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 289
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 289
    functionName: ce_management_query_proxy
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - IS_SIG
    - management_notify_generic
    - BSTR
    - buf_printf
    - management_event_loop_n_seconds
    - gc_new
    - proto_is_udp
    - gc_free
    - update_time
    - np
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'static bool ce_management_query_proxy(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:799,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:800,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:801,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 802
      start: 796
    functionDepth: 0
    functionLinenumber: 796
    functionLinenumberEnd: 802
    functionName: context_gc_free
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void context_gc_free(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_tun_type_set
      Src: /src/openvpn/src/openvpn/init.c:1839,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1841
      start: 1829
    functionDepth: 0
    functionLinenumber: 1829
    functionLinenumberEnd: 1841
    functionName: can_preserve_tun
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - is_tun_type_set
    linkageType: ''
    returnType: bool
    signature: 'static bool can_preserve_tun(struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:3921,1
    - Dst: options_string
      Src: /src/openvpn/src/openvpn/init.c:3927,1
    - Dst: options_string_version
      Src: /src/openvpn/src/openvpn/init.c:3931,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3930,1
    - Dst: options_string
      Src: /src/openvpn/src/openvpn/init.c:3924,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3933,1
    - Dst: options_string_version
      Src: /src/openvpn/src/openvpn/init.c:3934,1
    - Dst: tls_multi_init_set_options
      Src: /src/openvpn/src/openvpn/init.c:3939,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:3944,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3945
      start: 3918
    functionDepth: 0
    functionLinenumber: 3918
    functionLinenumberEnd: 3945
    functionName: do_compute_occ_strings
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - options_string
    - options_string_version
    - msg
    - gc_new
    - gc_free
    - tls_multi_init_set_options
    linkageType: ''
    returnType: void
    signature: 'static void do_compute_occ_strings(struct context *c) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/init.c:128,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/init.c:131,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:157,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/init.c:158,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/init.c:172,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:164,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/init.c:174,1
    - Dst: argv_parse_cmd
      Src: /src/openvpn/src/openvpn/init.c:175,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/init.c:178,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/init.c:130,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/init.c:135,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:173,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/init.c:176,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/init.c:180,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:183,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/init.c:138,1
    - Dst: openvpn_run_script
      Src: /src/openvpn/src/openvpn/init.c:179,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:124,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/init.c:132,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/init.c:154,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/init.c:156,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/init.c:162,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/init.c:167,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 39
    argCount: 13
    argNames:
    - command
    - plugins
    - plugin_type
    - arg
    - '#ifdef'
    - adapter_index
    - '#endif'
    - dev_type
    - tun_mtu
    - ifconfig_local
    - ifconfig_remote
    - context
    - signal_text
    - script_type
    - es
    argTypes:
    - char*
    - struct plugin_list*
    - int
    - char*
    - _WIN32
    - char*
    - int
    - char*
    - char*
    - char*
    - char*
    - char*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 184
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 184
    functionName: run_up_down
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - openvpn_run_script
    - argv_msg
    - argv_printf
    - argv_parse_cmd
    - msg
    - plugin_call
    - argv_free
    - gc_new
    - setenv_str
    - gc_free
    - setenv_int
    - argv_new
    - ASSERT
    - plugin_defined
    - argv_printf_cat
    linkageType: ''
    returnType: void
    signature: 'static void run_up_down(const char *command, const struct plugin_list
      *plugins, int plugin_type, const char *arg,#ifdef _WIN32 DWORD adapter_index,#endif
      const char *dev_type, int tun_mtu, const char *ifconfig_local, const char *ifconfig_remote,
      const char *context, const char *signal_text, const char *script_type, struct
      env_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: frame_print
      Src: /src/openvpn/src/openvpn/init.c:3905,1
    - Dst: frame_print
      Src: /src/openvpn/src/openvpn/init.c:3909,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3913
      start: 3902
    functionDepth: 0
    functionLinenumber: 3902
    functionLinenumberEnd: 3913
    functionName: do_print_data_channel_mtu_parms
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - frame_print
    linkageType: ''
    returnType: void
    signature: 'static void do_print_data_channel_mtu_parms(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3822,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/src/openvpn/init.c:3831,1
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/init.c:3832,1
    - Dst: fragment_frame_init
      Src: /src/openvpn/src/openvpn/init.c:3833,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3834
      start: 3819
    functionDepth: 0
    functionLinenumber: 3819
    functionLinenumberEnd: 3834
    functionName: do_init_fragment
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - frame_calculate_dynamic
    - get_link_socket_info
    - ASSERT
    - fragment_frame_init
    linkageType: ''
    returnType: void
    signature: 'static void do_init_fragment(struct context *c) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_initialised
      Src: /src/openvpn/src/openvpn/init.c:3233,1
    - Dst: auth_retry_get
      Src: /src/openvpn/src/openvpn/init.c:3242,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3245,1
    - Dst: init_ssl
      Src: /src/openvpn/src/openvpn/init.c:3239,1
    - Dst: tls_ctx_initialised
      Src: /src/openvpn/src/openvpn/init.c:3240,1
    - Dst: ssl_purge_auth
      Src: /src/openvpn/src/openvpn/init.c:3249,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/init.c:3254,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3258,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/init.c:3282,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/init.c:3283,1
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/init.c:3291,1
    - Dst: string_clear
      Src: /src/openvpn/src/openvpn/init.c:3308,1
    - Dst: do_init_tls_wrap_key
      Src: /src/openvpn/src/openvpn/init.c:3321,1
    - Dst: do_init_tls_wrap_key
      Src: /src/openvpn/src/openvpn/init.c:3295,1
    - Dst: auth_token_init_secret
      Src: /src/openvpn/src/openvpn/init.c:3300,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3315,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 33
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3323
      start: 3228
    functionDepth: 0
    functionLinenumber: 3228
    functionLinenumberEnd: 3323
    functionName: do_init_crypto_tls_c1
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - auth_retry_get
    - init_key_type
    - do_init_tls_wrap_key
    - auth_token_init_secret
    - msg
    - tls_ctx_initialised
    - register_signal
    - init_ssl
    - ASSERT
    - streq
    - string_clear
    - ssl_purge_auth
    - tls_item_in_cipher_list
    linkageType: ''
    returnType: void
    signature: 'static void do_init_crypto_tls_c1(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:2956,1
    - Dst: frame_calculate_protocol_header_size
      Src: /src/openvpn/src/openvpn/init.c:2959,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2972,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:2966,1
    - Dst: frame_print
      Src: /src/openvpn/src/openvpn/init.c:2973,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - c
    - o
    argTypes:
    - struct context*
    - struct options*
    constantsTouched: []
    func_position:
      end: 2976
      start: 2949
    functionDepth: 0
    functionLinenumber: 2949
    functionLinenumberEnd: 2976
    functionName: get_frame_mtu
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - frame_print
    - ASSERT
    - frame_calculate_protocol_header_size
    linkageType: ''
    returnType: size_t
    signature: 'static size_t get_frame_mtu(struct context *c, const struct options
      *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/init.c:201,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 206
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 206
    functionName: update_options_ce_post
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - proto_is_dgram
    linkageType: ''
    returnType: void
    signature: 'static void update_options_ce_post(struct options *options) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/init.c:510,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - lsa
    - free
    argTypes:
    - struct link_socket_addr*
    - bool
    constantsTouched: []
    func_position:
      end: 514
      start: 505
    functionDepth: 0
    functionLinenumber: 505
    functionLinenumberEnd: 514
    functionName: clear_remote_addrlist
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - freeaddrinfo
    linkageType: ''
    returnType: void
    signature: 'static void clear_remote_addrlist(struct link_socket_addr *lsa, bool
      free) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/init.c:1492,1
    - Dst: init_route_list
      Src: /src/openvpn/src/openvpn/init.c:1517,1
    - Dst: setenv_routes
      Src: /src/openvpn/src/openvpn/init.c:1526,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:1499,1
    - Dst: link_socket_current_remote
      Src: /src/openvpn/src/openvpn/init.c:1521,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 20
    argCount: 5
    argNames:
    - options
    - route_list
    - link_socket_info
    - es
    - ctx
    argTypes:
    - struct options*
    - struct route_list*
    - struct link_socket_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1528
      start: 1484
    functionDepth: 0
    functionLinenumber: 1484
    functionLinenumberEnd: 1528
    functionName: do_init_route_list
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - init_route_list
    - dev_type_enum
    - dco_enabled
    - setenv_routes
    - link_socket_current_remote
    linkageType: ''
    returnType: void
    signature: 'static void do_init_route_list(const struct options *options, struct
      route_list *route_list, const struct link_socket_info *link_socket_info, struct
      env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:1541,1
    - Dst: link_socket_current_remote_ipv6
      Src: /src/openvpn/src/openvpn/init.c:1576,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/init.c:1567,1
    - Dst: init_route_ipv6_list
      Src: /src/openvpn/src/openvpn/init.c:1572,1
    - Dst: add_route_ipv6_to_option_list
      Src: /src/openvpn/src/openvpn/init.c:1566,1
    - Dst: setenv_routes_ipv6
      Src: /src/openvpn/src/openvpn/init.c:1581,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 19
    argCount: 5
    argNames:
    - options
    - route_ipv6_list
    - link_socket_info
    - es
    - ctx
    argTypes:
    - struct options*
    - struct route_ipv6_list*
    - struct link_socket_info*
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1583
      start: 1530
    functionDepth: 0
    functionLinenumber: 1530
    functionLinenumberEnd: 1583
    functionName: do_init_route_ipv6_list
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - link_socket_current_remote_ipv6
    - dco_enabled
    - init_route_ipv6_list
    - setenv_routes_ipv6
    - add_route_ipv6_to_option_list
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static void do_init_route_ipv6_list(const struct options *options,
      struct route_ipv6_list *route_ipv6_list, const struct link_socket_info *link_socket_info,
      struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: do_init_crypto_tls_c1
      Src: /src/openvpn/src/openvpn/init.c:3341,1
    - Dst: init_crypto_pre
      Src: /src/openvpn/src/openvpn/init.c:3335,1
    - Dst: cipher_kt_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/init.c:3348,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/init.c:3434,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/init.c:3494,1
    - Dst: tls_auth_standalone_init
      Src: /src/openvpn/src/openvpn/init.c:3556,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3332,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3338,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/init.c:3387,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:3539,1
    - Dst: dco_supports_epoch_data
      Src: /src/openvpn/src/openvpn/init.c:3413,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/init.c:3342,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:3351,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/init.c:3380,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/init.c:3387,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:3411,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3333,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/init.c:3380,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/init.c:3441,1
    - Dst: tls_multi_init
      Src: /src/openvpn/src/openvpn/init.c:3546,1
    - Dst: session_id_hmac_init
      Src: /src/openvpn/src/openvpn/init.c:3557,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 157
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3559
      start: 3325
    functionDepth: 0
    functionLinenumber: 3325
    functionLinenumberEnd: 3559
    functionName: do_init_crypto_tls
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_ofb_cfb
    - IS_SIG
    - get_random
    - memcpy
    - tls_multi_init
    - session_id_hmac_init
    - max_int
    - dco_enabled
    - CLEAR
    - tls_auth_standalone_init
    - ASSERT
    - do_init_crypto_tls_c1
    - strlen
    - dco_supports_epoch_data
    - init_crypto_pre
    linkageType: ''
    returnType: void
    signature: 'static void do_init_crypto_tls(struct context *c, const unsigned int
      flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/init.c:490,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 500
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 500
    functionName: init_connection_list
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - get_random
    linkageType: ''
    returnType: void
    signature: 'static void init_connection_list(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: block_local_needed
      Src: /src/openvpn/src/openvpn/init.c:1856,1
    - Dst: win_wfp_block
      Src: /src/openvpn/src/openvpn/init.c:1861,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1863,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1867
      start: 1851
    functionDepth: 0
    functionLinenumber: 1851
    functionLinenumberEnd: 1867
    functionName: add_wfp_block
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - win_wfp_block
    - block_local_needed
    linkageType: ''
    returnType: void
    signature: 'static void add_wfp_block(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: open_tun_null
      Src: /src/openvpn/src/openvpn/init.c:1911,1
    - Dst: open_tun
      Src: /src/openvpn/src/openvpn/init.c:1919,1
    - Dst: open_tun_afunix
      Src: /src/openvpn/src/openvpn/init.c:1915,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1922,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/init.c:1922,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1923
      start: 1904
    functionDepth: 0
    functionLinenumber: 1904
    functionLinenumberEnd: 1923
    functionName: open_tun_backend
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - open_tun
    - msg
    - open_tun_null
    - print_tun_backend_driver
    - open_tun_afunix
    linkageType: ''
    returnType: void
    signature: 'static void open_tun_backend(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/init.c:3959,1
    - Dst: platform_nice
      Src: /src/openvpn/src/openvpn/init.c:3981,1
    - Dst: platform_group_get
      Src: /src/openvpn/src/openvpn/init.c:3964,1
    - Dst: platform_chdir
      Src: /src/openvpn/src/openvpn/init.c:3977,1
    - Dst: platform_user_get
      Src: /src/openvpn/src/openvpn/init.c:3966,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3983
      start: 3952
    functionDepth: 0
    functionLinenumber: 3952
    functionLinenumberEnd: 3983
    functionName: do_init_first_time
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - platform_group_get
    - platform_nice
    - ALLOC_OBJ_CLEAR_GC
    - platform_chdir
    - platform_user_get
    linkageType: ''
    returnType: void
    signature: 'static void do_init_first_time(struct context *c) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1961,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:1969,1
    - Dst: do_ifconfig
      Src: /src/openvpn/src/openvpn/init.c:2025,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2041,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2042,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2063,1
    - Dst: do_ifconfig_setenv
      Src: /src/openvpn/src/openvpn/init.c:2067,1
    - Dst: run_up_down
      Src: /src/openvpn/src/openvpn/init.c:2074,1
    - Dst: dev_type_string
      Src: /src/openvpn/src/openvpn/init.c:2081,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:2093,1
    - Dst: do_route
      Src: /src/openvpn/src/openvpn/init.c:2053,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:1929,1
    - Dst: do_init_tun
      Src: /src/openvpn/src/openvpn/init.c:1950,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/init.c:1942,1
    - Dst: ovpn_dco_init
      Src: /src/openvpn/src/openvpn/init.c:2009,1
    - Dst: set_lladdr
      Src: /src/openvpn/src/openvpn/init.c:2018,1
    - Dst: open_tun_backend
      Src: /src/openvpn/src/openvpn/init.c:2013,1
    - Dst: guess_tuntap_dev
      Src: /src/openvpn/src/openvpn/init.c:1987,1
    - Dst: ifconfig_noexec_enabled
      Src: /src/openvpn/src/openvpn/init.c:2022,1
    - Dst: ifconfig_order
      Src: /src/openvpn/src/openvpn/init.c:2023,1
    - Dst: dev_type_string
      Src: /src/openvpn/src/openvpn/init.c:2039,1
    - Dst: route_order
      Src: /src/openvpn/src/openvpn/init.c:2051,1
    - Dst: run_dns_up_down
      Src: /src/openvpn/src/openvpn/init.c:2069,1
    - Dst: ifconfig_noexec_enabled
      Src: /src/openvpn/src/openvpn/init.c:1982,1
    - Dst: ifconfig_order
      Src: /src/openvpn/src/openvpn/init.c:1983,1
    - Dst: do_ifconfig
      Src: /src/openvpn/src/openvpn/init.c:1991,1
    - Dst: do_route
      Src: /src/openvpn/src/openvpn/init.c:1998,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:2007,1
    - Dst: add_wfp_block
      Src: /src/openvpn/src/openvpn/init.c:2048,1
    - Dst: add_wfp_block
      Src: /src/openvpn/src/openvpn/init.c:2091,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2084,1
    - Dst: can_preserve_tun
      Src: /src/openvpn/src/openvpn/init.c:1933,1
    - Dst: do_alloc_route_list
      Src: /src/openvpn/src/openvpn/init.c:1966,1
    - Dst: do_init_route_list
      Src: /src/openvpn/src/openvpn/init.c:1972,1
    - Dst: do_init_route_ipv6_list
      Src: /src/openvpn/src/openvpn/init.c:1977,1
    - Dst: route_order
      Src: /src/openvpn/src/openvpn/init.c:1995,1
    - Dst: run_dns_up_down
      Src: /src/openvpn/src/openvpn/init.c:2029,1
    - Dst: run_up_down
      Src: /src/openvpn/src/openvpn/init.c:2032,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/init.c:2083,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 77
    argCount: 2
    argNames:
    - c
    - error_flags
    argTypes:
    - struct context*
    - int*
    constantsTouched: []
    func_position:
      end: 2095
      start: 1926
    functionDepth: 0
    functionLinenumber: 1926
    functionLinenumberEnd: 2095
    functionName: do_open_tun
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - run_dns_up_down
    - msg
    - dev_type_string
    - do_init_route_ipv6_list
    - do_ifconfig
    - set_lladdr
    - free
    - ovpn_dco_init
    - ifconfig_noexec_enabled
    - route_order
    - do_route
    - add_wfp_block
    - gc_new
    - do_init_route_list
    - gc_free
    - guess_tuntap_dev
    - run_up_down
    - print_in_addr_t
    - open_tun_backend
    - ifconfig_order
    - do_ifconfig_setenv
    - do_init_tun
    - do_alloc_route_list
    - dco_enabled
    - ASSERT
    - can_preserve_tun
    linkageType: ''
    returnType: bool
    signature: 'static bool do_open_tun(struct context *c, int *error_flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_frame_mtu
      Src: /src/openvpn/src/openvpn/init.c:2991,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/init.c:3005,1
    - Dst: crypto_max_overhead
      Src: /src/openvpn/src/openvpn/init.c:3023,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/init.c:2995,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/init.c:2999,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3047,1
    - Dst: COMP_EXTRA_BUFFER
      Src: /src/openvpn/src/openvpn/init.c:3049,1
    - Dst: COMP_EXTRA_BUFFER
      Src: /src/openvpn/src/openvpn/init.c:3050,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 34
    argCount: 2
    argNames:
    - c
    - o
    argTypes:
    - struct context*
    - struct options*
    constantsTouched: []
    func_position:
      end: 3056
      start: 2981
    functionDepth: 0
    functionLinenumber: 2981
    functionLinenumberEnd: 3056
    functionName: frame_finalize_options
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - max_int
    - get_frame_mtu
    - COMP_EXTRA_BUFFER
    - crypto_max_overhead
    linkageType: ''
    returnType: void
    signature: 'static void frame_finalize_options(struct context *c, const struct
      options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/init.c:1305,1
    - Dst: tls_common_name
      Src: /src/openvpn/src/openvpn/init.c:1308,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/init.c:1310,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/init.c:1308,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 2
    argNames:
    - c
    - gc
    argTypes:
    - struct context*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1311
      start: 1302
    functionDepth: 0
    functionLinenumber: 1302
    functionLinenumberEnd: 1311
    functionName: format_common_name
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - buf_printf
    - tls_common_name
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *format_common_name(struct context *c, struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: win32_signal_open
      Src: /src/openvpn/src/openvpn/init.c:1319,1
    - Dst: win32_signal_open
      Src: /src/openvpn/src/openvpn/init.c:1326,1
    - Dst: window_title_generate
      Src: /src/openvpn/src/openvpn/init.c:1335,1
    - Dst: window_title_save
      Src: /src/openvpn/src/openvpn/init.c:1334,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - options
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1339
      start: 1313
    functionDepth: 0
    functionLinenumber: 1313
    functionLinenumberEnd: 1339
    functionName: pre_setup
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - window_title_generate
    - window_title_save
    - win32_signal_open
    linkageType: ''
    returnType: void
    signature: 'void pre_setup(const struct options *options) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1345
      start: 1341
    functionDepth: 0
    functionLinenumber: 1341
    functionLinenumberEnd: 1345
    functionName: reset_coarse_timers
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void reset_coarse_timers(struct context *c) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: platform_chroot
      Src: /src/openvpn/src/openvpn/init.c:1231,1
    - Dst: platform_user_group_set
      Src: /src/openvpn/src/openvpn/init.c:1244,1
    - Dst: mstats_open
      Src: /src/openvpn/src/openvpn/init.c:1257,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1235,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1250,1
    - Dst: setcon
      Src: /src/openvpn/src/openvpn/init.c:1272,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1274,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1278,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:1283,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 29
    argCount: 2
    argNames:
    - c
    - no_delay
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 1296
      start: 1218
    functionDepth: 0
    functionLinenumber: 1218
    functionLinenumberEnd: 1296
    functionName: do_uid_gid_chroot
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - platform_chroot
    - mstats_open
    - setcon
    - platform_user_group_set
    linkageType: ''
    returnType: void
    signature: 'static void do_uid_gid_chroot(struct context *c, bool no_delay) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free_context_buffers
      Src: /src/openvpn/src/openvpn/init.c:3993,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3997
      start: 3988
    functionDepth: 0
    functionLinenumber: 3988
    functionLinenumberEnd: 3997
    functionName: do_close_free_buf
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - free_context_buffers
    linkageType: ''
    returnType: void
    signature: 'static void do_close_free_buf(struct context *c) '
  - BBCount: 23
    BranchProfiles: []
    Callsites:
    - Dst: do_init_timers
      Src: /src/openvpn/src/openvpn/init.c:2687,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2702,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2710,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2743,1
    - Dst: link_socket_update_buffer_sizes
      Src: /src/openvpn/src/openvpn/init.c:2735,1
    - Dst: comp_uninit
      Src: /src/openvpn/src/openvpn/init.c:2718,1
    - Dst: do_init_traffic_shaper
      Src: /src/openvpn/src/openvpn/init.c:2726,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2761,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2778,1
    - Dst: dco_check_pull_options
      Src: /src/openvpn/src/openvpn/init.c:2793,1
    - Dst: init_verb_mute
      Src: /src/openvpn/src/openvpn/init.c:2682,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2731,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2765,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/init.c:2792,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2809,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2825,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/init.c:2829,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2683,1
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/init.c:2694,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2697,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2717,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2753,1
    - Dst: link_socket_update_flags
      Src: /src/openvpn/src/openvpn/init.c:2746,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2769,1
    - Dst: check_pull_client_ncp
      Src: /src/openvpn/src/openvpn/init.c:2786,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2688,1
    - Dst: check_compression_settings_valid
      Src: /src/openvpn/src/openvpn/init.c:2708,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2725,1
    - Dst: comp_init
      Src: /src/openvpn/src/openvpn/init.c:2719,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2757,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2773,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2795,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:2819,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 95
    argCount: 2
    argNames:
    - c
    - found
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2833
      start: 2677
    functionDepth: 0
    functionLinenumber: 2677
    functionLinenumberEnd: 2833
    functionName: do_deferred_options
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - link_socket_update_buffer_sizes
    - comp_init
    - do_init_traffic_shaper
    - init_verb_mute
    - msg
    - check_compression_settings_valid
    - dco_enabled
    - proto_is_udp
    - min_int
    - dco_check_pull_options
    - link_socket_update_flags
    - check_pull_client_ncp
    - comp_uninit
    - do_init_timers
    linkageType: ''
    returnType: bool
    signature: 'bool do_deferred_options(struct context *c, const unsigned int found) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: srandom
      Src: /src/openvpn/src/openvpn/init.c:853,1
    - Dst: init_win32
      Src: /src/openvpn/src/openvpn/init.c:860,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:868,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:906,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:899,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/init.c:910,1
    - Dst: sleep
      Src: /src/openvpn/src/openvpn/init.c:929,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/init.c:873,1
    - Dst: platform_create_temp_file
      Src: /src/openvpn/src/openvpn/init.c:907,1
    - Dst: time_test
      Src: /src/openvpn/src/openvpn/init.c:888,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/init.c:898,1
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/init.c:911,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:913,1
    - Dst: crypto_init_dmalloc
      Src: /src/openvpn/src/openvpn/init.c:839,1
    - Dst: error_reset
      Src: /src/openvpn/src/openvpn/init.c:856,1
    - Dst: reset_check_status
      Src: /src/openvpn/src/openvpn/init.c:857,1
    - Dst: init_ssl_lib
      Src: /src/openvpn/src/openvpn/init.c:875,1
    - Dst: gen_path
      Src: /src/openvpn/src/openvpn/init.c:895,1
    - Dst: status_open
      Src: /src/openvpn/src/openvpn/init.c:908,1
    - Dst: status_printf
      Src: /src/openvpn/src/openvpn/init.c:909,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/init.c:915,1
    - Dst: mstats_open
      Src: /src/openvpn/src/openvpn/init.c:923,1
    - Dst: mstats_close
      Src: /src/openvpn/src/openvpn/init.c:931,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/init.c:850,1
    - Dst: schedule_test
      Src: /src/openvpn/src/openvpn/init.c:878,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/init.c:894,1
    - Dst: ifconfig_pool_test
      Src: /src/openvpn/src/openvpn/init.c:883,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 937
      start: 835
    functionDepth: 0
    functionLinenumber: 835
    functionLinenumberEnd: 937
    functionName: init_static
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - gen_path
    - msg
    - ifconfig_pool_test
    - mstats_open
    - error_reset
    - srandom
    - crypto_init_dmalloc
    - status_open
    - init_win32
    - gc_new
    - init_ssl_lib
    - gc_free
    - mstats_close
    - sleep
    - status_close
    - update_time
    - gettimeofday
    - platform_create_temp_file
    - reset_check_status
    - time_test
    - status_printf
    - schedule_test
    - printf
    linkageType: ''
    returnType: bool
    signature: 'bool init_static(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: shaper_init
      Src: /src/openvpn/src/openvpn/init.c:1456,1
    - Dst: shaper_msg
      Src: /src/openvpn/src/openvpn/init.c:1457,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1459
      start: 1450
    functionDepth: 0
    functionLinenumber: 1450
    functionLinenumberEnd: 1459
    functionName: do_init_traffic_shaper
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - shaper_init
    - shaper_msg
    linkageType: ''
    returnType: void
    signature: 'static void do_init_traffic_shaper(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:3105,1
    - Dst: packet_id_init
      Src: /src/openvpn/src/openvpn/init.c:3116,1
    - Dst: packet_id_persist_load_obj
      Src: /src/openvpn/src/openvpn/init.c:3122,1
    - Dst: key_ctx_bi_defined
      Src: /src/openvpn/src/openvpn/init.c:3125,1
    - Dst: init_crypto_pre
      Src: /src/openvpn/src/openvpn/init.c:3107,1
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/init.c:3128,1
    - Dst: crypto_read_openvpn_key
      Src: /src/openvpn/src/openvpn/init.c:3132,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3140,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 3145
      start: 3101
    functionDepth: 0
    functionLinenumber: 3101
    functionLinenumberEnd: 3145
    functionName: do_init_crypto_static
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - init_key_type
    - msg
    - crypto_read_openvpn_key
    - packet_id_persist_load_obj
    - key_ctx_bi_defined
    - ASSERT
    - packet_id_init
    - init_crypto_pre
    linkageType: ''
    returnType: void
    signature: 'static void do_init_crypto_static(struct context *c, const unsigned
      int flags) '
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3675,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3697,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3686,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3702,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3692,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3709,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3713,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3717,1
    - Dst: warn_on_use_of_common_subnets
      Src: /src/openvpn/src/openvpn/init.c:3723,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3732,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3736,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3744,1
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/init.c:3746,1
    - Dst: script_security
      Src: /src/openvpn/src/openvpn/init.c:3742,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3752,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3748,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 67
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3755
      start: 3668
    functionDepth: 0
    functionLinenumber: 3668
    functionLinenumberEnd: 3755
    functionName: do_option_warnings
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - msg
    - warn_on_use_of_common_subnets
    - script_security
    linkageType: ''
    returnType: void
    signature: 'static void do_option_warnings(struct context *c) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: tuntap_is_dco_win
      Src: /src/openvpn/src/openvpn/init.c:4061,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:4093,1
    - Dst: clear_remote_addrlist
      Src: /src/openvpn/src/openvpn/init.c:4084,1
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/init.c:4104,1
    - Dst: link_socket_close
      Src: /src/openvpn/src/openvpn/init.c:4066,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 39
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4110
      start: 4051
    functionDepth: 0
    functionLinenumber: 4051
    functionLinenumberEnd: 4110
    functionName: do_close_link_socket
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - CLEAR
    - clear_remote_addrlist
    - freeaddrinfo
    - tuntap_is_dco_win
    - link_socket_close
    linkageType: ''
    returnType: void
    signature: 'static void do_close_link_socket(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_ssl_lib
      Src: /src/openvpn/src/openvpn/init.c:942,1
    - Dst: show_tls_performance_stats
      Src: /src/openvpn/src/openvpn/init.c:953,1
    - Dst: pkcs11_terminate
      Src: /src/openvpn/src/openvpn/init.c:945,1
    - Dst: close_port_share
      Src: /src/openvpn/src/openvpn/init.c:949,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 955
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 955
    functionName: uninit_static
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - pkcs11_terminate
    - free_ssl_lib
    - show_tls_performance_stats
    - close_port_share
    linkageType: ''
    returnType: void
    signature: 'void uninit_static(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/init.c:2284,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/init.c:2285,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 5
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - struct sha256_digest*
    - struct sha256_digest*
    constantsTouched: []
    func_position:
      end: 2286
      start: 2279
    functionDepth: 0
    functionLinenumber: 2279
    functionLinenumberEnd: 2286
    functionName: options_hash_changed_or_zero
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: bool
    signature: 'static bool options_hash_changed_or_zero(const struct sha256_digest
      *a, const struct sha256_digest *b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/init.c:3762,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/init.c:3764,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/init.c:3769,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/init.c:3767,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/init.c:3766,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/init.c:3771,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/init.c:3772,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/init.c:3775,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/init.c:3776,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - frame
    argTypes:
    - struct frame*
    constantsTouched: []
    func_position:
      end: 3780
      start: 3757
    functionDepth: 0
    functionLinenumber: 3757
    functionLinenumberEnd: 3780
    functionName: init_context_buffers
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - BUF_SIZE
    - ALLOC_OBJ_CLEAR
    - alloc_buf
    linkageType: ''
    returnType: struct context_buffers*
    signature: 'struct context_buffers *init_context_buffers(const struct frame *frame) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: do_close_tun
      Src: /src/openvpn/src/openvpn/init.c:2267,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2269
      start: 2260
    functionDepth: 0
    functionLinenumber: 2260
    functionLinenumberEnd: 2269
    functionName: tun_abort
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - do_close_tun
    linkageType: ''
    returnType: void
    signature: 'void tun_abort(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fragment_free
      Src: /src/openvpn/src/openvpn/init.c:4135,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4138
      start: 4130
    functionDepth: 0
    functionLinenumber: 4130
    functionLinenumberEnd: 4138
    functionName: do_close_fragment
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - fragment_free
    linkageType: ''
    returnType: void
    signature: 'static void do_close_fragment(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:3787,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:3793,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:3788,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:3789,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:3792,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:3796,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/init.c:3797,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/init.c:3799,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - b
    argTypes:
    - struct context_buffers*
    constantsTouched: []
    func_position:
      end: 3801
      start: 3782
    functionDepth: 0
    functionLinenumber: 3782
    functionLinenumberEnd: 3801
    functionName: free_context_buffers
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - free_buf
    - free
    linkageType: ''
    returnType: void
    signature: 'void free_context_buffers(struct context_buffers *b) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: status_close
      Src: /src/openvpn/src/openvpn/init.c:4200,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4205
      start: 4193
    functionDepth: 0
    functionLinenumber: 4193
    functionLinenumberEnd: 4205
    functionName: do_close_status_output
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - status_close
    linkageType: ''
    returnType: void
    signature: 'static void do_close_status_output(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/init.c:4242,1
    - Dst: env_set_inherit
      Src: /src/openvpn/src/openvpn/init.c:4244,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 2
    argNames:
    - c
    - src
    argTypes:
    - struct context*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 4245
      start: 4239
    functionDepth: 0
    functionLinenumber: 4239
    functionLinenumberEnd: 4245
    functionName: do_inherit_env
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - env_set_inherit
    - env_set_create
    linkageType: ''
    returnType: void
    signature: 'static void do_inherit_env(struct context *c, const struct env_set
      *src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/init.c:5178,1
    - Dst: context_init_1
      Src: /src/openvpn/src/openvpn/init.c:5180,1
    - Dst: next_connection_entry
      Src: /src/openvpn/src/openvpn/init.c:5181,1
    - Dst: do_init_crypto_static
      Src: /src/openvpn/src/openvpn/init.c:5182,1
    - Dst: init_verb_mute
      Src: /src/openvpn/src/openvpn/init.c:5179,1
    - Dst: frame_finalize_options
      Src: /src/openvpn/src/openvpn/init.c:5184,1
    - Dst: test_crypto
      Src: /src/openvpn/src/openvpn/init.c:5186,1
    - Dst: key_schedule_free
      Src: /src/openvpn/src/openvpn/init.c:5188,1
    - Dst: packet_id_free
      Src: /src/openvpn/src/openvpn/init.c:5189,1
    - Dst: context_gc_free
      Src: /src/openvpn/src/openvpn/init.c:5191,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 5193
      start: 5172
    functionDepth: 0
    functionLinenumber: 5172
    functionLinenumberEnd: 5193
    functionName: test_crypto_thread
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - key_schedule_free
    - test_crypto
    - context_gc_free
    - next_connection_entry
    - init_verb_mute
    - do_init_crypto_static
    - frame_finalize_options
    - packet_id_free
    - context_init_1
    - ASSERT
    linkageType: ''
    returnType: void*
    signature: 'static void *test_crypto_thread(void *arg) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/init.c:1471,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/init.c:1475,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1477
      start: 1466
    functionDepth: 0
    functionLinenumber: 1466
    functionLinenumberEnd: 1477
    functionName: do_alloc_route_list
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: void
    signature: 'static void do_alloc_route_list(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: management_hold
      Src: /src/openvpn/src/openvpn/init.c:2846,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - holdtime
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2853
      start: 2839
    functionDepth: 0
    functionLinenumber: 2839
    functionLinenumberEnd: 2853
    functionName: do_hold
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - management_hold
    linkageType: ''
    returnType: bool
    signature: 'static bool do_hold(int holdtime) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/init.c:3159,1
    - Dst: tls_crypt_init_key
      Src: /src/openvpn/src/openvpn/init.c:3180,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3164,1
    - Dst: md_valid
      Src: /src/openvpn/src/openvpn/init.c:3162,1
    - Dst: crypto_read_openvpn_key
      Src: /src/openvpn/src/openvpn/init.c:3168,1
    - Dst: tls_crypt_v2_init_server_key
      Src: /src/openvpn/src/openvpn/init.c:3192,1
    - Dst: tls_crypt_v2_init_client_key
      Src: /src/openvpn/src/openvpn/init.c:3198,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/init.c:3206,1
    - Dst: tls_crypt_buf_overhead
      Src: /src/openvpn/src/openvpn/init.c:3209,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/init.c:3213,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 27
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 3222
      start: 3150
    functionDepth: 0
    functionLinenumber: 3150
    functionLinenumberEnd: 3222
    functionName: do_init_tls_wrap_key
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - md_valid
    - tls_crypt_buf_overhead
    - tls_crypt_v2_init_server_key
    - tls_crypt_v2_init_client_key
    - msg
    - crypto_read_openvpn_key
    - tls_crypt_init_key
    - buf_len
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void do_init_tls_wrap_key(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_free
      Src: /src/openvpn/src/openvpn/init.c:4118,1
    - Dst: packet_id_persist_close
      Src: /src/openvpn/src/openvpn/init.c:4122,1
    - Dst: packet_id_persist_save
      Src: /src/openvpn/src/openvpn/init.c:4119,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4124
      start: 4115
    functionDepth: 0
    functionLinenumber: 4115
    functionLinenumberEnd: 4124
    functionName: do_close_packet_id
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - packet_id_persist_close
    - packet_id_persist_save
    - packet_id_free
    linkageType: ''
    returnType: void
    signature: 'static void do_close_packet_id(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ifconfig_pool_persist_close
      Src: /src/openvpn/src/openvpn/init.c:4228,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 4233
      start: 4221
    functionDepth: 0
    functionLinenumber: 4221
    functionLinenumberEnd: 4233
    functionName: do_close_ifconfig_pool_persist
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - ifconfig_pool_persist_close
    linkageType: ''
    returnType: void
    signature: 'static void do_close_ifconfig_pool_persist(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/init.c:5163,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 5165
      start: 5158
    functionDepth: 0
    functionLinenumber: 5158
    functionLinenumberEnd: 5165
    functionName: remove_pid_file
    functionSourceFile: /src/openvpn/src/openvpn/init.c
    functionUses: []
    functionsReached:
    - platform_unlink
    linkageType: ''
    returnType: void
    signature: 'void remove_pid_file(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:61,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:65,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - peer_info
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 72
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 72
    functionName: tls_peer_info_ncp_ver
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - sscanf
    - strstr
    linkageType: ''
    returnType: int
    signature: 'static int tls_peer_info_ncp_ver(const char *peer_info) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_peer_info_ncp_ver
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:85,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:86,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - peer_info
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 94
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 94
    functionName: tls_peer_supports_ncp
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - tls_peer_info_ncp_ver
    - strstr
    linkageType: ''
    returnType: bool
    signature: 'bool tls_peer_supports_ncp(const char *peer_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:200,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:200,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:203,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:203,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:201,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - o
    - ciphername
    argTypes:
    - struct options*
    - char*
    constantsTouched: []
    func_position:
      end: 206
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 206
    functionName: append_cipher_to_ncp_list
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - strlen
    - snprintf
    - gc_malloc
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void append_cipher_to_ncp_list(struct options *o, const char *ciphername) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: extract_var_peer_info
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:231,1
    - Dst: tls_peer_info_ncp_ver
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:236,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 2
    argNames:
    - peer_info
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 246
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 246
    functionName: tls_peer_ncp_list
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - extract_var_peer_info
    - tls_peer_info_ncp_ver
    linkageType: ''
    returnType: char*
    signature: 'const char *tls_peer_ncp_list(const char *peer_info, struct gc_arena
      *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:306,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:309,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:308,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - o
    - remote_ciphername
    argTypes:
    - struct options*
    - char*
    constantsTouched: []
    func_position:
      end: 313
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 313
    functionName: tls_poor_mans_ncp
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - string_alloc
    - msg
    - tls_item_in_cipher_list
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_poor_mans_ncp(struct options *o, const char *remote_ciphername) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:366,1
    - Dst: extract_var_peer_info
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:367,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:391,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:371,1
    - Dst: strsep
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:394,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:396,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:405,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:407,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 23
    argCount: 3
    argNames:
    - session
    - peer_info
    - gc
    argTypes:
    - struct tls_session*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 410
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 410
    functionName: get_p2p_ncp_cipher
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - gc_new
    - strsep
    - tls_item_in_cipher_list
    - gc_free
    - extract_var_peer_info
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'const char *get_p2p_ncp_cipher(struct tls_session *session, const
      char *peer_info, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:485,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:496,1
    - Dst: cipher_defined
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:505,1
    - Dst: p2p_ncp_set_options
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:492,1
    - Dst: get_p2p_ncp_cipher
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:489,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:507,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:510,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:511,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:514,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:522,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 18
    argCount: 2
    argNames:
    - multi
    - session
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 523
      start: 482
    functionDepth: 0
    functionLinenumber: 482
    functionLinenumberEnd: 523
    functionName: p2p_mode_ncp
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - msg
    - get_p2p_ncp_cipher
    - gc_new
    - cipher_defined
    - gc_free
    - p2p_ncp_set_options
    - cipher_kt_name
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void p2p_mode_ncp(struct tls_multi *multi, struct tls_session *session) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:560,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:560,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:560,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:562,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:565,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:567,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:570,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:573,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:573,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:576,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:577,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:577,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 2
    argNames:
    - o
    - replace
    argTypes:
    - struct options*
    - char*
    constantsTouched: []
    func_position:
      end: 580
      start: 556
    functionDepth: 0
    functionLinenumber: 556
    functionLinenumberEnd: 580
    functionName: replace_default_in_ncp_ciphers_option
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - buf_write
    - strstr
    - gc_malloc
    - buf_set_write
    - strlen
    linkageType: ''
    returnType: void
    signature: 'static void replace_default_in_ncp_ciphers_option(struct options *o,
      const char *replace) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:211,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:217,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:221,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:214,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:223,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 2
    argNames:
    - item
    - list
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 226
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 226
    functionName: tls_item_in_cipher_list
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - strcmp
    - strtok
    - free
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'bool tls_item_in_cipher_list(const char *item, const char *list) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:101,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:123,1
    - Dst: cipher_kt_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:141,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:143,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:169,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:103,1
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:140,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:157,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:166,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:178,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:167,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:184,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:189,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:139,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:162,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:175,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:149,1
    - Dst: buf_null_terminate
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:186,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:190,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:128,1
    - Dst: strtok
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:104,1
    - Dst: cipher_valid
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:134,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:136,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:187,1
    - Dst: buf_str
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:187,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 67
    argCount: 2
    argNames:
    - list
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 193
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 193
    functionName: mutate_ncp_cipher_list
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_ofb_cfb
    - buf_str
    - cipher_kt_mode_cbc
    - buf_forward_capacity
    - msg
    - buf_len
    - buf_null_terminate
    - strlen
    - strcmp
    - free
    - cipher_kt_mode_aead
    - cipher_kt_name
    - free_buf
    - cipher_valid
    - alloc_buf
    - buf_puts
    - strtok
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'char *mutate_ncp_cipher_list(const char *list, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:258,1
    - Dst: tls_peer_ncp_list
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:260,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:266,1
    - Dst: strsep
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:274,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:271,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:276,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:277,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:286,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:289,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 22
    argCount: 4
    argNames:
    - server_list
    - peer_info
    - remote_cipher
    - gc
    argTypes:
    - char*
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 291
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 291
    functionName: ncp_get_best_cipher
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - strstr
    - gc_new
    - strsep
    - tls_item_in_cipher_list
    - gc_free
    - streq
    - tls_peer_ncp_list
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'char *ncp_get_best_cipher(const char *server_list, const char *peer_info,
      const char *remote_cipher, struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:320,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:341,1
    - Dst: tls_poor_mans_ncp
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:326,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:353,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 2
    argNames:
    - c
    - found
    argTypes:
    - struct context*
    - int
    constantsTouched: []
    func_position:
      end: 359
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 359
    functionName: check_pull_client_ncp
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - tls_poor_mans_ncp
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool check_pull_client_ncp(struct context *c, const int found) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: extract_iv_proto
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:417,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:466,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:437,1
    - Dst: key_state_export_keying_material
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:459,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:460,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 40
    argCount: 3
    argNames:
    - multi
    - session
    - common_cipher
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    - char*
    constantsTouched: []
    func_position:
      end: 480
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 480
    functionName: p2p_ncp_set_options
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - msg
    - extract_iv_proto
    - cipher_kt_mode_aead
    - key_state_export_keying_material
    - strlen
    linkageType: ''
    returnType: void
    signature: 'static void p2p_ncp_set_options(struct tls_multi *multi, struct tls_session
      *session, const char *common_cipher) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: streq
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:530,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:536,1
    - Dst: ncp_expanded_ciphers
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:538,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:535,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:533,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:541,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 2
    argNames:
    - session
    - options
    argTypes:
    - struct tls_session*
    - struct options*
    constantsTouched: []
    func_position:
      end: 548
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 548
    functionName: check_session_cipher
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - gc_free
    - ncp_expanded_ciphers
    - streq
    - tls_item_in_cipher_list
    linkageType: ''
    returnType: bool
    signature: 'bool check_session_cipher(struct tls_session *session, struct options
      *options) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:633,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:641,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:643,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:641,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:644,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 2
    argNames:
    - o
    - gc
    argTypes:
    - struct options*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 645
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 645
    functionName: ncp_expanded_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - strcmp
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *ncp_expanded_ciphers(struct options *o, struct gc_arena
      *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:591,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:599,1
    - Dst: dco_get_supported_ciphers
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:602,1
    - Dst: cipher_valid
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:597,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:602,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:613,1
    - Dst: replace_default_in_ncp_ciphers_option
      Src: /src/openvpn/src/openvpn/ssl_ncp.c:626,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 628
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 628
    functionName: options_postprocess_setdefault_ncpciphers
    functionSourceFile: /src/openvpn/src/openvpn/ssl_ncp.c
    functionUses: []
    functionsReached:
    - dco_get_supported_ciphers
    - replace_default_in_ncp_ciphers_option
    - dco_enabled
    - strcmp
    - cipher_valid
    - tls_item_in_cipher_list
    linkageType: ''
    returnType: void
    signature: 'void options_postprocess_setdefault_ncpciphers(struct options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:40,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - dest
    - e
    argTypes:
    - struct client_nat_option_list*
    - struct client_nat_entry*
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: add_entry
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool add_entry(struct client_nat_option_list *dest, const struct
      client_nat_entry *e) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/clinat.c:77,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 79
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 79
    functionName: new_client_nat_list
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct client_nat_option_list*
    signature: 'struct client_nat_option_list *new_client_nat_list(struct gc_arena
      *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: add_entry
      Src: /src/openvpn/src/openvpn/clinat.c:97,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct client_nat_option_list*
    - struct client_nat_option_list*
    constantsTouched: []
    func_position:
      end: 102
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 102
    functionName: copy_client_nat_option_list
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - add_entry
    linkageType: ''
    returnType: void
    signature: 'void copy_client_nat_option_list(struct client_nat_option_list *dest,
      const struct client_nat_option_list *src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/openvpn/src/openvpn/clinat.c:85,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 3
    argCount: 2
    argNames:
    - src
    - gc
    argTypes:
    - struct client_nat_option_list*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 88
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 88
    functionName: clone_client_nat_option_list
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    linkageType: ''
    returnType: struct client_nat_option_list*
    signature: 'struct client_nat_option_list *clone_client_nat_option_list(const
      struct client_nat_option_list *src, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/clinat.c:53,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/clinat.c:65,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:56,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/clinat.c:66,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:62,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/clinat.c:67,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/clinat.c:70,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 2
    argNames:
    - list
    - msglevel
    argTypes:
    - struct client_nat_option_list*
    - int
    constantsTouched: []
    func_position:
      end: 71
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 71
    functionName: print_client_nat_list
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void print_client_nat_list(const struct client_nat_option_list *list,
      int msglevel) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/clinat.c:115,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/clinat.c:129,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:132,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/clinat.c:119,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:125,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/clinat.c:135,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:138,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/clinat.c:141,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:144,1
    - Dst: add_entry
      Src: /src/openvpn/src/openvpn/clinat.c:148,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 27
    argCount: 6
    argNames:
    - dest
    - type
    - network
    - netmask
    - foreign_network
    - msglevel
    argTypes:
    - struct client_nat_option_list*
    - char*
    - char*
    - char*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 149
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 149
    functionName: add_client_nat_to_option_list
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - strcmp
    - add_entry
    - getaddr
    - msg
    linkageType: ''
    returnType: void
    signature: 'void add_client_nat_to_option_list(struct client_nat_option_list *dest,
      const char *type, const char *network, const char *netmask, const char *foreign_network,
      int msglevel) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/clinat.c:170,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/clinat.c:186,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/clinat.c:185,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:182,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/clinat.c:188,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 4
    argNames:
    - iph
    - prefix
    - direction
    - msglevel
    argTypes:
    - struct openvpn_iphdr*
    - char*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 189
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 189
    functionName: print_pkt
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void print_pkt(struct openvpn_iphdr *iph, const char *prefix,
      const int direction, const int msglevel) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/clinat.c:196,1
    - Dst: ADD_CHECKSUM_32
      Src: /src/openvpn/src/openvpn/clinat.c:236,1
    - Dst: print_pkt
      Src: /src/openvpn/src/openvpn/clinat.c:206,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/clinat.c:204,1
    - Dst: SUB_CHECKSUM_32
      Src: /src/openvpn/src/openvpn/clinat.c:242,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/clinat.c:253,1
    - Dst: print_pkt
      Src: /src/openvpn/src/openvpn/clinat.c:255,1
    - Dst: ADJUST_CHECKSUM
      Src: /src/openvpn/src/openvpn/clinat.c:258,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/clinat.c:262,1
    - Dst: ADJUST_CHECKSUM
      Src: /src/openvpn/src/openvpn/clinat.c:264,1
    - Dst: ADJUST_CHECKSUM
      Src: /src/openvpn/src/openvpn/clinat.c:271,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/clinat.c:269,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 56
    argCount: 3
    argNames:
    - list
    - ipbuf
    - direction
    argTypes:
    - struct client_nat_option_list*
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 275
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 275
    functionName: client_nat_transform
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - SUB_CHECKSUM_32
    - ADJUST_CHECKSUM
    - check_debug_level
    - BPTR
    - BLEN
    - ADD_CHECKSUM_32
    - print_pkt
    linkageType: ''
    returnType: void
    signature: 'void client_nat_transform(const struct client_nat_option_list *list,
      struct buffer *ipbuf, const int direction) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/clinat.c:163,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 2
    argNames:
    - iph
    - prefix
    argTypes:
    - struct openvpn_iphdr*
    - char*
    constantsTouched: []
    func_position:
      end: 164
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 164
    functionName: print_checksum
    functionSourceFile: /src/openvpn/src/openvpn/clinat.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void print_checksum(struct openvpn_iphdr *iph, const char *prefix) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/packet_id.c:110,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/packet_id.c:113,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/packet_id.c:114,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/packet_id.c:120,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/packet_id.c:111,1
    - Dst: packet_id_init_recv
      Src: /src/openvpn/src/openvpn/packet_id.c:121,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct packet_id_rec*
    - struct packet_id_rec*
    constantsTouched: []
    func_position:
      end: 123
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 123
    functionName: packet_id_move_recv
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_init_recv
    - CLEAR
    - ASSERT
    - free
    linkageType: ''
    returnType: void
    signature: 'void packet_id_move_recv(struct packet_id_rec *dest, struct packet_id_rec
      *src) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CIRC_LIST_SIZE
      Src: /src/openvpn/src/openvpn/packet_id.c:148,1
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/packet_id.c:164,1
    - Dst: CIRC_LIST_PUSH
      Src: /src/openvpn/src/openvpn/packet_id.c:168,1
    - Dst: CIRC_LIST_RESET
      Src: /src/openvpn/src/openvpn/packet_id.c:159,1
    - Dst: CIRC_LIST_SIZE
      Src: /src/openvpn/src/openvpn/packet_id.c:173,1
    - Dst: CIRC_LIST_ITEM
      Src: /src/openvpn/src/openvpn/packet_id.c:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 38
    argCount: 2
    argNames:
    - p
    - pin
    argTypes:
    - struct packet_id_rec*
    - struct packet_id_net*
    constantsTouched: []
    func_position:
      end: 184
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 184
    functionName: packet_id_add
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - get_random
    - CIRC_LIST_ITEM
    - CIRC_LIST_PUSH
    - CIRC_LIST_RESET
    - CIRC_LIST_SIZE
    linkageType: ''
    returnType: void
    signature: 'void packet_id_add(struct packet_id_rec *p, const struct packet_id_net
      *pin) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/packet_id.c:471,1
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/packet_id.c:475,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/packet_id.c:480,1
    - Dst: flock
      Src: /src/openvpn/src/openvpn/packet_id.c:490,1
    - Dst: packet_id_persist_enabled
      Src: /src/openvpn/src/openvpn/packet_id.c:472,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/packet_id.c:492,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/packet_id.c:497,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/packet_id.c:502,1
    - Dst: packet_id_persist_print
      Src: /src/openvpn/src/openvpn/packet_id.c:503,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/packet_id.c:507,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/packet_id.c:513,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 37
    argCount: 2
    argNames:
    - p
    - filename
    argTypes:
    - struct packet_id_persist*
    - char*
    constantsTouched: []
    func_position:
      end: 514
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 514
    functionName: packet_id_persist_load
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_persist_enabled
    - dmsg
    - msg
    - flock
    - gc_new
    - gc_free
    - read
    - platform_open
    - packet_id_persist_print
    linkageType: ''
    returnType: void
    signature: 'void packet_id_persist_load(struct packet_id_persist *p, const char
      *filename) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/packet_id.c:130,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/packet_id.c:132,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/packet_id.c:131,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id*
    constantsTouched: []
    func_position:
      end: 134
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 134
    functionName: packet_id_free
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - free
    - CLEAR
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void packet_id_free(struct packet_id *p) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_persist_enabled
      Src: /src/openvpn/src/openvpn/packet_id.c:457,1
    - Dst: packet_id_persist_init
      Src: /src/openvpn/src/openvpn/packet_id.c:463,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/packet_id.c:461,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/packet_id.c:459,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_persist*
    constantsTouched: []
    func_position:
      end: 465
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 465
    functionName: packet_id_persist_close
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_persist_init
    - msg
    - packet_id_persist_enabled
    - close
    linkageType: ''
    returnType: void
    signature: 'void packet_id_persist_close(struct packet_id_persist *p) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/packet_id.c:330,1
    - Dst: ntohtime
      Src: /src/openvpn/src/openvpn/packet_id.c:341,1
    - Dst: ntohpid
      Src: /src/openvpn/src/openvpn/packet_id.c:334,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/packet_id.c:337,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 3
    argNames:
    - pin
    - buf
    - long_form
    argTypes:
    - struct packet_id_net*
    - struct buffer*
    - bool
    constantsTouched: []
    func_position:
      end: 344
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 344
    functionName: packet_id_read
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - ntohtime
    - buf_read
    - ntohpid
    linkageType: ''
    returnType: bool
    signature: 'bool packet_id_read(struct packet_id_net *pin, struct buffer *buf,
      bool long_form) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_send_update
      Src: /src/openvpn/src/openvpn/packet_id.c:388,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/packet_id.c:404,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/packet_id.c:399,1
    - Dst: htontime
      Src: /src/openvpn/src/openvpn/packet_id.c:394,1
    - Dst: htonpid
      Src: /src/openvpn/src/openvpn/packet_id.c:393,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/packet_id.c:411,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/packet_id.c:417,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 22
    argCount: 4
    argNames:
    - p
    - buf
    - long_form
    - prepend
    argTypes:
    - struct packet_id_send*
    - struct buffer*
    - bool
    - bool
    constantsTouched: []
    func_position:
      end: 424
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 424
    functionName: packet_id_write
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - htontime
    - buf_write
    - packet_id_send_update
    - buf_write_prepend
    - htonpid
    linkageType: ''
    returnType: bool
    signature: 'bool packet_id_write(struct packet_id_send *p, struct buffer *buf,
      bool long_form, bool prepend) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_persist_enabled
      Src: /src/openvpn/src/openvpn/packet_id.c:562,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 2
    argNames:
    - p
    - pid
    argTypes:
    - struct packet_id_persist*
    - struct packet_id*
    constantsTouched: []
    func_position:
      end: 567
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 567
    functionName: packet_id_persist_load_obj
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_persist_enabled
    linkageType: ''
    returnType: void
    signature: 'void packet_id_persist_load_obj(const struct packet_id_persist *p,
      struct packet_id *pid) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/packet_id.c:429,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/packet_id.c:436,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:431,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:439,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:434,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/packet_id.c:440,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 3
    argNames:
    - pin
    - print_timestamp
    - gc
    argTypes:
    - struct packet_id_net*
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 441
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 441
    functionName: packet_id_net_print
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - buf_printf
    - time_string
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *packet_id_net_print(const struct packet_id_net *pin, bool
      print_timestamp, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/packet_id.c:572,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:578,1
    - Dst: packet_id_persist_enabled
      Src: /src/openvpn/src/openvpn/packet_id.c:576,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:581,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:574,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/packet_id.c:583,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:587,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 2
    argNames:
    - p
    - gc
    argTypes:
    - struct packet_id_persist*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 589
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 589
    functionName: packet_id_persist_print
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - buf_printf
    - packet_id_persist_enabled
    - time_string
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *packet_id_persist_print(const struct packet_id_persist
      *p, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_send_update_epoch
      Src: /src/openvpn/src/openvpn/packet_id.c:697,1
    - Dst: htonll
      Src: /src/openvpn/src/openvpn/packet_id.c:709,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/packet_id.c:711,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 3
    argNames:
    - p
    - epoch
    - buf
    argTypes:
    - struct packet_id_send*
    - uint16_t
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 712
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 712
    functionName: packet_id_write_epoch
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_send_update_epoch
    - htonll
    - buf_write
    linkageType: ''
    returnType: bool
    signature: 'bool packet_id_write_epoch(struct packet_id_send *p, uint16_t epoch,
      struct buffer *buf) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CIRC_LIST_SIZE
      Src: /src/openvpn/src/openvpn/packet_id.c:198,1
    - Dst: CIRC_LIST_ITEM
      Src: /src/openvpn/src/openvpn/packet_id.c:200,1
    - Dst: CIRC_LIST_ITEM
      Src: /src/openvpn/src/openvpn/packet_id.c:211,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_rec*
    constantsTouched: []
    func_position:
      end: 216
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 216
    functionName: packet_id_reap
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - CIRC_LIST_SIZE
    - CIRC_LIST_ITEM
    linkageType: ''
    returnType: void
    signature: 'void packet_id_reap(struct packet_id_rec *p) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_debug
      Src: /src/openvpn/src/openvpn/packet_id.c:228,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/packet_id.c:230,1
    - Dst: CIRC_LIST_SIZE
      Src: /src/openvpn/src/openvpn/packet_id.c:263,1
    - Dst: packet_id_debug
      Src: /src/openvpn/src/openvpn/packet_id.c:260,1
    - Dst: packet_id_debug
      Src: /src/openvpn/src/openvpn/packet_id.c:265,1
    - Dst: CIRC_LIST_ITEM
      Src: /src/openvpn/src/openvpn/packet_id.c:270,1
    - Dst: packet_id_debug
      Src: /src/openvpn/src/openvpn/packet_id.c:278,1
    - Dst: packet_id_debug
      Src: /src/openvpn/src/openvpn/packet_id.c:285,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 41
    argCount: 2
    argNames:
    - p
    - pin
    argTypes:
    - struct packet_id_rec*
    - struct packet_id_net*
    constantsTouched: []
    func_position:
      end: 314
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 314
    functionName: packet_id_test
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - CIRC_LIST_SIZE
    - CIRC_LIST_ITEM
    - packet_id_debug
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool packet_id_test(struct packet_id_rec *p, const struct packet_id_net
      *pin) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_persist_enabled
      Src: /src/openvpn/src/openvpn/packet_id.c:520,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/packet_id.c:538,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/packet_id.c:533,1
    - Dst: lseek
      Src: /src/openvpn/src/openvpn/packet_id.c:530,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/packet_id.c:526,1
    - Dst: packet_id_persist_print
      Src: /src/openvpn/src/openvpn/packet_id.c:539,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/packet_id.c:543,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/packet_id.c:550,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/packet_id.c:554,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 30
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_persist*
    constantsTouched: []
    func_position:
      end: 556
      start: 517
    functionDepth: 0
    functionLinenumber: 517
    functionLinenumberEnd: 556
    functionName: packet_id_persist_save
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - lseek
    - packet_id_persist_enabled
    - dmsg
    - msg
    - gc_new
    - gc_free
    - write
    - packet_id_persist_print
    linkageType: ''
    returnType: void
    signature: 'void packet_id_persist_save(struct packet_id_persist *p) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 2
    argNames:
    - p
    - long_form
    argTypes:
    - struct packet_id_send*
    - bool
    constantsTouched: []
    func_position:
      end: 367
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 367
    functionName: packet_id_send_update
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool packet_id_send_update(struct packet_id_send *p, bool long_form) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/packet_id.c:600,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/packet_id.c:607,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/packet_id.c:601,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/packet_id.c:608,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:610,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:611,1
    - Dst: CIRC_LIST_ITEM
      Src: /src/openvpn/src/openvpn/packet_id.c:618,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:643,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:645,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:648,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:655,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:663,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/packet_id.c:651,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/packet_id.c:671,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/packet_id.c:671,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/packet_id.c:672,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 46
    argCount: 5
    argNames:
    - msglevel
    - p
    - pin
    - message
    - value
    argTypes:
    - int
    - struct packet_id_rec*
    - struct packet_id_net*
    - char*
    - packet_id_print_type
    constantsTouched: []
    func_position:
      end: 673
      start: 593
    functionDepth: 0
    functionLinenumber: 593
    functionLinenumberEnd: 673
    functionName: packet_id_debug_print
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - msg
    - CIRC_LIST_ITEM
    - gc_new
    - CLEAR
    - gc_free
    - gettimeofday
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void packet_id_debug_print(int msglevel, const struct packet_id_rec
      *p, const struct packet_id_net *pin, const char *message, packet_id_print_type
      value) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_send*
    constantsTouched: []
    func_position:
      end: 382
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 382
    functionName: packet_id_send_update_epoch
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool packet_id_send_update_epoch(struct packet_id_send *p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/packet_id.c:681,1
    - Dst: ntohll
      Src: /src/openvpn/src/openvpn/packet_id.c:686,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - pin
    - buf
    argTypes:
    - struct packet_id_net*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 692
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 692
    functionName: packet_id_read_epoch
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - ntohll
    - buf_read
    linkageType: ''
    returnType: uint16_t
    signature: 'uint16_t packet_id_read_epoch(struct packet_id_net *pin, struct buffer
      *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/packet_id.c:86,1
    - Dst: CIRC_LIST_ALLOC
      Src: /src/openvpn/src/openvpn/packet_id.c:88,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/packet_id.c:87,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 5
    argNames:
    - rec
    - seq_backtrack
    - time_backtrack
    - name
    - unit
    argTypes:
    - struct packet_id_rec*
    - int
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 93
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 93
    functionName: packet_id_init_recv
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - CIRC_LIST_ALLOC
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void packet_id_init_recv(struct packet_id_rec *rec, int seq_backtrack,
      int time_backtrack, const char *name, int unit) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_persist*
    constantsTouched: []
    func_position:
      end: 451
      start: 444
    functionDepth: 0
    functionLinenumber: 444
    functionLinenumberEnd: 451
    functionName: packet_id_persist_init
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void packet_id_persist_init(struct packet_id_persist *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/packet_id.c:97,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/packet_id.c:101,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/packet_id.c:102,1
    - Dst: packet_id_init_recv
      Src: /src/openvpn/src/openvpn/packet_id.c:104,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 5
    argNames:
    - p
    - seq_backtrack
    - time_backtrack
    - name
    - unit
    argTypes:
    - struct packet_id*
    - int
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 105
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 105
    functionName: packet_id_init
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_init_recv
    - CLEAR
    - ASSERT
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void packet_id_init(struct packet_id *p, int seq_backtrack, int time_backtrack,
      const char *name, int unit) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlikely
      Src: /src/openvpn/src/openvpn/packet_id.c:72,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/packet_id.c:72,1
    - Dst: packet_id_debug_print
      Src: /src/openvpn/src/openvpn/packet_id.c:74,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 5
    argNames:
    - msglevel
    - p
    - pin
    - message
    - value
    argTypes:
    - int
    - struct packet_id_rec*
    - struct packet_id_net*
    - char*
    - uint64_t
    constantsTouched: []
    func_position:
      end: 77
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 77
    functionName: packet_id_debug
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_debug_print
    - unlikely
    - check_debug_level
    linkageType: ''
    returnType: void
    signature: 'static inline void packet_id_debug(int msglevel, const struct packet_id_rec
      *p, const struct packet_id_net *pin, const char *message, uint64_t value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/interval.c:36,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 3
    argNames:
    - top
    - horizon
    - refresh
    argTypes:
    - struct interval*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 39
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 39
    functionName: interval_init
    functionSourceFile: /src/openvpn/src/openvpn/interval.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void interval_init(struct interval *top, int horizon, int refresh) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_remaining
      Src: /src/openvpn/src/openvpn/interval.c:52,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/interval.c:57,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/interval.c:75,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 3
    argNames:
    - et
    - tv
    - et_const_retry
    argTypes:
    - struct event_timeout*
    - struct timeval*
    - int
    constantsTouched: []
    func_position:
      end: 82
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 82
    functionName: event_timeout_trigger
    functionSourceFile: /src/openvpn/src/openvpn/interval.c
    functionUses: []
    functionsReached:
    - event_timeout_remaining
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'bool event_timeout_trigger(struct event_timeout *et, struct timeval
      *tv, const int et_const_retry) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/dco_win.c:53,1
    - Dst: Sleep
      Src: /src/openvpn/src/openvpn/dco_win.c:58,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:57,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - idx
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 60
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 60
    functionName: dco_wait_ready
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - Sleep
    - msg
    - GetIpInterfaceEntry
    linkageType: ''
    returnType: void
    signature: 'static void dco_wait_ready(DWORD idx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:134,1
    - Dst: tun_open_device
      Src: /src/openvpn/src/openvpn/dco_win.c:142,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dco_win.c:140,1
    - Dst: CreateEvent
      Src: /src/openvpn/src/openvpn/dco_win.c:131,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco_win.c:143,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:148,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:150,1
    - Dst: dco_wait_ready
      Src: /src/openvpn/src/openvpn/dco_win.c:153,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 2
    argNames:
    - dco
    - dev_node
    argTypes:
    - dco_context_t*
    - char*
    constantsTouched: []
    func_position:
      end: 154
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 154
    functionName: ovpn_dco_init_mp
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - CreateEvent
    - dco_wait_ready
    - tun_open_device
    - msg
    - gc_new
    - gc_free
    - DeviceIoControl
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void ovpn_dco_init_mp(dco_context_t *dco, const char *dev_node) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dco_p2p_start_vpn
      Src: /src/openvpn/src/openvpn/dco_win.c:196,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:204,1
    - Dst: ovpn_dco_init_mp
      Src: /src/openvpn/src/openvpn/dco_win.c:200,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 3
    argNames:
    - mode
    - dco
    - dev_node
    argTypes:
    - int
    - dco_context_t*
    - char*
    constantsTouched: []
    func_position:
      end: 208
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 208
    functionName: ovpn_dco_init
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - ASSERT
    - ovpn_dco_init_mp
    - dco_p2p_start_vpn
    linkageType: ''
    returnType: bool
    signature: 'bool ovpn_dco_init(int mode, dco_context_t *dco, const char *dev_node) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpn/dco_win.c:603,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:622,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/dco_win.c:612,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/dco_win.c:608,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - msglevel
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 624
      start: 599
    functionDepth: 0
    functionLinenumber: 599
    functionLinenumberEnd: 624
    functionName: dco_available
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - GetLastError
    - CreateFile
    - msg
    - CloseHandle
    linkageType: ''
    returnType: bool
    signature: 'bool dco_available(int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dco_get_version
      Src: /src/openvpn/src/openvpn/dco_win.c:630,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/dco_win.c:632,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/dco_win.c:633,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/dco_win.c:634,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 640
      start: 626
    functionDepth: 0
    functionLinenumber: 626
    functionLinenumberEnd: 640
    functionName: dco_version_string
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - buf_printf
    - dco_get_version
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *dco_version_string(struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:168,1
    - Dst: dco_wait_ready
      Src: /src/openvpn/src/openvpn/dco_win.c:176,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:170,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 177
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 177
    functionName: dco_p2p_start_vpn
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - dco_wait_ready
    - DeviceIoControl
    linkageType: ''
    returnType: void
    signature: 'void dco_p2p_start_vpn(struct tuntap *tt) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_win.c:74,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:94,1
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpn/dco_win.c:84,1
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpn/dco_win.c:78,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/dco_win.c:105,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:108,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - version
    argTypes:
    - OVPN_VERSION*
    constantsTouched: []
    func_position:
      end: 111
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 111
    functionName: dco_get_version
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - CloseHandle
    - msg
    - CreateFile
    - CLEAR
    - DeviceIoControl
    linkageType: ''
    returnType: bool
    signature: 'static bool dco_get_version(OVPN_VERSION *version) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:213,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - ctx
    - dev
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    - char*
    constantsTouched: []
    func_position:
      end: 215
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 215
    functionName: open_tun_dco
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int open_tun_dco(struct tuntap *tt, openvpn_net_ctx_t *ctx, const
      char *dev) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:567,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 3
    argNames:
    - dco
    - peerid
    - slot
    argTypes:
    - dco_context_t*
    - unsigned int
    - dco_key_slot_t
    constantsTouched: []
    func_position:
      end: 571
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 571
    functionName: dco_del_key
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: int
    signature: 'int dco_del_key(dco_context_t *dco, unsigned int peerid, dco_key_slot_t
      slot) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetOverlappedResult
      Src: /src/openvpn/src/openvpn/dco_win.c:657,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:660,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:668,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - dco
    - queued
    argTypes:
    - dco_context_t*
    - bool
    constantsTouched: []
    func_position:
      end: 670
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 670
    functionName: dco_handle_overlapped_success
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - GetOverlappedResult
    linkageType: ''
    returnType: void
    signature: 'static void dco_handle_overlapped_success(dco_context_t *dco, bool
      queued) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/dco_win.c:759,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/dco_win.c:764,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:764,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/dco_win.c:768,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:766,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:774,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:779,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/dco_win.c:779,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:783,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:788,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:792,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/dco_win.c:788,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 30
    argCount: 3
    argNames:
    - dco
    - es
    - arg
    argTypes:
    - dco_context_t*
    - struct event_set*
    - void*
    constantsTouched: []
    func_position:
      end: 795
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 795
    functionName: dco_event_set
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - SetEvent
    - GetLastError
    - msg
    - DeviceIoControl
    - ASSERT
    - event_ctl
    - ResetEvent
    linkageType: ''
    returnType: void
    signature: 'void dco_event_set(dco_context_t *dco, struct event_set *es, void
      *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dco_win.c:848,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:858,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:852,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/dco_win.c:852,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:855,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco_win.c:861,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 4
    argNames:
    - dco
    - dst
    - netbits
    - peer_id
    argTypes:
    - dco_context_t*
    - struct in6_addr
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 862
      start: 845
    functionDepth: 0
    functionLinenumber: 845
    functionLinenumberEnd: 862
    functionName: dco_win_add_iroute_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - print_in6_addr
    - DeviceIoControl
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void dco_win_add_iroute_ipv6(dco_context_t *dco, struct in6_addr dst,
      unsigned int netbits, unsigned int peer_id) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetProcAddress
      Src: /src/openvpn/src/openvpn/dco_win.c:224,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:229,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/dco_win.c:246,1
    - Dst: get_overlapped_result_ex
      Src: /src/openvpn/src/openvpn/dco_win.c:240,1
    - Dst: GetModuleHandle
      Src: /src/openvpn/src/openvpn/dco_win.c:224,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:250,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/dco_win.c:251,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/dco_win.c:255,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/dco_win.c:261,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:265,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/dco_win.c:266,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 26
    argCount: 4
    argNames:
    - handle
    - ov
    - timeout
    - sig_info
    argTypes:
    - HANDLE
    - OVERLAPPED*
    - int
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 267
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 267
    functionName: dco_connect_wait
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - GetModuleHandle
    - management_sleep
    - msg
    - GetLastError
    - register_signal
    - get_signal
    - GetProcAddress
    - get_overlapped_result_ex
    linkageType: ''
    returnType: void
    signature: 'static void dco_connect_wait(HANDLE handle, OVERLAPPED *ov, int timeout,
      struct signal_info *sig_info) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:576,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:591,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:593,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - dco
    - peer_id
    argTypes:
    - dco_context_t*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 597
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 597
    functionName: dco_swap_keys
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - DeviceIoControl
    linkageType: ''
    returnType: int
    signature: 'int dco_swap_keys(dco_context_t *dco, unsigned int peer_id) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:677,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/dco_win.c:688,1
    - Dst: dco_handle_overlapped_success
      Src: /src/openvpn/src/openvpn/dco_win.c:686,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:695,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:688,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/dco_win.c:695,1
    - Dst: dco_handle_overlapped_success
      Src: /src/openvpn/src/openvpn/dco_win.c:699,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpn/dco_win.c:703,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:704,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 711
      start: 672
    functionDepth: 0
    functionLinenumber: 672
    functionLinenumberEnd: 711
    functionName: dco_do_read
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - SetLastError
    - ASSERT
    - dco_handle_overlapped_success
    - ResetEvent
    linkageType: ''
    returnType: int
    signature: 'int dco_do_read(dco_context_t *dco) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BCryptOpenAlgorithmProvider
      Src: /src/openvpn/src/openvpn/dco_win.c:807,1
    - Dst: BCRYPT_SUCCESS
      Src: /src/openvpn/src/openvpn/dco_win.c:808,1
    - Dst: BCryptCloseAlgorithmProvider
      Src: /src/openvpn/src/openvpn/dco_win.c:810,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 817
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 817
    functionName: dco_get_supported_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - BCRYPT_SUCCESS
    - BCryptOpenAlgorithmProvider
    - BCryptCloseAlgorithmProvider
    linkageType: ''
    returnType: char*
    signature: 'const char *dco_get_supported_ciphers(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dco_win.c:867,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:877,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:874,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:871,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/dco_win.c:871,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco_win.c:880,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 3
    argNames:
    - dco
    - dst
    - netbits
    argTypes:
    - dco_context_t*
    - in_addr_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 881
      start: 864
    functionDepth: 0
    functionLinenumber: 864
    functionLinenumberEnd: 881
    functionName: dco_win_del_iroute_ipv4
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - print_in_addr_t
    - gc_new
    - DeviceIoControl
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void dco_win_del_iroute_ipv4(dco_context_t *dco, in_addr_t dst, unsigned
      int netbits) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dco_win.c:886,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:896,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:893,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:890,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/dco_win.c:890,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco_win.c:899,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 3
    argNames:
    - dco
    - dst
    - netbits
    argTypes:
    - dco_context_t*
    - struct in6_addr
    - unsigned int
    constantsTouched: []
    func_position:
      end: 900
      start: 883
    functionDepth: 0
    functionLinenumber: 883
    functionLinenumberEnd: 900
    functionName: dco_win_del_iroute_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - print_in6_addr
    - DeviceIoControl
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void dco_win_del_iroute_ipv6(dco_context_t *dco, struct in6_addr dst,
      unsigned int netbits) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:281,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/dco_win.c:308,1
    - Dst: addr_family_name
      Src: /src/openvpn/src/openvpn/dco_win.c:297,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/dco_win.c:304,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:296,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:315,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:318,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 22
    argCount: 2
    argNames:
    - handle
    - sock
    argTypes:
    - HANDLE
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 320
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 320
    functionName: dco_mp_start_vpn
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - memcpy
    - DeviceIoControl
    - addr_family_name
    linkageType: ''
    returnType: void
    signature: 'void dco_mp_start_vpn(HANDLE handle, struct link_socket *sock) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:417,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:455,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:457,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/dco_win.c:438,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/dco_win.c:434,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 20
    argCount: 7
    argNames:
    - dco
    - peerid
    - sd
    - localaddr
    - remoteaddr
    - vpn_ipv4
    - vpn_ipv6
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - struct sockaddr*
    - struct sockaddr*
    - struct in_addr*
    - struct in6_addr*
    constantsTouched: []
    func_position:
      end: 461
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 461
    functionName: dco_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - memcpy
    - DeviceIoControl
    linkageType: ''
    returnType: int
    signature: 'int dco_new_peer(dco_context_t *dco, unsigned int peerid, int sd,
      struct sockaddr *localaddr, struct sockaddr *remoteaddr, struct in_addr *vpn_ipv4,
      struct in6_addr *vpn_ipv6) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:493,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:516,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:514,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 5
    argNames:
    - dco
    - peerid
    - keepalive_interval
    - keepalive_timeout
    - mss
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 521
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 521
    functionName: dco_set_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - DeviceIoControl
    linkageType: ''
    returnType: int
    signature: 'int dco_set_peer(dco_context_t *dco, unsigned int peerid, int keepalive_interval,
      int keepalive_timeout, int mss) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 3
    argNames:
    - dco
    - m
    - raise_sigusr1_on_err
    argTypes:
    - dco_context_t*
    - struct multi_context*
    - bool
    constantsTouched: []
    func_position:
      end: 719
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 719
    functionName: dco_get_peer_stats_multi
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context
      *m, const bool raise_sigusr1_on_err) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dco_get_version
      Src: /src/openvpn/src/openvpn/dco_win.c:823,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 824
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 824
    functionName: dco_win_supports_multipeer
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - dco_get_version
    linkageType: ''
    returnType: bool
    signature: 'bool dco_win_supports_multipeer(void) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:325,1
    - Dst: addr_family_name
      Src: /src/openvpn/src/openvpn/dco_win.c:361,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:394,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_win.c:397,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:360,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:398,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/dco_win.c:400,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:403,1
    - Dst: dco_connect_wait
      Src: /src/openvpn/src/openvpn/dco_win.c:407,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/dco_win.c:407,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 53
    argCount: 4
    argNames:
    - handle
    - ov
    - sock
    - sig_info
    argTypes:
    - HANDLE
    - OVERLAPPED*
    - struct link_socket*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 410
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 410
    functionName: dco_p2p_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - GetLastError
    - CLEAR
    - addr_family_name
    - ASSERT
    - DeviceIoControl
    - get_server_poll_remaining_time
    - dco_connect_wait
    linkageType: ''
    returnType: void
    signature: 'void dco_p2p_new_peer(HANDLE handle, OVERLAPPED *ov, struct link_socket
      *sock, struct signal_info *sig_info) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:466,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:483,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:481,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 2
    argNames:
    - dco
    - peerid
    argTypes:
    - dco_context_t*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 487
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 487
    functionName: dco_del_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - DeviceIoControl
    linkageType: ''
    returnType: int
    signature: 'int dco_del_peer(dco_context_t *dco, unsigned int peerid) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:530,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/dco_win.c:534,1
    - Dst: CopyMemory
      Src: /src/openvpn/src/openvpn/dco_win.c:544,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpn/dco_win.c:537,1
    - Dst: dco_get_cipher
      Src: /src/openvpn/src/openvpn/dco_win.c:539,1
    - Dst: CopyMemory
      Src: /src/openvpn/src/openvpn/dco_win.c:546,1
    - Dst: CopyMemory
      Src: /src/openvpn/src/openvpn/dco_win.c:548,1
    - Dst: CopyMemory
      Src: /src/openvpn/src/openvpn/dco_win.c:550,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_win.c:552,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:556,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:559,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 9
    argNames:
    - dco
    - peerid
    - keyid
    - slot
    - encrypt_key
    - encrypt_iv
    - decrypt_key
    - decrypt_iv
    - ciphername
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - dco_key_slot_t
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 563
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 563
    functionName: dco_new_key
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - cipher_kt_key_size
    - msg
    - dco_get_cipher
    - DeviceIoControl
    - ASSERT
    - ZeroMemory
    - CopyMemory
    linkageType: ''
    returnType: int
    signature: 'int dco_new_key(dco_context_t *dco, unsigned int peerid, int keyid,
      dco_key_slot_t slot, const uint8_t *encrypt_key, const uint8_t *encrypt_iv,
      const uint8_t *decrypt_key, const uint8_t *decrypt_iv, const char *ciphername) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tuntap_defined
      Src: /src/openvpn/src/openvpn/dco_win.c:726,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpn/dco_win.c:732,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:735,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:738,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - c
    - raise_sigusr1_on_err
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 748
      start: 721
    functionDepth: 0
    functionLinenumber: 721
    functionLinenumberEnd: 748
    functionName: dco_get_peer_stats
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - ZeroMemory
    - DeviceIoControl
    - msg
    - tuntap_defined
    linkageType: ''
    returnType: int
    signature: 'int dco_get_peer_stats(struct context *c, const bool raise_sigusr1_on_err) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dco_win.c:829,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:839,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/dco_win.c:836,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_win.c:833,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/dco_win.c:833,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco_win.c:842,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 4
    argNames:
    - dco
    - dst
    - netbits
    - peer_id
    argTypes:
    - dco_context_t*
    - in_addr_t
    - unsigned int
    - unsigned int
    constantsTouched: []
    func_position:
      end: 843
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 843
    functionName: dco_win_add_iroute_ipv4
    functionSourceFile: /src/openvpn/src/openvpn/dco_win.c
    functionUses: []
    functionsReached:
    - msg
    - print_in_addr_t
    - gc_new
    - DeviceIoControl
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void dco_win_add_iroute_ipv4(dco_context_t *dco, in_addr_t dst, unsigned
      int netbits, unsigned int peer_id) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - system_time
    argTypes:
    - time_t
    constantsTouched: []
    func_position:
      end: 66
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 66
    functionName: update_now
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void update_now(const time_t system_time) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/otime.c:111,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/otime.c:133,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/otime.c:127,1
    - Dst: localtime
      Src: /src/openvpn/src/openvpn/otime.c:125,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/otime.c:121,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/otime.c:136,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 4
    argNames:
    - t
    - usec
    - show_usec
    - gc
    argTypes:
    - time_t
    - long
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 137
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 137
    functionName: time_string
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - gettimeofday
    - alloc_buf_gc
    - localtime
    linkageType: ''
    returnType: char*
    signature: 'const char *time_string(time_t t, long usec, bool show_usec, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/otime.c:85,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/otime.c:86,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/otime.c:89,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 2
    argNames:
    - tv
    - gc
    argTypes:
    - struct timeval*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 90
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 90
    functionName: tv_string
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *tv_string(const struct timeval *tv, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/otime.c:164,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - struct frequency_limit*
    constantsTouched: []
    func_position:
      end: 165
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 165
    functionName: frequency_limit_free
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void frequency_limit_free(struct frequency_limit *f) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: update_now
      Src: /src/openvpn/src/openvpn/otime.c:72,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 1
    argNames:
    - tv
    argTypes:
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 77
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 77
    functionName: update_now_usec
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached:
    - update_now
    linkageType: ''
    returnType: void
    signature: 'void update_now_usec(struct timeval *tv) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - f
    argTypes:
    - struct frequency_limit*
    constantsTouched: []
    func_position:
      end: 185
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 185
    functionName: frequency_limit_event_allowed
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool frequency_limit_event_allowed(struct frequency_limit *f) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/otime.c:100,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 2
    argNames:
    - tv
    - gc
    argTypes:
    - struct timeval*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 104
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 104
    functionName: tv_string_abs
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached:
    - time_string
    linkageType: ''
    returnType: char*
    signature: 'const char *tv_string_abs(const struct timeval *tv, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/otime.c:151,1
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/otime.c:153,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - max
    - per
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 159
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 159
    functionName: frequency_limit_init
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached:
    - ASSERT
    - ALLOC_OBJ
    linkageType: ''
    returnType: struct frequency_limit*
    signature: 'struct frequency_limit *frequency_limit_init(int max, int per) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/openvpn/src/openvpn/otime.c:196,1
    - Dst: gettimeofday
      Src: /src/openvpn/src/openvpn/otime.c:197,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/otime.c:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 205
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 205
    functionName: time_test
    functionSourceFile: /src/openvpn/src/openvpn/otime.c
    functionUses: []
    functionsReached:
    - gettimeofday
    - time
    - msg
    linkageType: ''
    returnType: void
    signature: 'void time_test(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/session_id.h:50,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - sid1
    - sid2
    argTypes:
    - struct session_id*
    - struct session_id*
    constantsTouched: []
    func_position:
      end: 51
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 51
    functionName: session_id_equal
    functionSourceFile: /src/openvpn/src/openvpn/session_id.h
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: bool
    signature: 'static inline bool session_id_equal(const struct session_id *sid1,
      const struct session_id *sid2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/session_id.h:74,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - sid
    - buf
    argTypes:
    - struct session_id*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: session_id_write
    functionSourceFile: /src/openvpn/src/openvpn/session_id.h
    functionUses: []
    functionsReached:
    - buf_write
    linkageType: ''
    returnType: bool
    signature: 'static inline bool session_id_write(const struct session_id *sid,
      struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/session_id.h:62,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - sid
    - buf
    argTypes:
    - struct session_id*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 63
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 63
    functionName: session_id_read
    functionSourceFile: /src/openvpn/src/openvpn/session_id.h
    functionUses: []
    functionsReached:
    - buf_read
    linkageType: ''
    returnType: bool
    signature: 'static inline bool session_id_read(struct session_id *sid, struct
      buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/session_id.h:68,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - sid
    - buf
    argTypes:
    - struct session_id*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 69
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 69
    functionName: session_id_write_prepend
    functionSourceFile: /src/openvpn/src/openvpn/session_id.h
    functionUses: []
    functionsReached:
    - buf_write_prepend
    linkageType: ''
    returnType: bool
    signature: 'static inline bool session_id_write_prepend(const struct session_id
      *sid, struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/session_id.h:56,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - sid1
    argTypes:
    - struct session_id*
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: session_id_defined
    functionSourceFile: /src/openvpn/src/openvpn/session_id.h
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: bool
    signature: 'static inline bool session_id_defined(const struct session_id *sid1) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 165
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 165
    functionName: event_free
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_free(struct event_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - es
    - event
    argTypes:
    - struct event_set*
    - event_t
    constantsTouched: []
    func_position:
      end: 177
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 177
    functionName: event_del
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_del(struct event_set *es, event_t event) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/event.h:189,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/event.h:191,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 4
    argNames:
    - es
    - tv
    - out
    - outlen
    argTypes:
    - struct event_set*
    - struct timeval*
    - struct event_set_return*
    - int
    constantsTouched: []
    func_position:
      end: 193
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 193
    functionName: event_wait
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached:
    - perf_pop
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'static inline int event_wait(struct event_set *es, const struct timeval
      *tv, struct event_set_return *out, int outlen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 4
    argNames:
    - es
    - event
    - rwflags
    - arg
    argTypes:
    - struct event_set*
    - event_t
    - unsigned int
    - void*
    constantsTouched: []
    func_position:
      end: 183
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 183
    functionName: event_ctl
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_ctl(struct event_set *es, event_t event,
      unsigned int rwflags, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct event_set*
    constantsTouched: []
    func_position:
      end: 171
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 171
    functionName: event_reset
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_reset(struct event_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - esr
    argTypes:
    - struct event_set_return*
    constantsTouched: []
    func_position:
      end: 200
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 200
    functionName: event_set_return_init
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void event_set_return_init(struct event_set_return *esr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HANDLE_DEFINED
      Src: /src/openvpn/src/openvpn/event.h:207,1
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/event.h:209,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - es
    - arg
    argTypes:
    - struct event_set*
    - void*
    constantsTouched: []
    func_position:
      end: 211
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 211
    functionName: wait_signal
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached:
    - event_ctl
    - HANDLE_DEFINED
    linkageType: ''
    returnType: void
    signature: 'static inline void wait_signal(struct event_set *es, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 2
    argNames:
    - es
    - arg
    argTypes:
    - struct event_set*
    - void*
    constantsTouched: []
    func_position:
      end: 218
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 218
    functionName: wait_signal
    functionSourceFile: /src/openvpn/src/openvpn/event.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void wait_signal(struct event_set *es, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: nl_socket_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:465,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/dco_linux.c:471,1
    - Dst: nl_cb_put
      Src: /src/openvpn/src/openvpn/dco_linux.c:469,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 472
      start: 462
    functionDepth: 0
    functionLinenumber: 462
    functionLinenumberEnd: 472
    functionName: ovpn_dco_uninit_netlink
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nl_socket_free
    - nl_cb_put
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void ovpn_dco_uninit_netlink(dco_context_t *dco) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: nlmsg_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:778,1
    - Dst: nlmsg_hdr
      Src: /src/openvpn/src/openvpn/dco_linux.c:780,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:807,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:872,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:877,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:882,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:898,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:826,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:850,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:804,1
    - Dst: nlmsg_hdr
      Src: /src/openvpn/src/openvpn/dco_linux.c:778,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:784,1
    - Dst: nla_parse
      Src: /src/openvpn/src/openvpn/dco_linux.c:788,1
    - Dst: genlmsg_attrdata
      Src: /src/openvpn/src/openvpn/dco_linux.c:788,1
    - Dst: genlmsg_attrlen
      Src: /src/openvpn/src/openvpn/dco_linux.c:789,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:849,1
    - Dst: nla_parse_nested
      Src: /src/openvpn/src/openvpn/dco_linux.c:831,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:852,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:864,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:887,1
    - Dst: genlmsg_valid_hdr
      Src: /src/openvpn/src/openvpn/dco_linux.c:782,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:791,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:800,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:834,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:840,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:845,1
    - Dst: nla_parse_nested
      Src: /src/openvpn/src/openvpn/dco_linux.c:869,1
    - Dst: nla_get_u16
      Src: /src/openvpn/src/openvpn/dco_linux.c:886,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:889,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 64
    argCount: 2
    argNames:
    - msg
    - arg
    argTypes:
    - struct nl_msg*
    - void*
    constantsTouched: []
    func_position:
      end: 904
      start: 773
    functionDepth: 0
    functionLinenumber: 773
    functionLinenumberEnd: 904
    functionName: ovpn_handle_msg
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nla_parse
    - nla_get_u32
    - genlmsg_valid_hdr
    - msg
    - nla_get_u16
    - nla_parse_nested
    - nlmsg_data
    - genlmsg_attrlen
    - genlmsg_attrdata
    - nlmsg_hdr
    linkageType: ''
    returnType: int
    signature: 'static int ovpn_handle_msg(struct nl_msg *msg, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:909,1
    - Dst: ovpn_nl_recvmsgs
      Src: /src/openvpn/src/openvpn/dco_linux.c:912,1
    - Dst: nl_cb_set
      Src: /src/openvpn/src/openvpn/dco_linux.c:910,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 913
      start: 906
    functionDepth: 0
    functionLinenumber: 906
    functionLinenumberEnd: 913
    functionName: dco_do_read
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - ovpn_nl_recvmsgs
    - msg
    - nl_cb_set
    linkageType: ''
    returnType: int
    signature: 'int dco_do_read(dco_context_t *dco) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_nla_get_uint
      Src: /src/openvpn/src/openvpn/dco_linux.c:934,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:935,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:940,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:947,1
    - Dst: ovpn_nla_get_uint
      Src: /src/openvpn/src/openvpn/dco_linux.c:946,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:952,1
    - Dst: ovpn_nla_get_uint
      Src: /src/openvpn/src/openvpn/dco_linux.c:958,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:959,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:964,1
    - Dst: ovpn_nla_get_uint
      Src: /src/openvpn/src/openvpn/dco_linux.c:970,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:971,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:976,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 3
    argNames:
    - c2
    - tb
    - id
    argTypes:
    - struct context_2*
    - struct nlattr*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 979
      start: 929
    functionDepth: 0
    functionLinenumber: 929
    functionLinenumberEnd: 979
    functionName: dco_update_peer_stat
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - msg
    - ovpn_nla_get_uint
    linkageType: ''
    returnType: void
    signature: 'static void dco_update_peer_stat(struct context_2 *c2, struct nlattr
      *tb[], uint32_t id) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1025,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:1033,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:1031,1
    - Dst: nlmsg_hdr
      Src: /src/openvpn/src/openvpn/dco_linux.c:1029,1
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:1027,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1037,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/dco_linux.c:1040,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 3
    argNames:
    - dco
    - m
    - raise_sigusr1_on_err
    argTypes:
    - dco_context_t*
    - struct multi_context*
    - bool
    constantsTouched: []
    func_position:
      end: 1043
      start: 1021
    functionDepth: 0
    functionLinenumber: 1021
    functionLinenumberEnd: 1043
    functionName: dco_get_peer_stats_multi
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - msg
    - nlmsg_hdr
    - register_signal
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_get_peer_stats_multi(dco_context_t *dco, struct multi_context
      *m, const bool raise_sigusr1_on_err) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:477,1
    - Dst: nl_socket_add_membership
      Src: /src/openvpn/src/openvpn/dco_linux.c:488,1
    - Dst: nl_geterror
      Src: /src/openvpn/src/openvpn/dco_linux.c:482,1
    - Dst: ovpn_get_mcast_id
      Src: /src/openvpn/src/openvpn/dco_linux.c:478,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:482,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:491,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 493
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 493
    functionName: ovpn_dco_register
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - ovpn_get_mcast_id
    - msg
    - nl_socket_add_membership
    - nl_geterror
    linkageType: ''
    returnType: void
    signature: 'static void ovpn_dco_register(dco_context_t *dco) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: nlmsg_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:985,1
    - Dst: nlmsg_hdr
      Src: /src/openvpn/src/openvpn/dco_linux.c:985,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:987,1
    - Dst: nla_parse
      Src: /src/openvpn/src/openvpn/dco_linux.c:989,1
    - Dst: genlmsg_attrdata
      Src: /src/openvpn/src/openvpn/dco_linux.c:989,1
    - Dst: genlmsg_attrlen
      Src: /src/openvpn/src/openvpn/dco_linux.c:990,1
    - Dst: nla_parse_nested
      Src: /src/openvpn/src/openvpn/dco_linux.c:998,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1002,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:1007,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1011,1
    - Dst: dco_update_peer_stat
      Src: /src/openvpn/src/openvpn/dco_linux.c:1016,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 22
    argCount: 2
    argNames:
    - msg
    - arg
    argTypes:
    - struct nl_msg*
    - void*
    constantsTouched: []
    func_position:
      end: 1019
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 1019
    functionName: dco_parse_peer_multi
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nla_parse
    - dco_update_peer_stat
    - nla_get_u32
    - msg
    - nla_parse_nested
    - nlmsg_data
    - genlmsg_attrlen
    - genlmsg_attrdata
    - nlmsg_hdr
    linkageType: ''
    returnType: int
    signature: 'int dco_parse_peer_multi(struct nl_msg *msg, void *arg) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: nlmsg_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:1050,1
    - Dst: nlmsg_hdr
      Src: /src/openvpn/src/openvpn/dco_linux.c:1050,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1052,1
    - Dst: genlmsg_attrdata
      Src: /src/openvpn/src/openvpn/dco_linux.c:1054,1
    - Dst: nla_parse
      Src: /src/openvpn/src/openvpn/dco_linux.c:1054,1
    - Dst: genlmsg_attrlen
      Src: /src/openvpn/src/openvpn/dco_linux.c:1055,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1059,1
    - Dst: nla_parse_nested
      Src: /src/openvpn/src/openvpn/dco_linux.c:1064,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1068,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:1072,1
    - Dst: dco_update_peer_stat
      Src: /src/openvpn/src/openvpn/dco_linux.c:1078,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 20
    argCount: 2
    argNames:
    - msg
    - arg
    argTypes:
    - struct nl_msg*
    - void*
    constantsTouched: []
    func_position:
      end: 1081
      start: 1045
    functionDepth: 0
    functionLinenumber: 1045
    functionLinenumberEnd: 1081
    functionName: dco_parse_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nla_parse
    - dco_update_peer_stat
    - nla_get_u32
    - msg
    - nla_parse_nested
    - nlmsg_data
    - genlmsg_attrlen
    - genlmsg_attrdata
    - nlmsg_hdr
    linkageType: ''
    returnType: int
    signature: 'static int dco_parse_peer(struct nl_msg *msg, void *arg) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: nlmsg_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:703,1
    - Dst: nlmsg_hdr
      Src: /src/openvpn/src/openvpn/dco_linux.c:703,1
    - Dst: genlmsg_attrlen
      Src: /src/openvpn/src/openvpn/dco_linux.c:706,1
    - Dst: genlmsg_attrdata
      Src: /src/openvpn/src/openvpn/dco_linux.c:705,1
    - Dst: nla_parse
      Src: /src/openvpn/src/openvpn/dco_linux.c:705,1
    - Dst: nla_for_each_nested
      Src: /src/openvpn/src/openvpn/dco_linux.c:715,1
    - Dst: nla_parse
      Src: /src/openvpn/src/openvpn/dco_linux.c:719,1
    - Dst: nla_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:720,1
    - Dst: nla_len
      Src: /src/openvpn/src/openvpn/dco_linux.c:720,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/dco_linux.c:728,1
    - Dst: nla_len
      Src: /src/openvpn/src/openvpn/dco_linux.c:730,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:734,1
    - Dst: nla_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:728,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 26
    argCount: 2
    argNames:
    - msg
    - arg
    argTypes:
    - struct nl_msg*
    - void*
    constantsTouched: []
    func_position:
      end: 739
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 739
    functionName: mcast_family_handler
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nla_parse
    - nla_get_u32
    - strncmp
    - nlmsg_data
    - genlmsg_attrlen
    - nla_for_each_nested
    - nla_data
    - genlmsg_attrdata
    - nla_len
    - nlmsg_hdr
    linkageType: ''
    returnType: int
    signature: 'static int mcast_family_handler(struct nl_msg *msg, void *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: genl_ctrl_resolve
      Src: /src/openvpn/src/openvpn/dco_linux.c:752,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:765,1
    - Dst: nlmsg_alloc
      Src: /src/openvpn/src/openvpn/dco_linux.c:754,1
    - Dst: NLA_PUT_STRING
      Src: /src/openvpn/src/openvpn/dco_linux.c:763,1
    - Dst: genlmsg_put
      Src: /src/openvpn/src/openvpn/dco_linux.c:760,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:768,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 770
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 770
    functionName: ovpn_get_mcast_id
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - nlmsg_alloc
    - genl_ctrl_resolve
    - genlmsg_put
    - NLA_PUT_STRING
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'static int ovpn_get_mcast_id(dco_context_t *dco) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/dco_linux.c:1165,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/dco_linux.c:1173,1
    - Dst: fgets
      Src: /src/openvpn/src/openvpn/dco_linux.c:1167,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 2
    argNames:
    - fp
    - gc
    argTypes:
    - FILE*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1180
      start: 1162
    functionDepth: 0
    functionLinenumber: 1162
    functionLinenumberEnd: 1180
    functionName: dco_version_string_backports
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - strchr
    - gc_malloc
    - fgets
    linkageType: ''
    returnType: char*
    signature: 'static const char *dco_version_string_backports(FILE *fp, struct gc_arena
      *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: nla_parse
      Src: /src/openvpn/src/openvpn/dco_linux.c:364,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:369,1
    - Dst: strnlen
      Src: /src/openvpn/src/openvpn/dco_linux.c:367,1
    - Dst: nla_len
      Src: /src/openvpn/src/openvpn/dco_linux.c:368,1
    - Dst: nla_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:367,1
    - Dst: nla_data
      Src: /src/openvpn/src/openvpn/dco_linux.c:370,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:375,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:376,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:381,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:382,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 33
    argCount: 3
    argNames:
    - (*nla)
    - err
    - arg
    argTypes:
    - struct sockaddr_nl
    - struct nlmsgerr*
    - void*
    constantsTouched: []
    func_position:
      end: 386
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 386
    functionName: ovpn_nl_cb_error
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nla_parse
    - nla_get_u32
    - msg
    - strnlen
    - nla_data
    - nla_len
    linkageType: ''
    returnType: int
    signature: 'static int ovpn_nl_cb_error(struct sockaddr_nl (*nla) __attribute__
      ((unused)), struct nlmsgerr *err, void *arg) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:498,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_linux.c:499,1
    - Dst: net_iface_new
      Src: /src/openvpn/src/openvpn/dco_linux.c:501,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:504,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/dco_linux.c:508,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:511,1
    - Dst: ovpn_dco_register
      Src: /src/openvpn/src/openvpn/dco_linux.c:516,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 3
    argNames:
    - tt
    - ctx
    - dev
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    - char*
    constantsTouched: []
    func_position:
      end: 519
      start: 495
    functionDepth: 0
    functionLinenumber: 495
    functionLinenumberEnd: 519
    functionName: open_tun_dco
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - ovpn_dco_register
    - net_iface_new
    - if_nametoindex
    - msg
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int open_tun_dco(struct tuntap *tt, openvpn_net_ctx_t *ctx, const
      char *dev) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:666,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:677,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:678,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:675,1
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:669,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:680,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:682,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:684,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:687,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 5
    argNames:
    - dco
    - peerid
    - keepalive_interval
    - keepalive_timeout
    - mss
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 689
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 689
    functionName: dco_set_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - nla_nest_end
    - msg
    - NLA_PUT_U32
    - nla_nest_start
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_set_peer(dco_context_t *dco, unsigned int peerid, int keepalive_interval,
      int keepalive_timeout, int mss) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/dco_linux.c:1142,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/dco_linux.c:1151,1
    - Dst: uname
      Src: /src/openvpn/src/openvpn/dco_linux.c:1145,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/dco_linux.c:1150,1
    - Dst: buf_puts
      Src: /src/openvpn/src/openvpn/dco_linux.c:1152,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/dco_linux.c:1153,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1154
      start: 1139
    functionDepth: 0
    functionLinenumber: 1139
    functionLinenumberEnd: 1154
    functionName: dco_version_string_in_tree
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_puts
    - alloc_buf_gc
    - uname
    linkageType: ''
    returnType: char*
    signature: 'static const char *dco_version_string_in_tree(struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:524,1
    - Dst: net_iface_del
      Src: /src/openvpn/src/openvpn/dco_linux.c:526,1
    - Dst: ovpn_dco_uninit_netlink
      Src: /src/openvpn/src/openvpn/dco_linux.c:527,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 528
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 528
    functionName: close_tun_dco
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - net_iface_del
    - msg
    - ovpn_dco_uninit_netlink
    linkageType: ''
    returnType: void
    signature: 'void close_tun_dco(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1221
      start: 1217
    functionDepth: 0
    functionLinenumber: 1217
    functionLinenumberEnd: 1221
    functionName: dco_get_supported_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *dco_get_supported_ciphers(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: nl_socket_alloc
      Src: /src/openvpn/src/openvpn/dco_linux.c:81,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:92,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:85,1
    - Dst: nl_geterror
      Src: /src/openvpn/src/openvpn/dco_linux.c:93,1
    - Dst: genl_connect
      Src: /src/openvpn/src/openvpn/dco_linux.c:89,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/dco_linux.c:96,1
    - Dst: nl_socket_get_fd
      Src: /src/openvpn/src/openvpn/dco_linux.c:96,1
    - Dst: genl_ctrl_resolve
      Src: /src/openvpn/src/openvpn/dco_linux.c:98,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:101,1
    - Dst: nl_geterror
      Src: /src/openvpn/src/openvpn/dco_linux.c:102,1
    - Dst: nl_socket_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:106,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 1
    argNames:
    - msglevel
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 108
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 108
    functionName: resolve_ovpn_netlink_id
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - genl_ctrl_resolve
    - set_cloexec
    - msg
    - nl_socket_get_fd
    - nl_geterror
    - nl_socket_free
    - nl_socket_alloc
    - genl_connect
    linkageType: ''
    returnType: int
    signature: 'static int resolve_ovpn_netlink_id(int msglevel) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: nl_socket_get_fd
      Src: /src/openvpn/src/openvpn/dco_linux.c:413,1
    - Dst: nl_socket_disable_seq_check
      Src: /src/openvpn/src/openvpn/dco_linux.c:433,1
    - Dst: nl_cb_set
      Src: /src/openvpn/src/openvpn/dco_linux.c:427,1
    - Dst: nl_cb_err
      Src: /src/openvpn/src/openvpn/dco_linux.c:424,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:403,1
    - Dst: nl_geterror
      Src: /src/openvpn/src/openvpn/dco_linux.c:404,1
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/dco_linux.c:409,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/dco_linux.c:414,1
    - Dst: nl_cb_alloc
      Src: /src/openvpn/src/openvpn/dco_linux.c:416,1
    - Dst: nl_socket_set_cb
      Src: /src/openvpn/src/openvpn/dco_linux.c:422,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_linux.c:438,1
    - Dst: nl_socket_set_buffer_size
      Src: /src/openvpn/src/openvpn/dco_linux.c:438,1
    - Dst: resolve_ovpn_netlink_id
      Src: /src/openvpn/src/openvpn/dco_linux.c:391,1
    - Dst: nl_socket_alloc
      Src: /src/openvpn/src/openvpn/dco_linux.c:393,1
    - Dst: genl_connect
      Src: /src/openvpn/src/openvpn/dco_linux.c:400,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:419,1
    - Dst: nl_socket_get_fd
      Src: /src/openvpn/src/openvpn/dco_linux.c:414,1
    - Dst: nl_cb_set
      Src: /src/openvpn/src/openvpn/dco_linux.c:425,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:397,1
    - Dst: nl_socket_get_fd
      Src: /src/openvpn/src/openvpn/dco_linux.c:409,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/dco_linux.c:413,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 34
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 439
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 439
    functionName: ovpn_dco_init_netlink
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - setsockopt
    - set_cloexec
    - set_nonblock
    - msg
    - nl_socket_get_fd
    - nl_cb_err
    - nl_geterror
    - nl_cb_set
    - nl_socket_disable_seq_check
    - nl_socket_set_buffer_size
    - nl_socket_set_cb
    - nl_cb_alloc
    - ASSERT
    - resolve_ovpn_netlink_id
    - nl_socket_alloc
    - genl_connect
    linkageType: ''
    returnType: void
    signature: 'static void ovpn_dco_init_netlink(dco_context_t *dco) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: stat
      Src: /src/openvpn/src/openvpn/dco_linux.c:1189,1
    - Dst: dco_version_string_in_tree
      Src: /src/openvpn/src/openvpn/dco_linux.c:1200,1
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/dco_linux.c:1197,1
    - Dst: S_ISDIR
      Src: /src/openvpn/src/openvpn/dco_linux.c:1189,1
    - Dst: dco_version_string_backports
      Src: /src/openvpn/src/openvpn/dco_linux.c:1202,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/dco_linux.c:1204,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1206
      start: 1182
    functionDepth: 0
    functionLinenumber: 1182
    functionLinenumberEnd: 1206
    functionName: dco_version_string
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - stat
    - fclose
    - S_ISDIR
    - fopen
    - dco_version_string_in_tree
    - dco_version_string_backports
    linkageType: ''
    returnType: char*
    signature: 'const char *dco_version_string(struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco_linux.c:455,1
    - Dst: ovpn_dco_init_netlink
      Src: /src/openvpn/src/openvpn/dco_linux.c:458,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 3
    argNames:
    - mode
    - dco
    - dev_node
    argTypes:
    - int
    - dco_context_t*
    - char*
    constantsTouched: []
    func_position:
      end: 460
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 460
    functionName: ovpn_dco_init
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - ovpn_dco_init_netlink
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool ovpn_dco_init(int mode, dco_context_t *dco, const char *dev_node) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/dco_linux.c:1213,1
    - Dst: nl_socket_get_fd
      Src: /src/openvpn/src/openvpn/dco_linux.c:1213,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 3
    argNames:
    - dco
    - es
    - arg
    argTypes:
    - dco_context_t*
    - struct event_set*
    - void*
    constantsTouched: []
    func_position:
      end: 1215
      start: 1208
    functionDepth: 0
    functionLinenumber: 1208
    functionLinenumberEnd: 1215
    functionName: dco_event_set
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - event_ctl
    - nl_socket_get_fd
    linkageType: ''
    returnType: void
    signature: 'void dco_event_set(dco_context_t *dco, struct event_set *es, void
      *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: nl_cb_set
      Src: /src/openvpn/src/openvpn/dco_linux.c:185,1
    - Dst: ovpn_nl_recvmsgs
      Src: /src/openvpn/src/openvpn/dco_linux.c:190,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/dco_linux.c:196,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:195,1
    - Dst: nl_send_auto
      Src: /src/openvpn/src/openvpn/dco_linux.c:186,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 5
    argNames:
    - dco
    - nl_msg
    - cb
    - cb_arg
    - prefix
    argTypes:
    - dco_context_t*
    - struct nl_msg*
    - ovpn_nl_cb
    - void*
    - char*
    constantsTouched: []
    func_position:
      end: 200
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 200
    functionName: ovpn_nl_msg_send
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - ovpn_nl_recvmsgs
    - msg
    - nl_cb_set
    - strerror
    - nl_send_auto
    linkageType: ''
    returnType: int
    signature: 'static int ovpn_nl_msg_send(dco_context_t *dco, struct nl_msg *nl_msg,
      ovpn_nl_cb cb, void *cb_arg, const char *prefix) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: nlmsg_alloc
      Src: /src/openvpn/src/openvpn/dco_linux.c:113,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:121,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:116,1
    - Dst: genlmsg_put
      Src: /src/openvpn/src/openvpn/dco_linux.c:120,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:126,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 2
    argNames:
    - dco
    - cmd
    argTypes:
    - dco_context_t*
    - int
    constantsTouched: []
    func_position:
      end: 128
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 128
    functionName: ovpn_dco_nlmsg_create
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - nlmsg_alloc
    - genlmsg_put
    - msg
    - NLA_PUT_U32
    linkageType: ''
    returnType: struct nl_msg*
    signature: 'static struct nl_msg *ovpn_dco_nlmsg_create(dco_context_t *dco, int
      cmd) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:230,1
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:233,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:237,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:238,1
    - Dst: mapped_v4_to_v6
      Src: /src/openvpn/src/openvpn/dco_linux.c:243,1
    - Dst: NLA_PUT_U16
      Src: /src/openvpn/src/openvpn/dco_linux.c:249,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:271,1
    - Dst: NLA_PUT_U16
      Src: /src/openvpn/src/openvpn/dco_linux.c:273,1
    - Dst: NLA_PUT_U16
      Src: /src/openvpn/src/openvpn/dco_linux.c:267,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:289,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/dco_linux.c:224,1
    - Dst: mapped_v4_to_v6
      Src: /src/openvpn/src/openvpn/dco_linux.c:262,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:265,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:284,1
    - Dst: print_sockaddr
      Src: /src/openvpn/src/openvpn/dco_linux.c:228,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:234,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:247,1
    - Dst: NLA_PUT_U16
      Src: /src/openvpn/src/openvpn/dco_linux.c:255,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:287,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:293,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:292,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:256,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:280,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:253,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 43
    argCount: 7
    argNames:
    - dco
    - peerid
    - sd
    - localaddr
    - remoteaddr
    - vpn_ipv4
    - vpn_ipv6
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - struct sockaddr*
    - struct sockaddr*
    - struct in_addr*
    - struct in6_addr*
    constantsTouched: []
    func_position:
      end: 295
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 295
    functionName: dco_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - print_sockaddr
    - nla_nest_end
    - mapped_v4_to_v6
    - msg
    - NLA_PUT_U32
    - NLA_PUT
    - gc_new
    - NLA_PUT_U16
    - gc_free
    - nla_nest_start
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_new_peer(dco_context_t *dco, unsigned int peerid, int sd,
      struct sockaddr *localaddr, struct sockaddr *remoteaddr, struct in_addr *vpn_ipv4,
      struct in6_addr *vpn_ipv6) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:533,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:541,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:544,1
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:535,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:543,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:546,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:549,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - dco
    - peerid
    argTypes:
    - dco_context_t*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 551
      start: 530
    functionDepth: 0
    functionLinenumber: 530
    functionLinenumberEnd: 551
    functionName: dco_swap_keys
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - nla_nest_end
    - msg
    - NLA_PUT_U32
    - nla_nest_start
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_swap_keys(dco_context_t *dco, unsigned int peerid) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:583,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:592,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:591,1
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:585,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:593,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:594,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:596,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:599,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - dco
    - peerid
    - slot
    argTypes:
    - dco_context_t*
    - unsigned int
    - dco_key_slot_t
    constantsTouched: []
    func_position:
      end: 601
      start: 578
    functionDepth: 0
    functionLinenumber: 578
    functionLinenumberEnd: 601
    functionName: dco_del_key
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - nla_nest_end
    - msg
    - NLA_PUT_U32
    - nla_nest_start
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_del_key(dco_context_t *dco, unsigned int peerid, dco_key_slot_t
      slot) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1092,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:1105,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:1104,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:1101,1
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:1100,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:1107,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:1110,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1114,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/dco_linux.c:1117,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 19
    argCount: 2
    argNames:
    - c
    - raise_sigusr1_on_err
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 1120
      start: 1083
    functionDepth: 0
    functionLinenumber: 1083
    functionLinenumberEnd: 1120
    functionName: dco_get_peer_stats
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - nla_nest_end
    - msg
    - NLA_PUT_U32
    - register_signal
    - nla_nest_start
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_get_peer_stats(struct context *c, const bool raise_sigusr1_on_err) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IN6_IS_ADDR_V4MAPPED
      Src: /src/openvpn/src/openvpn/dco_linux.c:206,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/dco_linux.c:210,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/dco_linux.c:211,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 10
    argCount: 2
    argNames:
    - sock
    - gc
    argTypes:
    - struct sockaddr*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 217
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 217
    functionName: mapped_v4_to_v6
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    - memcpy
    - IN6_IS_ADDR_V4MAPPED
    linkageType: ''
    returnType: struct sockaddr*
    signature: 'struct sockaddr *mapped_v4_to_v6(struct sockaddr *sock, struct gc_arena
      *gc) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: nl_recvmsgs
      Src: /src/openvpn/src/openvpn/dco_linux.c:133,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:138,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:150,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:146,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:142,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:154,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:160,1
    - Dst: nl_geterror
      Src: /src/openvpn/src/openvpn/dco_linux.c:160,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 17
    argCount: 2
    argNames:
    - dco
    - prefix
    argTypes:
    - dco_context_t*
    - char*
    constantsTouched: []
    func_position:
      end: 166
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 166
    functionName: ovpn_nl_recvmsgs
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nl_recvmsgs
    - nl_geterror
    - msg
    linkageType: ''
    returnType: int
    signature: 'static int ovpn_nl_recvmsgs(dco_context_t *dco, const char *prefix) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - (*msg)
    - arg
    argTypes:
    - struct nl_msg
    - void*
    constantsTouched: []
    func_position:
      end: 304
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 304
    functionName: ovpn_nl_cb_finish
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int ovpn_nl_cb_finish(struct nl_msg (*msg) __attribute__ ((unused)),
      void *arg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:557,1
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:559,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:567,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:568,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:565,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:570,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:573,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 2
    argNames:
    - dco
    - peerid
    argTypes:
    - dco_context_t*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 575
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 575
    functionName: dco_del_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nlmsg_free
    - nla_nest_end
    - msg
    - NLA_PUT_U32
    - nla_nest_start
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_del_peer(dco_context_t *dco, unsigned int peerid) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_dco_nlmsg_create
      Src: /src/openvpn/src/openvpn/dco_linux.c:616,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:627,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:628,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:629,1
    - Dst: NLA_PUT_U32
      Src: /src/openvpn/src/openvpn/dco_linux.c:630,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:647,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/dco_linux.c:613,1
    - Dst: ovpn_nl_msg_send
      Src: /src/openvpn/src/openvpn/dco_linux.c:655,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:640,1
    - Dst: nlmsg_free
      Src: /src/openvpn/src/openvpn/dco_linux.c:658,1
    - Dst: dco_get_cipher
      Src: /src/openvpn/src/openvpn/dco_linux.c:622,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:626,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:642,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:650,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:646,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:610,1
    - Dst: nla_nest_start
      Src: /src/openvpn/src/openvpn/dco_linux.c:632,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:636,1
    - Dst: nla_nest_end
      Src: /src/openvpn/src/openvpn/dco_linux.c:652,1
    - Dst: NLA_PUT
      Src: /src/openvpn/src/openvpn/dco_linux.c:637,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 30
    argCount: 9
    argNames:
    - dco
    - peerid
    - keyid
    - slot
    - encrypt_key
    - encrypt_iv
    - decrypt_key
    - decrypt_iv
    - ciphername
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - dco_key_slot_t
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 660
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 660
    functionName: dco_new_key
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - cipher_kt_key_size
    - nlmsg_free
    - nla_nest_end
    - msg
    - NLA_PUT_U32
    - NLA_PUT
    - dco_get_cipher
    - nla_nest_start
    - ovpn_dco_nlmsg_create
    - ovpn_nl_msg_send
    linkageType: ''
    returnType: int
    signature: 'int dco_new_key(dco_context_t *dco, unsigned int peerid, int keyid,
      dco_key_slot_t slot, const uint8_t *encrypt_key, const uint8_t *encrypt_iv,
      const uint8_t *decrypt_key, const uint8_t *decrypt_iv, const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: resolve_ovpn_netlink_id
      Src: /src/openvpn/src/openvpn/dco_linux.c:1125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/dco_linux.c:1127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - msglevel
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 1133
      start: 1122
    functionDepth: 0
    functionLinenumber: 1122
    functionLinenumberEnd: 1133
    functionName: dco_available
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - msg
    - resolve_ovpn_netlink_id
    linkageType: ''
    returnType: bool
    signature: 'bool dco_available(int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: nla_len
      Src: /src/openvpn/src/openvpn/dco_linux.c:919,1
    - Dst: nla_get_u32
      Src: /src/openvpn/src/openvpn/dco_linux.c:921,1
    - Dst: nla_get_u64
      Src: /src/openvpn/src/openvpn/dco_linux.c:925,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - attr
    argTypes:
    - struct nlattr*
    constantsTouched: []
    func_position:
      end: 927
      start: 916
    functionDepth: 0
    functionLinenumber: 916
    functionLinenumberEnd: 927
    functionName: ovpn_nla_get_uint
    functionSourceFile: /src/openvpn/src/openvpn/dco_linux.c
    functionUses: []
    functionsReached:
    - nla_get_u32
    - nla_get_u64
    - nla_len
    linkageType: ''
    returnType: uint64_t
    signature: 'static uint64_t ovpn_nla_get_uint(struct nlattr *attr) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:65,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:76,1
    - Dst: EVP_Digest
      Src: /src/openvpn/src/openvpn/xkey_helper.c:74,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:69,1
    - Dst: EVP_MD_fetch
      Src: /src/openvpn/src/openvpn/xkey_helper.c:66,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:79,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 5
    argNames:
    - src
    - srclen
    - buf
    - buflen
    - mdname
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char*
    - size_t*
    - char*
    constantsTouched: []
    func_position:
      end: 83
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 83
    functionName: xkey_digest
    functionSourceFile: /src/openvpn/src/openvpn/xkey_helper.c
    functionUses: []
    functionsReached:
    - EVP_Digest
    - dmsg
    - msg
    - EVP_MD_fetch
    - EVP_MD_free
    linkageType: ''
    returnType: int
    signature: 'int xkey_digest(const unsigned char *src, size_t srclen, unsigned
      char *buf, size_t *buflen, const char *mdname) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: MAKE_DI
      Src: /src/openvpn/src/openvpn/xkey_helper.c:335,1
    - Dst: MAKE_DI
      Src: /src/openvpn/src/openvpn/xkey_helper.c:335,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:356,1
    - Dst: MAKE_DI
      Src: /src/openvpn/src/openvpn/xkey_helper.c:335,1
    - Dst: MAKE_DI
      Src: /src/openvpn/src/openvpn/xkey_helper.c:336,1
    - Dst: MAKE_DI
      Src: /src/openvpn/src/openvpn/xkey_helper.c:337,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/xkey_helper.c:354,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:379,1
    - Dst: EVP_MD_type
      Src: /src/openvpn/src/openvpn/xkey_helper.c:346,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_helper.c:301,1
    - Dst: OBJ_sn2nid
      Src: /src/openvpn/src/openvpn/xkey_helper.c:342,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_helper.c:302,1
    - Dst: MAKE_DI
      Src: /src/openvpn/src/openvpn/xkey_helper.c:336,1
    - Dst: MAKE_DI
      Src: /src/openvpn/src/openvpn/xkey_helper.c:336,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:349,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/xkey_helper.c:388,1
    - Dst: EVP_get_digestbyname
      Src: /src/openvpn/src/openvpn/xkey_helper.c:346,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/xkey_helper.c:364,1
    - Dst: EVP_get_digestbyname
      Src: /src/openvpn/src/openvpn/xkey_helper.c:354,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/xkey_helper.c:389,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:390,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 52
    argCount: 5
    argNames:
    - enc
    - enc_len
    - mdname
    - tbs
    - tbslen
    argTypes:
    - unsigned char*
    - size_t*
    - char*
    - unsigned char*
    - size_t
    constantsTouched: []
    func_position:
      end: 399
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 399
    functionName: encode_pkcs1
    functionSourceFile: /src/openvpn/src/openvpn/xkey_helper.c
    functionUses: []
    functionsReached:
    - EVP_get_digestbyname
    - memcpy
    - dmsg
    - msg
    - EVP_MD_size
    - MAKE_DI
    - ASSERT
    - EVP_MD_type
    - OBJ_sn2nid
    linkageType: ''
    returnType: bool
    signature: 'bool encode_pkcs1(unsigned char *enc, size_t *enc_len, const char
      *mdname, const unsigned char *tbs, size_t tbslen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_get_error
      Src: /src/openvpn/src/openvpn/xkey_helper.c:54,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:56,1
    - Dst: ERR_error_string
      Src: /src/openvpn/src/openvpn/xkey_helper.c:56,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 58
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 58
    functionName: print_openssl_errors
    functionSourceFile: /src/openvpn/src/openvpn/xkey_helper.c
    functionUses: []
    functionsReached:
    - msg
    - ERR_get_error
    - ERR_error_string
    linkageType: ''
    returnType: void
    signature: 'static void print_openssl_errors(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_CTX_new_from_name
      Src: /src/openvpn/src/openvpn/xkey_helper.c:133,1
    - Dst: EVP_PKEY_fromdata_init
      Src: /src/openvpn/src/openvpn/xkey_helper.c:135,1
    - Dst: EVP_PKEY_get0_type_name
      Src: /src/openvpn/src/openvpn/xkey_helper.c:133,1
    - Dst: print_openssl_errors
      Src: /src/openvpn/src/openvpn/xkey_helper.c:138,1
    - Dst: EVP_PKEY_fromdata
      Src: /src/openvpn/src/openvpn/xkey_helper.c:136,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:139,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:143,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 15
    argCount: 5
    argNames:
    - libctx
    - handle
    - pubkey
    - sign_op
    - free_op
    argTypes:
    - OSSL_LIB_CTX*
    - void*
    - EVP_PKEY*
    - XKEY_EXTERNAL_SIGN_fn*
    - XKEY_PRIVKEY_FREE_fn*
    constantsTouched: []
    func_position:
      end: 147
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 147
    functionName: xkey_load_generic_key
    functionSourceFile: /src/openvpn/src/openvpn/xkey_helper.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_fromdata
    - EVP_PKEY_CTX_new_from_name
    - msg
    - EVP_PKEY_fromdata_init
    - EVP_PKEY_get0_type_name
    - print_openssl_errors
    - EVP_PKEY_CTX_free
    linkageType: ''
    returnType: EVP_PKEY*
    signature: 'EVP_PKEY *xkey_load_generic_key(OSSL_LIB_CTX *libctx, void *handle,
      EVP_PKEY *pubkey, XKEY_EXTERNAL_SIGN_fn *sign_op, XKEY_PRIVKEY_FREE_fn *free_op) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BN_bin2bn
      Src: /src/openvpn/src/openvpn/xkey_helper.c:412,1
    - Dst: ECDSA_SIG_set0
      Src: /src/openvpn/src/openvpn/xkey_helper.c:423,1
    - Dst: BN_bin2bn
      Src: /src/openvpn/src/openvpn/xkey_helper.c:413,1
    - Dst: ECDSA_SIG_new
      Src: /src/openvpn/src/openvpn/xkey_helper.c:418,1
    - Dst: ECDSA_SIG_free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:425,1
    - Dst: i2d_ECDSA_SIG
      Src: /src/openvpn/src/openvpn/xkey_helper.c:429,1
    - Dst: ECDSA_SIG_free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:432,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:433,1
    - Dst: i2d_ECDSA_SIG
      Src: /src/openvpn/src/openvpn/xkey_helper.c:436,1
    - Dst: ECDSA_SIG_free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:437,1
    - Dst: BN_free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:441,1
    - Dst: BN_free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:442,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - len
    - capacity
    argTypes:
    - unsigned char*
    - int
    - size_t
    constantsTouched: []
    func_position:
      end: 444
      start: 407
    functionDepth: 0
    functionLinenumber: 407
    functionLinenumberEnd: 444
    functionName: ecdsa_bin2der
    functionSourceFile: /src/openvpn/src/openvpn/xkey_helper.c
    functionUses: []
    functionsReached:
    - BN_free
    - ECDSA_SIG_set0
    - BN_bin2bn
    - msg
    - i2d_ECDSA_SIG
    - ECDSA_SIG_free
    - ECDSA_SIG_new
    linkageType: ''
    returnType: int
    signature: 'int ecdsa_bin2der(unsigned char *buf, int len, size_t capacity) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:183,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:179,1
    - Dst: xkey_digest
      Src: /src/openvpn/src/openvpn/xkey_helper.c:186,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:201,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/xkey_helper.c:212,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:215,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:236,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/xkey_helper.c:254,1
    - Dst: management_query_pk_sig
      Src: /src/openvpn/src/openvpn/xkey_helper.c:267,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/xkey_helper.c:207,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:210,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/xkey_helper.c:231,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:247,1
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/xkey_helper.c:263,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/xkey_helper.c:271,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:274,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:167,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:185,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:199,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/xkey_helper.c:203,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/xkey_helper.c:257,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/xkey_helper.c:273,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:182,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:218,1
    - Dst: encode_pkcs1
      Src: /src/openvpn/src/openvpn/xkey_helper.c:220,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:235,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:210,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/xkey_helper.c:226,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/xkey_helper.c:238,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/xkey_helper.c:240,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/xkey_helper.c:242,1
    - Dst: strncat
      Src: /src/openvpn/src/openvpn/xkey_helper.c:254,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 90
    argCount: 6
    argNames:
    - unused
    - sig
    - siglen
    - tbs
    - tbslen
    - alg
    argTypes:
    - void*
    - unsigned char*
    - size_t*
    - unsigned char*
    - size_t
    - XKEY_SIGALG
    constantsTouched: []
    func_position:
      end: 279
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 279
    functionName: xkey_management_sign
    functionSourceFile: /src/openvpn/src/openvpn/xkey_helper.c
    functionUses: []
    functionsReached:
    - openvpn_base64_encode
    - dmsg
    - management_query_pk_sig
    - msg
    - snprintf
    - openvpn_base64_decode
    - strncat
    - free
    - strcmp
    - strncpynt
    - xkey_digest
    - strlen
    - encode_pkcs1
    linkageType: ''
    returnType: int
    signature: 'int xkey_management_sign(void *unused, unsigned char *sig, size_t
      *siglen, const unsigned char *tbs, size_t tbslen, XKEY_SIGALG alg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/xkey_helper.c:96,1
    - Dst: xkey_load_generic_key
      Src: /src/openvpn/src/openvpn/xkey_helper.c:106,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 2
    argNames:
    - libctx
    - pubkey
    argTypes:
    - OSSL_LIB_CTX*
    - EVP_PKEY*
    constantsTouched: []
    func_position:
      end: 107
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 107
    functionName: xkey_load_management_key
    functionSourceFile: /src/openvpn/src/openvpn/xkey_helper.c
    functionUses: []
    functionsReached:
    - xkey_load_generic_key
    - ASSERT
    linkageType: ''
    returnType: EVP_PKEY*
    signature: 'EVP_PKEY *xkey_load_management_key(OSSL_LIB_CTX *libctx, EVP_PKEY
      *pubkey) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 57
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 57
    functionName: print_status_mode
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_status_mode(unsigned int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/status.c:137,1
    - Dst: event_timeout_trigger
      Src: /src/openvpn/src/openvpn/status.c:138,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - so
    argTypes:
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 144
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 144
    functionName: status_trigger
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached:
    - CLEAR
    - event_timeout_trigger
    linkageType: ''
    returnType: bool
    signature: 'bool status_trigger(struct status_output *so) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/openvpn/src/openvpn/status.c:198,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/status.c:209,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/status.c:207,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/status.c:203,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/status.c:205,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - so
    argTypes:
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 216
      start: 186
    functionDepth: 0
    functionLinenumber: 186
    functionLinenumberEnd: 216
    functionName: status_close
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached:
    - buf_defined
    - close
    - free_buf
    - free
    linkageType: ''
    returnType: bool
    signature: 'bool status_close(struct status_output *so) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/status.c:69,1
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/status.c:81,1
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/status.c:87,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/status.c:75,1
    - Dst: buf_reset
      Src: /src/openvpn/src/openvpn/status.c:74,1
    - Dst: platform_open
      Src: /src/openvpn/src/openvpn/status.c:93,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/status.c:99,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/status.c:103,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/status.c:104,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/status.c:109,1
    - Dst: print_status_mode
      Src: /src/openvpn/src/openvpn/status.c:114,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/status.c:114,1
    - Dst: event_timeout_init
      Src: /src/openvpn/src/openvpn/status.c:125,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 48
    argCount: 5
    argNames:
    - filename
    - refresh_freq
    - msglevel
    - vout
    - flags
    argTypes:
    - char*
    - int
    - int
    - struct virtual_output*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 129
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 129
    functionName: status_open
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached:
    - set_cloexec
    - event_timeout_clear
    - msg
    - event_timeout_init
    - print_status_mode
    - ASSERT
    - alloc_buf
    - ALLOC_OBJ_CLEAR
    - platform_open
    - buf_reset
    - string_alloc
    linkageType: ''
    returnType: struct status_output*
    signature: 'struct status_output *status_open(const char *filename, const int
      refresh_freq, const int msglevel, const struct virtual_output *vout, const unsigned
      int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lseek
      Src: /src/openvpn/src/openvpn/status.c:151,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - so
    argTypes:
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 153
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 153
    functionName: status_reset
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached:
    - lseek
    linkageType: ''
    returnType: void
    signature: 'void status_reset(struct status_output *so) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/src/openvpn/status.c:229,1
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/status.c:247,1
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpn/status.c:230,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/status.c:231,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/status.c:241,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/status.c:248,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/status.c:251,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/status.c:260,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 39
    argCount: 2
    argNames:
    - so
    - format
    - '...'
    argTypes:
    - struct status_output*
    - char*
    constantsTouched: []
    func_position:
      end: 264
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 264
    functionName: status_printf
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached:
    - va_end
    - vsnprintf
    - msg
    - write
    - va_start
    - chomp
    - strlen
    - strcat
    linkageType: ''
    returnType: void
    signature: 'void status_printf(struct status_output *so, const char *format, ...) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/status.c:273,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/status.c:277,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/status.c:274,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/status.c:274,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/status.c:273,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/status.c:284,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/status.c:284,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/status.c:285,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/status.c:285,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/status.c:285,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/status.c:307,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/status.c:291,1
    - Dst: buf_null_terminate
      Src: /src/openvpn/src/openvpn/status.c:310,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/status.c:291,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 31
    argCount: 2
    argNames:
    - so
    - buf
    argTypes:
    - struct status_output*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 314
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 314
    functionName: status_read
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached:
    - buf_init
    - BPTR
    - buf_null_terminate
    - buf_defined
    - read
    - ASSERT
    - buf_write_u8
    - buf_inc_len
    - buf_read_u8
    - BCAP
    linkageType: ''
    returnType: bool
    signature: 'bool status_read(struct status_output *so, struct buffer *buf) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: lseek
      Src: /src/openvpn/src/openvpn/status.c:162,1
    - Dst: chsize
      Src: /src/openvpn/src/openvpn/status.c:171,1
    - Dst: lseek
      Src: /src/openvpn/src/openvpn/status.c:170,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/status.c:165,1
    - Dst: ftruncate
      Src: /src/openvpn/src/openvpn/status.c:163,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/status.c:178,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/status.c:180,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/status.c:180,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 1
    argNames:
    - so
    argTypes:
    - struct status_output*
    constantsTouched: []
    func_position:
      end: 183
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 183
    functionName: status_flush
    functionSourceFile: /src/openvpn/src/openvpn/status.c
    functionUses: []
    functionsReached:
    - lseek
    - buf_init
    - ftruncate
    - msg
    - chsize
    - ASSERT
    - buf_defined
    linkageType: ''
    returnType: void
    signature: 'void status_flush(struct status_output *so) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:84,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:83,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:92,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:103,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/crypto.c:116,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:125,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:125,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/crypto.c:116,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:136,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:144,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:173,1
    - Dst: cipher_ctx_get_tag
      Src: /src/openvpn/src/openvpn/crypto.c:177,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:189,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:181,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:183,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:181,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/crypto.c:86,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/crypto.c:96,1
    - Dst: packet_id_write_epoch
      Src: /src/openvpn/src/openvpn/crypto.c:101,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:128,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:131,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:131,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/crypto.c:134,1
    - Dst: cipher_ctx_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:134,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:144,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:146,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/crypto.c:156,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:166,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:145,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:156,1
    - Dst: crypto_clear_error
      Src: /src/openvpn/src/openvpn/crypto.c:187,1
    - Dst: epoch_check_send_iterate
      Src: /src/openvpn/src/openvpn/crypto.c:75,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:84,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:116,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:111,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:131,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:131,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/crypto.c:151,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:157,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:165,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:146,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:177,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:181,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:166,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:94,1
    - Dst: packet_id_write
      Src: /src/openvpn/src/openvpn/crypto.c:109,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto.c:128,1
    - Dst: cipher_ctx_update_ad
      Src: /src/openvpn/src/openvpn/crypto.c:144,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:144,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:146,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:156,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/crypto.c:156,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:156,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:152,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/crypto.c:172,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:181,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:157,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/crypto.c:165,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/crypto.c:165,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 91
    argCount: 3
    argNames:
    - buf
    - work
    - opt
    argTypes:
    - struct buffer*
    - struct buffer
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 191
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 191
    functionName: openvpn_encrypt_aead
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - dmsg
    - crypto_clear_error
    - msg
    - BLEN
    - buf_write_alloc
    - gc_init
    - cipher_ctx_get_tag
    - packet_id_write_epoch
    - buf_inc_len
    - buf_safe
    - buf_write
    - cipher_ctx_update
    - BPTR
    - cipher_ctx_iv_length
    - gc_free
    - buf_set_write
    - cipher_ctx_final
    - BEND
    - format_hex
    - buf_len
    - packet_id_initialized
    - epoch_check_send_iterate
    - cipher_ctx_update_ad
    - ASSERT
    - packet_id_write
    - cipher_ctx_block_size
    - cipher_ctx_reset
    linkageType: ''
    returnType: void
    signature: 'static void openvpn_encrypt_aead(struct buffer *buf, struct buffer
      work, struct crypto_options *opt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_mode_aead
      Src: /src/openvpn/src/openvpn/crypto.c:985,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:1001,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:989,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:989,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:996,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1004,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1005,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1006,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:1007,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:1008,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - ctx
    - key
    argTypes:
    - struct key_ctx*
    - struct key_parameters*
    constantsTouched: []
    func_position:
      end: 1010
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 1010
    functionName: key_ctx_update_implicit_iv
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode_aead
    - memcpy
    - cipher_ctx_iv_length
    - CLEAR
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void key_ctx_update_implicit_iv(struct key_ctx *ctx, const
      struct key_parameters *key) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_defined
      Src: /src/openvpn/src/openvpn/crypto.c:1152,1
    - Dst: key_is_zero
      Src: /src/openvpn/src/openvpn/crypto.c:1157,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 2
    argNames:
    - key
    - kt
    argTypes:
    - struct key*
    - struct key_type*
    constantsTouched: []
    func_position:
      end: 1163
      start: 1149
    functionDepth: 0
    functionLinenumber: 1149
    functionLinenumberEnd: 1163
    functionName: check_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_defined
    - key_is_zero
    linkageType: ''
    returnType: bool
    signature: 'bool check_key(struct key *key, const struct key_type *kt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1212,1
    - Dst: key_print
      Src: /src/openvpn/src/openvpn/crypto.c:1213,1
    - Dst: key_print
      Src: /src/openvpn/src/openvpn/crypto.c:1214,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 4
    argNames:
    - k
    - kt
    - prefix0
    - prefix1
    argTypes:
    - struct key2*
    - struct key_type*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 1215
      start: 1206
    functionDepth: 0
    functionLinenumber: 1206
    functionLinenumberEnd: 1215
    functionName: key2_print
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - key_print
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void key2_print(const struct key2 *k, const struct key_type *kt, const
      char *prefix0, const char *prefix1) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1698,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - kd
    - remote
    - humanreadable
    argTypes:
    - int
    - bool
    - bool
    constantsTouched: []
    func_position:
      end: 1701
      start: 1674
    functionDepth: 0
    functionLinenumber: 1674
    functionLinenumberEnd: 1701
    functionName: keydirection2ascii
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: char*
    signature: 'const char *keydirection2ascii(int kd, bool remote, bool humanreadable) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:1807,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:1808,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 1
    argNames:
    - cipher_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1816
      start: 1797
    functionDepth: 0
    functionLinenumber: 1797
    functionLinenumberEnd: 1816
    functionName: get_cipher_name_pair
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: cipher_name_pair*
    signature: 'static const cipher_name_pair *get_cipher_name_pair(const char *cipher_name) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/crypto.c:218,1
    - Dst: cipher_ctx_mode_cbc
      Src: /src/openvpn/src/openvpn/crypto.c:221,1
    - Dst: prng_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:224,1
    - Dst: cipher_ctx_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/crypto.c:236,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:241,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/crypto.c:252,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:256,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:256,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:259,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/crypto.c:276,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:277,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/crypto.c:299,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:281,1
    - Dst: crypto_clear_error
      Src: /src/openvpn/src/openvpn/crypto.c:328,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:320,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto.c:311,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:276,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/crypto.c:315,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:301,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/crypto.c:312,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/crypto.c:216,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/crypto.c:243,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:248,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:244,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/crypto.c:262,1
    - Dst: cipher_ctx_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:262,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:276,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:276,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:280,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:289,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:321,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/crypto.c:280,1
    - Dst: cipher_ctx_mode
      Src: /src/openvpn/src/openvpn/crypto.c:284,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:321,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/crypto.c:303,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/crypto.c:280,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:299,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:293,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:210,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/crypto.c:216,1
    - Dst: packet_id_write
      Src: /src/openvpn/src/openvpn/crypto.c:228,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:241,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:252,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:232,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto.c:259,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:277,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/crypto.c:276,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:281,1
    - Dst: packet_id_write
      Src: /src/openvpn/src/openvpn/crypto.c:290,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:298,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:303,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto.c:312,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:314,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:284,1
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/crypto.c:299,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:315,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/crypto.c:198,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:217,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:227,1
    - Dst: packet_id_write
      Src: /src/openvpn/src/openvpn/crypto.c:244,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:253,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:253,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:255,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:256,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:264,1
    - Dst: cipher_ctx_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:271,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:321,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:330,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/crypto.c:313,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:303,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:324,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 106
    argCount: 3
    argNames:
    - buf
    - work
    - opt
    argTypes:
    - struct buffer*
    - struct buffer
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 332
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 332
    functionName: openvpn_encrypt_v1
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - hmac_ctx_size
    - cipher_ctx_mode_cbc
    - dmsg
    - crypto_clear_error
    - msg
    - BLEN
    - buf_write_alloc
    - gc_init
    - buf_inc_len
    - buf_safe
    - buf_write
    - cipher_ctx_update
    - BPTR
    - prng_bytes
    - cipher_ctx_iv_length
    - gc_free
    - buf_set_write
    - cipher_ctx_mode
    - cipher_ctx_final
    - BEND
    - format_hex
    - cipher_ctx_block_size
    - cipher_ctx_mode_ofb_cfb
    - hmac_ctx_final
    - hmac_ctx_update
    - hmac_ctx_reset
    - packet_id_initialized
    - buf_prepend
    - ASSERT
    - packet_id_write
    - cipher_ctx_reset
    - buf_write_prepend
    linkageType: ''
    returnType: void
    signature: 'static void openvpn_encrypt_v1(struct buffer *buf, struct buffer work,
      struct crypto_options *opt) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:1706,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1728,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 2
    argNames:
    - kds
    - key_direction
    argTypes:
    - struct key_direction_state*
    - int
    constantsTouched: []
    func_position:
      end: 1730
      start: 1703
    functionDepth: 0
    functionLinenumber: 1703
    functionLinenumberEnd: 1730
    functionName: key_direction_state_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - CLEAR
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void key_direction_state_init(struct key_direction_state *kds, int
      key_direction) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_cipher_name_pair
      Src: /src/openvpn/src/openvpn/crypto.c:1821,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - cipher_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1829
      start: 1818
    functionDepth: 0
    functionLinenumber: 1818
    functionLinenumberEnd: 1829
    functionName: translate_cipher_name_from_openvpn
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - get_cipher_name_pair
    linkageType: ''
    returnType: char*
    signature: 'const char *translate_cipher_name_from_openvpn(const char *cipher_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1194,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:1197,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/crypto.c:1196,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto.c:1196,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1195,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto.c:1197,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1198,1
    - Dst: md_kt_name
      Src: /src/openvpn/src/openvpn/crypto.c:1199,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:1199,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:1200,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:1200,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1201,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 3
    argNames:
    - key
    - kt
    - prefix
    argTypes:
    - struct key*
    - struct key_type*
    - char*
    constantsTouched: []
    func_position:
      end: 1202
      start: 1189
    functionDepth: 0
    functionLinenumber: 1189
    functionLinenumberEnd: 1202
    functionName: key_print
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_kt_key_size
    - format_hex
    - dmsg
    - gc_new
    - gc_free
    - md_kt_name
    - md_kt_size
    - cipher_kt_name
    linkageType: ''
    returnType: void
    signature: 'static void key_print(const struct key *key, const struct key_type
      *kt, const char *prefix) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_mode_aead
      Src: /src/openvpn/src/openvpn/crypto.c:340,1
    - Dst: openvpn_encrypt_aead
      Src: /src/openvpn/src/openvpn/crypto.c:342,1
    - Dst: openvpn_encrypt_v1
      Src: /src/openvpn/src/openvpn/crypto.c:346,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - work
    - opt
    argTypes:
    - struct buffer*
    - struct buffer
    - struct crypto_options*
    constantsTouched: []
    func_position:
      end: 349
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 349
    functionName: openvpn_encrypt
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode_aead
    - openvpn_encrypt_v1
    - openvpn_encrypt_aead
    linkageType: ''
    returnType: void
    signature: 'void openvpn_encrypt(struct buffer *buf, struct buffer work, struct
      crypto_options *opt) '
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/crypto.c:634,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:642,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:643,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/crypto.c:663,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:662,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:696,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto.c:700,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/crypto.c:706,1
    - Dst: cipher_ctx_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:706,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/crypto.c:712,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:726,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:712,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:725,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:768,1
    - Dst: crypto_check_replay
      Src: /src/openvpn/src/openvpn/crypto.c:774,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/crypto.c:734,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:787,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:764,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:643,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:643,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:662,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:666,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/crypto.c:666,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/crypto.c:683,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:691,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:692,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:726,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:732,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:746,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/crypto.c:734,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:757,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:716,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:781,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:723,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/crypto.c:766,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:712,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/crypto.c:749,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/crypto.c:654,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:659,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/crypto.c:662,1
    - Dst: CRYPT_DROP
      Src: /src/openvpn/src/openvpn/crypto.c:668,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:671,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:688,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:690,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:690,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/crypto.c:691,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:712,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:719,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:726,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/crypto.c:770,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/crypto.c:766,1
    - Dst: crypto_clear_error
      Src: /src/openvpn/src/openvpn/crypto.c:785,1
    - Dst: cipher_ctx_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/crypto.c:741,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto.c:651,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:683,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:678,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/crypto.c:671,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:692,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:702,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:708,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:714,1
    - Dst: CRYPT_DROP
      Src: /src/openvpn/src/openvpn/crypto.c:721,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:723,1
    - Dst: cipher_ctx_mode_cbc
      Src: /src/openvpn/src/openvpn/crypto.c:730,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:736,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:746,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/crypto.c:748,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:751,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/crypto.c:719,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:716,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 122
    argCount: 4
    argNames:
    - buf
    - work
    - opt
    - frame
    argTypes:
    - struct buffer*
    - struct buffer
    - struct crypto_options*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 789
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 789
    functionName: openvpn_decrypt_v1
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - hmac_ctx_size
    - memcpy
    - cipher_ctx_mode_cbc
    - dmsg
    - crypto_clear_error
    - CRYPT_ERROR
    - BLEN
    - packet_id_read
    - gc_init
    - memcmp_constant_time
    - buf_inc_len
    - BOOL_CAST
    - buf_safe
    - cipher_ctx_update
    - BPTR
    - cipher_ctx_iv_length
    - gc_free
    - cipher_ctx_final
    - buf_init
    - format_hex
    - hmac_ctx_final
    - cipher_ctx_mode_ofb_cfb
    - hmac_ctx_update
    - CRYPT_DROP
    - crypto_check_replay
    - hmac_ctx_reset
    - packet_id_initialized
    - buf_set_read
    - ASSERT
    - cipher_ctx_reset
    - cipher_ctx_block_size
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'static bool openvpn_decrypt_v1(struct buffer *buf, struct buffer work,
      struct crypto_options *opt, const struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto.c:1067,1
    - Dst: key_ctx_update_implicit_iv
      Src: /src/openvpn/src/openvpn/crypto.c:1069,1
    - Dst: init_key_ctx
      Src: /src/openvpn/src/openvpn/crypto.c:1068,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 4
    argNames:
    - ctx
    - key_params
    - kt
    - name
    argTypes:
    - struct key_ctx*
    - struct key_parameters*
    - struct key_type*
    - char*
    constantsTouched: []
    func_position:
      end: 1071
      start: 1061
    functionDepth: 0
    functionLinenumber: 1061
    functionLinenumberEnd: 1071
    functionName: init_key_bi_ctx_send
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - snprintf
    - key_ctx_update_implicit_iv
    - init_key_ctx
    linkageType: ''
    returnType: void
    signature: 'void init_key_bi_ctx_send(struct key_ctx *ctx, const struct key_parameters
      *key_params, const struct key_type *kt, const char *name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_direction_state_init
      Src: /src/openvpn/src/openvpn/crypto.c:1091,1
    - Dst: init_key_bi_ctx_send
      Src: /src/openvpn/src/openvpn/crypto.c:1099,1
    - Dst: init_key_bi_ctx_recv
      Src: /src/openvpn/src/openvpn/crypto.c:1100,1
    - Dst: key_parameters_from_key
      Src: /src/openvpn/src/openvpn/crypto.c:1097,1
    - Dst: key_parameters_from_key
      Src: /src/openvpn/src/openvpn/crypto.c:1096,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 7
    argCount: 5
    argNames:
    - ctx
    - key2
    - key_direction
    - kt
    - name
    argTypes:
    - struct key_ctx_bi*
    - struct key2*
    - int
    - struct key_type*
    - char*
    constantsTouched: []
    func_position:
      end: 1102
      start: 1085
    functionDepth: 0
    functionLinenumber: 1085
    functionLinenumberEnd: 1102
    functionName: init_key_ctx_bi
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - key_parameters_from_key
    - init_key_bi_ctx_recv
    - key_direction_state_init
    - init_key_bi_ctx_send
    linkageType: ''
    returnType: void
    signature: 'void init_key_ctx_bi(struct key_ctx_bi *ctx, const struct key2 *key2,
      int key_direction, const struct key_type *kt, const char *name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:1220,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:1223,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:1221,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - key_params
    - key
    argTypes:
    - struct key_parameters*
    - struct key*
    constantsTouched: []
    func_position:
      end: 1225
      start: 1217
    functionDepth: 0
    functionLinenumber: 1217
    functionLinenumberEnd: 1225
    functionName: key_parameters_from_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - memcpy
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void key_parameters_from_key(struct key_parameters *key_params, const
      struct key *key) '
  - BBCount: 22
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/crypto.c:1414,1
    - Dst: buffer_read_from_file
      Src: /src/openvpn/src/openvpn/crypto.c:1418,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/crypto.c:1494,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1527,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1509,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1494,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/crypto.c:1557,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/crypto.c:1560,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1566,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1374,1
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/crypto.c:1419,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1421,1
    - Dst: isxdigit
      Src: /src/openvpn/src/openvpn/crypto.c:1487,1
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/crypto.c:1503,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/crypto.c:1534,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto.c:1401,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto.c:1402,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1433,1
    - Dst: isprint
      Src: /src/openvpn/src/openvpn/crypto.c:1510,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1533,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/crypto.c:1541,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1572,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto.c:1413,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:1405,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1489,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/crypto.c:1512,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/crypto.c:1527,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1540,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/crypto.c:1549,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1556,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 116
    argCount: 3
    argNames:
    - key2
    - file
    - flags
    argTypes:
    - struct key2*
    - char*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1573
      start: 1371
    functionDepth: 0
    functionLinenumber: 1371
    functionLinenumberEnd: 1573
    functionName: read_key_file
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - print_key_filename
    - buffer_read_from_file
    - sscanf
    - buf_set_read
    - buf_clear
    - msg
    - buf_valid
    - SIZE
    - isspace
    - gc_new
    - format_hex_ex
    - CLEAR
    - gc_free
    - ASSERT
    - isxdigit
    - isprint
    - strlen
    - printf
    linkageType: ''
    returnType: void
    signature: 'void read_key_file(struct key2 *key2, const char *file, const unsigned
      int flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto.c:354,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/crypto.c:359,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/crypto.c:359,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 380
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 380
    functionName: cipher_get_aead_limits
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_kt_name
    - cipher_kt_mode_aead
    linkageType: ''
    returnType: uint64_t
    signature: 'uint64_t cipher_get_aead_limits(const char *ciphername) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_mode_aead
      Src: /src/openvpn/src/openvpn/crypto.c:801,1
    - Dst: openvpn_decrypt_v1
      Src: /src/openvpn/src/openvpn/crypto.c:807,1
    - Dst: openvpn_decrypt_aead
      Src: /src/openvpn/src/openvpn/crypto.c:803,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 13
    argCount: 5
    argNames:
    - buf
    - work
    - opt
    - frame
    - ad_start
    argTypes:
    - struct buffer*
    - struct buffer
    - struct crypto_options*
    - struct frame*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 815
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 815
    functionName: openvpn_decrypt
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode_aead
    - openvpn_decrypt_aead
    - openvpn_decrypt_v1
    linkageType: ''
    returnType: bool
    signature: 'bool openvpn_decrypt(struct buffer *buf, struct buffer work, struct
      crypto_options *opt, const struct frame *frame, const uint8_t *ad_start) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/crypto.c:1079,1
    - Dst: init_key_ctx
      Src: /src/openvpn/src/openvpn/crypto.c:1080,1
    - Dst: key_ctx_update_implicit_iv
      Src: /src/openvpn/src/openvpn/crypto.c:1081,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 4
    argNames:
    - ctx
    - key_params
    - kt
    - name
    argTypes:
    - struct key_ctx*
    - struct key_parameters*
    - struct key_type*
    - char*
    constantsTouched: []
    func_position:
      end: 1083
      start: 1073
    functionDepth: 0
    functionLinenumber: 1073
    functionLinenumberEnd: 1083
    functionName: init_key_bi_ctx_recv
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - snprintf
    - key_ctx_update_implicit_iv
    - init_key_ctx
    linkageType: ''
    returnType: void
    signature: 'void init_key_bi_ctx_recv(struct key_ctx *ctx, const struct key_parameters
      *key_params, const struct key_type *kt, const char *name) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_free
      Src: /src/openvpn/src/openvpn/crypto.c:1109,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/src/openvpn/crypto.c:1115,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:1118,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/src/openvpn/crypto.c:1114,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct key_ctx*
    constantsTouched: []
    func_position:
      end: 1121
      start: 1104
    functionDepth: 0
    functionLinenumber: 1104
    functionLinenumberEnd: 1121
    functionName: free_key_ctx
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_ctx_free
    - CLEAR
    - hmac_ctx_free
    - hmac_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'void free_key_ctx(struct key_ctx *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/crypto.c:1233,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/crypto.c:1234,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/crypto.c:1235,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1251,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:1247,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1269,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:1272,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1277,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1292,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1281,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:1287,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:1254,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/crypto.c:1240,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1270,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1272,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:1272,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/crypto.c:1276,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:1278,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/crypto.c:1281,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:1297,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1305,1
    - Dst: openvpn_encrypt
      Src: /src/openvpn/src/openvpn/crypto.c:1284,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto.c:1232,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto.c:1234,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto.c:1233,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto.c:1235,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1248,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1251,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/crypto.c:1262,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1264,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/crypto.c:1269,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:1276,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1304,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1231,1
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/crypto.c:1236,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1240,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1247,1
    - Dst: cipher_ctx_mode_aead
      Src: /src/openvpn/src/openvpn/crypto.c:1245,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:1248,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1259,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1272,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:1278,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:1278,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1300,1
    - Dst: openvpn_decrypt
      Src: /src/openvpn/src/openvpn/crypto.c:1287,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:1296,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 67
    argCount: 2
    argNames:
    - co
    - frame
    argTypes:
    - struct crypto_options*
    - struct frame*
    constantsTouched: []
    func_position:
      end: 1306
      start: 1227
    functionDepth: 0
    functionLinenumber: 1227
    functionLinenumberEnd: 1306
    functionName: test_crypto
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode_aead
    - clear_buf
    - memcpy
    - buf_init
    - BPTR
    - BUF_SIZE
    - msg
    - openvpn_decrypt
    - BLEN
    - buf_write_alloc
    - gc_new
    - cipher_ctx_iv_length
    - rand_bytes
    - gc_free
    - update_time
    - ASSERT
    - openvpn_encrypt
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void test_crypto(struct crypto_options *co, struct frame *frame) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1578,1
    - Dst: generate_key_random
      Src: /src/openvpn/src/openvpn/crypto.c:1598,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/crypto.c:1590,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/crypto.c:1589,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto.c:1583,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/crypto.c:1601,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/crypto.c:1609,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/crypto.c:1612,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto.c:1612,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/crypto.c:1613,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:1619,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1621,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:1621,1
    - Dst: buffer_write_file
      Src: /src/openvpn/src/openvpn/crypto.c:1624,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/crypto.c:1630,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1633,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/crypto.c:1616,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:1621,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 2
    argNames:
    - nkeys
    - filename
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 1636
      start: 1575
    functionDepth: 0
    functionLinenumber: 1575
    functionLinenumberEnd: 1636
    functionName: write_key_file
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - buf_clear
    - BPTR
    - buf_printf
    - BLEN
    - generate_key_random
    - gc_new
    - format_hex_ex
    - secure_memzero
    - strcmp
    - gc_free
    - buffer_write_file
    - strlen
    - alloc_buf_gc
    - printf
    linkageType: ''
    returnType: int
    signature: 'int write_key_file(const int nkeys, const char *filename) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:897,1
    - Dst: cipher_valid
      Src: /src/openvpn/src/openvpn/crypto.c:904,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:898,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:900,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:902,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:906,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto.c:910,1
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/crypto.c:911,1
    - Dst: cipher_kt_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/crypto.c:914,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:918,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:934,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:941,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:961,1
    - Dst: warn_insecure_key_type
      Src: /src/openvpn/src/openvpn/crypto.c:927,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:949,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:953,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:923,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:921,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 47
    argCount: 5
    argNames:
    - kt
    - ciphername
    - authname
    - tls_mode
    - warn
    argTypes:
    - struct key_type*
    - char*
    - char*
    - bool
    - bool
    constantsTouched: []
    func_position:
      end: 968
      start: 891
    functionDepth: 0
    functionLinenumber: 891
    functionLinenumberEnd: 968
    functionName: init_key_type
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_ofb_cfb
    - cipher_kt_mode_cbc
    - msg
    - cipher_kt_block_size
    - strcmp
    - CLEAR
    - cipher_kt_mode_aead
    - ASSERT
    - cipher_valid
    - md_kt_size
    - warn_insecure_key_type
    linkageType: ''
    returnType: void
    signature: 'void init_key_type(struct key_type *kt, const char *ciphername, const
      char *authname, bool tls_mode, bool warn) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto.c:1126,1
    - Dst: free_key_ctx
      Src: /src/openvpn/src/openvpn/crypto.c:1127,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct key_ctx_bi*
    constantsTouched: []
    func_position:
      end: 1129
      start: 1123
    functionDepth: 0
    functionLinenumber: 1123
    functionLinenumberEnd: 1129
    functionName: free_key_ctx_bi
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - free_key_ctx
    linkageType: ''
    returnType: void
    signature: 'void free_key_ctx_bi(struct key_ctx_bi *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: np
      Src: /src/openvpn/src/openvpn/crypto.c:1316,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - str
    - is_inline
    argTypes:
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1317
      start: 1308
    functionDepth: 0
    functionLinenumber: 1308
    functionLinenumberEnd: 1317
    functionName: print_key_filename
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - np
    linkageType: ''
    returnType: char*
    signature: 'const char *print_key_filename(const char *str, bool is_inline) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1644,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1646,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 4
    argNames:
    - filename
    - option
    - key2
    - n
    argTypes:
    - char*
    - char*
    - struct key2*
    - int
    constantsTouched: []
    func_position:
      end: 1649
      start: 1638
    functionDepth: 0
    functionLinenumber: 1638
    functionLinenumberEnd: 1649
    functionName: must_have_n_keys
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void must_have_n_keys(const char *filename, const char *option, const
      struct key2 *key2, int n) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: check_key
      Src: /src/openvpn/src/openvpn/crypto.c:1740,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1742,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 9
    argCount: 3
    argNames:
    - key2
    - kt
    - shared_secret_file
    argTypes:
    - struct key2*
    - struct key_type*
    - char*
    constantsTouched: []
    func_position:
      end: 1746
      start: 1732
    functionDepth: 0
    functionLinenumber: 1732
    functionLinenumberEnd: 1746
    functionName: verify_fix_key2
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - msg
    - check_key
    linkageType: ''
    returnType: void
    signature: 'void verify_fix_key2(struct key2 *key2, const struct key_type *kt,
      const char *shared_secret_file) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/crypto.c:1885,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1889,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1891,1
    - Dst: BEND
      Src: /src/openvpn/src/openvpn/crypto.c:1889,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1887,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:1895,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - key
    - key_name
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 1898
      start: 1882
    functionDepth: 0
    functionLinenumber: 1882
    functionLinenumberEnd: 1898
    functionName: generate_ephemeral_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - msg
    - rand_bytes
    - BEND
    - buf_inc_len
    - BCAP
    linkageType: ''
    returnType: bool
    signature: 'bool generate_ephemeral_key(struct buffer *key, const char *key_name) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto.c:1134,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 2
    argNames:
    - key
    - kt
    argTypes:
    - struct key*
    - struct key_type*
    constantsTouched: []
    func_position:
      end: 1144
      start: 1131
    functionDepth: 0
    functionLinenumber: 1131
    functionLinenumberEnd: 1144
    functionName: key_is_zero
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_kt_key_size
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool key_is_zero(struct key *key, const struct key_type *kt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: read_key_file
      Src: /src/openvpn/src/openvpn/crypto.c:1334,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1338,1
    - Dst: key_direction_state_init
      Src: /src/openvpn/src/openvpn/crypto.c:1347,1
    - Dst: verify_fix_key2
      Src: /src/openvpn/src/openvpn/crypto.c:1344,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/crypto.c:1340,1
    - Dst: must_have_n_keys
      Src: /src/openvpn/src/openvpn/crypto.c:1348,1
    - Dst: init_key_ctx_bi
      Src: /src/openvpn/src/openvpn/crypto.c:1351,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/crypto.c:1356,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 15
    argCount: 8
    argNames:
    - key_type
    - ctx
    - key_file
    - key_inline
    - key_direction
    - key_name
    - opt_name
    - keydata
    argTypes:
    - struct key_type*
    - struct key_ctx_bi*
    - char*
    - bool
    - int
    - char*
    - char*
    - struct key2*
    constantsTouched: []
    func_position:
      end: 1357
      start: 1319
    functionDepth: 0
    functionLinenumber: 1319
    functionLinenumberEnd: 1357
    functionName: crypto_read_openvpn_key
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - print_key_filename
    - must_have_n_keys
    - msg
    - init_key_ctx_bi
    - secure_memzero
    - read_key_file
    - key_direction_state_init
    - verify_fix_key2
    linkageType: ''
    returnType: void
    signature: 'void crypto_read_openvpn_key(const struct key_type *key_type, struct
      key_ctx_bi *ctx, const char *key_file, bool key_inline, const int key_direction,
      const char *key_name, const char *opt_name, struct key2 *keydata) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:1658,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1668,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:1662,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - msglevel
    - str
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 1672
      start: 1651
    functionDepth: 0
    functionLinenumber: 1651
    functionLinenumberEnd: 1672
    functionName: ascii2keydirection
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - strcmp
    - msg
    linkageType: ''
    returnType: int
    signature: 'int ascii2keydirection(int msglevel, const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1751,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1751,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - output
    - len
    argTypes:
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1752
      start: 1748
    functionDepth: 0
    functionLinenumber: 1748
    functionLinenumberEnd: 1752
    functionName: prng_bytes
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - rand_bytes
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void prng_bytes(uint8_t *output, int len) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1906,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1913,1
    - Dst: buffer_read_from_file
      Src: /src/openvpn/src/openvpn/crypto.c:1910,1
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/crypto.c:1911,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/crypto.c:1920,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto.c:1920,1
    - Dst: crypto_pem_decode
      Src: /src/openvpn/src/openvpn/crypto.c:1923,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1925,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/crypto.c:1933,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1935,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 23
    argCount: 4
    argNames:
    - key
    - pem_name
    - key_file
    - key_inline
    argTypes:
    - struct buffer*
    - char*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1937
      start: 1900
    functionDepth: 0
    functionLinenumber: 1900
    functionLinenumberEnd: 1937
    functionName: read_pem_key_file
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - buffer_read_from_file
    - buf_set_read
    - buf_clear
    - msg
    - buf_valid
    - crypto_pem_decode
    - gc_new
    - gc_free
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'bool read_pem_key_file(struct buffer *key, const char *pem_name, const
      char *key_file, bool key_inline) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ssl_tls1_PRF
      Src: /src/openvpn/src/openvpn/crypto.c:1951,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto.c:1951,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/crypto.c:1955,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto.c:1952,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1956
      start: 1939
    functionDepth: 0
    functionLinenumber: 1939
    functionLinenumberEnd: 1956
    functionName: check_tls_prf_working
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - strlen
    - ssl_tls1_PRF
    - memcmp
    linkageType: ''
    returnType: bool
    signature: 'bool check_tls_prf_working(void) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: cipher_decrypt_verify_fail_exceeded
      Src: /src/openvpn/src/openvpn/crypto.c:452,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:462,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:463,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:465,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:466,1
    - Dst: packet_id_initialized
      Src: /src/openvpn/src/openvpn/crypto.c:473,1
    - Dst: packet_id_read_epoch
      Src: /src/openvpn/src/openvpn/crypto.c:504,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:507,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/crypto.c:524,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:553,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/crypto.c:567,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:582,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:595,1
    - Dst: cipher_ctx_final_check_tag
      Src: /src/openvpn/src/openvpn/crypto.c:586,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:585,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:564,1
    - Dst: cipher_ctx_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:567,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:574,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:616,1
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/crypto.c:448,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:461,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:466,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:468,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:470,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:466,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:468,1
    - Dst: cipher_ctx_iv_length
      Src: /src/openvpn/src/openvpn/crypto.c:492,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:537,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:537,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:592,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:575,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:554,1
    - Dst: crypto_check_replay
      Src: /src/openvpn/src/openvpn/crypto.c:597,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:594,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:560,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/crypto.c:559,1
    - Dst: cipher_ctx_update
      Src: /src/openvpn/src/openvpn/crypto.c:579,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:586,1
    - Dst: CRYPT_DROP
      Src: /src/openvpn/src/openvpn/crypto.c:454,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:460,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:473,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:485,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:502,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:502,1
    - Dst: cipher_decrypt_verify_fail_exceeded
      Src: /src/openvpn/src/openvpn/crypto.c:514,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:542,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:563,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:563,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:579,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:564,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:573,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:595,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:610,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:569,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:595,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:585,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:546,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:564,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/crypto.c:470,1
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/crypto.c:476,1
    - Dst: epoch_lookup_decrypt_key
      Src: /src/openvpn/src/openvpn/crypto.c:509,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:512,1
    - Dst: CRYPT_DROP
      Src: /src/openvpn/src/openvpn/crypto.c:516,1
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/crypto.c:521,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto.c:523,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:523,1
    - Dst: CRYPT_ERROR
      Src: /src/openvpn/src/openvpn/crypto.c:526,1
    - Dst: cipher_ctx_reset
      Src: /src/openvpn/src/openvpn/crypto.c:540,1
    - Dst: buf_inc_len
      Src: /src/openvpn/src/openvpn/crypto.c:592,1
    - Dst: crypto_clear_error
      Src: /src/openvpn/src/openvpn/crypto.c:614,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:558,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:559,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:564,1
    - Dst: CRYPT_DROP
      Src: /src/openvpn/src/openvpn/crypto.c:590,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:579,1
    - Dst: cipher_ctx_update_ad
      Src: /src/openvpn/src/openvpn/crypto.c:573,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 134
    argCount: 5
    argNames:
    - buf
    - work
    - opt
    - frame
    - ad_start
    argTypes:
    - struct buffer*
    - struct buffer
    - struct crypto_options*
    - struct frame*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 618
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 618
    functionName: openvpn_decrypt_aead
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - memcpy
    - epoch_lookup_decrypt_key
    - dmsg
    - crypto_clear_error
    - CRYPT_ERROR
    - cipher_ctx_final_check_tag
    - BLEN
    - packet_id_read
    - gc_init
    - buf_inc_len
    - packet_id_size
    - buf_safe
    - cipher_ctx_update
    - BPTR
    - cipher_ctx_iv_length
    - gc_free
    - buf_init
    - format_hex
    - packet_id_read_epoch
    - CRYPT_DROP
    - crypto_check_replay
    - packet_id_initialized
    - cipher_decrypt_verify_fail_exceeded
    - cipher_ctx_update_ad
    - ASSERT
    - cipher_ctx_reset
    - cipher_ctx_block_size
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'static bool openvpn_decrypt_aead(struct buffer *buf, struct buffer
      work, struct crypto_options *opt, const struct frame *frame, const uint8_t *ad_start) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_insecure
      Src: /src/openvpn/src/openvpn/crypto.c:877,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:879,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:884,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 886
      start: 874
    functionDepth: 0
    functionLinenumber: 874
    functionLinenumberEnd: 886
    functionName: warn_insecure_key_type
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - msg
    - cipher_kt_insecure
    - cipher_kt_block_size
    linkageType: ''
    returnType: void
    signature: 'static void warn_insecure_key_type(const char *ciphername) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:403,1
    - Dst: packet_id_reap_test
      Src: /src/openvpn/src/openvpn/crypto.c:409,1
    - Dst: packet_id_add
      Src: /src/openvpn/src/openvpn/crypto.c:412,1
    - Dst: packet_id_test
      Src: /src/openvpn/src/openvpn/crypto.c:410,1
    - Dst: epoch_replace_update_recv_key
      Src: /src/openvpn/src/openvpn/crypto.c:405,1
    - Dst: packet_id_persist_save_obj
      Src: /src/openvpn/src/openvpn/crypto.c:415,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:423,1
    - Dst: packet_id_net_print
      Src: /src/openvpn/src/openvpn/crypto.c:426,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 28
    argCount: 5
    argNames:
    - opt
    - pin
    - epoch
    - error_prefix
    - gc
    argTypes:
    - struct crypto_options*
    - struct packet_id_net*
    - uint16_t
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 430
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 430
    functionName: crypto_check_replay
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - packet_id_test
    - packet_id_reap_test
    - epoch_replace_update_recv_key
    - packet_id_add
    - msg
    - packet_id_persist_save_obj
    - packet_id_net_print
    linkageType: ''
    returnType: bool
    signature: 'bool crypto_check_replay(struct crypto_options *opt, const struct
      packet_id_net *pin, uint16_t epoch, const char *error_prefix, struct gc_arena
      *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/crypto.c:824,1
    - Dst: cipher_kt_iv_size
      Src: /src/openvpn/src/openvpn/crypto.c:841,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto.c:830,1
    - Dst: cipher_kt_tag_size
      Src: /src/openvpn/src/openvpn/crypto.c:835,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:842,1
    - Dst: cipher_defined
      Src: /src/openvpn/src/openvpn/crypto.c:847,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:852,1
    - Dst: cipher_kt_iv_size
      Src: /src/openvpn/src/openvpn/crypto.c:855,1
    - Dst: md_defined
      Src: /src/openvpn/src/openvpn/crypto.c:857,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:859,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 3
    argNames:
    - kt
    - pkt_id_size
    - occ
    argTypes:
    - struct key_type*
    - unsigned int
    - bool
    constantsTouched: []
    func_position:
      end: 864
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 864
    functionName: calculate_crypto_overhead
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_cbc
    - cipher_kt_iv_size
    - md_defined
    - cipher_kt_block_size
    - cipher_defined
    - cipher_kt_mode_aead
    - cipher_kt_tag_size
    - md_kt_size
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int calculate_crypto_overhead(const struct key_type *kt,
      unsigned int pkt_id_size, bool occ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: prng_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1759,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1765
      start: 1755
    functionDepth: 0
    functionLinenumber: 1755
    functionLinenumberEnd: 1765
    functionName: get_random
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - prng_bytes
    linkageType: ''
    returnType: long int
    signature: 'long int get_random(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_cipher_name_pair
      Src: /src/openvpn/src/openvpn/crypto.c:1834,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - cipher_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1842
      start: 1831
    functionDepth: 0
    functionLinenumber: 1831
    functionLinenumberEnd: 1842
    functionName: translate_cipher_name_to_openvpn
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - get_cipher_name_pair
    linkageType: ''
    returnType: char*
    signature: 'const char *translate_cipher_name_to_openvpn(const char *cipher_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/crypto.c:869,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/crypto.c:871,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 872
      start: 866
    functionDepth: 0
    functionLinenumber: 866
    functionLinenumberEnd: 872
    functionName: crypto_max_overhead
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - packet_id_size
    - max_int
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int crypto_max_overhead(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1770,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/crypto.c:1771,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto.c:1772,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1776,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:1774,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1780,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:1780,1
    - Dst: cipher_kt_mode_cbc
      Src: /src/openvpn/src/openvpn/crypto.c:1783,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1785,1
    - Dst: cipher_valid_reason
      Src: /src/openvpn/src/openvpn/crypto.c:1789,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1794,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1791,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1795
      start: 1767
    functionDepth: 0
    functionLinenumber: 1767
    functionLinenumberEnd: 1795
    functionName: print_cipher
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - cipher_kt_key_size
    - cipher_kt_mode_cbc
    - cipher_kt_block_size
    - cipher_valid_reason
    - cipher_kt_name
    - printf
    linkageType: ''
    returnType: void
    signature: 'void print_cipher(const char *ciphername) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1847,1
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/crypto.c:1849,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1852,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1854,1
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/crypto.c:1850,1
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/crypto.c:1857,1
    - Dst: crypto_pem_encode
      Src: /src/openvpn/src/openvpn/crypto.c:1858,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1861,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto.c:1865,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto.c:1867,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/crypto.c:1876,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/crypto.c:1877,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1878,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto.c:1867,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1871,1
    - Dst: buffer_write_file
      Src: /src/openvpn/src/openvpn/crypto.c:1869,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto.c:1867,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 28
    argCount: 2
    argNames:
    - filename
    - pem_name
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 1880
      start: 1844
    functionDepth: 0
    functionLinenumber: 1844
    functionLinenumberEnd: 1880
    functionName: write_pem_key_file
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - clear_buf
    - buf_set_read
    - crypto_pem_encode
    - buf_clear
    - BPTR
    - msg
    - BLEN
    - gc_new
    - strcmp
    - rand_bytes
    - secure_memzero
    - buffer_write_file
    - gc_free
    - printf
    linkageType: ''
    returnType: void
    signature: 'void write_pem_key_file(const char *filename, const char *pem_name) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto.c:1022,1
    - Dst: cipher_defined
      Src: /src/openvpn/src/openvpn/crypto.c:1020,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto.c:1028,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1030,1
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto.c:1033,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:1031,1
    - Dst: md_defined
      Src: /src/openvpn/src/openvpn/crypto.c:1038,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1048,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:1049,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:1053,1
    - Dst: cipher_ctx_init
      Src: /src/openvpn/src/openvpn/crypto.c:1024,1
    - Dst: cipher_kt_key_size
      Src: /src/openvpn/src/openvpn/crypto.c:1031,1
    - Dst: hmac_ctx_new
      Src: /src/openvpn/src/openvpn/crypto.c:1041,1
    - Dst: hmac_ctx_init
      Src: /src/openvpn/src/openvpn/crypto.c:1042,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:1046,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:1049,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1018,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:1019,1
    - Dst: cipher_ctx_new
      Src: /src/openvpn/src/openvpn/crypto.c:1023,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1027,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1040,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1044,1
    - Dst: md_kt_name
      Src: /src/openvpn/src/openvpn/crypto.c:1046,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1058,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto.c:1022,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/crypto.c:1026,1
    - Dst: warn_insecure_key_type
      Src: /src/openvpn/src/openvpn/crypto.c:1035,1
    - Dst: cipher_kt_iv_size
      Src: /src/openvpn/src/openvpn/crypto.c:1034,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1032,1
    - Dst: md_kt_size
      Src: /src/openvpn/src/openvpn/crypto.c:1040,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1051,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/crypto.c:1054,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 42
    argCount: 5
    argNames:
    - ctx
    - key
    - kt
    - enc
    - prefix
    argTypes:
    - struct key_ctx*
    - struct key_parameters*
    - struct key_type*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 1059
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1059
    functionName: init_key_ctx
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - hmac_ctx_size
    - dmsg
    - msg
    - md_defined
    - cipher_ctx_new
    - md_kt_size
    - md_kt_name
    - cipher_kt_iv_size
    - cipher_kt_block_size
    - gc_new
    - gc_free
    - warn_insecure_key_type
    - cipher_kt_key_size
    - format_hex
    - CLEAR
    - hmac_ctx_new
    - cipher_kt_name
    - cipher_ctx_init
    - hmac_ctx_init
    - cipher_defined
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void init_key_ctx(struct key_ctx *ctx, const struct key_parameters
      *key, const struct key_type *kt, int enc, const char *prefix) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/crypto.c:1174,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto.c:1180,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1177,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/crypto.c:1178,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/crypto.c:1176,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1183,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:1183,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto.c:1184,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/crypto.c:1184,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/crypto.c:1186,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 1
    argNames:
    - key
    argTypes:
    - struct key*
    constantsTouched: []
    func_position:
      end: 1187
      start: 1168
    functionDepth: 0
    functionLinenumber: 1168
    functionLinenumberEnd: 1187
    functionName: generate_key_random
    functionSourceFile: /src/openvpn/src/openvpn/crypto.c
    functionUses: []
    functionsReached:
    - format_hex
    - dmsg
    - msg
    - gc_new
    - rand_bytes
    - CLEAR
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void generate_key_random(struct key *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - mac
    argTypes:
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: is_mac_mcast_addr
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_mac_mcast_addr(const uint8_t *mac) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - addr
    argTypes:
    - struct in6_addr
    constantsTouched: []
    func_position:
      end: 146
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 146
    functionName: mroute_is_mcast_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool mroute_is_mcast_ipv6(const struct in6_addr addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_mac_mcast_addr
      Src: /src/openvpn/src/openvpn/mroute.c:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - addr
    argTypes:
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 58
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: is_mac_mcast_maddr
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - is_mac_mcast_addr
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_mac_mcast_maddr(const struct mroute_addr *addr) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mroute.c:154,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mroute.c:159,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mroute.c:161,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mroute.c:183,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mroute.c:185,1
    - Dst: mroute_get_in6_addr
      Src: /src/openvpn/src/openvpn/mroute.c:195,1
    - Dst: mroute_is_mcast_ipv6
      Src: /src/openvpn/src/openvpn/mroute.c:197,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mroute.c:188,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/mroute.c:190,1
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/mroute.c:156,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mroute.c:156,1
    - Dst: mroute_get_in_addr_t
      Src: /src/openvpn/src/openvpn/mroute.c:163,1
    - Dst: mroute_get_in6_addr
      Src: /src/openvpn/src/openvpn/mroute.c:194,1
    - Dst: mroute_get_in_addr_t
      Src: /src/openvpn/src/openvpn/mroute.c:164,1
    - Dst: mroute_is_mcast
      Src: /src/openvpn/src/openvpn/mroute.c:167,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/mroute.c:189,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mroute.c:207,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/mroute.c:191,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/mroute.c:187,1
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/mroute.c:208,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mroute.c:208,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 38
    argCount: 3
    argNames:
    - src
    - dest
    - buf
    argTypes:
    - struct mroute_addr*
    - struct mroute_addr*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 212
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 212
    functionName: mroute_extract_addr_ip
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - mroute_get_in_addr_t
    - BPTR
    - mroute_is_mcast_ipv6
    - msg
    - mroute_is_mcast
    - BLEN
    - OPENVPN_IPH_GET_VER
    - gc_new
    - print_in6_addr
    - gc_free
    - mroute_get_in6_addr
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int mroute_extract_addr_ip(struct mroute_addr *src, struct
      mroute_addr *dest, const struct buffer *buf) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/mroute.c:332,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mroute.c:358,1
    - Dst: netbits_to_netmask
      Src: /src/openvpn/src/openvpn/mroute.c:333,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mroute.c:354,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/mroute.c:334,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 30
    argCount: 1
    argNames:
    - ma
    argTypes:
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 360
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 360
    functionName: mroute_addr_mask_host_bits
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - ASSERT
    - htonl
    - ntohl
    - netbits_to_netmask
    linkageType: ''
    returnType: void
    signature: 'void mroute_addr_mask_host_bits(struct mroute_addr *ma) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/mroute.c:222,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 3
    argNames:
    - maddr
    - ether_addr
    - vid
    argTypes:
    - struct mroute_addr*
    - uint8_t*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 225
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 225
    functionName: mroute_copy_ether_to_addr
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void
    signature: 'static void mroute_copy_ether_to_addr(struct mroute_addr *maddr, const
      uint8_t *ether_addr, uint16_t vid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mroute_addr_print_ex
      Src: /src/openvpn/src/openvpn/mroute.c:386,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 2
    argNames:
    - ma
    - gc
    argTypes:
    - struct mroute_addr*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 387
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 387
    functionName: mroute_addr_print
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - mroute_addr_print_ex
    linkageType: ''
    returnType: char*
    signature: 'const char *mroute_addr_print(const struct mroute_addr *ma, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/mroute.c:40,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - addr
    argTypes:
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: mroute_addr_init
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void mroute_addr_init(struct mroute_addr *addr) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/mroute.c:234,1
    - Dst: is_mac_mcast_addr
      Src: /src/openvpn/src/openvpn/mroute.c:246,1
    - Dst: mroute_copy_ether_to_addr
      Src: /src/openvpn/src/openvpn/mroute.c:239,1
    - Dst: mroute_copy_ether_to_addr
      Src: /src/openvpn/src/openvpn/mroute.c:243,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mroute.c:236,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 13
    argCount: 4
    argNames:
    - src
    - dest
    - vid
    - buf
    argTypes:
    - struct mroute_addr*
    - struct mroute_addr*
    - uint16_t
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 256
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 256
    functionName: mroute_extract_addr_ether
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - is_mac_mcast_addr
    - BLEN
    - mroute_copy_ether_to_addr
    - BPTR
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int mroute_extract_addr_ether(struct mroute_addr *src, struct
      mroute_addr *dest, uint16_t vid, const struct buffer *buf) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:442,1
    - Dst: IN6_IS_ADDR_V4MAPPED
      Src: /src/openvpn/src/openvpn/mroute.c:444,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/mroute.c:442,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:455,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/mroute.c:455,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/mroute.c:472,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:402,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/mroute.c:402,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:411,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/mroute.c:433,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:433,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:451,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/mroute.c:451,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:463,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:404,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:415,1
    - Dst: proto2ascii
      Src: /src/openvpn/src/openvpn/mroute.c:415,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:417,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/mroute.c:417,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:428,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:446,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/mroute.c:446,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/mroute.c:394,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/mroute.c:417,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/mroute.c:424,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:424,1
    - Dst: netbits_to_netmask
      Src: /src/openvpn/src/openvpn/mroute.c:423,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:459,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/mroute.c:459,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:469,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 61
    argCount: 3
    argNames:
    - ma
    - flags
    - gc
    argTypes:
    - struct mroute_addr*
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 478
      start: 389
    functionDepth: 0
    functionLinenumber: 389
    functionLinenumberEnd: 478
    functionName: mroute_addr_print_ex
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - netbits_to_netmask
    - ntohs
    - BSTR
    - buf_printf
    - print_in_addr_t
    - ntohl
    - IN6_IS_ADDR_V4MAPPED
    - format_hex_ex
    - print_in6_addr
    - proto2ascii
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *mroute_addr_print_ex(const struct mroute_addr *ma, const
      unsigned int flags, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 3
    argNames:
    - ma
    - src
    - mask
    argTypes:
    - struct mroute_addr*
    - struct in6_addr
    - unsigned int
    constantsTouched: []
    func_position:
      end: 131
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 131
    functionName: mroute_get_in6_addr
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void mroute_get_in6_addr(struct mroute_addr *ma, const
      struct in6_addr src, unsigned int mask) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash_func
      Src: /src/openvpn/src/openvpn/mroute.c:370,1
    - Dst: mroute_addr_hash_ptr
      Src: /src/openvpn/src/openvpn/mroute.c:370,1
    - Dst: mroute_addr_hash_len
      Src: /src/openvpn/src/openvpn/mroute.c:371,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - key
    - iv
    argTypes:
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 373
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 373
    functionName: mroute_addr_hash_function
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - hash_func
    - mroute_addr_hash_len
    - mroute_addr_hash_ptr
    linkageType: ''
    returnType: uint32_t
    signature: 'uint32_t mroute_addr_hash_function(const void *key, uint32_t iv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/mroute.c:490,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 1
    argNames:
    - ageable_ttl_secs
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 493
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 493
    functionName: mroute_helper_init
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct mroute_helper*
    signature: 'struct mroute_helper *mroute_helper_init(int ageable_ttl_secs) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mroute.c:529,1
    - Dst: mroute_helper_regenerate
      Src: /src/openvpn/src/openvpn/mroute.c:534,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - mh
    - netbits
    argTypes:
    - struct mroute_helper*
    - int
    constantsTouched: []
    func_position:
      end: 537
      start: 524
    functionDepth: 0
    functionLinenumber: 524
    functionLinenumberEnd: 537
    functionName: mroute_helper_add_iroute46
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - ASSERT
    - mroute_helper_regenerate
    linkageType: ''
    returnType: void
    signature: 'void mroute_helper_add_iroute46(struct mroute_helper *mh, int netbits) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/mroute.c:136,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/mroute.c:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - addr
    argTypes:
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 137
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 137
    functionName: mroute_is_mcast
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - htonl
    linkageType: ''
    returnType: bool
    signature: 'static inline bool mroute_is_mcast(const in_addr_t addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mroute_addr_equal
      Src: /src/openvpn/src/openvpn/mroute.c:378,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 380
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 380
    functionName: mroute_addr_compare_function
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - mroute_addr_equal
    linkageType: ''
    returnType: bool
    signature: 'bool mroute_addr_compare_function(const void *key1, const void *key2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/mroute.c:509,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/mroute.c:511,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:516,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/mroute.c:513,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/mroute.c:512,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/mroute.c:518,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/mroute.c:518,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/mroute.c:519,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - mh
    argTypes:
    - struct mroute_helper*
    constantsTouched: []
    func_position:
      end: 522
      start: 495
    functionDepth: 0
    functionLinenumber: 495
    functionLinenumberEnd: 522
    functionName: mroute_helper_regenerate
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - check_debug_level
    - dmsg
    - buf_printf
    - BSTR
    - gc_new
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void mroute_helper_regenerate(struct mroute_helper *mh) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mroute.c:544,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mroute.c:547,1
    - Dst: mroute_helper_regenerate
      Src: /src/openvpn/src/openvpn/mroute.c:550,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - mh
    - netbits
    argTypes:
    - struct mroute_helper*
    - int
    constantsTouched: []
    func_position:
      end: 553
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 553
    functionName: mroute_helper_del_iroute46
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - ASSERT
    - mroute_helper_regenerate
    linkageType: ''
    returnType: void
    signature: 'void mroute_helper_del_iroute46(struct mroute_helper *mh, int netbits) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/mroute.c:558,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - mh
    argTypes:
    - struct mroute_helper*
    constantsTouched: []
    func_position:
      end: 559
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 559
    functionName: mroute_helper_free
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void mroute_helper_free(struct mroute_helper *mh) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mroute.c:87,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mroute.c:95,1
    - Dst: is_mac_mcast_maddr
      Src: /src/openvpn/src/openvpn/mroute.c:99,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mroute.c:88,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mroute.c:94,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mroute.c:101,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mroute.c:102,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 2
    argNames:
    - addr
    - gc
    argTypes:
    - struct mroute_addr*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 107
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 107
    functionName: mroute_learnable_address
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached:
    - mroute_addr_print
    - msg
    - is_mac_mcast_maddr
    linkageType: ''
    returnType: bool
    signature: 'bool mroute_learnable_address(const struct mroute_addr *addr, struct
      gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 33
    argCount: 3
    argNames:
    - addr
    - osaddr
    - use_port
    argTypes:
    - struct mroute_addr*
    - struct openvpn_sockaddr*
    - bool
    constantsTouched: []
    func_position:
      end: 316
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 316
    functionName: mroute_extract_openvpn_sockaddr
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool mroute_extract_openvpn_sockaddr(struct mroute_addr *addr, const
      struct openvpn_sockaddr *osaddr, bool use_port) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 3
    argNames:
    - ma
    - src
    - mask
    argTypes:
    - struct mroute_addr*
    - in_addr_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 119
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 119
    functionName: mroute_get_in_addr_t
    functionSourceFile: /src/openvpn/src/openvpn/mroute.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void mroute_get_in_addr_t(struct mroute_addr *ma, const
      in_addr_t src, unsigned int mask) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_clear_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 62
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 62
    functionName: tls_clear_error
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.h
    functionUses: []
    functionsReached:
    - ERR_clear_error
    linkageType: ''
    returnType: void
    signature: 'static inline void tls_clear_error(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 2
    argNames:
    - err
    - msg
    argTypes:
    - DWORD
    - char*
    constantsTouched: []
    func_position:
      end: 123
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 123
    functionName: default_msg_handler
    functionSourceFile: /src/openvpn/src/openvpn/wfp_block.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void default_msg_handler(DWORD err, const char *msg) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:310,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:295,1
    - Dst: msg_handler
      Src: /src/openvpn/src/openvpn/wfp_block.c:297,1
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:334,1
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:340,1
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:357,1
    - Dst: FwpmFreeMemory0
      Src: /src/openvpn/src/openvpn/wfp_block.c:365,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:215,1
    - Dst: msg_handler
      Src: /src/openvpn/src/openvpn/wfp_block.c:216,1
    - Dst: FwpmGetAppIdFromFileName0
      Src: /src/openvpn/src/openvpn/wfp_block.c:243,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:244,1
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:294,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:316,1
    - Dst: msg_handler
      Src: /src/openvpn/src/openvpn/wfp_block.c:318,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:353,1
    - Dst: FwpmEngineClose0
      Src: /src/openvpn/src/openvpn/wfp_block.c:370,1
    - Dst: FwpmEngineOpen0
      Src: /src/openvpn/src/openvpn/wfp_block.c:214,1
    - Dst: msg_handler
      Src: /src/openvpn/src/openvpn/wfp_block.c:222,1
    - Dst: msg_handler
      Src: /src/openvpn/src/openvpn/wfp_block.c:232,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:236,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:241,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:290,1
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:315,1
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:352,1
    - Dst: msg_handler
      Src: /src/openvpn/src/openvpn/wfp_block.c:360,1
    - Dst: FwpmSubLayerGetByKey0
      Src: /src/openvpn/src/openvpn/wfp_block.c:219,1
    - Dst: FwpmFreeMemory0
      Src: /src/openvpn/src/openvpn/wfp_block.c:223,1
    - Dst: add_sublayer
      Src: /src/openvpn/src/openvpn/wfp_block.c:228,1
    - Dst: ConvertInterfaceIndexToLuid
      Src: /src/openvpn/src/openvpn/wfp_block.c:240,1
    - Dst: FwpmFilterAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:289,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:311,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:335,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:341,1
    - Dst: msg_handler
      Src: /src/openvpn/src/openvpn/wfp_block.c:343,1
    - Dst: OUT_ON_ERROR
      Src: /src/openvpn/src/openvpn/wfp_block.c:358,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 124
    argCount: 5
    argNames:
    - engine_handle
    - index
    - exe_path
    - msg_handler
    - dns_only
    argTypes:
    - HANDLE*
    - int
    - WCHAR*
    - wfp_block_msg_handler_t
    - BOOL
    constantsTouched: []
    func_position:
      end: 375
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 375
    functionName: add_wfp_block_filters
    functionSourceFile: /src/openvpn/src/openvpn/wfp_block.c
    functionUses: []
    functionsReached:
    - FwpmFreeMemory0
    - FwpmGetAppIdFromFileName0
    - FwpmEngineClose0
    - add_sublayer
    - OUT_ON_ERROR
    - FwpmSubLayerGetByKey0
    - FwpmFilterAdd0
    - msg_handler
    - ConvertInterfaceIndexToLuid
    - FwpmEngineOpen0
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD add_wfp_block_filters(HANDLE *engine_handle, int index, const
      WCHAR *exe_path, wfp_block_msg_handler_t msg_handler, BOOL dns_only) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FwpmEngineClose0
      Src: /src/openvpn/src/openvpn/wfp_block.c:386,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - engine_handle
    argTypes:
    - HANDLE
    constantsTouched: []
    func_position:
      end: 389
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 389
    functionName: delete_wfp_block_filters
    functionSourceFile: /src/openvpn/src/openvpn/wfp_block.c
    functionUses: []
    functionsReached:
    - FwpmEngineClose0
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD delete_wfp_block_filters(HANDLE engine_handle) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: InitializeIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/wfp_block.c:447,1
    - Dst: SetIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/wfp_block.c:467,1
    - Dst: GetIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/wfp_block.c:450,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 3
    argNames:
    - index
    - family
    - metric
    argTypes:
    - NET_IFINDEX
    - ADDRESS_FAMILY
    - ULONG
    constantsTouched: []
    func_position:
      end: 474
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 474
    functionName: set_interface_metric
    functionSourceFile: /src/openvpn/src/openvpn/wfp_block.c
    functionUses: []
    functionsReached:
    - SetIpInterfaceEntry
    - InitializeIpInterfaceEntry
    - GetIpInterfaceEntry
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD set_interface_metric(const NET_IFINDEX index, const ADDRESS_FAMILY
      family, const ULONG metric) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/openvpn/wfp_block.c:139,1
    - Dst: FwpmEngineClose0
      Src: /src/openvpn/src/openvpn/wfp_block.c:160,1
    - Dst: FwpmEngineOpen0
      Src: /src/openvpn/src/openvpn/wfp_block.c:142,1
    - Dst: FwpmSubLayerAdd0
      Src: /src/openvpn/src/openvpn/wfp_block.c:155,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/wfp_block.c:140,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - uuid
    argTypes:
    - GUID
    constantsTouched: []
    func_position:
      end: 163
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 163
    functionName: add_sublayer
    functionSourceFile: /src/openvpn/src/openvpn/wfp_block.c
    functionUses: []
    functionsReached:
    - memset
    - FwpmSubLayerAdd0
    - FwpmEngineClose0
    - FwpmEngineOpen0
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD add_sublayer(GUID uuid) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: InitializeIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/wfp_block.c:407,1
    - Dst: GetIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/wfp_block.c:415,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 3
    argNames:
    - index
    - family
    - is_auto
    argTypes:
    - NET_IFINDEX
    - ADDRESS_FAMILY
    - int*
    constantsTouched: []
    func_position:
      end: 429
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 429
    functionName: get_interface_metric
    functionSourceFile: /src/openvpn/src/openvpn/wfp_block.c
    functionUses: []
    functionsReached:
    - InitializeIpInterfaceEntry
    - GetIpInterfaceEntry
    linkageType: ''
    returnType: int
    signature: 'int get_interface_metric(const NET_IFINDEX index, const ADDRESS_FAMILY
      family, int *is_auto) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/reliable.c:384,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/reliable.c:386,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 387
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 387
    functionName: reliable_free
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - free_buf
    - free
    linkageType: ''
    returnType: void
    signature: 'void reliable_free(struct reliable *rel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:516,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:526,1
    - Dst: reliable_print_ids
      Src: /src/openvpn/src/openvpn/reliable.c:523,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:522,1
    - Dst: reliable_pid_in_range2
      Src: /src/openvpn/src/openvpn/reliable.c:518,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:528,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - rel
    - id
    argTypes:
    - struct reliable*
    - packet_id_type
    constantsTouched: []
    func_position:
      end: 530
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 530
    functionName: reliable_wont_break_sequentiality
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - reliable_pid_in_range2
    - dmsg
    - gc_new
    - gc_free
    - reliable_print_ids
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_wont_break_sequentiality(const struct reliable *rel,
      packet_id_type id) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:839,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:842,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - ack
    - desc
    argTypes:
    - struct reliable_ack*
    - char*
    constantsTouched: []
    func_position:
      end: 844
      start: 834
    functionDepth: 0
    functionLinenumber: 834
    functionLinenumberEnd: 844
    functionName: reliable_ack_debug_print
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: 'void reliable_ack_debug_print(const struct reliable_ack *ack, char
      *desc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: copy_acks_to_mru
      Src: /src/openvpn/src/openvpn/reliable.c:268,1
    - Dst: BDEF
      Src: /src/openvpn/src/openvpn/reliable.c:274,1
    - Dst: buf_sub
      Src: /src/openvpn/src/openvpn/reliable.c:273,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/reliable.c:271,1
    - Dst: ACK_SIZE
      Src: /src/openvpn/src/openvpn/reliable.c:273,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:278,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/reliable.c:278,1
    - Dst: htonpid
      Src: /src/openvpn/src/openvpn/reliable.c:286,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:287,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/reliable.c:287,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:293,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:292,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/reliable.c:292,1
    - Dst: session_id_write
      Src: /src/openvpn/src/openvpn/reliable.c:293,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:288,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 34
    argCount: 6
    argNames:
    - ack
    - ack_mru
    - buf
    - sid
    - max
    - prepend
    argTypes:
    - struct reliable_ack*
    - struct reliable_ack*
    - struct buffer*
    - struct session_id*
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 308
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 308
    functionName: reliable_ack_write
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - buf_sub
    - ACK_SIZE
    - buf_write
    - dmsg
    - copy_acks_to_mru
    - min_int
    - session_id_defined
    - ASSERT
    - BDEF
    - session_id_write
    - buf_write_u8
    - htonpid
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_ack_write(struct reliable_ack *ack, struct reliable_ack
      *ack_mru, struct buffer *buf, const struct session_id *sid, int max, bool prepend) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/reliable.c:850,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:852,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:855,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:853,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:854,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:861,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:862,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/reliable.c:863,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 2
    argNames:
    - rel
    - desc
    argTypes:
    - struct reliable*
    - char*
    constantsTouched: []
    func_position:
      end: 866
      start: 846
    functionDepth: 0
    functionLinenumber: 846
    functionLinenumberEnd: 866
    functionName: reliable_debug_print
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - update_time
    - printf
    linkageType: ''
    returnType: void
    signature: 'void reliable_debug_print(const struct reliable *rel, char *desc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reliable_ack_packet_id_present
      Src: /src/openvpn/src/openvpn/reliable.c:133,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:141,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:136,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - ack
    - pid
    argTypes:
    - struct reliable_ack*
    - packet_id_type
    constantsTouched: []
    func_position:
      end: 144
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 144
    functionName: reliable_ack_acknowledge_packet_id
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    - reliable_ack_packet_id_present
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_ack_acknowledge_packet_id(struct reliable_ack *ack,
      packet_id_type pid) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:212,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 3
    argNames:
    - ack
    - ack_mru
    - n
    argTypes:
    - struct reliable_ack*
    - struct reliable_ack*
    - int
    constantsTouched: []
    func_position:
      end: 249
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 249
    functionName: copy_acks_to_mru
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void copy_acks_to_mru(struct reliable_ack *ack, struct reliable_ack
      *ack_mru, int n) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:635,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:650,1
    - Dst: reliable_print_ids
      Src: /src/openvpn/src/openvpn/reliable.c:653,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:655,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 16
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 657
      start: 632
    functionDepth: 0
    functionLinenumber: 632
    functionLinenumberEnd: 657
    functionName: reliable_can_send
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - reliable_print_ids
    - gc_free
    - gc_new
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_can_send(const struct reliable *rel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/reliable.c:117,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:125,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:120,1
    - Dst: ntohpid
      Src: /src/openvpn/src/openvpn/reliable.c:119,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - buf
    - pid
    argTypes:
    - struct buffer*
    - packet_id_type*
    constantsTouched: []
    func_position:
      end: 127
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 127
    functionName: reliable_ack_read_packet_id
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - buf_read
    - ntohpid
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_ack_read_packet_id(struct buffer *buf, packet_id_type
      *pid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/reliable.c:360,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:369,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/reliable.c:369,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/reliable.c:368,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:361,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 5
    argNames:
    - rel
    - buf_size
    - offset
    - array_size
    - hold
    argTypes:
    - struct reliable*
    - int
    - int
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 371
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 371
    functionName: reliable_init
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - CLEAR
    - buf_init
    - ASSERT
    - alloc_buf
    linkageType: ''
    returnType: void
    signature: 'void reliable_init(struct reliable *rel, int buf_size, int offset,
      int array_size, bool hold) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 7
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 629
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 629
    functionName: reliable_get_entry_sequenced
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct reliable_entry*
    signature: 'struct reliable_entry *reliable_get_entry_sequenced(struct reliable
      *rel) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/reliable.c:318,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/reliable.c:320,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/reliable.c:327,1
    - Dst: ntohpid
      Src: /src/openvpn/src/openvpn/reliable.c:331,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/reliable.c:321,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/reliable.c:332,1
    - Dst: session_id_read
      Src: /src/openvpn/src/openvpn/reliable.c:336,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/reliable.c:342,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/reliable.c:342,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/reliable.c:347,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/reliable.c:348,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 24
    argCount: 3
    argNames:
    - buf
    - verbose
    - gc
    argTypes:
    - struct buffer*
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 349
      start: 311
    functionDepth: 0
    functionLinenumber: 311
    functionLinenumberEnd: 349
    functionName: reliable_ack_print
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - buf_read
    - session_id_read
    - session_id_print
    - ntohpid
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *reliable_ack_print(struct buffer *buf, bool verbose, struct
      gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:703,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 714
      start: 699
    functionDepth: 0
    functionLinenumber: 699
    functionLinenumberEnd: 714
    functionName: reliable_schedule_now
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void reliable_schedule_now(struct reliable *rel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:771,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:781,1
    - Dst: reliable_pid_min
      Src: /src/openvpn/src/openvpn/reliable.c:771,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:777,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 4
    argNames:
    - rel
    - buf
    - pid
    - opcode
    argTypes:
    - struct reliable*
    - struct buffer*
    - packet_id_type
    - int
    constantsTouched: []
    func_position:
      end: 782
      start: 755
    functionDepth: 0
    functionLinenumber: 755
    functionLinenumberEnd: 782
    functionName: reliable_mark_active_incoming
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    - ASSERT
    - reliable_pid_min
    linkageType: ''
    returnType: void
    signature: 'void reliable_mark_active_incoming(struct reliable *rel, struct buffer
      *buf, packet_id_type pid, int opcode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - test
    - base
    argTypes:
    - packet_id_type
    - packet_id_type
    constantsTouched: []
    func_position:
      end: 47
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 47
    functionName: subtract_pid
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: packet_id_type
    signature: 'static inline packet_id_type subtract_pid(const packet_id_type test,
      const packet_id_type base) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - ack
    - pid
    argTypes:
    - struct reliable_ack*
    - packet_id_type
    constantsTouched: []
    func_position:
      end: 109
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 109
    functionName: reliable_ack_packet_id_present
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool reliable_ack_packet_id_present(struct reliable_ack
      *ack, packet_id_type pid) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reliable_ack_parse
      Src: /src/openvpn/src/openvpn/reliable.c:153,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/reliable.c:158,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:161,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:162,1
    - Dst: session_id_equal
      Src: /src/openvpn/src/openvpn/reliable.c:159,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/reliable.c:164,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/reliable.c:164,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:165,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 17
    argCount: 3
    argNames:
    - ack
    - buf
    - sid
    argTypes:
    - struct reliable_ack*
    - struct buffer*
    - struct session_id*
    constantsTouched: []
    func_position:
      end: 169
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 169
    functionName: reliable_ack_read
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    - reliable_ack_parse
    - session_id_equal
    - gc_new
    - gc_free
    - session_id_print
    - session_id_defined
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_ack_read(struct reliable_ack *ack, struct buffer *buf,
      const struct session_id *sid) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:418,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/reliable.c:427,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 19
    argCount: 2
    argNames:
    - rel
    - ack
    argTypes:
    - struct reliable*
    - struct reliable_ack*
    constantsTouched: []
    func_position:
      end: 443
      start: 406
    functionDepth: 0
    functionLinenumber: 406
    functionLinenumberEnd: 443
    functionName: reliable_send_purge
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - msg
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void reliable_send_purge(struct reliable *rel, const struct reliable_ack
      *ack) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:583,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:609,1
    - Dst: reliable_pid_min
      Src: /src/openvpn/src/openvpn/reliable.c:595,1
    - Dst: reliable_pid_in_range1
      Src: /src/openvpn/src/openvpn/reliable.c:603,1
    - Dst: reliable_get_buf
      Src: /src/openvpn/src/openvpn/reliable.c:605,1
    - Dst: reliable_print_ids
      Src: /src/openvpn/src/openvpn/reliable.c:609,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:611,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 22
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 613
      start: 580
    functionDepth: 0
    functionLinenumber: 580
    functionLinenumberEnd: 613
    functionName: reliable_get_buf_output_sequenced
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    - reliable_get_buf
    - gc_new
    - reliable_pid_min
    - gc_free
    - reliable_pid_in_range1
    - reliable_print_ids
    linkageType: ''
    returnType: struct buffer*
    signature: 'struct buffer *reliable_get_buf_output_sequenced(struct reliable *rel) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reliable_pid_min
      Src: /src/openvpn/src/openvpn/reliable.c:677,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:690,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 22
    argCount: 2
    argNames:
    - rel
    - opcode
    argTypes:
    - struct reliable*
    - int*
    constantsTouched: []
    func_position:
      end: 696
      start: 660
    functionDepth: 0
    functionLinenumber: 660
    functionLinenumberEnd: 696
    functionName: reliable_send
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    - reliable_pid_min
    linkageType: ''
    returnType: struct buffer*
    signature: 'struct buffer *reliable_send(struct reliable *rel, int *opcode) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:721,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:743,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/reliable.c:738,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:747,1
    - Dst: reliable_print_ids
      Src: /src/openvpn/src/openvpn/reliable.c:745,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 16
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 749
      start: 718
    functionDepth: 0
    functionLinenumber: 718
    functionLinenumberEnd: 749
    functionName: reliable_send_timeout
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    - gc_new
    - min_int
    - gc_free
    - reliable_print_ids
    linkageType: ''
    returnType: interval_t
    signature: 'interval_t reliable_send_timeout(const struct reliable *rel) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/reliable.c:178,1
    - Dst: ntohpid
      Src: /src/openvpn/src/openvpn/reliable.c:193,1
    - Dst: session_id_read
      Src: /src/openvpn/src/openvpn/reliable.c:198,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/reliable.c:185,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 18
    argCount: 3
    argNames:
    - buf
    - ack
    - session_id_remote
    argTypes:
    - struct buffer*
    - struct reliable_ack*
    - struct session_id*
    constantsTouched: []
    func_position:
      end: 204
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 204
    functionName: reliable_ack_parse
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - session_id_read
    - buf_read
    - ntohpid
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_ack_parse(struct buffer *buf, struct reliable_ack *ack,
      struct session_id *session_id_remote) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - test
    - base
    - extent
    argTypes:
    - packet_id_type
    - packet_id_type
    - unsigned int
    constantsTouched: []
    func_position:
      end: 84
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 84
    functionName: reliable_pid_in_range2
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool reliable_pid_in_range2(const packet_id_type test,
      const packet_id_type base, const unsigned int extent) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reliable_pid_in_range1
      Src: /src/openvpn/src/openvpn/reliable.c:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - p1
    - p2
    argTypes:
    - packet_id_type
    - packet_id_type
    constantsTouched: []
    func_position:
      end: 94
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 94
    functionName: reliable_pid_min
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - reliable_pid_in_range1
    linkageType: ''
    returnType: bool
    signature: 'static inline bool reliable_pid_min(const packet_id_type p1, const
      packet_id_type p2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:489,1
    - Dst: reliable_pid_min
      Src: /src/openvpn/src/openvpn/reliable.c:491,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:507,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:503,1
    - Dst: reliable_print_ids
      Src: /src/openvpn/src/openvpn/reliable.c:507,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:508,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 14
    argCount: 2
    argNames:
    - rel
    - id
    argTypes:
    - struct reliable*
    - packet_id_type
    constantsTouched: []
    func_position:
      end: 510
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 510
    functionName: reliable_not_replay
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - dmsg
    - gc_new
    - reliable_pid_min
    - gc_free
    - reliable_print_ids
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_not_replay(const struct reliable *rel, packet_id_type
      id) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:552,1
    - Dst: reliable_pid_min
      Src: /src/openvpn/src/openvpn/reliable.c:562,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:575,1
    - Dst: subtract_pid
      Src: /src/openvpn/src/openvpn/reliable.c:573,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 577
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 577
    functionName: reliable_get_num_output_sequenced_available
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - gc_free
    - subtract_pid
    - gc_new
    - reliable_pid_min
    linkageType: ''
    returnType: int
    signature: 'int reliable_get_num_output_sequenced_available(struct reliable *rel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:829,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 2
    argNames:
    - rel
    - buf
    argTypes:
    - struct reliable*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 830
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 830
    functionName: reliable_mark_deleted
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void reliable_mark_deleted(struct reliable *rel, struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: subtract_pid
      Src: /src/openvpn/src/openvpn/reliable.c:57,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 3
    argNames:
    - test
    - base
    - extent
    argTypes:
    - packet_id_type
    - packet_id_type
    - unsigned int
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 58
    functionName: reliable_pid_in_range1
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - subtract_pid
    linkageType: ''
    returnType: bool
    signature: 'static inline bool reliable_pid_in_range1(const packet_id_type test,
      const packet_id_type base, const unsigned int extent) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/reliable.c:470,1
    - Dst: reliable_print_ids
      Src: /src/openvpn/src/openvpn/reliable.c:480,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/reliable.c:481,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:480,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 483
      start: 467
    functionDepth: 0
    functionLinenumber: 467
    functionLinenumberEnd: 483
    functionName: reliable_can_get
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - reliable_print_ids
    - gc_free
    - gc_new
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_can_get(const struct reliable *rel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: htonpid
      Src: /src/openvpn/src/openvpn/reliable.c:801,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:802,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/reliable.c:802,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:811,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/reliable.c:807,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 3
    argNames:
    - rel
    - buf
    - opcode
    argTypes:
    - struct reliable*
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 812
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 812
    functionName: reliable_mark_active_outgoing
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - buf_write_prepend
    - dmsg
    - ASSERT
    - htonpid
    linkageType: ''
    returnType: void
    signature: 'void reliable_mark_active_outgoing(struct reliable *rel, struct buffer
      *buf, int opcode) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 403
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 403
    functionName: reliable_empty
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool reliable_empty(const struct reliable *rel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/reliable.c:542,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/reliable.c:542,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 1
    argNames:
    - rel
    argTypes:
    - struct reliable*
    constantsTouched: []
    func_position:
      end: 547
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 547
    functionName: reliable_get_buf
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - buf_init
    - ASSERT
    linkageType: ''
    returnType: struct buffer*
    signature: 'struct buffer *reliable_get_buf(struct reliable *rel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/reliable.c:450,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/reliable.c:462,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/reliable.c:453,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/reliable.c:459,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 9
    argCount: 2
    argNames:
    - rel
    - gc
    argTypes:
    - struct reliable*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 463
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 463
    functionName: reliable_print_ids
    functionSourceFile: /src/openvpn/src/openvpn/reliable.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *reliable_print_ids(const struct reliable *rel,
      struct gc_arena *gc) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/mudp.c:346,1
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/mudp.c:362,1
    - Dst: management_io
      Src: /src/openvpn/src/openvpn/mudp.c:371,1
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/mudp.c:350,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/mudp.c:364,1
    - Dst: multi_process_outgoing_link
      Src: /src/openvpn/src/openvpn/mudp.c:378,1
    - Dst: multi_process_outgoing_tun
      Src: /src/openvpn/src/openvpn/mudp.c:383,1
    - Dst: multi_process_incoming_tun
      Src: /src/openvpn/src/openvpn/mudp.c:400,1
    - Dst: multi_process_incoming_dco
      Src: /src/openvpn/src/openvpn/mudp.c:419,1
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/mudp.c:354,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mudp.c:370,1
    - Dst: read_incoming_tun
      Src: /src/openvpn/src/openvpn/mudp.c:397,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/mudp.c:414,1
    - Dst: multi_process_incoming_link
      Src: /src/openvpn/src/openvpn/mudp.c:391,1
    - Dst: read_incoming_link
      Src: /src/openvpn/src/openvpn/mudp.c:388,1
    - Dst: multi_process_file_closed
      Src: /src/openvpn/src/openvpn/mudp.c:407,1
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/mudp.c:358,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/mudp.c:398,1
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/mudp.c:389,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 58
    argCount: 2
    argNames:
    - m
    - sock
    argTypes:
    - struct multi_context*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 426
      start: 333
    functionDepth: 0
    functionLinenumber: 333
    functionLinenumberEnd: 426
    functionName: multi_process_io_udp
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - management_io
    - IS_SIG
    - multi_process_outgoing_link
    - multi_process_incoming_dco
    - multi_process_incoming_tun
    - ASSERT
    - read_incoming_link
    - multi_process_incoming_link
    - multi_process_outgoing_tun
    - read_incoming_tun
    - multi_process_file_closed
    - strcat
    - printf
    linkageType: ''
    returnType: void
    signature: 'void multi_process_io_udp(struct multi_context *m, struct link_socket
      *sock) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mudp.c:101,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/mudp.c:159,1
    - Dst: send_hmac_reset_packet
      Src: /src/openvpn/src/openvpn/mudp.c:144,1
    - Dst: check_session_id_hmac
      Src: /src/openvpn/src/openvpn/mudp.c:157,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mudp.c:72,1
    - Dst: tls_pre_decrypt_lite
      Src: /src/openvpn/src/openvpn/mudp.c:78,1
    - Dst: reflect_filter_rate_limit_check
      Src: /src/openvpn/src/openvpn/mudp.c:88,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/mudp.c:100,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/src/openvpn/mudp.c:111,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/src/openvpn/mudp.c:141,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/mudp.c:155,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mudp.c:160,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mudp.c:127,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mudp.c:170,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/mudp.c:101,1
    - Dst: send_hmac_reset_packet
      Src: /src/openvpn/src/openvpn/mudp.c:113,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/mudp.c:126,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/mudp.c:129,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mudp.c:165,1
    - Dst: packet_opcode_name
      Src: /src/openvpn/src/openvpn/mudp.c:171,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mudp.c:100,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/mudp.c:125,1
    - Dst: packet_opcode_name
      Src: /src/openvpn/src/openvpn/mudp.c:166,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/mudp.c:173,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 55
    argCount: 3
    argNames:
    - m
    - state
    - addr
    argTypes:
    - struct multi_context*
    - struct tls_pre_decrypt_state*
    - struct mroute_addr
    constantsTouched: []
    func_position:
      end: 180
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 180
    functionName: do_pre_decrypt_check
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - tls_pre_decrypt_lite
    - calculate_session_id_hmac
    - BPTR
    - msg
    - check_session_id_hmac
    - gc_new
    - packet_id_read
    - print_link_socket_actual
    - gc_free
    - ASSERT
    - packet_opcode_name
    - reflect_filter_rate_limit_check
    - send_hmac_reset_packet
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'static bool do_pre_decrypt_check(struct multi_context *m, struct tls_pre_decrypt_state
      *state, struct mroute_addr addr) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: TUN_OUT
      Src: /src/openvpn/src/openvpn/mudp.c:438,1
    - Dst: LINK_OUT
      Src: /src/openvpn/src/openvpn/mudp.c:442,1
    - Dst: mbuf_defined
      Src: /src/openvpn/src/openvpn/mudp.c:447,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 1
    argNames:
    - m
    argTypes:
    - struct multi_context*
    constantsTouched: []
    func_position:
      end: 460
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 460
    functionName: p2mp_iow_flags
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - mbuf_defined
    - LINK_OUT
    - TUN_OUT
    linkageType: ''
    returnType: unsigned int
    signature: 'unsigned int p2mp_iow_flags(const struct multi_context *m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_packet_id_send
      Src: /src/openvpn/src/openvpn/mudp.c:47,1
    - Dst: tls_reset_standalone
      Src: /src/openvpn/src/openvpn/mudp.c:50,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/mudp.c:59,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mudp.c:57,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/mudp.c:57,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mudp.c:62,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 12
    argCount: 5
    argNames:
    - m
    - state
    - tas
    - sid
    - request_resend_wkc
    argTypes:
    - struct multi_context*
    - struct tls_pre_decrypt_state*
    - struct tls_auth_standalone*
    - struct session_id*
    - bool
    constantsTouched: []
    func_position:
      end: 63
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 63
    functionName: send_hmac_reset_packet
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - buf_copy
    - tls_reset_standalone
    - buf_init
    - reset_packet_id_send
    - msg
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void send_hmac_reset_packet(struct multi_context *m, struct
      tls_pre_decrypt_state *state, struct tls_auth_standalone *tas, struct session_id
      *sid, bool request_resend_wkc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: multi_process_outgoing_link_pre
      Src: /src/openvpn/src/openvpn/mudp.c:314,1
    - Dst: process_outgoing_link
      Src: /src/openvpn/src/openvpn/mudp.c:324,1
    - Dst: multi_process_outgoing_link_dowork
      Src: /src/openvpn/src/openvpn/mudp.c:317,1
    - Dst: msg_set_prefix
      Src: /src/openvpn/src/openvpn/mudp.c:321,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 2
    argNames:
    - m
    - mpp_flags
    argTypes:
    - struct multi_context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 328
      start: 311
    functionDepth: 0
    functionLinenumber: 311
    functionLinenumberEnd: 328
    functionName: multi_process_outgoing_link
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - msg_set_prefix
    - multi_process_outgoing_link_pre
    - multi_process_outgoing_link_dowork
    - process_outgoing_link
    linkageType: ''
    returnType: void
    signature: 'static inline void multi_process_outgoing_link(struct multi_context
      *m, const unsigned int mpp_flags) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: mroute_extract_openvpn_sockaddr
      Src: /src/openvpn/src/openvpn/mudp.c:199,1
    - Dst: link_socket_actual_match
      Src: /src/openvpn/src/openvpn/mudp.c:220,1
    - Dst: ungenerate_prefix
      Src: /src/openvpn/src/openvpn/mudp.c:225,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mudp.c:226,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mudp.c:227,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mudp.c:246,1
    - Dst: multi_assign_peer_id
      Src: /src/openvpn/src/openvpn/mudp.c:268,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mudp.c:248,1
    - Dst: hash_add_fast
      Src: /src/openvpn/src/openvpn/mudp.c:266,1
    - Dst: reflect_filter_rate_limit_decrease
      Src: /src/openvpn/src/openvpn/mudp.c:261,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/mudp.c:192,1
    - Dst: multi_create_instance
      Src: /src/openvpn/src/openvpn/mudp.c:263,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/mudp.c:292,1
    - Dst: free_tls_pre_decrypt_state
      Src: /src/openvpn/src/openvpn/mudp.c:288,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/mudp.c:273,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/mudp.c:205,1
    - Dst: hash_value
      Src: /src/openvpn/src/openvpn/mudp.c:203,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/mudp.c:213,1
    - Dst: do_pre_decrypt_check
      Src: /src/openvpn/src/openvpn/mudp.c:250,1
    - Dst: session_skip_to_pre_start
      Src: /src/openvpn/src/openvpn/mudp.c:277,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mudp.c:297,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/mudp.c:303,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/mudp.c:272,1
    - Dst: hash_bucket
      Src: /src/openvpn/src/openvpn/mudp.c:204,1
    - Dst: hash_lookup_fast
      Src: /src/openvpn/src/openvpn/mudp.c:233,1
    - Dst: frequency_limit_event_allowed
      Src: /src/openvpn/src/openvpn/mudp.c:257,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mudp.c:283,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/mudp.c:296,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mudp.c:304,1
    - Dst: mroute_addr_print
      Src: /src/openvpn/src/openvpn/mudp.c:285,1
    CyclomaticComplexity: 44
    EdgeCount: 44
    ICount: 74
    argCount: 3
    argNames:
    - m
    - floated
    - sock
    argTypes:
    - struct multi_context*
    - bool*
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 306
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 306
    functionName: multi_get_create_instance_udp
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - hash_value
    - dmsg
    - msg
    - do_pre_decrypt_check
    - multi_create_instance
    - mroute_extract_openvpn_sockaddr
    - mroute_addr_print
    - session_id_defined
    - session_skip_to_pre_start
    - BPTR
    - ntohl
    - gc_new
    - gc_free
    - reflect_filter_rate_limit_decrease
    - ungenerate_prefix
    - frequency_limit_event_allowed
    - hash_add_fast
    - multi_assign_peer_id
    - free_tls_pre_decrypt_state
    - hash_bucket
    - check_debug_level
    - hash_lookup_fast
    - link_socket_actual_match
    - ASSERT
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'struct multi_instance *multi_get_create_instance_udp(struct multi_context
      *m, bool *floated, struct link_socket *sock) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IS_SIG
      Src: /src/openvpn/src/openvpn/mudp.c:414,1
    - Dst: multi_process_incoming_dco
      Src: /src/openvpn/src/openvpn/mudp.c:419,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - DCO_READ
    argTypes:
    - status
    constantsTouched: []
    func_position:
      end: 422
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 422
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - multi_process_incoming_dco
    - IS_SIG
    linkageType: ''
    returnType: else
    signature: 'else if (status & DCO_READ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: multi_process_file_closed
      Src: /src/openvpn/src/openvpn/mudp.c:407,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - FILE_CLOSED
    argTypes:
    - status
    constantsTouched: []
    func_position:
      end: 408
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 408
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/mudp.c
    functionUses: []
    functionsReached:
    - multi_process_file_closed
    linkageType: ''
    returnType: else
    signature: 'else if (status & FILE_CLOSED) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - sd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 449
      start: 445
    functionDepth: 0
    functionLinenumber: 445
    functionLinenumberEnd: 449
    functionName: socket_defined
    functionSourceFile: /src/openvpn/src/openvpn/syshead.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int socket_defined(const socket_descriptor_t sd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - event
    argTypes:
    - struct rw_handle*
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    functionName: defined_net_event_win32
    functionSourceFile: /src/openvpn/src/openvpn/win32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool defined_net_event_win32(const struct rw_handle
      *event) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 135
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 135
    functionName: net_event_win32_get_event
    functionSourceFile: /src/openvpn/src/openvpn/win32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct rw_handle*
    signature: 'static inline struct rw_handle *net_event_win32_get_event(struct net_event_win32
      *ne) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct overlapped_io*
    constantsTouched: []
    func_position:
      end: 230
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 230
    functionName: overlapped_io_active
    functionSourceFile: /src/openvpn/src/openvpn/win32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool overlapped_io_active(struct overlapped_io *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 141
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 141
    functionName: net_event_win32_get_event_mask
    functionSourceFile: /src/openvpn/src/openvpn/win32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: long
    signature: 'static inline long net_event_win32_get_event_mask(const struct net_event_win32
      *ne) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: defined_net_event_win32
      Src: /src/openvpn/src/openvpn/win32.h:128,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - ne
    argTypes:
    - struct net_event_win32*
    constantsTouched: []
    func_position:
      end: 129
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 129
    functionName: net_event_win32_defined
    functionSourceFile: /src/openvpn/src/openvpn/win32.h
    functionUses: []
    functionsReached:
    - defined_net_event_win32
    linkageType: ''
    returnType: bool
    signature: 'static inline bool net_event_win32_defined(const struct net_event_win32
      *ne) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - ne
    - selected_events
    argTypes:
    - struct net_event_win32*
    - long
    constantsTouched: []
    func_position:
      end: 147
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 147
    functionName: net_event_win32_clear_selected_events
    functionSourceFile: /src/openvpn/src/openvpn/win32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void net_event_win32_clear_selected_events(struct net_event_win32
      *ne, long selected_events) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 5
    argNames:
    - dco
    - peerid
    - keepalive_interval
    - keepalive_timeout
    - mss
    argTypes:
    - dco_context_t*
    - unsigned int
    - int
    - int
    - int
    constantsTouched: []
    func_position:
      end: 353
      start: 348
    functionDepth: 0
    functionLinenumber: 348
    functionLinenumberEnd: 353
    functionName: dco_set_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int dco_set_peer(dco_context_t *dco, unsigned int peerid,
      int keepalive_interval, int keepalive_timeout, int mss) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 364
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 364
    functionName: dco_multi_add_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int dco_multi_add_new_peer(struct multi_context *m,
      struct multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - msglevel
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 272
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 272
    functionName: dco_available
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_available(int msglevel) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 358
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 358
    functionName: dco_remove_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void dco_remove_peer(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 1
    argCount: 3
    argNames:
    - m
    - mi
    - addr
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    - struct mroute_addr*
    constantsTouched: []
    func_position:
      end: 370
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 370
    functionName: dco_install_iroute
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void dco_install_iroute(struct multi_context *m, struct
      multi_instance *mi, struct mroute_addr *addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 263
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 263
    functionName: dco_supports_epoch_data
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_supports_epoch_data(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 278
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: dco_version_string
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *dco_version_string(struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - msglevel
    - o
    argTypes:
    - int
    - struct options*
    constantsTouched: []
    func_position:
      end: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    functionName: dco_check_startup_option
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_check_startup_option(int msglevel, const struct
      options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - msglevel
    - o
    argTypes:
    - int
    - struct options*
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: dco_check_option
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_check_option(int msglevel, const struct options
      *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - msglevel
    - o
    argTypes:
    - int
    - struct options*
    constantsTouched: []
    func_position:
      end: 296
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 296
    functionName: dco_check_pull_options
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_check_pull_options(int msglevel, const struct
      options *o) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 400
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 400
    functionName: dco_supports_epoch_data
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_supports_epoch_data(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 3
    argNames:
    - mode
    - dco
    - dev_node
    argTypes:
    - int
    - dco_context_t*
    - char*
    constantsTouched: []
    func_position:
      end: 302
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 302
    functionName: ovpn_dco_init
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool ovpn_dco_init(int mode, dco_context_t *dco, const
      char *dev_node) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 313
      start: 310
    functionDepth: 0
    functionLinenumber: 310
    functionLinenumberEnd: 313
    functionName: close_tun_dco
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void close_tun_dco(struct tuntap *tt, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 3
    argNames:
    - dco
    - es
    - arg
    argTypes:
    - dco_context_t*
    - struct event_set*
    - void*
    constantsTouched: []
    func_position:
      end: 325
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 325
    functionName: dco_event_set
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void dco_event_set(dco_context_t *dco, struct event_set
      *es, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.h:338,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - dco
    - multi
    argTypes:
    - dco_context_t*
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 340
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 340
    functionName: dco_update_keys
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool dco_update_keys(dco_context_t *dco, struct tls_multi
      *multi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 3
    argNames:
    - tt
    - ctx
    - dev
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    - char*
    constantsTouched: []
    func_position:
      end: 308
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 308
    functionName: open_tun_dco
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int open_tun_dco(struct tuntap *tt, openvpn_net_ctx_t
      *ctx, const char *dev) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/dco.h:318,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - dco
    argTypes:
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 320
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 320
    functionName: dco_do_read
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static inline int dco_do_read(dco_context_t *dco) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 1
    argCount: 6
    argNames:
    - multi
    - ks
    - key2
    - key_direction
    - ciphername
    - server
    argTypes:
    - struct tls_multi*
    - struct key_state*
    - struct key2*
    - int
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 333
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 333
    functionName: init_key_dco_bi
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int init_key_dco_bi(struct tls_multi *multi, struct
      key_state *ks, const struct key2 *key2, int key_direction, const char *ciphername,
      bool server) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 346
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 346
    functionName: dco_p2p_add_new_peer
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int dco_p2p_add_new_peer(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 2
    argNames:
    - m
    - mi
    argTypes:
    - struct multi_context*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 375
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 375
    functionName: dco_delete_iroutes
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void dco_delete_iroutes(struct multi_context *m, struct
      multi_instance *mi) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - c
    - raise_sigusr1_on_err
    argTypes:
    - struct context*
    - bool
    constantsTouched: []
    func_position:
      end: 388
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 388
    functionName: dco_get_peer_stats
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int dco_get_peer_stats(struct context *c, const bool
      raise_sigusr1_on_err) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 3
    argNames:
    - dco
    - m
    - raise_sigusr1_on_err
    argTypes:
    - dco_context_t*
    - struct multi_context*
    - bool
    constantsTouched: []
    func_position:
      end: 382
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 382
    functionName: dco_get_peer_stats_multi
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int dco_get_peer_stats_multi(dco_context_t *dco, struct
      multi_context *m, const bool raise_sigusr1_on_err) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 394
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 394
    functionName: dco_get_supported_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/dco.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *dco_get_supported_ciphers(void) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/tun.c:890,1
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/tun.c:894,1
    - Dst: is_tun_p2p
      Src: /src/openvpn/src/openvpn/tun.c:902,1
    - Dst: clear_tuntap
      Src: /src/openvpn/src/openvpn/tun.c:891,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/tun.c:908,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/tun.c:918,1
    - Dst: ifconfig_sanity_check
      Src: /src/openvpn/src/openvpn/tun.c:934,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/tun.c:945,1
    - Dst: check_addr_clash
      Src: /src/openvpn/src/openvpn/tun.c:946,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/tun.c:958,1
    - Dst: check_addr_clash
      Src: /src/openvpn/src/openvpn/tun.c:959,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/tun.c:994,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:997,1
    - Dst: verify_255_255_255_252
      Src: /src/openvpn/src/openvpn/tun.c:975,1
    - Dst: do_ifconfig_setenv
      Src: /src/openvpn/src/openvpn/tun.c:1009,1
    - Dst: inet_pton
      Src: /src/openvpn/src/openvpn/tun.c:995,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 57
    argCount: 14
    argNames:
    - dev
    - /* --dev option */
    - dev_type
    - /* --dev-type option */
    - topology
    - /* one of the TOP_x values */
    - ifconfig_local_parm
    - /* --ifconfig parm 1 */
    - ifconfig_remote_netmask_parm
    - /* --ifconfig parm 2 */
    - ifconfig_ipv6_local_parm
    - /* --ifconfig parm 1 IPv6 */
    - ifconfig_ipv6_netbits_parm
    - ifconfig_ipv6_remote_parm
    - /* --ifconfig parm 2 IPv6 */
    - local_public
    - remote_public
    - strict_warn
    - es
    - ctx
    - tt
    argTypes:
    - char*
    - char*
    - int
    - char*
    - char*
    - char*
    - int
    - char*
    - struct addrinfo*
    - struct addrinfo*
    - bool
    - struct env_set*
    - openvpn_net_ctx_t*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1013
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 1013
    functionName: init_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - check_addr_clash
    - is_tun_p2p
    - ifconfig_sanity_check
    - msg
    - dev_type_enum
    - ntohl
    - clear_tuntap
    - ALLOC_OBJ
    - inet_pton
    - getaddr
    - verify_255_255_255_252
    - do_ifconfig_setenv
    linkageType: ''
    returnType: struct tuntap*
    signature: 'struct tuntap *init_tun(const char *dev, /* --dev option */ const
      char *dev_type, /* --dev-type option */ int topology, /* one of the TOP_x values
      */ const char *ifconfig_local_parm, /* --ifconfig parm 1 */ const char *ifconfig_remote_netmask_parm,
      /* --ifconfig parm 2 */ const char *ifconfig_ipv6_local_parm, /* --ifconfig
      parm 1 IPv6 */ int ifconfig_ipv6_netbits_parm, const char *ifconfig_ipv6_remote_parm,
      /* --ifconfig parm 2 IPv6 */ struct addrinfo *local_public, struct addrinfo
      *remote_public, const bool strict_warn, struct env_set *es, openvpn_net_ctx_t
      *ctx, struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1102
      start: 1089
    functionDepth: 0
    functionLinenumber: 1089
    functionLinenumberEnd: 1102
    functionName: create_arbitrary_remote
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: in_addr_t
    signature: 'in_addr_t create_arbitrary_remote( struct tuntap *tt ) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - ai
    - index
    argTypes:
    - IP_ADAPTER_INFO*
    - DWORD
    constantsTouched: []
    func_position:
      end: 4612
      start: 4595
    functionDepth: 0
    functionLinenumber: 4595
    functionLinenumberEnd: 4612
    functionName: get_adapter
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: IP_ADAPTER_INFO*
    signature: 'const IP_ADAPTER_INFO *get_adapter(const IP_ADAPTER_INFO *ai, DWORD
      index) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6155,1
    - Dst: FlushIpNetTable
      Src: /src/openvpn/src/openvpn/tun.c:6185,1
    - Dst: dhcp_release
      Src: /src/openvpn/src/openvpn/tun.c:6219,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6248,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6264,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:6177,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6190,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6196,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:6200,1
    - Dst: dhcp_status
      Src: /src/openvpn/src/openvpn/tun.c:6211,1
    - Dst: dhcp_renew
      Src: /src/openvpn/src/openvpn/tun.c:6223,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6257,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6256,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6262,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6272,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6213,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6263,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:6276,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6240,1
    - Dst: delete_temp_addresses
      Src: /src/openvpn/src/openvpn/tun.c:6253,1
    - Dst: dhcp_status
      Src: /src/openvpn/src/openvpn/tun.c:6246,1
    - Dst: fork_dhcp_action
      Src: /src/openvpn/src/openvpn/tun.c:6228,1
    - Dst: AddIPAddress
      Src: /src/openvpn/src/openvpn/tun.c:6256,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6270,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6271,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6282,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 58
    argCount: 3
    argNames:
    - tt
    - device_guid
    - dhcp_masq_post
    argTypes:
    - struct tuntap*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 6283
      start: 6150
    functionDepth: 0
    functionLinenumber: 6150
    functionLinenumberEnd: 6283
    functionName: tuntap_set_ip_addr
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - fork_dhcp_action
    - AddIPAddress
    - send_msg_iservice
    - msg
    - print_in_addr_t
    - gc_new
    - strerror_win32
    - FlushIpNetTable
    - gc_free
    - delete_temp_addresses
    - dhcp_status
    - dhcp_release
    - dhcp_renew
    - htonl
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_set_ip_addr(struct tuntap *tt, const char *device_guid,
      bool dhcp_masq_post) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:5895,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5928,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/tun.c:5925,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5934,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5898,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5938,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5939,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/tun.c:5940,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 38
    argCount: 5
    argNames:
    - buf
    - type
    - str_array
    - array_len
    - error
    argTypes:
    - struct buffer*
    - int
    - char**
    - int
    - bool*
    constantsTouched: []
    func_position:
      end: 5941
      start: 5882
    functionDepth: 0
    functionLinenumber: 5882
    functionLinenumberEnd: 5941
    functionName: write_dhcp_search_str
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - buf_safe
    - buf_write
    - msg
    - strlen
    - buf_write_u8
    linkageType: ''
    returnType: void
    signature: 'static void write_dhcp_search_str(struct buffer *buf, const int type,
      const char *const *str_array, int array_len, bool *error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:3586,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3587
      start: 3583
    functionDepth: 0
    functionLinenumber: 3583
    functionLinenumberEnd: 3587
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6290,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/tun.c:6301,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6300,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6294,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6303
      start: 6285
    functionDepth: 0
    functionLinenumber: 6285
    functionLinenumberEnd: 6303
    functionName: tuntap_set_connected
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - DeviceIoControl
    - management_sleep
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_set_connected(const struct tuntap *tt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:820,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 823
      start: 804
    functionDepth: 0
    functionLinenumber: 804
    functionLinenumberEnd: 823
    functionName: is_tun_p2p
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: bool
    signature: 'bool is_tun_p2p(const struct tuntap *tt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:831,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:832,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:833,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun.c:842,1
    - Dst: is_tun_p2p
      Src: /src/openvpn/src/openvpn/tun.c:840,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun.c:845,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun.c:849,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:855,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:856,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun.c:858,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:863,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun.c:860,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/tun.c:859,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 18
    argCount: 2
    argNames:
    - tt
    - es
    argTypes:
    - struct tuntap*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 864
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 864
    functionName: do_ifconfig_setenv
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - is_tun_p2p
    - print_in_addr_t
    - gc_new
    - print_in6_addr
    - setenv_str
    - gc_free
    - setenv_int
    linkageType: ''
    returnType: void
    signature: 'void do_ifconfig_setenv(const struct tuntap *tt, struct env_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3549,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/tun.c:3552,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:3558,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:3551,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:3563,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3567,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:3568,1
    - Dst: env_set_add
      Src: /src/openvpn/src/openvpn/tun.c:3569,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:3570,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:3572,1
    - Dst: env_set_destroy
      Src: /src/openvpn/src/openvpn/tun.c:3573,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:3574,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3575
      start: 3546
    functionDepth: 0
    functionLinenumber: 3546
    functionLinenumberEnd: 3575
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - env_set_destroy
    - close_tun_generic
    - free
    - env_set_add
    - argv_new
    - ASSERT
    - env_set_create
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4291,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 9
    argCount: 2
    argNames:
    - guid
    - tap_reg
    argTypes:
    - char*
    - struct tap_reg*
    constantsTouched: []
    func_position:
      end: 4298
      start: 4284
    functionDepth: 0
    functionLinenumber: 4284
    functionLinenumberEnd: 4298
    functionName: get_adapter_by_guid
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: struct tap_reg*
    signature: 'static const struct tap_reg *get_adapter_by_guid(const char *guid,
      const struct tap_reg *tap_reg) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/tun.c:4357,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/tun.c:4372,1
    - Dst: guid_to_name
      Src: /src/openvpn/src/openvpn/tun.c:4388,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:4371,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:4360,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4391,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4395,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:4400,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4401,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:4406,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 28
    argCount: 7
    argNames:
    - device_number
    - actual_name
    - actual_name_size
    - tap_reg_src
    - panel_reg_src
    - windows_driver
    - gc
    argTypes:
    - int
    - uint8_t*
    - int
    - struct tap_reg*
    - struct panel_reg*
    - enum tun_driver_type*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4407
      start: 4347
    functionDepth: 0
    functionLinenumber: 4347
    functionLinenumberEnd: 4407
    functionName: get_unspecified_device_guid
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - guid_to_name
    - clear_buf
    - BSTR
    - buf_printf
    - buf_set_write
    - ASSERT
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_unspecified_device_guid(const int device_number,
      uint8_t *actual_name, int actual_name_size, const struct tap_reg *tap_reg_src,
      const struct panel_reg *panel_reg_src, enum tun_driver_type *windows_driver,
      struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_interface_info_list
      Src: /src/openvpn/src/openvpn/tun.c:4574,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 2
    argNames:
    - index
    - gc
    argTypes:
    - DWORD
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4588
      start: 4571
    functionDepth: 0
    functionLinenumber: 4571
    functionLinenumberEnd: 4588
    functionName: get_interface_info
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_interface_info_list
    linkageType: ''
    returnType: IP_ADAPTER_INDEX_MAP*
    signature: 'static const IP_ADAPTER_INDEX_MAP *get_interface_info(DWORD index,
      struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 5779
      start: 5775
    functionDepth: 0
    functionLinenumber: 5775
    functionLinenumberEnd: 5779
    functionName: tun_standby_init
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void tun_standby_init(struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:2054,1
    - Dst: clear_tuntap
      Src: /src/openvpn/src/openvpn/tun.c:2058,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2057,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 2059
      start: 2049
    functionDepth: 0
    functionLinenumber: 2049
    functionLinenumberEnd: 2059
    functionName: close_tun_generic
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - clear_tuntap
    - close
    - free
    linkageType: ''
    returnType: void
    signature: 'static void close_tun_generic(struct tuntap *tt) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:463,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:490,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:477,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:497,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:477,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:498,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:498,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:502,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:502,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:507,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 2
    argNames:
    - msg_channel
    - driver_type
    argTypes:
    - HANDLE
    - enum tun_driver_type
    constantsTouched: []
    func_position:
      end: 509
      start: 458
    functionDepth: 0
    functionLinenumber: 458
    functionLinenumberEnd: 509
    functionName: do_create_adapter_service
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - print_tun_backend_driver
    - gc_free
    linkageType: ''
    returnType: bool
    signature: 'static bool do_create_adapter_service(HANDLE msg_channel, enum tun_driver_type
      driver_type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - len
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 1822
      start: 1811
    functionDepth: 0
    functionLinenumber: 1811
    functionLinenumberEnd: 1822
    functionName: header_modify_read_write_return
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int header_modify_read_write_return(int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:2661,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2665,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2668,1
    - Dst: clear_tuntap
      Src: /src/openvpn/src/openvpn/tun.c:2667,1
    - Dst: solaris_close_tun
      Src: /src/openvpn/src/openvpn/tun.c:2663,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2669
      start: 2658
    functionDepth: 0
    functionLinenumber: 2658
    functionLinenumberEnd: 2669
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - clear_tuntap
    - solaris_close_tun
    - ASSERT
    - free
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - len
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2911
      start: 2900
    functionDepth: 0
    functionLinenumber: 2900
    functionLinenumberEnd: 2911
    functionName: netbsd_modify_read_write_return
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int netbsd_modify_read_write_return(int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3406,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:3416,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:3414,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:3408,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:3409,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:3418,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:3419,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3422,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:3423,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:3424,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:3425,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3426
      start: 3403
    functionDepth: 0
    functionLinenumber: 3403
    functionLinenumberEnd: 3426
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - gc_new
    - close_tun_generic
    - print_in6_addr
    - gc_free
    - argv_new
    - ASSERT
    - free
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: get_adapter_n_ip_netmask
      Src: /src/openvpn/src/openvpn/tun.c:4770,1
    - Dst: get_adapter_ip_netmask
      Src: /src/openvpn/src/openvpn/tun.c:4774,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 21
    argCount: 3
    argNames:
    - ai
    - ip
    - highest_netmask
    argTypes:
    - IP_ADAPTER_INFO*
    - in_addr_t
    - in_addr_t*
    constantsTouched: []
    func_position:
      end: 4788
      start: 4757
    functionDepth: 0
    functionLinenumber: 4757
    functionLinenumberEnd: 4788
    functionName: is_ip_in_adapter_subnet
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter_ip_netmask
    - get_adapter_n_ip_netmask
    linkageType: ''
    returnType: bool
    signature: 'bool is_ip_in_adapter_subnet(const IP_ADAPTER_INFO *ai, const in_addr_t
      ip, in_addr_t *highest_netmask) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5998,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:5999,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:6010,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:6003,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:6006,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:6012,1
    - Dst: fork_to_self
      Src: /src/openvpn/src/openvpn/tun.c:6014,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6014,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6015,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6017
      start: 5993
    functionDepth: 0
    functionLinenumber: 5993
    functionLinenumberEnd: 6017
    functionName: fork_dhcp_action
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - gc_new
    - fork_to_self
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'static void fork_dhcp_action(struct tuntap *tt) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:6101,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6102,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6114,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6106,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6125,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6133,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6135
      start: 6096
    functionDepth: 0
    functionLinenumber: 6096
    functionLinenumberEnd: 6135
    functionName: tuntap_get_version_info
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - CLEAR
    - DeviceIoControl
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_get_version_info(const struct tuntap *tt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/tun.c:1835,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:1837,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:1841,1
    - Dst: writev
      Src: /src/openvpn/src/openvpn/tun.c:1849,1
    - Dst: header_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:1849,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:1853,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1855
      start: 1824
    functionDepth: 0
    functionLinenumber: 1824
    functionLinenumberEnd: 1855
    functionName: write_tun_header
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - writev
    - OPENVPN_IPH_GET_VER
    - write
    - header_modify_read_write_return
    - htonl
    linkageType: ''
    returnType: int
    signature: 'static int write_tun_header(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/tun.c:2924,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:2930,1
    - Dst: netbsd_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:2938,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:2926,1
    - Dst: writev
      Src: /src/openvpn/src/openvpn/tun.c:2938,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:2942,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2944
      start: 2913
    functionDepth: 0
    functionLinenumber: 2913
    functionLinenumberEnd: 2944
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - writev
    - netbsd_modify_read_write_return
    - OPENVPN_IPH_GET_VER
    - write
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: netbsd_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:2959,1
    - Dst: readv
      Src: /src/openvpn/src/openvpn/tun.c:2959,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:2963,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2965
      start: 2946
    functionDepth: 0
    functionLinenumber: 2946
    functionLinenumberEnd: 2965
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - readv
    - read
    - netbsd_modify_read_write_return
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: freebsd_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:3102,1
    - Dst: readv
      Src: /src/openvpn/src/openvpn/tun.c:3102,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:3106,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3108
      start: 3089
    functionDepth: 0
    functionLinenumber: 3089
    functionLinenumberEnd: 3108
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - readv
    - freebsd_modify_read_write_return
    - read
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: write_tun_header
      Src: /src/openvpn/src/openvpn/tun.c:3433,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:3437,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3439
      start: 3428
    functionDepth: 0
    functionLinenumber: 3428
    functionLinenumberEnd: 3439
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - write_tun_header
    - write
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:3580,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3581
      start: 3577
    functionDepth: 0
    functionLinenumber: 3577
    functionLinenumberEnd: 3581
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:4796,1
    - Dst: get_interface_metric
      Src: /src/openvpn/src/openvpn/tun.c:4813,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:4844,1
    - Dst: is_ip_in_adapter_subnet
      Src: /src/openvpn/src/openvpn/tun.c:4811,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:4845,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:4846,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:4861,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 39
    argCount: 4
    argNames:
    - list
    - ip
    - count
    - netmask
    argTypes:
    - IP_ADAPTER_INFO*
    - in_addr_t
    - int*
    - in_addr_t*
    constantsTouched: []
    func_position:
      end: 4863
      start: 4790
    functionDepth: 0
    functionLinenumber: 4790
    functionLinenumberEnd: 4863
    functionName: adapter_index_of_ip
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - dmsg
    - print_in_addr_t
    - gc_new
    - gc_free
    - get_interface_metric
    - is_ip_in_adapter_subnet
    linkageType: ''
    returnType: DWORD
    signature: 'DWORD adapter_index_of_ip(const IP_ADAPTER_INFO *list, const in_addr_t
      ip, int *count, in_addr_t *netmask) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6024,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6030,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6036,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:6028,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:6037,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6042,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6045,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6046
      start: 6019
    functionDepth: 0
    functionLinenumber: 6019
    functionLinenumberEnd: 6046
    functionName: register_dns_service
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void register_dns_service(const struct tuntap *tt) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:2607,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:2612,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:2608,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:2611,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:2610,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:2618,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:2619,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2621,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2623,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2626,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2639,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2641,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:2644,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:2650,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2635,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2628,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2633,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 39
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 2653
      start: 2601
    functionDepth: 0
    functionLinenumber: 2601
    functionLinenumberEnd: 2653
    functionName: solaris_close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - msg
    - ioctl
    - strncpynt
    - CLEAR
    - argv_new
    - openvpn_execve_check
    - close
    linkageType: ''
    returnType: void
    signature: 'static void solaris_close_tun(struct tuntap *tt) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: tuntap_get_version_info
      Src: /src/openvpn/src/openvpn/tun.c:6647,1
    - Dst: tuntap_get_mtu
      Src: /src/openvpn/src/openvpn/tun.c:6650,1
    - Dst: tuntap_set_ptp
      Src: /src/openvpn/src/openvpn/tun.c:6664,1
    - Dst: tuntap_dhcp_mask
      Src: /src/openvpn/src/openvpn/tun.c:6671,1
    - Dst: tuntap_set_ip_props
      Src: /src/openvpn/src/openvpn/tun.c:6658,1
    - Dst: tuntap_set_connected
      Src: /src/openvpn/src/openvpn/tun.c:6675,1
    - Dst: tuntap_set_ip_addr
      Src: /src/openvpn/src/openvpn/tun.c:6679,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 2
    argNames:
    - tt
    - device_guid
    argTypes:
    - struct tuntap*
    - char*
    constantsTouched: []
    func_position:
      end: 6680
      start: 6638
    functionDepth: 0
    functionLinenumber: 6638
    functionLinenumberEnd: 6680
    functionName: tuntap_post_open
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - tuntap_set_ip_addr
    - tuntap_get_mtu
    - tuntap_set_ip_props
    - tuntap_get_version_info
    - tuntap_dhcp_mask
    - tuntap_set_connected
    - tuntap_set_ptp
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_post_open(struct tuntap *tt, const char *device_guid) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:121,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:144,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/tun.c:136,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/tun.c:143,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:142,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:146,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:152,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:154,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:157,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:164,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:165,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:173,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 30
    argCount: 3
    argNames:
    - add
    - family
    - tt
    argTypes:
    - bool
    - short
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 175
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 175
    functionName: do_address_service
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - netmask_to_netbits2
    - send_msg_iservice
    - msg
    - print_in_addr_t
    - gc_new
    - strerror_win32
    - print_in6_addr
    - gc_free
    - strncpy
    - htonl
    linkageType: ''
    returnType: bool
    signature: 'static bool do_address_service(const bool add, const short family,
      const struct tuntap *tt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/tun.c:1693,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1700,1
    - Dst: net_addr_v4_del
      Src: /src/openvpn/src/openvpn/tun.c:1706,1
    - Dst: is_tun_p2p
      Src: /src/openvpn/src/openvpn/tun.c:1695,1
    - Dst: net_addr_ptp_v4_del
      Src: /src/openvpn/src/openvpn/tun.c:1697,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1708,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:1713,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:1714,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:1715,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1717,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:1723,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1719,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1720,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:1722,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 21
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1726
      start: 1689
    functionDepth: 0
    functionLinenumber: 1689
    functionLinenumberEnd: 1726
    functionName: undo_ifconfig_ipv4
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - net_addr_ptp_v4_del
    - is_tun_p2p
    - netmask_to_netbits2
    - argv_msg
    - argv_printf
    - msg
    - print_in_addr_t
    - argv_free
    - net_addr_v4_del
    - gc_new
    - gc_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'static void undo_ifconfig_ipv4(struct tuntap *tt, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:5006,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:5010,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:5013,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:5012,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:5009,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:5015,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:5018,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 11
    argCount: 2
    argNames:
    - ip
    - gc
    argTypes:
    - IP_ADDR_STRING*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5019
      start: 5003
    functionDepth: 0
    functionLinenumber: 5003
    functionLinenumberEnd: 5019
    functionName: format_ip_addr_string
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - buf_printf
    - strlen
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'static const char *format_ip_addr_string(const IP_ADDR_STRING *ip,
      struct gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:181,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:216,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:209,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:215,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:204,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:220,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/tun.c:227,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:230,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:232,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:239,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:248,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:240,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:245,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 36
    argCount: 2
    argNames:
    - add
    - tt
    argTypes:
    - bool
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 249
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 249
    functionName: do_dns_domain_service
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - strncpynt
    - gc_free
    - strncpy
    - strlen
    linkageType: ''
    returnType: void
    signature: 'static void do_dns_domain_service(bool add, const struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: net_addr_v6_del
      Src: /src/openvpn/src/openvpn/tun.c:1732,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:1738,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:1739,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1735,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:1740,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1742,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1745,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1746,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:1748,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:1749,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 13
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1752
      start: 1728
    functionDepth: 0
    functionLinenumber: 1728
    functionLinenumberEnd: 1752
    functionName: undo_ifconfig_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - msg
    - argv_free
    - gc_new
    - print_in6_addr
    - gc_free
    - argv_new
    - net_addr_v6_del
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'static void undo_ifconfig_ipv6(struct tuntap *tt, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:255,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:288,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/tun.c:286,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/tun.c:284,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/tun.c:281,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:300,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:304,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:307,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:314,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:315,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:320,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:323,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 3
    argNames:
    - add
    - family
    - tt
    argTypes:
    - bool
    - short
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 324
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 324
    functionName: do_dns_service
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - _countof
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - gc_free
    - strncpy
    - htonl
    linkageType: ''
    returnType: void
    signature: 'static void do_dns_service(bool add, const short family, const struct
      tuntap *tt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:772,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:777,1
    - Dst: overlapped_io_state_ascii
      Src: /src/openvpn/src/openvpn/tun.c:781,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:786,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:780,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:789,1
    - Dst: overlapped_io_state_ascii
      Src: /src/openvpn/src/openvpn/tun.c:790,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:796,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:798,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 3
    argNames:
    - tt
    - rwflags
    - gc
    argTypes:
    - struct tuntap*
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 799
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 799
    functionName: tun_stat
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - buf_printf
    - overlapped_io_state_ascii
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *tun_stat(const struct tuntap *tt, unsigned int rwflags,
      struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: overlapped_io_init
      Src: /src/openvpn/src/openvpn/tun.c:1031,1
    - Dst: overlapped_io_init
      Src: /src/openvpn/src/openvpn/tun.c:1032,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 3
    argNames:
    - tt
    - frame
    - options
    argTypes:
    - struct tuntap*
    - struct frame*
    - struct tuntap_options*
    constantsTouched: []
    func_position:
      end: 1038
      start: 1018
    functionDepth: 0
    functionLinenumber: 1018
    functionLinenumberEnd: 1038
    functionName: init_tun_post
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - overlapped_io_init
    linkageType: ''
    returnType: void
    signature: 'void init_tun_post(struct tuntap *tt, const struct frame *frame, const
      struct tuntap_options *options) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:2675,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:2681,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:2685,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:2682,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:2679,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:2690,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:2691,1
    - Dst: close_tun
      Src: /src/openvpn/src/openvpn/tun.c:2692,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2693,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:2694,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 4
    argNames:
    - tt
    - es
    - actual
    - unplumb_inet6
    argTypes:
    - struct tuntap*
    - struct env_set*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 2695
      start: 2671
    functionDepth: 0
    functionLinenumber: 2671
    functionLinenumberEnd: 2695
    functionName: solaris_error_close
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - msg
    - argv_free
    - argv_new
    - close_tun
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'static void solaris_error_close(struct tuntap *tt, const struct env_set
      *es, const char *actual, bool unplumb_inet6 ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3028,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:3043,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:3033,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3032,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:3038,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3046,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:3048,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:3049,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:3052,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:3053,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3054
      start: 3025
    functionDepth: 0
    functionLinenumber: 3025
    functionLinenumberEnd: 3054
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - close_tun_generic
    - argv_new
    - ASSERT
    - free
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3471,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:3474,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:3506,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:3519,1
    - Dst: env_set_add
      Src: /src/openvpn/src/openvpn/tun.c:3520,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:3521,1
    - Dst: access
      Src: /src/openvpn/src/openvpn/tun.c:3511,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:3541,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3466,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3487,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3503,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:3523,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:3531,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/tun.c:3536,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun.c:3537,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/tun.c:3469,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:3490,1
    - Dst: env_set_destroy
      Src: /src/openvpn/src/openvpn/tun.c:3522,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:3516,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3538,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:3479,1
    - Dst: access
      Src: /src/openvpn/src/openvpn/tun.c:3480,1
    - Dst: isdigit
      Src: /src/openvpn/src/openvpn/tun.c:3497,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:3518,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/tun.c:3517,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3533,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 59
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3542
      start: 3456
    functionDepth: 0
    functionLinenumber: 3456
    functionLinenumberEnd: 3542
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - isdigit
    - argv_msg
    - argv_printf
    - set_nonblock
    - msg
    - snprintf
    - argv_free
    - env_set_destroy
    - set_cloexec
    - string_alloc
    - access
    - strcmp
    - env_set_add
    - argv_new
    - env_set_create
    - open
    - openvpn_execve_check
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:4135,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4162,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:4163,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:4158,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:4164,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:4166,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 2
    argNames:
    - local
    - remote
    argTypes:
    - in_addr_t
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 4167
      start: 4132
    functionDepth: 0
    functionLinenumber: 4132
    functionLinenumberEnd: 4167
    functionName: verify_255_255_255_252
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void verify_255_255_255_252(in_addr_t local, in_addr_t remote) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:4205,1
    - Dst: get_tap_reg
      Src: /src/openvpn/src/openvpn/tun.c:4217,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4230,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4220,1
    - Dst: get_panel_reg
      Src: /src/openvpn/src/openvpn/tun.c:4218,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4232,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:4232,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4246,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4255,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4265,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4270,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:4278,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4275,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 47
    argCount: 2
    argNames:
    - msglev
    - warnlev
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 4279
      start: 4202
    functionDepth: 0
    functionLinenumber: 4202
    functionLinenumberEnd: 4279
    functionName: show_tap_win_adapters
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_tap_reg
    - msg
    - gc_new
    - print_tun_backend_driver
    - strcmp
    - gc_free
    - get_panel_reg
    linkageType: ''
    returnType: void
    signature: 'void show_tap_win_adapters(int msglev, int warnlev) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/tun.c:3356,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3376,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3363,1
    - Dst: open_darwin_utun
      Src: /src/openvpn/src/openvpn/tun.c:3369,1
    - Dst: dev_type_string
      Src: /src/openvpn/src/openvpn/tun.c:3364,1
    - Dst: open_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3377,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3383,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:3394,1
    - Dst: open_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3399,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 29
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3401
      start: 3350
    functionDepth: 0
    functionLinenumber: 3350
    functionLinenumberEnd: 3401
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - dev_type_string
    - open_tun_generic
    - strcmp
    - open_darwin_utun
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:330,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/tun.c:354,1
    - Dst: _countof
      Src: /src/openvpn/src/openvpn/tun.c:356,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:358,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/tun.c:351,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:364,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:367,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:370,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:377,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:378,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:386,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:383,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 28
    argCount: 2
    argNames:
    - add
    - tt
    argTypes:
    - bool
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 387
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 387
    functionName: do_wins_service
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - _countof
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - gc_free
    - strncpy
    - htonl
    linkageType: ''
    returnType: void
    signature: 'static void do_wins_service(bool add, const struct tuntap *tt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:530,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/tun.c:541,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:537,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:541,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - dev
    - dev_type
    - match_type
    argTypes:
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 543
      start: 527
    functionDepth: 0
    functionLinenumber: 527
    functionLinenumberEnd: 543
    functionName: is_dev_type
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - strlen
    - strcmp
    - ASSERT
    - strncmp
    linkageType: ''
    returnType: bool
    signature: 'bool is_dev_type(const char *dev, const char *dev_type, const char
      *match_type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: putmsg
      Src: /src/openvpn/src/openvpn/tun.c:2703,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2704
      start: 2697
    functionDepth: 0
    functionLinenumber: 2697
    functionLinenumberEnd: 2704
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - putmsg
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:3069,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:3085,1
    - Dst: freebsd_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:3081,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:3073,1
    - Dst: writev
      Src: /src/openvpn/src/openvpn/tun.c:3081,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3087
      start: 3056
    functionDepth: 0
    functionLinenumber: 3056
    functionLinenumberEnd: 3087
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - freebsd_modify_read_write_return
    - writev
    - write
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4175,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4178,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4179,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4176,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4177,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4180,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4181,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4182,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4183,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4184,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4198,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4185,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4189,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/tun.c:4193,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 4200
      start: 4169
    functionDepth: 0
    functionLinenumber: 4169
    functionLinenumberEnd: 4200
    functionName: show_valid_win32_tun_subnets
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_valid_win32_tun_subnets(void) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: write_dhcp_str
      Src: /src/openvpn/src/openvpn/tun.c:5949,1
    - Dst: write_dhcp_str
      Src: /src/openvpn/src/openvpn/tun.c:5954,1
    - Dst: write_dhcp_u32_array
      Src: /src/openvpn/src/openvpn/tun.c:5963,1
    - Dst: write_dhcp_u32_array
      Src: /src/openvpn/src/openvpn/tun.c:5962,1
    - Dst: write_dhcp_u8
      Src: /src/openvpn/src/openvpn/tun.c:5959,1
    - Dst: write_dhcp_u32_array
      Src: /src/openvpn/src/openvpn/tun.c:5964,1
    - Dst: write_dhcp_u32_array
      Src: /src/openvpn/src/openvpn/tun.c:5965,1
    - Dst: write_dhcp_search_str
      Src: /src/openvpn/src/openvpn/tun.c:5969,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/tun.c:5979,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5981,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5987,1
    - Dst: buf_write_u32
      Src: /src/openvpn/src/openvpn/tun.c:5988,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5984,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5985,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5986,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 2
    argNames:
    - buf
    - o
    argTypes:
    - struct buffer*
    - struct tuntap_options*
    constantsTouched: []
    func_position:
      end: 5991
      start: 5943
    functionDepth: 0
    functionLinenumber: 5943
    functionLinenumberEnd: 5991
    functionName: build_dhcp_options_string
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - buf_safe
    - write_dhcp_str
    - write_dhcp_u32_array
    - msg
    - buf_write_u32
    - write_dhcp_search_str
    - write_dhcp_u8
    - buf_write_u8
    linkageType: ''
    returnType: bool
    signature: 'static bool build_dhcp_options_string(struct buffer *buf, const struct
      tuntap_options *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6142,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6146,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6148
      start: 6137
    functionDepth: 0
    functionLinenumber: 6137
    functionLinenumberEnd: 6148
    functionName: tuntap_get_mtu
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - DeviceIoControl
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_get_mtu(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: has_digit
      Src: /src/openvpn/src/openvpn/tun.c:1882,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - dev
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1883
      start: 1879
    functionDepth: 0
    functionLinenumber: 1879
    functionLinenumberEnd: 1883
    functionName: tun_name_is_fixed
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - has_digit
    linkageType: ''
    returnType: bool
    signature: 'bool tun_name_is_fixed(const char *dev) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: format_ip_addr_string
      Src: /src/openvpn/src/openvpn/tun.c:5030,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5030,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5037,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/tun.c:5037,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5049,1
    - Dst: format_ip_addr_string
      Src: /src/openvpn/src/openvpn/tun.c:5049,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5029,1
    - Dst: time_string
      Src: /src/openvpn/src/openvpn/tun.c:5036,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5036,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5032,1
    - Dst: format_ip_addr_string
      Src: /src/openvpn/src/openvpn/tun.c:5032,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5041,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5042,1
    - Dst: format_ip_addr_string
      Src: /src/openvpn/src/openvpn/tun.c:5041,1
    - Dst: format_ip_addr_string
      Src: /src/openvpn/src/openvpn/tun.c:5042,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5027,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5028,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5031,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/tun.c:5031,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5035,1
    - Dst: format_ip_addr_string
      Src: /src/openvpn/src/openvpn/tun.c:5035,1
    - Dst: get_per_adapter_info
      Src: /src/openvpn/src/openvpn/tun.c:5046,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 3
    argNames:
    - msglev
    - a
    - gc
    argTypes:
    - int
    - IP_ADAPTER_INFO*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5052
      start: 5024
    functionDepth: 0
    functionLinenumber: 5024
    functionLinenumberEnd: 5052
    functionName: show_adapter
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - time_string
    - msg
    - format_hex_ex
    - format_ip_addr_string
    - get_per_adapter_info
    linkageType: ''
    returnType: void
    signature: 'static void show_adapter(int msglev, const IP_ADAPTER_INFO *a, struct
      gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:1053,1
    - Dst: add_route_ipv6
      Src: /src/openvpn/src/openvpn/tun.c:1059,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 2
    argNames:
    - tt
    - es
    argTypes:
    - struct tuntap*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 1060
      start: 1047
    functionDepth: 0
    functionLinenumber: 1047
    functionLinenumberEnd: 1060
    functionName: add_route_connected_v6_net
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - CLEAR
    - add_route_ipv6
    linkageType: ''
    returnType: void
    signature: 'static void add_route_connected_v6_net(struct tuntap *tt, const struct
      env_set *es) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:2344,1
    - Dst: tun_dco_enabled
      Src: /src/openvpn/src/openvpn/tun.c:2347,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2353,1
    - Dst: close_tun_dco
      Src: /src/openvpn/src/openvpn/tun.c:2349,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2352,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2354
      start: 2341
    functionDepth: 0
    functionLinenumber: 2341
    functionLinenumberEnd: 2354
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - close_tun_generic
    - tun_dco_enabled
    - ASSERT
    - free
    - close_tun_dco
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dhcp_release_by_adapter_index
      Src: /src/openvpn/src/openvpn/tun.c:5240,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 5246
      start: 5235
    functionDepth: 0
    functionLinenumber: 5235
    functionLinenumberEnd: 5246
    functionName: dhcp_release
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - dhcp_release_by_adapter_index
    linkageType: ''
    returnType: bool
    signature: 'static bool dhcp_release(const struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/tun.c:5813,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5816,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5821,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5820,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5819,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 4
    argNames:
    - buf
    - type
    - data
    - error
    argTypes:
    - struct buffer*
    - int
    - int
    - bool*
    constantsTouched: []
    func_position:
      end: 5822
      start: 5810
    functionDepth: 0
    functionLinenumber: 5810
    functionLinenumberEnd: 5822
    functionName: write_dhcp_u8
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - buf_safe
    - buf_write_u8
    linkageType: ''
    returnType: void
    signature: 'static void write_dhcp_u8(struct buffer *buf, const int type, const
      int data, bool *error) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: get_tap_reg
      Src: /src/openvpn/src/openvpn/tun.c:5737,1
    - Dst: get_panel_reg
      Src: /src/openvpn/src/openvpn/tun.c:5738,1
    - Dst: at_least_one_tap_win
      Src: /src/openvpn/src/openvpn/tun.c:5742,1
    - Dst: get_device_guid
      Src: /src/openvpn/src/openvpn/tun.c:5746,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:5739,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.c:5746,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/tun.c:5746,1
    - Dst: get_unspecified_device_guid
      Src: /src/openvpn/src/openvpn/tun.c:5750,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.c:5750,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/tun.c:5750,1
    - Dst: get_unspecified_device_guid
      Src: /src/openvpn/src/openvpn/tun.c:5752,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:5762,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:5762,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:5764,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 25
    argCount: 2
    argNames:
    - dev_node
    - gc
    argTypes:
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 5770
      start: 5734
    functionDepth: 0
    functionLinenumber: 5734
    functionLinenumberEnd: 5770
    functionName: netsh_get_id
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - at_least_one_tap_win
    - BPTR
    - get_tap_reg
    - BSTR
    - get_device_guid
    - strcmp
    - get_unspecified_device_guid
    - get_panel_reg
    - BCAP
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *netsh_get_id(const char *dev_node, struct gc_arena
      *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:6450,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:6476,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6483,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:6459,1
    - Dst: strrchr
      Src: /src/openvpn/src/openvpn/tun.c:6457,1
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpn/tun.c:6485,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6494,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:6494,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 35
    argCount: 3
    argNames:
    - tt
    - device_guid
    - device_instance_id_interface
    argTypes:
    - struct tuntap*
    - char*
    - struct device_instance_id_interface*
    constantsTouched: []
    func_position:
      end: 6499
      start: 6438
    functionDepth: 0
    functionLinenumber: 6438
    functionLinenumberEnd: 6499
    functionName: tun_try_open_device
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - CreateFile
    - print_tun_backend_driver
    - strcmp
    - strrchr
    linkageType: ''
    returnType: bool
    signature: 'static bool tun_try_open_device(struct tuntap *tt, const char *device_guid,
      const struct device_instance_id_interface *device_instance_id_interface) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:1067,1
    - Dst: delete_route_ipv6
      Src: /src/openvpn/src/openvpn/tun.c:1074,1
    - Dst: route_ipv6_clear_host_bits
      Src: /src/openvpn/src/openvpn/tun.c:1073,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1075
      start: 1062
    functionDepth: 0
    functionLinenumber: 1062
    functionLinenumberEnd: 1075
    functionName: delete_route_connected_v6_net
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - route_ipv6_clear_host_bits
    - CLEAR
    - delete_route_ipv6
    linkageType: ''
    returnType: void
    signature: 'void delete_route_connected_v6_net(const struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:2359,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2360
      start: 2356
    functionDepth: 0
    functionLinenumber: 2356
    functionLinenumberEnd: 2360
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5251,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5265,1
    - Dst: IpRenewAddress
      Src: /src/openvpn/src/openvpn/tun.c:5257,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5260,1
    - Dst: get_interface_info
      Src: /src/openvpn/src/openvpn/tun.c:5253,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:5266,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5270,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - adapter_index
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 5272
      start: 5248
    functionDepth: 0
    functionLinenumber: 5248
    functionLinenumberEnd: 5272
    functionName: dhcp_renew_by_adapter_index
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - strerror_win32
    - gc_free
    - get_interface_info
    - IpRenewAddress
    linkageType: ''
    returnType: bool
    signature: 'bool dhcp_renew_by_adapter_index(const DWORD adapter_index) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: get_device_instance_id_interface
      Src: /src/openvpn/src/openvpn/tun.c:6506,1
    - Dst: get_panel_reg
      Src: /src/openvpn/src/openvpn/tun.c:6505,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:6528,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6533,1
    - Dst: get_panel_reg
      Src: /src/openvpn/src/openvpn/tun.c:6564,1
    - Dst: get_device_instance_id_interface
      Src: /src/openvpn/src/openvpn/tun.c:6565,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6522,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6527,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:6528,1
    - Dst: tun_try_open_device
      Src: /src/openvpn/src/openvpn/tun.c:6578,1
    - Dst: get_adapter_index
      Src: /src/openvpn/src/openvpn/tun.c:6592,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6558,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:6558,1
    - Dst: get_tap_reg
      Src: /src/openvpn/src/openvpn/tun.c:6504,1
    - Dst: get_device_guid
      Src: /src/openvpn/src/openvpn/tun.c:6518,1
    - Dst: tun_try_open_device
      Src: /src/openvpn/src/openvpn/tun.c:6531,1
    - Dst: do_create_adapter_service
      Src: /src/openvpn/src/openvpn/tun.c:6556,1
    - Dst: get_unspecified_device_guid
      Src: /src/openvpn/src/openvpn/tun.c:6545,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:6533,1
    - Dst: get_tap_reg
      Src: /src/openvpn/src/openvpn/tun.c:6563,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:6590,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 49
    argCount: 4
    argNames:
    - tt
    - dev_node
    - device_guid
    - gc
    argTypes:
    - struct tuntap*
    - char*
    - char**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 6593
      start: 6501
    functionDepth: 0
    functionLinenumber: 6501
    functionLinenumberEnd: 6593
    functionName: tun_open_device
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter_index
    - get_tap_reg
    - msg
    - get_device_guid
    - print_tun_backend_driver
    - do_create_adapter_service
    - get_unspecified_device_guid
    - get_panel_reg
    - get_device_instance_id_interface
    - tun_try_open_device
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void tun_open_device(struct tuntap *tt, const char *dev_node, const
      char **device_guid, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1659,1
    - Dst: do_ifconfig_ipv4
      Src: /src/openvpn/src/openvpn/tun.c:1677,1
    - Dst: do_ifconfig_ipv6
      Src: /src/openvpn/src/openvpn/tun.c:1682,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/tun.c:1665,1
    - Dst: net_ctx_free
      Src: /src/openvpn/src/openvpn/tun.c:1686,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 5
    argNames:
    - tt
    - ifname
    - tun_mtu
    - es
    - ctx
    argTypes:
    - struct tuntap*
    - char*
    - int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1687
      start: 1655
    functionDepth: 0
    functionLinenumber: 1655
    functionLinenumberEnd: 1687
    functionName: do_ifconfig
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - management_set_state
    - msg
    - do_ifconfig_ipv4
    - net_ctx_free
    - do_ifconfig_ipv6
    linkageType: ''
    returnType: void
    signature: 'void do_ifconfig(struct tuntap *tt, const char *ifname, int tun_mtu,
      const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5790,1
    - Dst: netsh_ifconfig
      Src: /src/openvpn/src/openvpn/tun.c:5791,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 5803
      start: 5781
    functionDepth: 0
    functionLinenumber: 5781
    functionLinenumberEnd: 5803
    functionName: tun_standby
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - netsh_ifconfig
    linkageType: ''
    returnType: bool
    signature: 'bool tun_standby(struct tuntap *tt) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:1908,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:1927,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:1931,1
    - Dst: tun_name_is_fixed
      Src: /src/openvpn/src/openvpn/tun.c:1918,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:1929,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1936,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1940,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:1948,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/tun.c:1955,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1957,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1963,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun.c:1968,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:1961,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:1972,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1969,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/tun.c:1967,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 4
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1974
      start: 1895
    functionDepth: 0
    functionLinenumber: 1895
    functionLinenumberEnd: 1974
    functionName: open_tun_generic
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - set_cloexec
    - set_nonblock
    - if_nametoindex
    - msg
    - snprintf
    - tun_name_is_fixed
    - open
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static void open_tun_generic(const char *dev, const char *dev_type,
      const char *dev_node, struct tuntap *tt) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:1993,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:1997,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2003,1
    - Dst: open_tun_dco
      Src: /src/openvpn/src/openvpn/tun.c:1999,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2014,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:2018,1
    - Dst: open_tun_dco
      Src: /src/openvpn/src/openvpn/tun.c:2025,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2028,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2034,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/tun.c:2035,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:2043,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2039,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 36
    argCount: 4
    argNames:
    - dev
    - dev_type
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2045
      start: 1978
    functionDepth: 0
    functionLinenumber: 1978
    functionLinenumberEnd: 2045
    functionName: open_tun_dco_generic
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - snprintf
    - strerror
    - strcmp
    - open_tun_dco
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'static void open_tun_dco_generic(const char *dev, const char *dev_type,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - len
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 3123
      start: 3112
    functionDepth: 0
    functionLinenumber: 3112
    functionLinenumberEnd: 3123
    functionName: dragonfly_modify_read_write_return
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int dragonfly_modify_read_write_return(int len) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:4671,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/tun.c:4674,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/tun.c:4673,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:4671,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 23
    argCount: 4
    argNames:
    - ai
    - n
    - ip
    - netmask
    argTypes:
    - IP_ADAPTER_INFO*
    - int
    - in_addr_t*
    - in_addr_t*
    constantsTouched: []
    func_position:
      end: 4681
      start: 4641
    functionDepth: 0
    functionLinenumber: 4641
    functionLinenumberEnd: 4681
    functionName: get_adapter_ip_netmask
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - strlen
    - getaddr
    linkageType: ''
    returnType: bool
    signature: 'static bool get_adapter_ip_netmask(const IP_ADAPTER_INFO *ai, const
      int n, in_addr_t *ip, in_addr_t *netmask) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: open_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3129,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:3138,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:3136,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3140
      start: 3125
    functionDepth: 0
    functionLinenumber: 3125
    functionLinenumberEnd: 3140
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - ioctl
    - open_tun_generic
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_adapter_ip_netmask
      Src: /src/openvpn/src/openvpn/tun.c:4690,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 3
    argNames:
    - ai
    - ip
    - netmask
    argTypes:
    - IP_ADAPTER_INFO*
    - in_addr_t
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 4697
      start: 4683
    functionDepth: 0
    functionLinenumber: 4683
    functionLinenumberEnd: 4697
    functionName: test_adapter_ip_netmask
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter_ip_netmask
    linkageType: ''
    returnType: bool
    signature: 'static bool test_adapter_ip_netmask(const IP_ADAPTER_INFO *ai, const
      in_addr_t ip, const in_addr_t netmask) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:1121,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1132,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1155,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1180,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1194,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1227,1
    - Dst: do_address_service
      Src: /src/openvpn/src/openvpn/tun.c:1252,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:1280,1
    - Dst: netsh_set_dns6_servers
      Src: /src/openvpn/src/openvpn/tun.c:1286,1
    - Dst: windows_set_mtu
      Src: /src/openvpn/src/openvpn/tun.c:1287,1
    - Dst: do_dns_domain_wmic
      Src: /src/openvpn/src/openvpn/tun.c:1291,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1295,1
    - Dst: env_set_add
      Src: /src/openvpn/src/openvpn/tun.c:1238,1
    - Dst: do_set_mtu_service
      Src: /src/openvpn/src/openvpn/tun.c:1258,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1162,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/tun.c:1145,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1165,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1148,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1185,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1202,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1224,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1232,1
    - Dst: env_set_destroy
      Src: /src/openvpn/src/openvpn/tun.c:1243,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1247,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:1278,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:1299,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:1300,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1240,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1204,1
    - Dst: net_iface_mtu_set
      Src: /src/openvpn/src/openvpn/tun.c:1125,1
    - Dst: net_iface_up
      Src: /src/openvpn/src/openvpn/tun.c:1130,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:1143,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:1153,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1192,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1195,1
    - Dst: sleep
      Src: /src/openvpn/src/openvpn/tun.c:1223,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1225,1
    - Dst: add_route_connected_v6_net
      Src: /src/openvpn/src/openvpn/tun.c:1255,1
    - Dst: do_dns_service
      Src: /src/openvpn/src/openvpn/tun.c:1257,1
    - Dst: do_dns_domain_service
      Src: /src/openvpn/src/openvpn/tun.c:1262,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1277,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1234,1
    - Dst: solaris_error_close
      Src: /src/openvpn/src/openvpn/tun.c:1187,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:1119,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1127,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:1120,1
    - Dst: net_addr_v6_add
      Src: /src/openvpn/src/openvpn/tun.c:1135,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1138,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1149,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1163,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1147,1
    - Dst: solaris_error_close
      Src: /src/openvpn/src/openvpn/tun.c:1168,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1183,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/tun.c:1237,1
    - Dst: add_route_connected_v6_net
      Src: /src/openvpn/src/openvpn/tun.c:1283,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1200,1
    CyclomaticComplexity: 35
    EdgeCount: 35
    ICount: 96
    argCount: 5
    argNames:
    - tt
    - ifname
    - tun_mtu
    - es
    - ctx
    argTypes:
    - struct tuntap*
    - char*
    - int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1302
      start: 1114
    functionDepth: 0
    functionLinenumber: 1114
    functionLinenumberEnd: 1302
    functionName: do_ifconfig_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - management_android_control
    - env_set_add
    - do_address_service
    - add_route_connected_v6_net
    - argv_msg
    - net_iface_mtu_set
    - do_dns_domain_service
    - env_set_destroy
    - gc_new
    - solaris_error_close
    - print_in6_addr
    - windows_set_mtu
    - gc_free
    - env_set_create
    - openvpn_execve_check
    - sleep
    - netsh_command
    - argv_printf
    - net_iface_up
    - argv_new
    - do_dns_service
    - get_win_sys_path
    - do_set_mtu_service
    - argv_free
    - snprintf
    - do_dns_domain_wmic
    - netsh_set_dns6_servers
    - net_addr_v6_add
    linkageType: ''
    returnType: void
    signature: 'static void do_ifconfig_ipv6(struct tuntap *tt, const char *ifname,
      int tun_mtu, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:2069,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/tun.c:2084,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/tun.c:2078,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:2085,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:2079,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/tun.c:2090,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:2095,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:2095,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:2096,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/tun.c:2097,1
    - Dst: managment_android_persisttun_action
      Src: /src/openvpn/src/openvpn/tun.c:2100,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:2118,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:2097,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:2122,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:2129,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/tun.c:2109,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2126,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 43
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2130
      start: 2063
    functionDepth: 0
    functionLinenumber: 2063
    functionLinenumberEnd: 2130
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - print_in_addr_t
    - msg
    - management_android_control
    - managment_android_persisttun_action
    - gc_new
    - print_in6_addr
    - gc_free
    - strlen
    - close
    - alloc_buf_gc
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6689,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:6691,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6704,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6708,1
    - Dst: tuntap_is_dco_win
      Src: /src/openvpn/src/openvpn/tun.c:6695,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6711,1
    - Dst: tun_open_device
      Src: /src/openvpn/src/openvpn/tun.c:6712,1
    - Dst: tuntap_post_open
      Src: /src/openvpn/src/openvpn/tun.c:6714,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6716,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 20
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 6719
      start: 6682
    functionDepth: 0
    functionLinenumber: 6682
    functionLinenumberEnd: 6719
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - tun_open_device
    - msg
    - gc_new
    - print_tun_backend_driver
    - gc_free
    - tuntap_is_dco_win
    - tuntap_post_open
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:2135,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2137,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2138,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2139
      start: 2132
    functionDepth: 0
    functionLinenumber: 2132
    functionLinenumberEnd: 2139
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - ASSERT
    - close_tun_generic
    - free
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:2150,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2151
      start: 2147
    functionDepth: 0
    functionLinenumber: 2147
    functionLinenumberEnd: 2151
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:6726,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6729,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6730,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6728,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/tun.c:6729,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/tun.c:6730,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6733,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 2
    argNames:
    - tt
    - gc
    argTypes:
    - struct tuntap*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 6737
      start: 6721
    functionDepth: 0
    functionLinenumber: 6721
    functionLinenumberEnd: 6737
    functionName: tap_win_getinfo
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - DeviceIoControl
    - BCAP
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *tap_win_getinfo(const struct tuntap *tt, struct gc_arena
      *gc) '
  - BBCount: 27
    BranchProfiles: []
    Callsites:
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1517,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1639,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:1649,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1340,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1455,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1590,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1520,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1518,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1533,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1642,1
    - Dst: add_route
      Src: /src/openvpn/src/openvpn/tun.c:1556,1
    - Dst: netsh_ifconfig
      Src: /src/openvpn/src/openvpn/tun.c:1621,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1545,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1576,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1539,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1593,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1379,1
    - Dst: env_set_destroy
      Src: /src/openvpn/src/openvpn/tun.c:1596,1
    - Dst: do_set_mtu_service
      Src: /src/openvpn/src/openvpn/tun.c:1631,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1345,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1399,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1405,1
    - Dst: do_dns_domain_service
      Src: /src/openvpn/src/openvpn/tun.c:1614,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1645,1
    - Dst: is_tun_p2p
      Src: /src/openvpn/src/openvpn/tun.c:1321,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:1333,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1382,1
    - Dst: solaris_error_close
      Src: /src/openvpn/src/openvpn/tun.c:1385,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:1551,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:1334,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:1414,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1436,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1475,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/tun.c:1570,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:1327,1
    - Dst: management_android_control
      Src: /src/openvpn/src/openvpn/tun.c:1369,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1388,1
    - Dst: create_arbitrary_remote
      Src: /src/openvpn/src/openvpn/tun.c:1443,1
    - Dst: create_arbitrary_remote
      Src: /src/openvpn/src/openvpn/tun.c:1481,1
    - Dst: net_iface_up
      Src: /src/openvpn/src/openvpn/tun.c:1343,1
    - Dst: print_topology
      Src: /src/openvpn/src/openvpn/tun.c:1368,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1353,1
    - Dst: env_set_add
      Src: /src/openvpn/src/openvpn/tun.c:1582,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1527,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:1650,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/tun.c:1581,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1456,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1493,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1564,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1544,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1575,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1498,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1519,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:1328,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1361,1
    - Dst: netmask_to_netbits2
      Src: /src/openvpn/src/openvpn/tun.c:1359,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1404,1
    - Dst: solaris_error_close
      Src: /src/openvpn/src/openvpn/tun.c:1407,1
    - Dst: do_address_service
      Src: /src/openvpn/src/openvpn/tun.c:1612,1
    - Dst: windows_set_mtu
      Src: /src/openvpn/src/openvpn/tun.c:1635,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:1504,1
    - Dst: do_dns_service
      Src: /src/openvpn/src/openvpn/tun.c:1613,1
    - Dst: do_wins_service
      Src: /src/openvpn/src/openvpn/tun.c:1615,1
    - Dst: do_dns_domain_wmic
      Src: /src/openvpn/src/openvpn/tun.c:1625,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1451,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:1462,1
    - Dst: net_iface_mtu_set
      Src: /src/openvpn/src/openvpn/tun.c:1338,1
    - Dst: net_addr_ptp_v4_add
      Src: /src/openvpn/src/openvpn/tun.c:1350,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:1367,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1393,1
    - Dst: add_route
      Src: /src/openvpn/src/openvpn/tun.c:1420,1
    - Dst: add_route
      Src: /src/openvpn/src/openvpn/tun.c:1467,1
    - Dst: add_route
      Src: /src/openvpn/src/openvpn/tun.c:1509,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1643,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1594,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:1446,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:1483,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1601,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1571,1
    - Dst: net_addr_v4_add
      Src: /src/openvpn/src/openvpn/tun.c:1358,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:1586,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1482,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:1497,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:1383,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:1444,1
    CyclomaticComplexity: 59
    EdgeCount: 59
    ICount: 182
    argCount: 5
    argNames:
    - tt
    - ifname
    - tun_mtu
    - es
    - ctx
    argTypes:
    - struct tuntap*
    - char*
    - int
    - struct env_set*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1652
      start: 1313
    functionDepth: 0
    functionLinenumber: 1313
    functionLinenumberEnd: 1652
    functionName: do_ifconfig_ipv4
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - net_addr_ptp_v4_add
    - msg
    - management_android_control
    - env_set_add
    - add_route
    - do_address_service
    - do_wins_service
    - netmask_to_netbits2
    - argv_msg
    - net_iface_mtu_set
    - create_arbitrary_remote
    - do_dns_domain_service
    - env_set_destroy
    - gc_new
    - solaris_error_close
    - windows_set_mtu
    - print_topology
    - net_addr_v4_add
    - gc_free
    - env_set_create
    - openvpn_execve_check
    - is_tun_p2p
    - argv_printf
    - print_in_addr_t
    - net_iface_up
    - CLEAR
    - argv_new
    - do_dns_service
    - do_set_mtu_service
    - argv_free
    - snprintf
    - do_dns_domain_wmic
    - netsh_ifconfig
    linkageType: ''
    returnType: void
    signature: 'static void do_ifconfig_ipv4(struct tuntap *tt, const char *ifname,
      int tun_mtu, const struct env_set *es, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: overlapped_io_active
      Src: /src/openvpn/src/openvpn/tun.c:3723,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/tun.c:3729,1
    - Dst: tun_write_queue
      Src: /src/openvpn/src/openvpn/tun.c:3732,1
    - Dst: sockethandle_finalize
      Src: /src/openvpn/src/openvpn/tun.c:3726,1
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpn/tun.c:3735,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:3740,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 2
    argNames:
    - tt
    - buf
    argTypes:
    - struct tuntap*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 3742
      start: 3718
    functionDepth: 0
    functionLinenumber: 3718
    functionLinenumberEnd: 3742
    functionName: tun_write_win32
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - sockethandle_finalize
    - GetLastError
    - SetLastError
    - BLEN
    - tun_write_queue
    - overlapped_io_active
    linkageType: ''
    returnType: int
    signature: 'int tun_write_win32(struct tuntap *tt, struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5436,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:5437,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:5444,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5441,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5440,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5451,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5451,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:5453,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/tun.c:5456,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:5459,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5463,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:5462,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 3
    argNames:
    - addr_list
    - addr_len
    - adapter_index
    argTypes:
    - struct in6_addr*
    - int
    - DWORD
    constantsTouched: []
    func_position:
      end: 5464
      start: 5431
    functionDepth: 0
    functionLinenumber: 5431
    functionLinenumberEnd: 5464
    functionName: netsh_set_dns6_servers
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - netsh_command
    - get_win_sys_path
    - argv_printf
    - argv_free
    - gc_new
    - print_in6_addr
    - gc_free
    - argv_new
    - argv_printf_cat
    linkageType: ''
    returnType: void
    signature: 'static void netsh_set_dns6_servers(const struct in6_addr *addr_list,
      const int addr_len, DWORD adapter_index) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:2144,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2145
      start: 2141
    functionDepth: 0
    functionLinenumber: 2141
    functionLinenumberEnd: 2145
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:2365,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2366
      start: 2362
    functionDepth: 0
    functionLinenumber: 2362
    functionLinenumberEnd: 2366
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write_tun_header
      Src: /src/openvpn/src/openvpn/tun.c:2789,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2790
      start: 2786
    functionDepth: 0
    functionLinenumber: 2786
    functionLinenumberEnd: 2790
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - write_tun_header
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: SetupDiGetClassDevsEx
      Src: /src/openvpn/src/openvpn/tun.c:3752,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:3756,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3756,1
    - Dst: ZeroMemory
      Src: /src/openvpn/src/openvpn/tun.c:3774,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3845,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:3860,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/tun.c:3755,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3759,1
    - Dst: SetupDiEnumDeviceInfo
      Src: /src/openvpn/src/openvpn/tun.c:3776,1
    - Dst: SetupDiGetDeviceInstanceId
      Src: /src/openvpn/src/openvpn/tun.c:3809,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:3838,1
    - Dst: CM_Get_Device_Interface_List_Size
      Src: /src/openvpn/src/openvpn/tun.c:3815,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/tun.c:3779,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/tun.c:3825,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/tun.c:3841,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:3843,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:3842,1
    - Dst: SetupDiOpenDevRegKey
      Src: /src/openvpn/src/openvpn/tun.c:3789,1
    - Dst: RegQueryValueEx
      Src: /src/openvpn/src/openvpn/tun.c:3797,1
    - Dst: CM_Get_Device_Interface_List
      Src: /src/openvpn/src/openvpn/tun.c:3826,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpn/tun.c:3864,1
    - Dst: SetupDiDestroyDeviceInfoList
      Src: /src/openvpn/src/openvpn/tun.c:3867,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 67
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 3870
      start: 3744
    functionDepth: 0
    functionLinenumber: 3744
    functionLinenumberEnd: 3870
    functionName: get_device_instance_id_interface
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - CM_Get_Device_Interface_List_Size
    - RegCloseKey
    - GetLastError
    - msg
    - SetupDiOpenDevRegKey
    - gc_malloc
    - string_alloc
    - strerror_win32
    - strlen
    - SetupDiGetClassDevsEx
    - ALLOC_OBJ_CLEAR_GC
    - RegQueryValueEx
    - SetupDiEnumDeviceInfo
    - ZeroMemory
    - SetupDiDestroyDeviceInfoList
    - SetupDiGetDeviceInstanceId
    - CM_Get_Device_Interface_List
    linkageType: ''
    returnType: struct device_instance_id_interface*
    signature: 'static const struct device_instance_id_interface *get_device_instance_id_interface(struct
      gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/tun.c:5412,1
    - Dst: ip_addr_string_to_array
      Src: /src/openvpn/src/openvpn/tun.c:5415,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - addr
    - ias
    argTypes:
    - in_addr_t
    - IP_ADDR_STRING*
    constantsTouched: []
    func_position:
      end: 5424
      start: 5408
    functionDepth: 0
    functionLinenumber: 5408
    functionLinenumberEnd: 5424
    functionName: ip_addr_member_of
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - ip_addr_string_to_array
    - SIZE
    linkageType: ''
    returnType: bool
    signature: 'static bool ip_addr_member_of(const in_addr_t addr, const IP_ADDR_STRING
      *ias) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:394,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:413,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:407,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:410,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:420,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:421,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:425,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:430,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 3
    argNames:
    - tt
    - family
    - mtu
    argTypes:
    - struct tuntap*
    - short
    - int
    constantsTouched: []
    func_position:
      end: 432
      start: 389
    functionDepth: 0
    functionLinenumber: 389
    functionLinenumberEnd: 432
    functionName: do_set_mtu_service
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - strncpynt
    - gc_free
    linkageType: ''
    returnType: bool
    signature: 'static bool do_set_mtu_service(const struct tuntap *tt, const short
      family, const int mtu) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_dev_type
      Src: /src/openvpn/src/openvpn/tun.c:550,1
    - Dst: is_dev_type
      Src: /src/openvpn/src/openvpn/tun.c:554,1
    - Dst: is_dev_type
      Src: /src/openvpn/src/openvpn/tun.c:550,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - dev
    - dev_type
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 562
      start: 545
    functionDepth: 0
    functionLinenumber: 545
    functionLinenumberEnd: 562
    functionName: dev_type_enum
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - is_dev_type
    linkageType: ''
    returnType: int
    signature: 'int dev_type_enum(const char *dev, const char *dev_type) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:442,1
    - Dst: exec_command
      Src: /src/openvpn/src/openvpn/tun.c:445,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:447,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:443,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:444,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - add
    - tt
    argTypes:
    - bool
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 448
      start: 434
    functionDepth: 0
    functionLinenumber: 434
    functionLinenumberEnd: 448
    functionName: do_dns_domain_wmic
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_win_sys_path
    - argv_printf
    - argv_free
    - argv_new
    - exec_command
    linkageType: ''
    returnType: void
    signature: 'static void do_dns_domain_wmic(bool add, const struct tuntap *tt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/tun.c:567,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 3
    argCount: 2
    argNames:
    - dev
    - dev_type
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 578
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 578
    functionName: dev_type_string
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - dev_type_enum
    linkageType: ''
    returnType: char*
    signature: 'const char *dev_type_string(const char *dev, const char *dev_type) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6309,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6325,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6326,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6313,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6324,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6328,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6334,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6335,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6336,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6337,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6360,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6352,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6356,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6342,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6349,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6350,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 37
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6361
      start: 6305
    functionDepth: 0
    functionLinenumber: 6305
    functionLinenumberEnd: 6361
    functionName: tuntap_set_ptp
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - print_in_addr_t
    - gc_new
    - DeviceIoControl
    - gc_free
    - htonl
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_set_ptp(const struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1890
      start: 1886
    functionDepth: 0
    functionLinenumber: 1886
    functionLinenumberEnd: 1890
    functionName: tun_dco_enabled
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool tun_dco_enabled(struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/tun.c:591,1
    - Dst: netsh_get_id
      Src: /src/openvpn/src/openvpn/tun.c:594,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 4
    argNames:
    - dev
    - dev_type
    - dev_node
    - gc
    argTypes:
    - char*
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 600
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 600
    functionName: guess_tuntap_dev
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - dev_type_enum
    - netsh_get_id
    linkageType: ''
    returnType: char*
    signature: 'const char *guess_tuntap_dev(const char *dev, const char *dev_type,
      const char *dev_node, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - len
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2980
      start: 2969
    functionDepth: 0
    functionLinenumber: 2969
    functionLinenumberEnd: 2980
    functionName: freebsd_modify_read_write_return
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int freebsd_modify_read_write_return(int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_adapter
      Src: /src/openvpn/src/openvpn/tun.c:4704,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 2
    argNames:
    - tt
    - list
    argTypes:
    - struct tuntap*
    - IP_ADAPTER_INFO*
    constantsTouched: []
    func_position:
      end: 4710
      start: 4699
    functionDepth: 0
    functionLinenumber: 4699
    functionLinenumberEnd: 4710
    functionName: get_tun_adapter
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter
    linkageType: ''
    returnType: IP_ADAPTER_INFO*
    signature: 'const IP_ADAPTER_INFO *get_tun_adapter(const struct tuntap *tt, const
      IP_ADAPTER_INFO *list) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4337,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - tap_reg
    argTypes:
    - struct tap_reg*
    constantsTouched: []
    func_position:
      end: 4341
      start: 4332
    functionDepth: 0
    functionLinenumber: 4332
    functionLinenumberEnd: 4341
    functionName: at_least_one_tap_win
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void at_least_one_tap_win(const struct tap_reg *tap_reg) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/tun.c:2299,1
    - Dst: open_tun
      Src: /src/openvpn/src/openvpn/tun.c:2304,1
    - Dst: clear_tuntap
      Src: /src/openvpn/src/openvpn/tun.c:2300,1
    - Dst: dev_type_enum
      Src: /src/openvpn/src/openvpn/tun.c:2301,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2305,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2307,1
    - Dst: platform_user_get
      Src: /src/openvpn/src/openvpn/tun.c:2313,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2315,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2317,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2319,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2330,1
    - Dst: close_tun
      Src: /src/openvpn/src/openvpn/tun.c:2335,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2328,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2336,1
    - Dst: platform_group_get
      Src: /src/openvpn/src/openvpn/tun.c:2326,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2332,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 33
    argCount: 8
    argNames:
    - dev
    - dev_type
    - dev_node
    - persist_mode
    - username
    - groupname
    - options
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - int
    - char*
    - char*
    - struct tuntap_options*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2337
      start: 2292
    functionDepth: 0
    functionLinenumber: 2292
    functionLinenumberEnd: 2337
    functionName: tuncfg
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - platform_group_get
    - open_tun
    - msg
    - dev_type_enum
    - ioctl
    - clear_tuntap
    - ALLOC_OBJ
    - close_tun
    - platform_user_get
    linkageType: ''
    returnType: void
    signature: 'void tuncfg(const char *dev, const char *dev_type, const char *dev_node,
      int persist_mode, const char *username, const char *groupname, const struct
      tuntap_options *options, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: getmsg
      Src: /src/openvpn/src/openvpn/tun.c:2714,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2715
      start: 2706
    functionDepth: 0
    functionLinenumber: 2706
    functionLinenumberEnd: 2715
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - getmsg
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: tun_dco_enabled
      Src: /src/openvpn/src/openvpn/tun.c:2986,1
    - Dst: open_tun_dco_generic
      Src: /src/openvpn/src/openvpn/tun.c:2988,1
    - Dst: open_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2992,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:3003,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3005,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:3010,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3012,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 26
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3016
      start: 2982
    functionDepth: 0
    functionLinenumber: 2982
    functionLinenumberEnd: 3016
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - ioctl
    - open_tun_generic
    - open_tun_dco_generic
    - tun_dco_enabled
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: get_tun_adapter
      Src: /src/openvpn/src/openvpn/tun.c:4718,1
    - Dst: get_adapter_ip_netmask
      Src: /src/openvpn/src/openvpn/tun.c:4728,1
    - Dst: get_adapter_n_ip_netmask
      Src: /src/openvpn/src/openvpn/tun.c:4722,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 22
    argCount: 2
    argNames:
    - tt
    - list
    argTypes:
    - struct tuntap*
    - IP_ADAPTER_INFO*
    constantsTouched: []
    func_position:
      end: 4755
      start: 4712
    functionDepth: 0
    functionLinenumber: 4712
    functionLinenumberEnd: 4755
    functionName: is_adapter_up
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter_ip_netmask
    - get_adapter_n_ip_netmask
    - get_tun_adapter
    linkageType: ''
    returnType: bool
    signature: 'bool is_adapter_up(const struct tuntap *tt, const IP_ADAPTER_INFO
      *list) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6366,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:6388,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:6395,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/tun.c:6416,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/tun.c:6419,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6419,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6420,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6429,1
    - Dst: dhcp_masq_addr
      Src: /src/openvpn/src/openvpn/tun.c:6379,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6372,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6398,1
    - Dst: build_dhcp_options_string
      Src: /src/openvpn/src/openvpn/tun.c:6417,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.c:6419,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6407,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:6421,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.c:6422,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:6422,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6424,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6383,1
    - Dst: dhcp_masq_addr
      Src: /src/openvpn/src/openvpn/tun.c:6389,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6402,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6405,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/tun.c:6431,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6435,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6371,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6406,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6409,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:6419,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.c:6421,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 51
    argCount: 2
    argNames:
    - tt
    - device_guid
    argTypes:
    - struct tuntap*
    - char*
    constantsTouched: []
    func_position:
      end: 6436
      start: 6363
    functionDepth: 0
    functionLinenumber: 6363
    functionLinenumberEnd: 6436
    functionName: tuntap_dhcp_mask
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - format_hex
    - BPTR
    - msg
    - print_in_addr_t
    - BLEN
    - gc_new
    - free_buf
    - DeviceIoControl
    - build_dhcp_options_string
    - ASSERT
    - gc_free
    - alloc_buf
    - htonl
    - dhcp_masq_addr
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_dhcp_mask(const struct tuntap *tt, const char *device_guid) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:2758,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2764,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:2769,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:2774,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2765,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2777,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:2779,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:2780,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2782,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:2783,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2784
      start: 2755
    functionDepth: 0
    functionLinenumber: 2755
    functionLinenumberEnd: 2784
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - close_tun_generic
    - argv_new
    - ASSERT
    - free
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dhcp_renew_by_adapter_index
      Src: /src/openvpn/src/openvpn/tun.c:5279,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 5285
      start: 5274
    functionDepth: 0
    functionLinenumber: 5274
    functionLinenumberEnd: 5285
    functionName: dhcp_renew
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - dhcp_renew_by_adapter_index
    linkageType: ''
    returnType: bool
    signature: 'static bool dhcp_renew(const struct tuntap *tt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/tun.c:5832,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5845,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5844,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5835,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5841,1
    - Dst: buf_write_u32
      Src: /src/openvpn/src/openvpn/tun.c:5848,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 5
    argNames:
    - buf
    - type
    - data
    - len
    - error
    argTypes:
    - struct buffer*
    - int
    - uint32_t*
    - unsigned int
    - bool*
    constantsTouched: []
    func_position:
      end: 5851
      start: 5824
    functionDepth: 0
    functionLinenumber: 5824
    functionLinenumberEnd: 5851
    functionName: write_dhcp_u32_array
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - buf_safe
    - buf_write_u32
    - buf_write_u8
    linkageType: ''
    returnType: void
    signature: 'static void write_dhcp_u32_array(struct buffer *buf, const int type,
      const uint32_t *data, const unsigned int len, bool *error) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: dhcp_status
      Src: /src/openvpn/src/openvpn/tun.c:6603,1
    - Dst: service_enable_dhcp
      Src: /src/openvpn/src/openvpn/tun.c:6608,1
    - Dst: netsh_enable_dhcp
      Src: /src/openvpn/src/openvpn/tun.c:6612,1
    - Dst: dhcp_status
      Src: /src/openvpn/src/openvpn/tun.c:6623,1
    - Dst: netsh_ifconfig
      Src: /src/openvpn/src/openvpn/tun.c:6625,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 22
    argCount: 3
    argNames:
    - tt
    - dhcp_masq
    - dhcp_masq_post
    argTypes:
    - struct tuntap*
    - bool*
    - bool*
    constantsTouched: []
    func_position:
      end: 6636
      start: 6595
    functionDepth: 0
    functionLinenumber: 6595
    functionLinenumberEnd: 6636
    functionName: tuntap_set_ip_props
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - service_enable_dhcp
    - netsh_enable_dhcp
    - netsh_ifconfig
    - dhcp_status
    linkageType: ''
    returnType: void
    signature: 'static void tuntap_set_ip_props(const struct tuntap *tt, bool *dhcp_masq,
      bool *dhcp_masq_post) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: read_tun_header
      Src: /src/openvpn/src/openvpn/tun.c:3446,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:3450,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3452
      start: 3441
    functionDepth: 0
    functionLinenumber: 3441
    functionLinenumberEnd: 3452
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - read
    - read_tun_header
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/tun.c:5294,1
    - Dst: argv_msg_prefix
      Src: /src/openvpn/src/openvpn/tun.c:5296,1
    - Dst: netcmd_semaphore_release
      Src: /src/openvpn/src/openvpn/tun.c:5298,1
    - Dst: netcmd_semaphore_lock
      Src: /src/openvpn/src/openvpn/tun.c:5295,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:5297,1
    - Dst: management_sleep
      Src: /src/openvpn/src/openvpn/tun.c:5303,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5305,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 4
    argNames:
    - prefix
    - a
    - n
    - msglevel
    argTypes:
    - char*
    - struct argv*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 5306
      start: 5287
    functionDepth: 0
    functionLinenumber: 5287
    functionLinenumberEnd: 5306
    functionName: exec_command
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg_prefix
    - netcmd_semaphore_release
    - management_sleep
    - msg
    - netcmd_semaphore_lock
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'static void exec_command(const char *prefix, const struct argv *a,
      int n, int msglevel) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:5856,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5860,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/tun.c:5857,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5866,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5869,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/tun.c:5870,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/tun.c:5871,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 4
    argNames:
    - buf
    - type
    - str
    - error
    argTypes:
    - struct buffer*
    - int
    - char*
    - bool*
    constantsTouched: []
    func_position:
      end: 5872
      start: 5853
    functionDepth: 0
    functionLinenumber: 5853
    functionLinenumberEnd: 5872
    functionName: write_dhcp_str
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - buf_safe
    - buf_write
    - msg
    - strlen
    - buf_write_u8
    linkageType: ''
    returnType: void
    signature: 'static void write_dhcp_str(struct buffer *buf, const int type, const
      char *str, bool *error) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:6982,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/tun.c:6985,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:6985,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:6990,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:6992,1
    - Dst: ipset2ascii
      Src: /src/openvpn/src/openvpn/tun.c:6992,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6994,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 6995
      start: 6979
    functionDepth: 0
    functionLinenumber: 6979
    functionLinenumberEnd: 6995
    functionName: ipset2ascii_all
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - SIZE
    - ASSERT
    - ipset2ascii
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *ipset2ascii_all(struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:734,1
    - Dst: is_tun_p2p
      Src: /src/openvpn/src/openvpn/tun.c:737,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:741,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:740,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:739,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:748,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:749,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:753,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:754,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:756,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:760,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:763,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 28
    argCount: 4
    argNames:
    - tt
    - remote
    - disable
    - gc
    argTypes:
    - struct tuntap*
    - bool
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 764
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 764
    functionName: ifconfig_options_string
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - is_tun_p2p
    - BSTR
    - buf_printf
    - print_in_addr_t
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *ifconfig_options_string(const struct tuntap *tt, bool
      remote, bool disable, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:2280,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2281
      start: 2276
    functionDepth: 0
    functionLinenumber: 2276
    functionLinenumberEnd: 2281
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: open_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2723,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2739,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2741,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2730,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2732,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2744
      start: 2719
    functionDepth: 0
    functionLinenumber: 2719
    functionLinenumberEnd: 2744
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - ioctl
    - open_tun_generic
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swprintf
      Src: /src/openvpn/src/openvpn/tun.c:4950,1
    - Dst: GetAdapterIndex
      Src: /src/openvpn/src/openvpn/tun.c:4951,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/tun.c:4950,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - guid
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 4960
      start: 4944
    functionDepth: 0
    functionLinenumber: 4944
    functionLinenumberEnd: 4960
    functionName: get_adapter_index_method_1
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - SIZE
    - swprintf
    - GetAdapterIndex
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD get_adapter_index_method_1(const char *guid) '
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 2
    argCount: 1
    argNames:
    - driver
    argTypes:
    - enum tun_driver_type
    constantsTouched: []
    func_position:
      end: 83
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 83
    functionName: print_tun_backend_driver
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *print_tun_backend_driver(enum tun_driver_type driver) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/openvpn/src/openvpn/tun.c:3232,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3236,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:3241,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3244,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:3243,1
    - Dst: connect
      Src: /src/openvpn/src/openvpn/tun.c:3261,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3263,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:3265,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/tun.c:3269,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun.c:3270,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 2
    argNames:
    - ctlInfo
    - utunnum
    argTypes:
    - struct ctl_info
    - int
    constantsTouched: []
    func_position:
      end: 3273
      start: 3226
    functionDepth: 0
    functionLinenumber: 3226
    functionLinenumberEnd: 3273
    functionName: utun_open_helper
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - socket
    - set_cloexec
    - set_nonblock
    - msg
    - ioctl
    - connect
    - close
    linkageType: ''
    returnType: int
    signature: 'static int utun_open_helper(struct ctl_info ctlInfo, int utunnum) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: header_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:1870,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:1874,1
    - Dst: readv
      Src: /src/openvpn/src/openvpn/tun.c:1870,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1876
      start: 1857
    functionDepth: 0
    functionLinenumber: 1857
    functionLinenumberEnd: 1876
    functionName: read_tun_header
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - readv
    - read
    - header_modify_read_write_return
    linkageType: ''
    returnType: int
    signature: 'static int read_tun_header(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read_tun_header
      Src: /src/openvpn/src/openvpn/tun.c:2795,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2796
      start: 2792
    functionDepth: 0
    functionLinenumber: 2792
    functionLinenumberEnd: 2796
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - read_tun_header
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:3286,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:3297,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/tun.c:3288,1
    - Dst: strlcpy
      Src: /src/openvpn/src/openvpn/tun.c:3298,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3290,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3301,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3311,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:3311,1
    - Dst: if_nametoindex
      Src: /src/openvpn/src/openvpn/tun.c:3312,1
    - Dst: utun_open_helper
      Src: /src/openvpn/src/openvpn/tun.c:3316,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3346,1
    - Dst: getsockopt
      Src: /src/openvpn/src/openvpn/tun.c:3339,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:3344,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3341,1
    - Dst: utun_open_helper
      Src: /src/openvpn/src/openvpn/tun.c:3327,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 42
    argCount: 4
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 3348
      start: 3275
    functionDepth: 0
    functionLinenumber: 3275
    functionLinenumberEnd: 3348
    functionName: open_darwin_utun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - sscanf
    - getsockopt
    - if_nametoindex
    - msg
    - snprintf
    - utun_open_helper
    - strlcpy
    - strcmp
    - CLEAR
    - ASSERT
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void open_darwin_utun(const char *dev, const char *dev_type, const
      char *dev_node, struct tuntap *tt) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:649,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:654,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:653,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:655,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:651,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:669,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:672,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:673,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:674,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:680,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:695,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:699,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:698,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:685,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:684,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:705,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:683,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:700,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 39
    argCount: 5
    argNames:
    - name
    - type
    - public
    - local
    - remote_netmask
    argTypes:
    - char*
    - int
    - in_addr_t
    - in_addr_t
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 706
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 706
    functionName: check_addr_clash
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void check_addr_clash(const char *name, int type, in_addr_t
      public, in_addr_t local, in_addr_t remote_netmask) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: RegEnumKeyEx
      Src: /src/openvpn/src/openvpn/tun.c:3907,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3938,1
    - Dst: RegQueryValueEx
      Src: /src/openvpn/src/openvpn/tun.c:3943,1
    - Dst: strcasecmp
      Src: /src/openvpn/src/openvpn/tun.c:3976,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3922,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3891,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:3926,1
    - Dst: RegOpenKeyEx
      Src: /src/openvpn/src/openvpn/tun.c:3929,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/tun.c:3984,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpn/tun.c:4004,1
    - Dst: strcasecmp
      Src: /src/openvpn/src/openvpn/tun.c:3971,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpn/tun.c:4009,1
    - Dst: RegOpenKeyEx
      Src: /src/openvpn/src/openvpn/tun.c:3882,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3953,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3894,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:3999,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:3985,1
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:4000,1
    - Dst: strcasecmp
      Src: /src/openvpn/src/openvpn/tun.c:3972,1
    - Dst: RegQueryValueEx
      Src: /src/openvpn/src/openvpn/tun.c:3959,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 66
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4011
      start: 3872
    functionDepth: 0
    functionLinenumber: 3872
    functionLinenumberEnd: 4011
    functionName: get_tap_reg
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - RegCloseKey
    - strcasecmp
    - dmsg
    - msg
    - RegEnumKeyEx
    - snprintf
    - print_tun_backend_driver
    - ALLOC_OBJ_CLEAR_GC
    - RegQueryValueEx
    - RegOpenKeyEx
    - string_alloc
    linkageType: ''
    returnType: struct tap_reg*
    signature: 'static const struct tap_reg *get_tap_reg(struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exec_command
      Src: /src/openvpn/src/openvpn/tun.c:5311,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - a
    - n
    - msglevel
    argTypes:
    - struct argv*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 5312
      start: 5308
    functionDepth: 0
    functionLinenumber: 5308
    functionLinenumberEnd: 5312
    functionName: netsh_command
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - exec_command
    linkageType: ''
    returnType: void
    signature: 'static void netsh_command(const struct argv *a, int n, int msglevel) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: get_adapter
      Src: /src/openvpn/src/openvpn/tun.c:5579,1
    - Dst: get_per_adapter_info
      Src: /src/openvpn/src/openvpn/tun.c:5580,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:5599,1
    - Dst: netsh_ifconfig_options
      Src: /src/openvpn/src/openvpn/tun.c:5613,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/tun.c:5618,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:5632,1
    - Dst: test_adapter_ip_netmask
      Src: /src/openvpn/src/openvpn/tun.c:5585,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5587,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:5590,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:5611,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5571,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:5572,1
    - Dst: get_adapter_info_list
      Src: /src/openvpn/src/openvpn/tun.c:5578,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:5589,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:5610,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:5602,1
    - Dst: init_ip_addr_string2
      Src: /src/openvpn/src/openvpn/tun.c:5621,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5595,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5596,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:5600,1
    - Dst: netsh_ifconfig_options
      Src: /src/openvpn/src/openvpn/tun.c:5624,1
    - Dst: BOOL_CAST
      Src: /src/openvpn/src/openvpn/tun.c:5629,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5633,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 38
    argCount: 5
    argNames:
    - to
    - adapter_index
    - ip
    - netmask
    - flags
    argTypes:
    - struct tuntap_options*
    - DWORD
    - in_addr_t
    - in_addr_t
    - unsigned int
    constantsTouched: []
    func_position:
      end: 5634
      start: 5564
    functionDepth: 0
    functionLinenumber: 5564
    functionLinenumberEnd: 5634
    functionName: netsh_ifconfig
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - test_adapter_ip_netmask
    - netsh_command
    - init_ip_addr_string2
    - get_win_sys_path
    - argv_printf
    - msg
    - get_adapter
    - print_in_addr_t
    - BOOL_CAST
    - argv_free
    - gc_new
    - get_adapter_info_list
    - CLEAR
    - gc_free
    - argv_new
    - get_per_adapter_info
    - netsh_ifconfig_options
    linkageType: ''
    returnType: void
    signature: 'static void netsh_ifconfig(const struct tuntap_options *to, DWORD
      adapter_index, const in_addr_t ip, const in_addr_t netmask, const unsigned int
      flags) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5659,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:5679,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5683,1
    - Dst: send_msg_iservice
      Src: /src/openvpn/src/openvpn/tun.c:5671,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5678,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5688,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 5690
      start: 5654
    functionDepth: 0
    functionLinenumber: 5654
    functionLinenumberEnd: 5690
    functionName: service_enable_dhcp
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - send_msg_iservice
    - msg
    - gc_new
    - strerror_win32
    - gc_free
    linkageType: ''
    returnType: bool
    signature: 'static bool service_enable_dhcp(const struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/tun.c:6744,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/tun.c:6747,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6748,1
    - Dst: DeviceIoControl
      Src: /src/openvpn/src/openvpn/tun.c:6746,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6747,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/tun.c:6748,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6751,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6751,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/tun.c:6753,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6755
      start: 6739
    functionDepth: 0
    functionLinenumber: 6739
    functionLinenumberEnd: 6755
    functionName: tun_show_debug
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - BSTR
    - msg
    - free_buf
    - DeviceIoControl
    - alloc_buf
    - BCAP
    linkageType: ''
    returnType: void
    signature: 'void tun_show_debug(struct tuntap *tt) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:6954,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/tun.c:6954,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:6957,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 6963
      start: 6950
    functionDepth: 0
    functionLinenumber: 6950
    functionLinenumberEnd: 6963
    functionName: ascii2ipset
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - strcmp
    - SIZE
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'int ascii2ipset(const char *name) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: RegOpenKeyEx
      Src: /src/openvpn/src/openvpn/tun.c:4023,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4032,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4060,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:4064,1
    - Dst: RegEnumKeyEx
      Src: /src/openvpn/src/openvpn/tun.c:4045,1
    - Dst: RegOpenKeyEx
      Src: /src/openvpn/src/openvpn/tun.c:4068,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:4077,1
    - Dst: RegQueryValueExW
      Src: /src/openvpn/src/openvpn/tun.c:4082,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:4092,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/tun.c:4101,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/tun.c:4103,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:4106,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpn/tun.c:4119,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/tun.c:4104,1
    - Dst: RegCloseKey
      Src: /src/openvpn/src/openvpn/tun.c:4124,1
    - Dst: WideCharToMultiByte
      Src: /src/openvpn/src/openvpn/tun.c:4102,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 48
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4127
      start: 4013
    functionDepth: 0
    functionLinenumber: 4013
    functionLinenumberEnd: 4127
    functionName: get_panel_reg
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - RegCloseKey
    - dmsg
    - msg
    - RegEnumKeyEx
    - snprintf
    - gc_malloc
    - string_alloc
    - ALLOC_OBJ_CLEAR_GC
    - WideCharToMultiByte
    - RegOpenKeyEx
    - RegQueryValueExW
    linkageType: ''
    returnType: struct panel_reg*
    signature: 'static const struct panel_reg *get_panel_reg(struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:5317,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5324,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5320,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5323,1
    - Dst: netcmd_semaphore_lock
      Src: /src/openvpn/src/openvpn/tun.c:5321,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:5326,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:5327,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5329,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5330,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:5332,1
    - Dst: netcmd_semaphore_release
      Src: /src/openvpn/src/openvpn/tun.c:5336,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5337,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:5333,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:5334,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - es
    argTypes:
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 5338
      start: 5314
    functionDepth: 0
    functionLinenumber: 5314
    functionLinenumberEnd: 5338
    functionName: ipconfig_register_dns
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - netcmd_semaphore_release
    - get_win_sys_path
    - argv_msg
    - argv_printf
    - msg
    - argv_free
    - netcmd_semaphore_lock
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'void ipconfig_register_dns(const struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:5639,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5644,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5642,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:5648,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:5650,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - adapter_index
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 5651
      start: 5636
    functionDepth: 0
    functionLinenumber: 5636
    functionLinenumberEnd: 5651
    functionName: netsh_enable_dhcp
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - netsh_command
    - get_win_sys_path
    - argv_printf
    - argv_free
    - argv_new
    linkageType: ''
    returnType: void
    signature: 'static void netsh_enable_dhcp(DWORD adapter_index) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5697,1
    - Dst: SetIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/tun.c:5716,1
    - Dst: InitializeIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/tun.c:5699,1
    - Dst: GetIpInterfaceEntry
      Src: /src/openvpn/src/openvpn/tun.c:5708,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5705,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5721,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:5722,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5726,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 27
    argCount: 3
    argNames:
    - iface_index
    - family
    - mtu
    argTypes:
    - int
    - short
    - int
    constantsTouched: []
    func_position:
      end: 5728
      start: 5692
    functionDepth: 0
    functionLinenumber: 5692
    functionLinenumberEnd: 5728
    functionName: windows_set_mtu
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - InitializeIpInterfaceEntry
    - msg
    - gc_new
    - strerror_win32
    - GetIpInterfaceEntry
    - SetIpInterfaceEntry
    linkageType: ''
    returnType: void
    signature: 'static void windows_set_mtu(const int iface_index, const short family,
      const int mtu) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:6761,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:6773,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:6778,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:6769,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:6767,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:6780,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:6783,1
    - Dst: delete_route_connected_v6_net
      Src: /src/openvpn/src/openvpn/tun.c:6788,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/tun.c:6798,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6802,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:6811,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:6813,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:6804,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:6806,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 3
    argNames:
    - tt
    - ipv6
    - gc
    argTypes:
    - struct tuntap*
    - bool
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 6814
      start: 6757
    functionDepth: 0
    functionLinenumber: 6757
    functionLinenumberEnd: 6814
    functionName: netsh_delete_address_dns
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - netsh_command
    - get_win_sys_path
    - argv_printf
    - print_in_addr_t
    - argv_free
    - print_in6_addr
    - delete_route_connected_v6_net
    - argv_new
    linkageType: ''
    returnType: void
    signature: 'static void netsh_delete_address_dns(const struct tuntap *tt, bool
      ipv6, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:616,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:622,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:631,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:623,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:635,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - tun_p2p
    - addr
    argTypes:
    - bool
    - in_addr_t
    constantsTouched: []
    func_position:
      end: 636
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 636
    functionName: ifconfig_sanity_check
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - print_in_addr_t
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'static void ifconfig_sanity_check(bool tun_p2p, in_addr_t addr) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAdaptersInfo
      Src: /src/openvpn/src/openvpn/tun.c:4488,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:4492,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4490,1
    - Dst: GetAdaptersInfo
      Src: /src/openvpn/src/openvpn/tun.c:4497,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/tun.c:4496,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4499,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:4501,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4506
      start: 4481
    functionDepth: 0
    functionLinenumber: 4481
    functionLinenumberEnd: 4506
    functionName: get_adapter_info_list
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - gc_malloc
    - GetAdaptersInfo
    - strerror_win32
    linkageType: ''
    returnType: IP_ADAPTER_INFO*
    signature: 'const IP_ADAPTER_INFO *get_adapter_info_list(struct gc_arena *gc) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: tun_dco_enabled
      Src: /src/openvpn/src/openvpn/tun.c:2167,1
    - Dst: open_tun_dco_generic
      Src: /src/openvpn/src/openvpn/tun.c:2169,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:2185,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:2220,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:2222,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:2248,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:2258,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2234,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2250,1
    - Dst: socket
      Src: /src/openvpn/src/openvpn/tun.c:2245,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/tun.c:2267,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2187,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2213,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:2247,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2262,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun.c:2268,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:2269,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:2193,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:2220,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2229,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2231,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2252,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2256,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 59
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2272
      start: 2161
    functionDepth: 0
    functionLinenumber: 2161
    functionLinenumberEnd: 2272
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - socket
    - set_cloexec
    - set_nonblock
    - msg
    - ioctl
    - open_tun_dco_generic
    - tun_dco_enabled
    - strcmp
    - strncpynt
    - CLEAR
    - open
    - close
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:711,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:724,1
    - Dst: get_default_gateway
      Src: /src/openvpn/src/openvpn/tun.c:715,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:721,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 725
      start: 708
    functionDepth: 0
    functionLinenumber: 708
    functionLinenumberEnd: 725
    functionName: warn_on_use_of_common_subnets
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - gc_free
    - get_default_gateway
    - gc_new
    linkageType: ''
    returnType: void
    signature: 'void warn_on_use_of_common_subnets(openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: undo_ifconfig_ipv4
      Src: /src/openvpn/src/openvpn/tun.c:1761,1
    - Dst: net_ctx_reset
      Src: /src/openvpn/src/openvpn/tun.c:1770,1
    - Dst: undo_ifconfig_ipv6
      Src: /src/openvpn/src/openvpn/tun.c:1766,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 10
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 1772
      start: 1754
    functionDepth: 0
    functionLinenumber: 1754
    functionLinenumberEnd: 1772
    functionName: undo_ifconfig
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - undo_ifconfig_ipv6
    - net_ctx_reset
    - undo_ifconfig_ipv4
    linkageType: ''
    returnType: void
    signature: 'void undo_ifconfig(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:4906,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4919,1
    - Dst: DeleteIPAddress
      Src: /src/openvpn/src/openvpn/tun.c:4917,1
    - Dst: get_adapter_info
      Src: /src/openvpn/src/openvpn/tun.c:4907,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4926,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4927,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4929,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:4938,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 1
    argNames:
    - index
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 4939
      start: 4903
    functionDepth: 0
    functionLinenumber: 4903
    functionLinenumberEnd: 4939
    functionName: delete_temp_addresses
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter_info
    - msg
    - gc_new
    - DeleteIPAddress
    - strcmp
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static void delete_temp_addresses(DWORD index) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:4965,1
    - Dst: get_adapter_info_list
      Src: /src/openvpn/src/openvpn/tun.c:4968,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4972,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:4980,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - guid
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 4982
      start: 4962
    functionDepth: 0
    functionLinenumber: 4962
    functionLinenumberEnd: 4982
    functionName: get_adapter_index_method_2
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - strcmp
    - gc_free
    - gc_new
    - get_adapter_info_list
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD get_adapter_index_method_2(const char *guid) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5211,1
    - Dst: IpReleaseAddress
      Src: /src/openvpn/src/openvpn/tun.c:5217,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5225,1
    - Dst: get_interface_info
      Src: /src/openvpn/src/openvpn/tun.c:5213,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5220,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:5226,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5231,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - adapter_index
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 5233
      start: 5208
    functionDepth: 0
    functionLinenumber: 5208
    functionLinenumberEnd: 5233
    functionName: dhcp_release_by_adapter_index
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - IpReleaseAddress
    - gc_new
    - strerror_win32
    - gc_free
    - get_interface_info
    linkageType: ''
    returnType: bool
    signature: 'bool dhcp_release_by_adapter_index(const DWORD adapter_index) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: register_dns_service
      Src: /src/openvpn/src/openvpn/tun.c:6053,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:6058,1
    - Dst: fork_to_self
      Src: /src/openvpn/src/openvpn/tun.c:6062,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6057,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:6061,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:6062,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6063,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 13
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6065
      start: 6048
    functionDepth: 0
    functionLinenumber: 6048
    functionLinenumberEnd: 6065
    functionName: fork_register_dns_action
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - gc_new
    - register_dns_service
    - fork_to_self
    - gc_free
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void fork_register_dns_action(struct tuntap *tt) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: print_tun_backend_driver
      Src: /src/openvpn/src/openvpn/tun.c:6819,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:6830,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6826,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:6823,1
    - Dst: CancelIo
      Src: /src/openvpn/src/openvpn/tun.c:6824,1
    - Dst: overlapped_io_close
      Src: /src/openvpn/src/openvpn/tun.c:6831,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:6833,1
    - Dst: overlapped_io_close
      Src: /src/openvpn/src/openvpn/tun.c:6834,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:6838,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/tun.c:6839,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6841,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 6845
      start: 6816
    functionDepth: 0
    functionLinenumber: 6816
    functionLinenumberEnd: 6845
    functionName: close_tun_handle
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - dmsg
    - CloseHandle
    - msg
    - print_tun_backend_driver
    - overlapped_io_close
    - CancelIo
    linkageType: ''
    returnType: void
    signature: 'void close_tun_handle(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:1777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - tuntap
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 1786
      start: 1774
    functionDepth: 0
    functionLinenumber: 1774
    functionLinenumberEnd: 1786
    functionName: clear_tuntap
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void clear_tuntap(struct tuntap *tuntap) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:4877,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:4895,1
    - Dst: get_adapter_info
      Src: /src/openvpn/src/openvpn/tun.c:4881,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - index
    argTypes:
    - DWORD
    constantsTouched: []
    func_position:
      end: 4897
      start: 4874
    functionDepth: 0
    functionLinenumber: 4874
    functionLinenumberEnd: 4897
    functionName: dhcp_status
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter_info
    - gc_free
    - gc_new
    linkageType: ''
    returnType: int
    signature: 'static int dhcp_status(DWORD index) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: get_adapter_index_method_1
      Src: /src/openvpn/src/openvpn/tun.c:4988,1
    - Dst: get_adapter_index_method_2
      Src: /src/openvpn/src/openvpn/tun.c:4991,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4995,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - guid
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 4998
      start: 4984
    functionDepth: 0
    functionLinenumber: 4984
    functionLinenumberEnd: 4998
    functionName: get_adapter_index
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - get_adapter_index_method_2
    - get_adapter_index_method_1
    linkageType: ''
    returnType: DWORD
    signature: 'static DWORD get_adapter_index(const char *guid) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6070,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6089,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6084,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6092,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:6084,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:6093,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 3
    argNames:
    - local
    - netmask
    - offset
    argTypes:
    - in_addr_t
    - in_addr_t
    - int
    constantsTouched: []
    func_position:
      end: 6094
      start: 6067
    functionDepth: 0
    functionLinenumber: 6067
    functionLinenumberEnd: 6094
    functionName: dhcp_masq_addr
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - print_in_addr_t
    - gc_new
    - gc_free
    - htonl
    linkageType: ''
    returnType: uint32_t
    signature: 'static uint32_t dhcp_masq_addr(const in_addr_t local, const in_addr_t
      netmask, const int offset) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: DeleteIPAddress
      Src: /src/openvpn/src/openvpn/tun.c:6913,1
    - Dst: close_tun_handle
      Src: /src/openvpn/src/openvpn/tun.c:6924,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:6850,1
    - Dst: delete_route_connected_v6_net
      Src: /src/openvpn/src/openvpn/tun.c:6868,1
    - Dst: do_address_service
      Src: /src/openvpn/src/openvpn/tun.c:6869,1
    - Dst: netsh_delete_address_dns
      Src: /src/openvpn/src/openvpn/tun.c:6878,1
    - Dst: do_address_service
      Src: /src/openvpn/src/openvpn/tun.c:6897,1
    - Dst: do_dns_service
      Src: /src/openvpn/src/openvpn/tun.c:6896,1
    - Dst: do_dns_domain_wmic
      Src: /src/openvpn/src/openvpn/tun.c:6901,1
    - Dst: netsh_delete_address_dns
      Src: /src/openvpn/src/openvpn/tun.c:6905,1
    - Dst: clear_tuntap
      Src: /src/openvpn/src/openvpn/tun.c:6928,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:6852,1
    - Dst: do_dns_domain_service
      Src: /src/openvpn/src/openvpn/tun.c:6865,1
    - Dst: do_dns_domain_wmic
      Src: /src/openvpn/src/openvpn/tun.c:6875,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:6918,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:6915,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:6926,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:6929,1
    - Dst: do_dns_service
      Src: /src/openvpn/src/openvpn/tun.c:6867,1
    - Dst: do_wins_service
      Src: /src/openvpn/src/openvpn/tun.c:6894,1
    - Dst: do_dns_domain_service
      Src: /src/openvpn/src/openvpn/tun.c:6895,1
    - Dst: dhcp_release
      Src: /src/openvpn/src/openvpn/tun.c:6922,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:6930,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 48
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 6931
      start: 6847
    functionDepth: 0
    functionLinenumber: 6847
    functionLinenumberEnd: 6931
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - do_wins_service
    - dhcp_release
    - do_dns_domain_service
    - msg
    - netsh_delete_address_dns
    - clear_tuntap
    - gc_new
    - do_dns_domain_wmic
    - strerror_win32
    - DeleteIPAddress
    - close_tun_handle
    - gc_free
    - delete_route_connected_v6_net
    - ASSERT
    - free
    - do_dns_service
    - do_address_service
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:6968,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/tun.c:6968,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 6977
      start: 6965
    functionDepth: 0
    functionLinenumber: 6965
    functionLinenumberEnd: 6977
    functionName: ipset2ascii
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - SIZE
    - ASSERT
    linkageType: ''
    returnType: char*
    signature: 'const char *ipset2ascii(int index) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5109,1
    - Dst: get_tap_reg
      Src: /src/openvpn/src/openvpn/tun.c:5110,1
    - Dst: get_device_guid
      Src: /src/openvpn/src/openvpn/tun.c:5122,1
    - Dst: at_least_one_tap_win
      Src: /src/openvpn/src/openvpn/tun.c:5117,1
    - Dst: get_panel_reg
      Src: /src/openvpn/src/openvpn/tun.c:5111,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5126,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:5130,1
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpn/tun.c:5135,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5147,1
    - Dst: tap_allow_nonadmin_access_handle
      Src: /src/openvpn/src/openvpn/tun.c:5150,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5191,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5202,1
    - Dst: tap_allow_nonadmin_access_handle
      Src: /src/openvpn/src/openvpn/tun.c:5195,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/tun.c:5196,1
    - Dst: CreateFile
      Src: /src/openvpn/src/openvpn/tun.c:5179,1
    - Dst: CloseHandle
      Src: /src/openvpn/src/openvpn/tun.c:5151,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:5174,1
    - Dst: get_unspecified_device_guid
      Src: /src/openvpn/src/openvpn/tun.c:5160,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 37
    argCount: 1
    argNames:
    - dev_node
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 5203
      start: 5106
    functionDepth: 0
    functionLinenumber: 5106
    functionLinenumberEnd: 5203
    functionName: tap_allow_nonadmin_access
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - at_least_one_tap_win
    - CloseHandle
    - get_tap_reg
    - msg
    - snprintf
    - get_device_guid
    - CreateFile
    - gc_new
    - tap_allow_nonadmin_access_handle
    - gc_free
    - get_unspecified_device_guid
    - get_panel_reg
    linkageType: ''
    returnType: void
    signature: 'void tap_allow_nonadmin_access(const char *dev_node) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:2822,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2831,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2829,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2827,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:2825,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/tun.c:2833,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun.c:2834,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2835,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun.c:2837,1
    - Dst: open_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2844,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2852,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2857,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2859,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2850,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2863
      start: 2814
    functionDepth: 0
    functionLinenumber: 2814
    functionLinenumberEnd: 2863
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - set_cloexec
    - set_nonblock
    - msg
    - ioctl
    - open_tun_generic
    - strcmp
    - open
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3145,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:3147,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:3148,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 3149
      start: 3142
    functionDepth: 0
    functionLinenumber: 3142
    functionLinenumberEnd: 3149
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - ASSERT
    - close_tun_generic
    - free
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4307,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 2
    argNames:
    - guid
    - panel_reg
    argTypes:
    - char*
    - struct panel_reg*
    constantsTouched: []
    func_position:
      end: 4314
      start: 4300
    functionDepth: 0
    functionLinenumber: 4300
    functionLinenumberEnd: 4314
    functionName: guid_to_name
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *guid_to_name(const char *guid, const struct panel_reg
      *panel_reg) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun.c:5355,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5374,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5377,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5373,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/tun.c:5360,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:5377,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5379,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 25
    argCount: 3
    argNames:
    - dest
    - dest_len
    - src
    argTypes:
    - in_addr_t*
    - int*
    - IP_ADDR_STRING*
    constantsTouched: []
    func_position:
      end: 5382
      start: 5340
    functionDepth: 0
    functionLinenumber: 5340
    functionLinenumberEnd: 5382
    functionName: ip_addr_string_to_array
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - print_in_addr_t
    - gc_new
    - gc_free
    - getaddr
    - strlen
    linkageType: ''
    returnType: void
    signature: 'void ip_addr_string_to_array(in_addr_t *dest, int *dest_len, const
      IP_ADDR_STRING *src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:7003,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 7004
      start: 6999
    functionDepth: 0
    functionLinenumber: 6999
    functionLinenumberEnd: 7004
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - open_tun_generic
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:2390,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:2419,1
    - Dst: isdigit
      Src: /src/openvpn/src/openvpn/tun.c:2434,1
    - Dst: atoi
      Src: /src/openvpn/src/openvpn/tun.c:2438,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2473,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2492,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2468,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2494,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/tun.c:2498,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2507,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2569,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:2577,1
    - Dst: set_nonblock
      Src: /src/openvpn/src/openvpn/tun.c:2594,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2591,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2426,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2481,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/tun.c:2509,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2512,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2514,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2521,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2535,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2543,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2548,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2556,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2598,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun.c:2595,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2415,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2421,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2452,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2455,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2484,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/tun.c:2499,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/tun.c:2501,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2505,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2516,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2523,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2529,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:2541,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun.c:2596,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2562,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2518,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:2424,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/tun.c:2479,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2462,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2475,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2486,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2537,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2546,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2558,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2564,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:2576,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2584,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun.c:2573,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2590,1
    - Dst: ioctl
      Src: /src/openvpn/src/openvpn/tun.c:2588,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:2571,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 162
    argCount: 5
    argNames:
    - dev
    - dev_type
    - dev_node
    - tt
    - ctx
    argTypes:
    - char*
    - char*
    - char*
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2599
      start: 2374
    functionDepth: 0
    functionLinenumber: 2374
    functionLinenumberEnd: 2599
    functionName: open_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - isdigit
    - atoi
    - set_cloexec
    - set_nonblock
    - msg
    - snprintf
    - ioctl
    - strncpynt
    - CLEAR
    - malloc
    - close
    - open
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'void open_tun(const char *dev, const char *dev_type, const char *dev_node,
      struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:3164,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/tun.c:3168,1
    - Dst: writev
      Src: /src/openvpn/src/openvpn/tun.c:3176,1
    - Dst: dragonfly_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:3176,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:3180,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3182
      start: 3151
    functionDepth: 0
    functionLinenumber: 3151
    functionLinenumberEnd: 3182
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - write
    - writev
    - dragonfly_modify_read_write_return
    - htonl
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dragonfly_modify_read_write_return
      Src: /src/openvpn/src/openvpn/tun.c:3197,1
    - Dst: readv
      Src: /src/openvpn/src/openvpn/tun.c:3197,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:3201,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 3203
      start: 3184
    functionDepth: 0
    functionLinenumber: 3184
    functionLinenumberEnd: 3203
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - readv
    - dragonfly_modify_read_write_return
    - read
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:4323,1
    - Dst: get_adapter_by_guid
      Src: /src/openvpn/src/openvpn/tun.c:4325,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 10
    argCount: 3
    argNames:
    - name
    - tap_reg
    - panel_reg
    argTypes:
    - char*
    - struct tap_reg*
    - struct panel_reg*
    constantsTouched: []
    func_position:
      end: 4330
      start: 4316
    functionDepth: 0
    functionLinenumber: 4316
    functionLinenumberEnd: 4330
    functionName: get_adapter_by_name
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - strcmp
    - get_adapter_by_guid
    linkageType: ''
    returnType: struct tap_reg*
    signature: 'static const struct tap_reg *get_adapter_by_name(const char *name,
      const struct tap_reg *tap_reg, const struct panel_reg *panel_reg) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/tun.c:5388,1
    - Dst: ip_addr_string_to_array
      Src: /src/openvpn/src/openvpn/tun.c:5391,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 3
    argNames:
    - a1
    - a1len
    - ias
    argTypes:
    - in_addr_t*
    - int
    - IP_ADDR_STRING*
    constantsTouched: []
    func_position:
      end: 5406
      start: 5384
    functionDepth: 0
    functionLinenumber: 5384
    functionLinenumberEnd: 5406
    functionName: ip_addr_one_to_one
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - ip_addr_string_to_array
    - SIZE
    linkageType: ''
    returnType: bool
    signature: 'static bool ip_addr_one_to_one(const in_addr_t *a1, const int a1len,
      const IP_ADDR_STRING *ias) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:7009,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:7011,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:7012,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 7013
      start: 7006
    functionDepth: 0
    functionLinenumber: 7006
    functionLinenumberEnd: 7013
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - ASSERT
    - close_tun_generic
    - free
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun.c:7024,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 7025
      start: 7021
    functionDepth: 0
    functionLinenumber: 7021
    functionLinenumberEnd: 7025
    functionName: read_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'int read_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:3603,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3607,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:3604,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3604,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/tun.c:3607,1
    - Dst: ReadFile
      Src: /src/openvpn/src/openvpn/tun.c:3609,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.c:3611,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3620,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/tun.c:3620,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3625,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3645,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:3647,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:3641,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3642,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/tun.c:3631,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3636,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/tun.c:3642,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:3648,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 37
    argCount: 2
    argNames:
    - tt
    - maxsize
    argTypes:
    - struct tuntap*
    - int
    constantsTouched: []
    func_position:
      end: 3653
      start: 3591
    functionDepth: 0
    functionLinenumber: 3591
    functionLinenumberEnd: 3653
    functionName: tun_read_queue
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - SetEvent
    - BPTR
    - dmsg
    - GetLastError
    - BLEN
    - gc_new
    - strerror_win32
    - gc_free
    - ASSERT
    - ReadFile
    - ResetEvent
    linkageType: ''
    returnType: int
    signature: 'int tun_read_queue(struct tuntap *tt, int maxsize) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/tun.c:4422,1
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/tun.c:4423,1
    - Dst: buf_set_write
      Src: /src/openvpn/src/openvpn/tun.c:4436,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:4435,1
    - Dst: get_adapter_by_guid
      Src: /src/openvpn/src/openvpn/tun.c:4440,1
    - Dst: guid_to_name
      Src: /src/openvpn/src/openvpn/tun.c:4443,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4444,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4447,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4451,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:4457,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4470,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/tun.c:4471,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/tun.c:4465,1
    - Dst: get_adapter_by_name
      Src: /src/openvpn/src/openvpn/tun.c:4462,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 30
    argCount: 7
    argNames:
    - name
    - actual_name
    - actual_name_size
    - windows_driver
    - tap_reg
    - panel_reg
    - gc
    argTypes:
    - char*
    - uint8_t*
    - int
    - enum tun_driver_type*
    - struct tap_reg*
    - struct panel_reg*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4476
      start: 4413
    functionDepth: 0
    functionLinenumber: 4413
    functionLinenumberEnd: 4476
    functionName: get_device_guid
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - guid_to_name
    - clear_buf
    - BSTR
    - buf_printf
    - get_adapter_by_name
    - buf_set_write
    - ASSERT
    - get_adapter_by_guid
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_device_guid(const char *name, uint8_t *actual_name,
      int actual_name_size, enum tun_driver_type *windows_driver, const struct tap_reg
      *tap_reg, const struct panel_reg *panel_reg, struct gc_arena *gc) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetPerAdapterInfo
      Src: /src/openvpn/src/openvpn/tun.c:4517,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:4521,1
    - Dst: GetPerAdapterInfo
      Src: /src/openvpn/src/openvpn/tun.c:4526,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/tun.c:4525,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4519,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4532,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:4534,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 2
    argNames:
    - index
    - gc
    argTypes:
    - DWORD
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4539
      start: 4508
    functionDepth: 0
    functionLinenumber: 4508
    functionLinenumberEnd: 4539
    functionName: get_per_adapter_info
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - GetPerAdapterInfo
    - gc_malloc
    - msg
    - strerror_win32
    linkageType: ''
    returnType: IP_PER_ADAPTER_INFO*
    signature: 'const IP_PER_ADAPTER_INFO *get_per_adapter_info(const DWORD index,
      struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_adapter
      Src: /src/openvpn/src/openvpn/tun.c:4617,1
    - Dst: get_adapter_info_list
      Src: /src/openvpn/src/openvpn/tun.c:4617,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - index
    - gc
    argTypes:
    - DWORD
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4618
      start: 4614
    functionDepth: 0
    functionLinenumber: 4614
    functionLinenumberEnd: 4618
    functionName: get_adapter_info
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - get_adapter
    - get_adapter_info_list
    linkageType: ''
    returnType: IP_ADAPTER_INFO*
    signature: 'const IP_ADAPTER_INFO *get_adapter_info(DWORD index, struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: init_security_attributes_allow_all
      Src: /src/openvpn/src/openvpn/tun.c:5090,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5102,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5092,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5098,1
    - Dst: SetKernelObjectSecurity
      Src: /src/openvpn/src/openvpn/tun.c:5095,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - device_path
    - hand
    argTypes:
    - char*
    - HANDLE
    constantsTouched: []
    func_position:
      end: 5104
      start: 5084
    functionDepth: 0
    functionLinenumber: 5084
    functionLinenumberEnd: 5104
    functionName: tap_allow_nonadmin_access_handle
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - init_security_attributes_allow_all
    - SetKernelObjectSecurity
    linkageType: ''
    returnType: void
    signature: 'static void tap_allow_nonadmin_access_handle(const char *device_path,
      HANDLE hand) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5474,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/tun.c:5477,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5495,1
    - Dst: ip_addr_one_to_one
      Src: /src/openvpn/src/openvpn/tun.c:5482,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:5475,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5496,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:5500,1
    - Dst: ip_addr_member_of
      Src: /src/openvpn/src/openvpn/tun.c:5509,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:5515,1
    - Dst: get_win_sys_path
      Src: /src/openvpn/src/openvpn/tun.c:5516,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:5520,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/tun.c:5525,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5534,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/tun.c:5537,1
    - Dst: netsh_command
      Src: /src/openvpn/src/openvpn/tun.c:5528,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:5542,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5543,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 37
    argCount: 6
    argNames:
    - type
    - addr_list
    - addr_len
    - current
    - adapter_index
    - test_first
    argTypes:
    - char*
    - in_addr_t*
    - int
    - IP_ADDR_STRING*
    - DWORD
    - bool
    constantsTouched: []
    func_position:
      end: 5544
      start: 5466
    functionDepth: 0
    functionLinenumber: 5466
    functionLinenumberEnd: 5544
    functionName: netsh_ifconfig_options
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - netsh_command
    - get_win_sys_path
    - argv_printf
    - print_in_addr_t
    - msg
    - ip_addr_one_to_one
    - argv_free
    - gc_new
    - ip_addr_member_of
    - strcmp
    - gc_free
    - argv_new
    - argv_printf_cat
    linkageType: ''
    returnType: void
    signature: 'static void netsh_ifconfig_options(const char *type, const in_addr_t
      *addr_list, const int addr_len, const IP_ADDR_STRING *current, DWORD adapter_index,
      const bool test_first) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3666,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/tun.c:3684,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3705,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3708,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:3710,1
    - Dst: ResetEvent
      Src: /src/openvpn/src/openvpn/tun.c:3669,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:3674,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/tun.c:3666,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/tun.c:3673,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3684,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3688,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/tun.c:3699,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:3704,1
    - Dst: SetEvent
      Src: /src/openvpn/src/openvpn/tun.c:3705,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:3709,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:3689,1
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/tun.c:3694,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/tun.c:3700,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:3669,1
    - Dst: WriteFile
      Src: /src/openvpn/src/openvpn/tun.c:3671,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:3711,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 39
    argCount: 2
    argNames:
    - tt
    - buf
    argTypes:
    - struct tuntap*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 3716
      start: 3655
    functionDepth: 0
    functionLinenumber: 3655
    functionLinenumberEnd: 3716
    functionName: tun_write_queue
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - buf_copy
    - SetEvent
    - BPTR
    - dmsg
    - GetLastError
    - BLEN
    - gc_new
    - strerror_win32
    - gc_free
    - ASSERT
    - WriteFile
    - ResetEvent
    linkageType: ''
    returnType: int
    signature: 'int tun_write_queue(struct tuntap *tt, struct buffer *buf) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetInterfaceInfo
      Src: /src/openvpn/src/openvpn/tun.c:4548,1
    - Dst: GetInterfaceInfo
      Src: /src/openvpn/src/openvpn/tun.c:4557,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:4552,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/tun.c:4556,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4550,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:4563,1
    - Dst: strerror_win32
      Src: /src/openvpn/src/openvpn/tun.c:4565,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - gc
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4569
      start: 4541
    functionDepth: 0
    functionLinenumber: 4541
    functionLinenumberEnd: 4569
    functionName: get_interface_info_list
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - GetInterfaceInfo
    - gc_malloc
    - strerror_win32
    linkageType: ''
    returnType: IP_INTERFACE_INFO*
    signature: 'static const IP_INTERFACE_INFO *get_interface_info_list(struct gc_arena
      *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - ai
    argTypes:
    - IP_ADAPTER_INFO*
    constantsTouched: []
    func_position:
      end: 4639
      start: 4620
    functionDepth: 0
    functionLinenumber: 4620
    functionLinenumberEnd: 4639
    functionName: get_adapter_n_ip_netmask
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int get_adapter_n_ip_netmask(const IP_ADAPTER_INFO *ai) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:5549,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/tun.c:5550,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 3
    argNames:
    - dest
    - src1
    - src2
    argTypes:
    - IP_ADDR_STRING*
    - IP_ADDR_STRING*
    - IP_ADDR_STRING*
    constantsTouched: []
    func_position:
      end: 5562
      start: 5546
    functionDepth: 0
    functionLinenumber: 5546
    functionLinenumberEnd: 5562
    functionName: init_ip_addr_string2
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void init_ip_addr_string2(IP_ADDR_STRING *dest, const IP_ADDR_STRING
      *src1, const IP_ADDR_STRING *src2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun.c:7018,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 7019
      start: 7015
    functionDepth: 0
    functionLinenumber: 7015
    functionLinenumberEnd: 7019
    functionName: write_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'int write_tun(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun.c:2872,1
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun.c:2883,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2879,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2878,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun.c:2888,1
    - Dst: close_tun_generic
      Src: /src/openvpn/src/openvpn/tun.c:2891,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/tun.c:2893,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun.c:2894,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun.c:2896,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun.c:2897,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - tt
    - ctx
    argTypes:
    - struct tuntap*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 2898
      start: 2869
    functionDepth: 0
    functionLinenumber: 2869
    functionLinenumberEnd: 2898
    functionName: close_tun
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - close_tun_generic
    - argv_new
    - ASSERT
    - free
    - openvpn_execve_check
    linkageType: ''
    returnType: void
    signature: 'void close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun.c:5060,1
    - Dst: get_adapter_info_list
      Src: /src/openvpn/src/openvpn/tun.c:5061,1
    - Dst: show_adapter
      Src: /src/openvpn/src/openvpn/tun.c:5071,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun.c:5074,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun.c:5063,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - msglev
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 5075
      start: 5057
    functionDepth: 0
    functionLinenumber: 5057
    functionLinenumberEnd: 5075
    functionName: show_adapters
    functionSourceFile: /src/openvpn/src/openvpn/tun.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - get_adapter_info_list
    - show_adapter
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void show_adapters(int msglev) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_ex_new_index
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:93,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:94,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 95
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 95
    functionName: tls_init_lib
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_get_ex_new_index
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_init_lib(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:561,1
    - Dst: get_num_elements
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:573,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:581,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:563,1
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:577,1
    - Dst: strsep
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:584,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:586,1
    - Dst: OBJ_sn2nid
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:590,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:594,1
    - Dst: SSL_CTX_set1_groups
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:603,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:612,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:608,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:605,1
    - Dst: SSL_CTX_set1_groups_list
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:610,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 2
    argNames:
    - ctx
    - groups
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 616
      start: 558
    functionDepth: 0
    functionLinenumber: 558
    functionLinenumberEnd: 616
    functionName: tls_ctx_set_tls_groups
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - msg
    - gc_new
    - strsep
    - SSL_CTX_set1_groups
    - crypto_msg
    - gc_free
    - get_num_elements
    - ASSERT
    - streq
    - SSL_CTX_set1_groups_list
    - ALLOC_ARRAY_CLEAR_GC
    - OBJ_sn2nid
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_set_tls_groups(struct tls_root_ctx *ctx, const char *groups) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RSA_size
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1510,1
    - Dst: get_rsa_padding_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1519,1
    - Dst: RSAerr
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1515,1
    - Dst: get_sig_from_man
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1519,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 5
    argNames:
    - flen
    - from
    - to
    - rsa
    - padding
    argTypes:
    - int
    - unsigned char*
    - unsigned char*
    - RSA*
    - int
    constantsTouched: []
    func_position:
      end: 1522
      start: 1506
    functionDepth: 0
    functionLinenumber: 1506
    functionLinenumberEnd: 1522
    functionName: rsa_priv_enc
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - RSAerr
    - get_sig_from_man
    - get_rsa_padding_name
    - RSA_size
    linkageType: ''
    returnType: int
    signature: 'static int rsa_priv_enc(int flen, const unsigned char *from, unsigned
      char *to, RSA *rsa, int padding) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 1
    argCount: 4
    argNames:
    - ec
    - ctx_in
    - kinvp
    - rp
    argTypes:
    - EC_KEY*
    - BN_CTX*
    - BIGNUM**
    - BIGNUM**
    constantsTouched: []
    func_position:
      end: 1629
      start: 1625
    functionDepth: 0
    functionLinenumber: 1625
    functionLinenumberEnd: 1629
    functionName: ecdsa_sign_setup
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int ecdsa_sign_setup(EC_KEY *ec, BN_CTX *ctx_in, BIGNUM **kinvp,
      BIGNUM **rp) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2170,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2171,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2176,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2183,1
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2183,1
    - Dst: SSL_set_accept_state
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2195,1
    - Dst: BIO_s_mem
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2185,1
    - Dst: SSL_set_connect_state
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2199,1
    - Dst: BIO_set_ssl
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2203,1
    - Dst: SSL_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2173,1
    - Dst: SSL_set_ex_data
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2181,1
    - Dst: bio_debug_oc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2188,1
    - Dst: BIO_f_ssl
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2183,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2184,1
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2185,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2185,1
    - Dst: bio_debug_oc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2190,1
    - Dst: BIO_s_mem
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2184,1
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2184,1
    - Dst: SSL_set_bio
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2202,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2169,1
    - Dst: bio_debug_oc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2189,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 32
    argCount: 4
    argNames:
    - ks_ssl
    - ssl_ctx
    - is_server
    - session
    argTypes:
    - struct key_state_ssl*
    - struct tls_root_ctx*
    - bool
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 2204
      start: 2166
    functionDepth: 0
    functionLinenumber: 2166
    functionLinenumberEnd: 2204
    functionName: key_state_ssl_init
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_set_accept_state
    - BIO_new
    - BIO_f_ssl
    - BIO_set_ssl
    - SSL_set_ex_data
    - SSL_set_bio
    - BIO_s_mem
    - crypto_msg
    - CLEAR
    - SSL_new
    - ASSERT
    - bio_debug_oc
    - SSL_set_connect_state
    linkageType: ''
    returnType: void
    signature: 'void key_state_ssl_init(struct key_state_ssl *ks_ssl, const struct
      tls_root_ctx *ssl_ctx, bool is_server, struct tls_session *session) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_id
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2312,1
    - Dst: EVP_PKEY_is_a
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2316,1
    - Dst: EVP_PKEY_get_group_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2324,1
    - Dst: EVP_PKEY_get0_type_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2359,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2337,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2367,1
    - Dst: EVP_PKEY_bits
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2368,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 38
    argCount: 3
    argNames:
    - pkey
    - buf
    - buflen
    argTypes:
    - EVP_PKEY*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 2369
      start: 2300
    functionDepth: 0
    functionLinenumber: 2300
    functionLinenumberEnd: 2369
    functionName: print_pkey_details
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_bits
    - EVP_PKEY_id
    - EVP_PKEY_is_a
    - OBJ_nid2sn
    - snprintf
    - EVP_PKEY_get0_type_name
    - EVP_PKEY_get_group_name
    linkageType: ''
    returnType: void
    signature: 'static void print_pkey_details(EVP_PKEY *pkey, char *buf, size_t buflen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    functionName: tls_free_lib
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void tls_free_lib(void) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:624,1
    - Dst: X509_cmp_time
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:633,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:636,1
    - Dst: SSL_CTX_get0_certificate
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:626,1
    - Dst: X509_get0_notBefore
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:633,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:640,1
    - Dst: X509_cmp_time
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:643,1
    - Dst: X509_get0_notAfter
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:643,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:646,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:650,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 24
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 652
      start: 618
    functionDepth: 0
    functionLinenumber: 618
    functionLinenumberEnd: 652
    functionName: tls_ctx_check_cert_time
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - X509_get0_notAfter
    - X509_cmp_time
    - msg
    - SSL_CTX_get0_certificate
    - ASSERT
    - X509_get0_notBefore
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_check_cert_time(const struct tls_root_ctx *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: RSA_meth_set_pub_dec
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1540,1
    - Dst: RSA_meth_set_init
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1543,1
    - Dst: RSA_set_flags
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1560,1
    - Dst: RSA_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1548,1
    - Dst: SSL_CTX_use_RSAPrivateKey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1569,1
    - Dst: RSA_meth_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1536,1
    - Dst: RSA_meth_set_pub_enc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1539,1
    - Dst: RSA_meth_set_priv_enc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1541,1
    - Dst: RSA_meth_set_finish
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1544,1
    - Dst: RSA_flags
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1560,1
    - Dst: RSA_set_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1561,1
    - Dst: RSA_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1574,1
    - Dst: RSA_meth_set_priv_dec
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1542,1
    - Dst: RSA_set0_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1559,1
    - Dst: BN_dup
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1559,1
    - Dst: RSA_get0_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1558,1
    - Dst: RSA_meth_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1563,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1530,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1538,1
    - Dst: EVP_PKEY_get0_RSA
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1532,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1533,1
    - Dst: RSA_meth_set0_app_data
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1545,1
    - Dst: BN_dup
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1559,1
    - Dst: SSLerr
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1551,1
    - Dst: RSA_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1580,1
    - Dst: RSA_meth_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1584,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 40
    argCount: 2
    argNames:
    - ctx
    - pkey
    argTypes:
    - struct tls_root_ctx*
    - EVP_PKEY*
    constantsTouched: []
    func_position:
      end: 1587
      start: 1524
    functionDepth: 0
    functionLinenumber: 1524
    functionLinenumberEnd: 1587
    functionName: tls_ctx_use_external_rsa_key
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSLerr
    - BN_dup
    - RSA_get0_key
    - RSA_meth_set_pub_enc
    - RSA_meth_set_pub_dec
    - RSA_free
    - RSA_flags
    - check_malloc_return
    - RSA_meth_set_init
    - RSA_meth_set_finish
    - RSA_set_method
    - RSA_meth_set_priv_dec
    - RSA_set0_key
    - EVP_PKEY_get0_RSA
    - RSA_meth_set_priv_enc
    - RSA_meth_set0_app_data
    - RSA_set_flags
    - RSA_meth_new
    - RSA_meth_free
    - SSL_CTX_use_RSAPrivateKey
    - ASSERT
    - RSA_new
    linkageType: ''
    returnType: int
    signature: 'static int tls_ctx_use_external_rsa_key(struct tls_root_ctx *ctx,
      EVP_PKEY *pkey) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSL_set_shutdown
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2209,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ks_ssl
    argTypes:
    - struct key_state_ssl*
    constantsTouched: []
    func_position:
      end: 2210
      start: 2206
    functionDepth: 0
    functionLinenumber: 2206
    functionLinenumberEnd: 2210
    functionName: key_state_ssl_shutdown
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_set_shutdown
    linkageType: ''
    returnType: void
    signature: 'void key_state_ssl_shutdown(struct key_state_ssl *ks_ssl) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_LIB_CTX_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2702,1
    - Dst: OSSL_PROVIDER_add_builtin
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2715,1
    - Dst: OSSL_PROVIDER_do_all
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2710,1
    - Dst: OSSL_PROVIDER_available
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2713,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2703,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2716,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2718,1
    - Dst: EVP_set_default_properties
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2729,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2732
      start: 2694
    functionDepth: 0
    functionLinenumber: 2694
    functionLinenumberEnd: 2732
    functionName: load_xkey_provider
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_available
    - OSSL_PROVIDER_do_all
    - msg
    - OSSL_LIB_CTX_new
    - OSSL_PROVIDER_load
    - OSSL_PROVIDER_add_builtin
    - EVP_set_default_properties
    - check_malloc_return
    linkageType: ''
    returnType: void
    signature: 'void load_xkey_provider(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:141,1
    - Dst: unload_xkey_provider
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:144,1
    - Dst: SSL_CTX_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:142,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 145
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 145
    functionName: tls_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - unload_xkey_provider
    - ASSERT
    - SSL_CTX_free
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_free(struct tls_root_ctx *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2446,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 3
    argCount: 1
    argNames:
    - nid
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2448
      start: 2424
    functionDepth: 0
    functionLinenumber: 2424
    functionLinenumberEnd: 2448
    functionName: get_sigtype
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OBJ_nid2sn
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_sigtype(int nid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:150,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 152
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 152
    functionName: tls_ctx_initialised
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'bool tls_ctx_initialised(struct tls_root_ctx *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_set_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:434,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:454,1
    - Dst: SSL_CTX_set_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:457,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:446,1
    - Dst: convert_tls_list_to_openssl
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:452,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:459,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 2
    argNames:
    - ctx
    - ciphers
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 461
      start: 428
    functionDepth: 0
    functionLinenumber: 428
    functionLinenumberEnd: 461
    functionName: tls_ctx_restrict_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - convert_tls_list_to_openssl
    - crypto_msg
    - ASSERT
    - SSL_CTX_set_cipher_list
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_restrict_ciphers(struct tls_root_ctx *ctx, const char
      *ciphers) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get0_peer_signature_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2464,1
    - Dst: SSL_get_peer_signature_type_nid
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2474,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2486,1
    - Dst: get_sigtype
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2477,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 19
    argCount: 3
    argNames:
    - ssl
    - buf
    - buflen
    argTypes:
    - SSL*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 2488
      start: 2455
    functionDepth: 0
    functionLinenumber: 2455
    functionLinenumberEnd: 2488
    functionName: print_peer_signature
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_get0_peer_signature_name
    - snprintf
    - get_sigtype
    - SSL_get_peer_signature_type_nid
    linkageType: ''
    returnType: void
    signature: 'static void print_peer_signature(SSL *ssl, char *buf, size_t buflen) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:472,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:481,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:474,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:479,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 3
    argNames:
    - openssl_ciphers
    - len
    - ciphers
    argTypes:
    - char*
    - size_t
    - char*
    constantsTouched: []
    func_position:
      end: 488
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 488
    functionName: convert_tls13_list_to_openssl
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - strncpy
    - strlen
    - msg
    linkageType: ''
    returnType: void
    signature: 'static void convert_tls13_list_to_openssl(char *openssl_ciphers, size_t
      len, const char *ciphers) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1488,1
    - Dst: management_query_pk_sig
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1492,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1501,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1500,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1497,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 5
    argNames:
    - dgst
    - dgstlen
    - sig
    - siglen
    - algorithm
    argTypes:
    - unsigned char*
    - unsigned int
    - unsigned char*
    - unsigned int
    - char*
    constantsTouched: []
    func_position:
      end: 1503
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1503
    functionName: get_sig_from_man
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - free
    - openvpn_base64_encode
    - openvpn_base64_decode
    - management_query_pk_sig
    linkageType: ''
    returnType: int
    signature: 'static int get_sig_from_man(const unsigned char *dgst, unsigned int
      dgstlen, unsigned char *sig, unsigned int siglen, const char *algorithm) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2001,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2001,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2004
      start: 1996
    functionDepth: 0
    functionLinenumber: 1996
    functionLinenumberEnd: 2004
    functionName: close_biofp
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - fclose
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void close_biofp(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_PROVIDER_get0_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2673,1
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2674,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - prov
    - dest_libctx
    argTypes:
    - OSSL_PROVIDER*
    - void*
    constantsTouched: []
    func_position:
      end: 2676
      start: 2670
    functionDepth: 0
    functionLinenumber: 2670
    functionLinenumberEnd: 2676
    functionName: provider_load
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_get0_name
    - OSSL_PROVIDER_load
    linkageType: ''
    returnType: int
    signature: 'static int provider_load(OSSL_PROVIDER *prov, void *dest_libctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:501,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:505,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:513,1
    - Dst: convert_tls13_list_to_openssl
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:508,1
    - Dst: SSL_CTX_set_ciphersuites
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:511,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - ctx
    - ciphers
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 517
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 517
    functionName: tls_ctx_restrict_ciphers_tls13
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - crypto_msg
    - SSL_CTX_set_ciphersuites
    - convert_tls13_list_to_openssl
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_restrict_ciphers_tls13(struct tls_root_ctx *ctx, const
      char *ciphers) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - padding
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 1466
      start: 1452
    functionDepth: 0
    functionLinenumber: 1452
    functionLinenumberEnd: 1466
    functionName: get_rsa_padding_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char *get_rsa_padding_name(const int padding) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ECDSA_size
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1608,1
    - Dst: get_sig_from_man
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1614,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 8
    argNames:
    - type
    - dgst
    - dgstlen
    - sig
    - siglen
    - kinv
    - r
    - ec
    argTypes:
    - int
    - unsigned char*
    - int
    - unsigned char*
    - unsigned int*
    - BIGNUM*
    - BIGNUM*
    - EC_KEY*
    constantsTouched: []
    func_position:
      end: 1622
      start: 1604
    functionDepth: 0
    functionLinenumber: 1604
    functionLinenumberEnd: 1622
    functionName: ecdsa_sign
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ECDSA_size
    - get_sig_from_man
    linkageType: ''
    returnType: int
    signature: 'static int ecdsa_sign(int type, const unsigned char *dgst, int dgstlen,
      unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv, const BIGNUM *r,
      EC_KEY *ec) '
  - BBCount: 23
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_file
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1827,1
    - Dst: sk_X509_INFO_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1837,1
    - Dst: X509_NAME_dup
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1879,1
    - Dst: X509_get_subject_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1870,1
    - Dst: X509_STORE_add_cert
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1852,1
    - Dst: sk_X509_INFO_pop_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1901,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1923,1
    - Dst: X509_STORE_set_flags
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1943,1
    - Dst: STACK_OF
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1803,1
    - Dst: SSL_CTX_get_cert_store
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1812,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1815,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1823,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1810,1
    - Dst: sk_X509_NAME_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1890,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1893,1
    - Dst: SSL_CTX_set_client_CA_list
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1907,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1912,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1914,1
    - Dst: PEM_X509_INFO_read_bio
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1832,1
    - Dst: sk_X509_INFO_value
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1839,1
    - Dst: X509_STORE_add_crl
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1842,1
    - Dst: sk_X509_NAME_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1863,1
    - Dst: sk_X509_NAME_find
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1877,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1847,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1895,1
    - Dst: X509_LOOKUP_add_dir
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1935,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1941,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1937,1
    - Dst: sk_X509_NAME_push
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1884,1
    - Dst: sk_X509_NAME_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1906,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1921,1
    - Dst: X509_LOOKUP_hash_dir
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1934,1
    - Dst: X509_STORE_add_lookup
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1934,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1928,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 90
    argCount: 5
    argNames:
    - ctx
    - ca_file
    - ca_file_inline
    - ca_path
    - tls_server
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1945
      start: 1798
    functionDepth: 0
    functionLinenumber: 1798
    functionLinenumberEnd: 1945
    functionName: tls_ctx_load_ca
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - BIO_new_file
    - msg
    - sk_X509_INFO_value
    - X509_STORE_add_cert
    - crypto_msg
    - sk_X509_INFO_num
    - print_key_filename
    - BIO_new_mem_buf
    - sk_X509_INFO_pop_free
    - X509_NAME_dup
    - SSL_CTX_set_client_CA_list
    - PEM_X509_INFO_read_bio
    - sk_X509_NAME_new
    - sk_X509_NAME_push
    - X509_STORE_add_crl
    - SSL_CTX_get_cert_store
    - BIO_free
    - X509_LOOKUP_add_dir
    - STACK_OF
    - sk_X509_NAME_num
    - X509_LOOKUP_hash_dir
    - sk_X509_NAME_find
    - X509_get_subject_name
    - ASSERT
    - X509_STORE_set_flags
    - X509_STORE_add_lookup
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_ca(struct tls_root_ctx *ctx, const char *ca_file,
      bool ca_file_inline, const char *ca_path, bool tls_server) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2275,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2279,1
    - Dst: bio_write
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2279,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2279,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2277,1
    - Dst: bio_write_post
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2280,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2282,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - ks_ssl
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 2284
      start: 2271
    functionDepth: 0
    functionLinenumber: 2271
    functionLinenumberEnd: 2284
    functionName: key_state_write_ciphertext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - bio_write
    - BPTR
    - BLEN
    - perf_pop
    - ASSERT
    - bio_write_post
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_write_ciphertext(struct key_state_ssl *ks_ssl, struct
      buffer *buf) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:528,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:532,1
    - Dst: SSL_CTX_set_security_level
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:530,1
    - Dst: SSL_CTX_set_security_level
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:534,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:536,1
    - Dst: SSL_CTX_set_security_level
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:538,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:540,1
    - Dst: SSL_CTX_set_security_level
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:542,1
    - Dst: SSL_CTX_set_cipher_list
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:543,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:547,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:552,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 29
    argCount: 2
    argNames:
    - ctx
    - profile
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 556
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 556
    functionName: tls_ctx_set_cert_profile
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - strcmp
    - SSL_CTX_set_security_level
    - msg
    - SSL_CTX_set_cipher_list
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_set_cert_profile(struct tls_root_ctx *ctx, const char
      *profile) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1954,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1964,1
    - Dst: BIO_new_file
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1958,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1963,1
    - Dst: tls_ctx_add_extra_certs
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1970,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1973,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - ctx
    - extra_certs_file
    - extra_certs_file_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1974
      start: 1947
    functionDepth: 0
    functionLinenumber: 1947
    functionLinenumberEnd: 1974
    functionName: tls_ctx_load_extra_certs
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - print_key_filename
    - tls_ctx_add_extra_certs
    - BIO_new_file
    - BIO_new_mem_buf
    - crypto_msg
    - BIO_free
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_extra_certs(struct tls_root_ctx *ctx, const char
      *extra_certs_file, bool extra_certs_file_inline) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: open_biofp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2044,1
    - Dst: time
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2046,1
    - Dst: fflush
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2047,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2045,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 2
    argNames:
    - mode
    - bio
    argTypes:
    - char*
    - BIO*
    constantsTouched: []
    func_position:
      end: 2048
      start: 2041
    functionDepth: 0
    functionLinenumber: 2041
    functionLinenumberEnd: 2048
    functionName: bio_debug_oc
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - time
    - open_biofp
    - fprintf
    - fflush
    linkageType: ''
    returnType: void
    signature: 'static void bio_debug_oc(const char *mode, BIO *bio) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2290,1
    - Dst: bio_read
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2294,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2292,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2296,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - ks_ssl
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 2298
      start: 2286
    functionDepth: 0
    functionLinenumber: 2286
    functionLinenumberEnd: 2298
    functionName: key_state_read_plaintext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - perf_pop
    - ASSERT
    - bio_read
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_read_plaintext(struct key_state_ssl *ks_ssl, struct
      buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_PROVIDER_unload
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2682,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - prov
    - unused
    argTypes:
    - OSSL_PROVIDER*
    - void*
    constantsTouched: []
    func_position:
      end: 2684
      start: 2678
    functionDepth: 0
    functionLinenumber: 2678
    functionLinenumberEnd: 2684
    functionName: provider_unload
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_unload
    linkageType: ''
    returnType: int
    signature: 'static int provider_unload(OSSL_PROVIDER *prov, void *unused) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EC_KEY_get_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1596,1
    - Dst: EC_KEY_METHOD_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1597,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - ec
    argTypes:
    - EC_KEY*
    constantsTouched: []
    func_position:
      end: 1598
      start: 1592
    functionDepth: 0
    functionLinenumber: 1592
    functionLinenumberEnd: 1598
    functionName: openvpn_extkey_ec_finish
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - EC_KEY_get_method
    - EC_KEY_METHOD_free
    linkageType: ''
    returnType: void
    signature: 'static void openvpn_extkey_ec_finish(EC_KEY *ec) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OpenSSL_version_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:223,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 238
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 238
    functionName: tls_version_max
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OpenSSL_version_num
    linkageType: ''
    returnType: int
    signature: 'int tls_version_max(void) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_STORE_open_ex
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1112,1
    - Dst: OSSL_STORE_load
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1125,1
    - Dst: OSSL_STORE_eof
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1126,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1166,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1146,1
    - Dst: OSSL_STORE_INFO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1153,1
    - Dst: OSSL_STORE_INFO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1172,1
    - Dst: UI_destroy_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1187,1
    - Dst: OSSL_STORE_close
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1189,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1102,1
    - Dst: UI_create_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1104,1
    - Dst: OSSL_STORE_expect
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1118,1
    - Dst: clear_ossl_store_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1134,1
    - Dst: OSSL_STORE_eof
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1157,1
    - Dst: UI_method_set_reader
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1110,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1107,1
    - Dst: OSSL_STORE_INFO_get0_CERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1141,1
    - Dst: OSSL_STORE_INFO_get1_CERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1165,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1168,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1148,1
    - Dst: OSSL_STORE_load
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1159,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1169,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1179,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1184,1
    - Dst: clear_ossl_store_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1162,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1180,1
    - Dst: OSSL_STORE_INFO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1188,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1191,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 63
    argCount: 2
    argNames:
    - tls_ctx
    - uri
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 1193
      start: 1093
    functionDepth: 0
    functionLinenumber: 1093
    functionLinenumberEnd: 1193
    functionName: tls_ctx_load_cert_uri
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_STORE_expect
    - UI_destroy_method
    - msg
    - SSL_CTX_use_certificate
    - OSSL_STORE_open_ex
    - OSSL_STORE_INFO_get1_CERT
    - crypto_msg
    - UI_method_set_reader
    - OSSL_STORE_load
    - SSL_CTX_add_extra_chain_cert
    - UI_create_method
    - clear_ossl_store_error
    - OSSL_STORE_INFO_free
    - X509_free
    - crypto_print_openssl_errors
    - OSSL_STORE_INFO_get0_CERT
    - OSSL_STORE_eof
    - ASSERT
    - OSSL_STORE_close
    linkageType: ''
    returnType: void
    signature: 'static void tls_ctx_load_cert_uri(struct tls_root_ctx *tls_ctx, const
      char *uri) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1203,1
    - Dst: SSLerr
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1216,1
    - Dst: BIO_new_file
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1211,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1207,1
    - Dst: PEM_read_bio_X509
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1220,1
    - Dst: SSL_CTX_get_default_passwd_cb
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1221,1
    - Dst: SSL_CTX_get_default_passwd_cb_userdata
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1222,1
    - Dst: SSLerr
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1225,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1229,1
    - Dst: tls_ctx_add_extra_certs
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1232,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1254,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1241,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1238,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1245,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1253,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1250,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 3
    argNames:
    - ctx
    - cert_file
    - cert_file_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1255
      start: 1195
    functionDepth: 0
    functionLinenumber: 1195
    functionLinenumberEnd: 1255
    functionName: tls_ctx_load_cert_pem_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSLerr
    - tls_ctx_add_extra_certs
    - BIO_new_file
    - SSL_CTX_use_certificate
    - BIO_new_mem_buf
    - BIO_free
    - SSL_CTX_get_default_passwd_cb_userdata
    - crypto_msg
    - PEM_read_bio_X509
    - ASSERT
    - X509_free
    - crypto_print_openssl_errors
    - SSL_CTX_get_default_passwd_cb
    linkageType: ''
    returnType: void
    signature: 'static void tls_ctx_load_cert_pem_file(struct tls_root_ctx *ctx, const
      char *cert_file, bool cert_file_inline) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:186,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:193,1
    - Dst: SSL_alert_desc_string_long
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:196,1
    - Dst: SSL_state_string_long
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:189,1
    - Dst: SSL_alert_type_string_long
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:195,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - s
    - where
    - ret
    argTypes:
    - INFO_CALLBACK_SSL_CONST*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 198
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 198
    functionName: info_callback
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_alert_desc_string_long
    - SSL_alert_type_string_long
    - SSL_state_string_long
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'static void info_callback(INFO_CALLBACK_SSL_CONST SSL *s, int where,
      int ret) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1424,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 5
    argNames:
    - flen
    - from
    - to
    - rsa
    - padding
    argTypes:
    - int
    - unsigned char*
    - unsigned char*
    - RSA*
    - int
    constantsTouched: []
    func_position:
      end: 1426
      start: 1421
    functionDepth: 0
    functionLinenumber: 1421
    functionLinenumberEnd: 1426
    functionName: rsa_pub_dec
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static int rsa_pub_dec(int flen, const unsigned char *from, unsigned
      char *to, RSA *rsa, int padding) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1723,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1731,1
    - Dst: X509_get0_pubkey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1730,1
    - Dst: SSL_CTX_get0_certificate
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1725,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1727,1
    - Dst: xkey_load_management_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1734,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1736,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1738,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1741,1
    - Dst: EVP_PKEY_id
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1744,1
    - Dst: tls_ctx_use_external_rsa_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1749,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1768,1
    - Dst: tls_ctx_use_external_ec_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1761,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1774,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1785,1
    - Dst: EVP_PKEY_is_a
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1746,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 37
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 1788
      start: 1718
    functionDepth: 0
    functionLinenumber: 1718
    functionLinenumberEnd: 1788
    functionName: tls_ctx_use_management_external_key
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_use_PrivateKey
    - EVP_PKEY_free
    - tls_ctx_use_external_rsa_key
    - EVP_PKEY_id
    - EVP_PKEY_is_a
    - tls_ctx_use_external_ec_key
    - X509_get0_pubkey
    - crypto_msg
    - SSL_CTX_get0_certificate
    - ASSERT
    - xkey_load_management_key
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_use_management_external_key(struct tls_root_ctx *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: PEM_read_bio_X509
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1056,1
    - Dst: ERR_get_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1066,1
    - Dst: ERR_peek_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1063,1
    - Dst: ERR_GET_REASON
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1063,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1071,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1074,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1076,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 3
    argNames:
    - ctx
    - bio
    - optional
    argTypes:
    - struct tls_root_ctx*
    - BIO*
    - bool
    constantsTouched: []
    func_position:
      end: 1081
      start: 1049
    functionDepth: 0
    functionLinenumber: 1049
    functionLinenumberEnd: 1081
    functionName: tls_ctx_add_extra_certs
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ERR_peek_error
    - ERR_get_error
    - crypto_msg
    - PEM_read_bio_X509
    - SSL_CTX_add_extra_chain_cert
    - ERR_GET_REASON
    linkageType: ''
    returnType: void
    signature: 'static void tls_ctx_add_extra_certs(struct tls_root_ctx *ctx, BIO
      *bio, bool optional) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1416,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 5
    argNames:
    - flen
    - from
    - to
    - rsa
    - padding
    argTypes:
    - int
    - unsigned char*
    - unsigned char*
    - RSA*
    - int
    constantsTouched: []
    func_position:
      end: 1418
      start: 1413
    functionDepth: 0
    functionLinenumber: 1413
    functionLinenumberEnd: 1418
    functionName: rsa_pub_enc
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static int rsa_pub_enc(int flen, const unsigned char *from, unsigned
      char *to, RSA *rsa, int padding) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: X509_NAME_cmp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1795,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - X509_NAME**
    - X509_NAME**
    constantsTouched: []
    func_position:
      end: 1796
      start: 1792
    functionDepth: 0
    functionLinenumber: 1792
    functionLinenumberEnd: 1796
    functionName: sk_x509_name_cmp
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - X509_NAME_cmp
    linkageType: ''
    returnType: int
    signature: 'static int sk_x509_name_cmp(const X509_NAME *const *a, const X509_NAME
      *const *b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1091
      start: 1083
    functionDepth: 0
    functionLinenumber: 1083
    functionLinenumberEnd: 1091
    functionName: cert_uri_supported
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool cert_uri_supported(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_PROVIDER_do_all
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2743,1
    - Dst: OSSL_LIB_CTX_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2744,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2748
      start: 2737
    functionDepth: 0
    functionLinenumber: 2737
    functionLinenumberEnd: 2748
    functionName: unload_xkey_provider
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_do_all
    - OSSL_LIB_CTX_free
    linkageType: ''
    returnType: void
    signature: 'static void unload_xkey_provider(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_peer_tmp_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2402,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2414,1
    - Dst: print_pkey_details
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2409,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2411,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 3
    argNames:
    - ssl
    - buf
    - buflen
    argTypes:
    - SSL*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 2415
      start: 2398
    functionDepth: 0
    functionLinenumber: 2398
    functionLinenumberEnd: 2415
    functionName: print_server_tempkey
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - SSL_get_peer_tmp_key
    - print_pkey_details
    - snprintf
    linkageType: ''
    returnType: void
    signature: 'static void print_server_tempkey(SSL *ssl, char *buf, size_t buflen) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - ver
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 276
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 276
    functionName: openssl_tls_version
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int openssl_tls_version(int ver) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: openssl_tls_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:281,1
    - Dst: SSL_CTX_get_min_proto_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:289,1
    - Dst: SSL_CTX_set_min_proto_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:293,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:295,1
    - Dst: openssl_tls_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:283,1
    - Dst: SSL_CTX_set_max_proto_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:299,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:301,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 2
    argNames:
    - ctx
    - ssl_flags
    argTypes:
    - struct tls_root_ctx*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 306
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 306
    functionName: tls_ctx_set_tls_versions
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_get_min_proto_version
    - msg
    - openssl_tls_version
    - SSL_CTX_set_min_proto_version
    - SSL_CTX_set_max_proto_version
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_ctx_set_tls_versions(struct tls_root_ctx *ctx, unsigned
      int ssl_flags) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_file
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:672,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:685,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:708,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:664,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:689,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:696,1
    - Dst: PEM_read_bio_DHparams
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:695,1
    - Dst: DH_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:711,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:674,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:666,1
    - Dst: PEM_read_bio_Parameters
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:679,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:680,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:684,1
    - Dst: SSL_CTX_set0_tmp_dh_pkey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:687,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:700,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:701,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:705,1
    - Dst: EVP_PKEY_get_size
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:693,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:660,1
    - Dst: SSL_CTX_set_tmp_dh
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:703,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:692,1
    - Dst: DH_size
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:709,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 43
    argCount: 3
    argNames:
    - ctx
    - dh_file
    - dh_file_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 713
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 713
    functionName: tls_ctx_load_dh_params
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - print_key_filename
    - DH_free
    - BIO_new_file
    - SSL_CTX_set_tmp_dh
    - msg
    - SSL_CTX_set0_tmp_dh_pkey
    - PEM_read_bio_DHparams
    - BIO_new_mem_buf
    - DH_size
    - crypto_msg
    - PEM_read_bio_Parameters
    - ASSERT
    - EVP_PKEY_get_size
    - BIO_free
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_dh_params(struct tls_root_ctx *ctx, const char *dh_file,
      bool dh_file_inline) '
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: PKCS12_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:970,1
    - Dst: crypto_print_openssl_errors
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:975,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:976,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:986,1
    - Dst: SSL_CTX_get_cert_store
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1002,1
    - Dst: X509_STORE_add_cert
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1003,1
    - Dst: sk_X509_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1021,1
    - Dst: sk_X509_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1023,1
    - Dst: sk_X509_value
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1007,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1025,1
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:922,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:943,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:933,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:958,1
    - Dst: management_auth_failure
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:963,1
    - Dst: PKCS12_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:966,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:982,1
    - Dst: sk_X509_value
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1003,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1009,1
    - Dst: sk_X509_value
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1025,1
    - Dst: PKCS12_parse
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:956,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:918,1
    - Dst: BIO_f_base64
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:922,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:924,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:925,1
    - Dst: BIO_push
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:926,1
    - Dst: d2i_PKCS12_bio
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:927,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:930,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:932,1
    - Dst: PKCS12_parse
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:951,1
    - Dst: d2i_PKCS12_fp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:942,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1027,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:946,1
    - Dst: STACK_OF
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:913,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:923,1
    - Dst: platform_fopen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:938,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:940,1
    - Dst: ERR_GET_REASON
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:961,1
    - Dst: ERR_peek_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:961,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:980,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:988,1
    - Dst: sk_X509_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:998,1
    - Dst: sk_X509_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1000,1
    - Dst: SSL_CTX_add_client_CA
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1007,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1005,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:973,1
    - Dst: pem_password_callback
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:953,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 96
    argCount: 4
    argNames:
    - ctx
    - pkcs12_file
    - pkcs12_file_inline
    - load_ca_file
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    - bool
    constantsTouched: []
    func_position:
      end: 1033
      start: 906
    functionDepth: 0
    functionLinenumber: 906
    functionLinenumberEnd: 1033
    functionName: tls_ctx_load_pkcs12
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_use_PrivateKey
    - BIO_new
    - d2i_PKCS12_fp
    - PKCS12_parse
    - SSL_CTX_use_certificate
    - BIO_push
    - X509_STORE_add_cert
    - SSL_CTX_check_private_key
    - crypto_msg
    - BIO_f_base64
    - SSL_CTX_add_client_CA
    - ERR_peek_error
    - BIO_new_mem_buf
    - d2i_PKCS12_bio
    - platform_fopen
    - SSL_CTX_add_extra_chain_cert
    - management_auth_failure
    - fclose
    - sk_X509_num
    - SSL_CTX_get_cert_store
    - strlen
    - BIO_free
    - crypto_print_openssl_errors
    - STACK_OF
    - PKCS12_free
    - pem_password_callback
    - sk_X509_value
    - ASSERT
    - ERR_GET_REASON
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_load_pkcs12(struct tls_root_ctx *ctx, const char *pkcs12_file,
      bool pkcs12_file_inline, bool load_ca_file) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cert_uri_supported
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1261,1
    - Dst: tls_ctx_load_cert_uri
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1263,1
    - Dst: tls_ctx_load_cert_pem_file
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1267,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - ctx
    - cert_file
    - cert_file_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1269
      start: 1257
    functionDepth: 0
    functionLinenumber: 1257
    functionLinenumberEnd: 1269
    functionName: tls_ctx_load_cert_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - tls_ctx_load_cert_pem_file
    - cert_uri_supported
    - tls_ctx_load_cert_uri
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_cert_file(struct tls_root_ctx *ctx, const char *cert_file,
      bool cert_file_inline) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:721,1
    - Dst: OBJ_sn2nid
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:737,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:736,1
    - Dst: SSL_CTX_set_options
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:731,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:745,1
    - Dst: EC_KEY_new_by_curve_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:752,1
    - Dst: EC_KEY_new_by_curve_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:755,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:758,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:760,1
    - Dst: SSL_CTX_set_tmp_ecdh
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:763,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:765,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:768,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:772,1
    - Dst: EC_KEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:770,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 37
    argCount: 2
    argNames:
    - ctx
    - curve_name
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 775
      start: 715
    functionDepth: 0
    functionLinenumber: 715
    functionLinenumberEnd: 775
    functionName: tls_ctx_load_ecdh_params
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_set_options
    - OBJ_nid2sn
    - msg
    - SSL_CTX_set_tmp_ecdh
    - EC_KEY_free
    - EC_KEY_new_by_curve_name
    - crypto_msg
    - OBJ_sn2nid
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_ecdh_params(struct tls_root_ctx *ctx, const char
      *curve_name) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1280,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1291,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1286,1
    - Dst: SSL_CTX_get_default_passwd_cb
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1292,1
    - Dst: SSL_CTX_get_default_passwd_cb_userdata
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1293,1
    - Dst: load_pkey_from_uri
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1297,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1300,1
    - Dst: ERR_GET_REASON
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1303,1
    - Dst: ERR_peek_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1303,1
    - Dst: management_auth_failure
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1305,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1308,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1314,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1309,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1322,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1321,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1316,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 36
    argCount: 3
    argNames:
    - ctx
    - priv_key_file
    - priv_key_file_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1324
      start: 1271
    functionDepth: 0
    functionLinenumber: 1271
    functionLinenumberEnd: 1324
    functionName: tls_ctx_load_priv_file
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_use_PrivateKey
    - print_key_filename
    - EVP_PKEY_free
    - ERR_peek_error
    - PEM_read_bio_PrivateKey
    - BIO_new_mem_buf
    - BIO_free
    - SSL_CTX_get_default_passwd_cb_userdata
    - SSL_CTX_check_private_key
    - crypto_msg
    - ASSERT
    - load_pkey_from_uri
    - ERR_GET_REASON
    - management_auth_failure
    - SSL_CTX_get_default_passwd_cb
    linkageType: ''
    returnType: int
    signature: 'int tls_ctx_load_priv_file(struct tls_root_ctx *ctx, const char *priv_key_file,
      bool priv_key_file_inline) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get0_group_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2494,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2497,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2501,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 3
    argNames:
    - ssl
    - buf
    - buflen
    argTypes:
    - SSL*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 2503
      start: 2491
    functionDepth: 0
    functionLinenumber: 2491
    functionLinenumberEnd: 2503
    functionName: print_tls_key_agreement_group
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - snprintf
    - SSL_get0_group_name
    linkageType: ''
    returnType: void
    signature: 'void print_tls_key_agreement_group(SSL *ssl, char *buf, size_t buflen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1039,1
    - Dst: SSL_CTX_use_CryptoAPI_certificate
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1042,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1044,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - ctx
    - cryptoapi_cert
    argTypes:
    - struct tls_root_ctx*
    - char*
    constantsTouched: []
    func_position:
      end: 1046
      start: 1036
    functionDepth: 0
    functionLinenumber: 1036
    functionLinenumberEnd: 1046
    functionName: tls_ctx_load_cryptoapi
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - crypto_msg
    - SSL_CTX_use_CryptoAPI_certificate
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_load_cryptoapi(struct tls_root_ctx *ctx, const char *cryptoapi_cert) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1335,1
    - Dst: sk_X509_OBJECT_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1342,1
    - Dst: sk_X509_OBJECT_delete
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1348,1
    - Dst: X509_OBJECT_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1349,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1366,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1367,1
    - Dst: ERR_get_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1385,1
    - Dst: BIO_new_file
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1361,1
    - Dst: PEM_read_bio_X509_CRL
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1374,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1406,1
    - Dst: X509_STORE_get0_objects
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1341,1
    - Dst: X509_OBJECT_get_type
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1346,1
    - Dst: ERR_peek_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1380,1
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1357,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1397,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1398,1
    - Dst: X509_CRL_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1401,1
    - Dst: SSL_CTX_get_cert_store
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1332,1
    - Dst: X509_STORE_set_flags
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1353,1
    - Dst: STACK_OF
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1341,1
    - Dst: sk_X509_OBJECT_value
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1344,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1345,1
    - Dst: ERR_GET_REASON
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1380,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1389,1
    - Dst: print_key_filename
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1390,1
    - Dst: X509_STORE_add_crl
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1394,1
    - Dst: X509_CRL_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1396,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1404,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 53
    argCount: 3
    argNames:
    - ssl_ctx
    - crl_file
    - crl_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 1407
      start: 1326
    functionDepth: 0
    functionLinenumber: 1326
    functionLinenumberEnd: 1407
    functionName: backend_tls_ctx_reload_crl
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - BIO_new_file
    - msg
    - sk_X509_OBJECT_delete
    - crypto_msg
    - sk_X509_OBJECT_num
    - X509_STORE_get0_objects
    - print_key_filename
    - ERR_peek_error
    - BIO_new_mem_buf
    - ERR_get_error
    - X509_STORE_add_crl
    - SSL_CTX_get_cert_store
    - BIO_free
    - STACK_OF
    - X509_OBJECT_free
    - PEM_read_bio_X509_CRL
    - sk_X509_OBJECT_value
    - ASSERT
    - X509_OBJECT_get_type
    - X509_STORE_set_flags
    - X509_CRL_free
    - ERR_GET_REASON
    linkageType: ''
    returnType: void
    signature: 'void backend_tls_ctx_reload_crl(struct tls_root_ctx *ssl_ctx, const
      char *crl_file, bool crl_inline) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UI_get0_user_data
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:786,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:796,1
    - Dst: UI_get0_output_string
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:790,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:793,1
    - Dst: UI_get_string_type
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:788,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:797,1
    - Dst: UI_set_result
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:798,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:799,1
    - Dst: SSL_CTX_get_default_passwd_cb
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:804,1
    - Dst: SSL_CTX_get_default_passwd_cb_userdata
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:805,1
    - Dst: cb
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:807,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:809,1
    - Dst: UI_set_result
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:808,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 19
    argCount: 2
    argNames:
    - ui
    - uis
    argTypes:
    - UI*
    - UI_STRING*
    constantsTouched: []
    func_position:
      end: 815
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 815
    functionName: ui_reader
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - cb
    - strstr
    - UI_get_string_type
    - purge_user_pass
    - SSL_CTX_get_default_passwd_cb_userdata
    - UI_set_result
    - secure_memzero
    - UI_get0_output_string
    - UI_get0_user_data
    - CLEAR
    - get_user_pass
    - SSL_CTX_get_default_passwd_cb
    linkageType: ''
    returnType: int
    signature: 'static int ui_reader(UI *ui, UI_STRING *uis) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_current_cipher
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2524,1
    - Dst: SSL_get_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2527,1
    - Dst: SSL_CIPHER_get_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2528,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2525,1
    - Dst: SSL_CIPHER_get_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2529,1
    - Dst: SSL_get_peer_certificate
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2530,1
    - Dst: print_cert_details
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2534,1
    - Dst: X509_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2535,1
    - Dst: print_server_tempkey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2537,1
    - Dst: print_peer_signature
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2538,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2543,1
    - Dst: print_tls_key_agreement_group
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2540,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 2
    argNames:
    - ks_ssl
    - prefix
    argTypes:
    - struct key_state_ssl*
    - char*
    constantsTouched: []
    func_position:
      end: 2544
      start: 2513
    functionDepth: 0
    functionLinenumber: 2513
    functionLinenumberEnd: 2544
    functionName: print_details
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - print_cert_details
    - print_peer_signature
    - SSL_CIPHER_get_version
    - msg
    - snprintf
    - print_server_tempkey
    - print_tls_key_agreement_group
    - SSL_get_current_cipher
    - SSL_CIPHER_get_name
    - SSL_get_peer_certificate
    - X509_free
    - SSL_get_version
    linkageType: ''
    returnType: void
    signature: 'void print_details(struct key_state_ssl *ks_ssl, const char *prefix) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_STORE_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:820,1
    - Dst: ERR_clear_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:822,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - store_ctx
    argTypes:
    - OSSL_STORE_CTX*
    constantsTouched: []
    func_position:
      end: 824
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 824
    functionName: clear_ossl_store_error
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ERR_clear_error
    - OSSL_STORE_error
    linkageType: ''
    returnType: void
    signature: 'static void clear_ossl_store_error(OSSL_STORE_CTX *store_ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2553,1
    - Dst: openssl_tls_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2563,1
    - Dst: tls_ctx_set_cert_profile
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2573,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2593,1
    - Dst: tls_get_cipher_name_pair
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2593,1
    - Dst: SSL_get_ciphers
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2582,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2597,1
    - Dst: SSL_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2613,1
    - Dst: SSL_CTX_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2614,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2556,1
    - Dst: tls_ctx_restrict_ciphers_tls13
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2564,1
    - Dst: SSL_CTX_set_max_proto_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2569,1
    - Dst: SSLv23_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2553,1
    - Dst: tls_ctx_restrict_ciphers
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2570,1
    - Dst: STACK_OF
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2584,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2578,1
    - Dst: SSL_CIPHER_get_name
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2590,1
    - Dst: sk_SSL_CIPHER_value
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2588,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2602,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2607,1
    - Dst: sk_SSL_CIPHER_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2611,1
    - Dst: SSL_CTX_set_min_proto_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2562,1
    - Dst: SSL_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2575,1
    - Dst: SSL_get1_supported_ciphers
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2584,1
    - Dst: sk_SSL_CIPHER_num
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2586,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 44
    argCount: 3
    argNames:
    - cipher_list
    - tls_cert_profile
    - tls13
    argTypes:
    - char*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 2615
      start: 2546
    functionDepth: 0
    functionLinenumber: 2546
    functionLinenumberEnd: 2615
    functionName: show_available_tls_ciphers_list
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - sk_SSL_CIPHER_value
    - crypto_msg
    - SSL_get_ciphers
    - SSL_CTX_free
    - tls_ctx_restrict_ciphers
    - SSLv23_method
    - SSL_CTX_set_max_proto_version
    - SSL_CIPHER_get_name
    - sk_SSL_CIPHER_free
    - SSL_CTX_new
    - openssl_tls_version
    - SSL_CTX_set_min_proto_version
    - tls_ctx_restrict_ciphers_tls13
    - strlen
    - SSL_free
    - STACK_OF
    - SSL_get1_supported_ciphers
    - sk_SSL_CIPHER_num
    - tls_get_cipher_name_pair
    - SSL_new
    - tls_ctx_set_cert_profile
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_tls_ciphers_list(const char *cipher_list, const
      char *tls_cert_profile, bool tls13) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:311,1
    - Dst: SSL_CTX_set_options
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:326,1
    - Dst: SSL_CTX_set_mode
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:334,1
    - Dst: tls_ctx_set_tls_versions
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:328,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:336,1
    - Dst: SSL_CTX_set_default_passwd_cb
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:337,1
    - Dst: SSL_CTX_set_verify
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:349,1
    - Dst: SSL_CTX_set_info_callback
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:351,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 2
    argNames:
    - ctx
    - ssl_flags
    argTypes:
    - struct tls_root_ctx*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 354
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 354
    functionName: tls_ctx_set_options
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_set_options
    - SSL_CTX_set_verify
    - SSL_CTX_set_mode
    - SSL_CTX_set_session_cache_mode
    - ASSERT
    - SSL_CTX_set_default_passwd_cb
    - tls_ctx_set_tls_versions
    - SSL_CTX_set_info_callback
    linkageType: ''
    returnType: bool
    signature: 'bool tls_ctx_set_options(struct tls_root_ctx *ctx, unsigned int ssl_flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bio_debug_oc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2218,1
    - Dst: bio_debug_oc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2219,1
    - Dst: BIO_free_all
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2222,1
    - Dst: SSL_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2223,1
    - Dst: bio_debug_oc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2220,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - ks_ssl
    argTypes:
    - struct key_state_ssl*
    constantsTouched: []
    func_position:
      end: 2225
      start: 2212
    functionDepth: 0
    functionLinenumber: 2212
    functionLinenumberEnd: 2225
    functionName: key_state_ssl_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - bio_debug_oc
    - BIO_free_all
    - SSL_free
    linkageType: ''
    returnType: void
    signature: 'void key_state_ssl_free(struct key_state_ssl *ks_ssl) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2624,1
    - Dst: ALLOC_ARRAY
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2634,1
    - Dst: EC_get_builtin_curves
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2635,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2637,1
    - Dst: EC_get_builtin_curves
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2633,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2641,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2647,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2652,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2654,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2656,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2659
      start: 2621
    functionDepth: 0
    functionLinenumber: 2621
    functionLinenumberEnd: 2659
    functionName: show_available_curves
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ALLOC_ARRAY
    - OBJ_nid2sn
    - msg
    - EC_get_builtin_curves
    - crypto_msg
    - free
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_curves(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:372,1
    - Dst: tls_get_cipher_name_pair
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:375,1
    - Dst: constrain_int
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:387,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:386,1
    - Dst: strcspn
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:374,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:393,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:396,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:400,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:408,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:414,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - openssl_ciphers
    - len
    - ciphers
    argTypes:
    - char*
    - size_t
    - char*
    constantsTouched: []
    func_position:
      end: 426
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 426
    functionName: convert_tls_list_to_openssl
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - memcpy
    - tls_get_cipher_name_pair
    - msg
    - memcmp
    - strlen
    - strcspn
    - constrain_int
    linkageType: ''
    returnType: void
    signature: 'static void convert_tls_list_to_openssl(char *openssl_ciphers, size_t
      len, const char *ciphers) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2231,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2235,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2235,1
    - Dst: bio_write
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2235,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2233,1
    - Dst: bio_write_post
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2237,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2239,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - ks_ssl
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 2241
      start: 2227
    functionDepth: 0
    functionLinenumber: 2227
    functionLinenumberEnd: 2241
    functionName: key_state_write_plaintext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - bio_write
    - BPTR
    - BLEN
    - perf_pop
    - ASSERT
    - bio_write_post
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_write_plaintext(struct key_state_ssl *ks_ssl, struct
      buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OpenSSL_version
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2664,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2665
      start: 2661
    functionDepth: 0
    functionLinenumber: 2661
    functionLinenumberEnd: 2665
    functionName: get_ssl_library_version
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OpenSSL_version
    linkageType: ''
    returnType: char*
    signature: 'const char *get_ssl_library_version(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RSA_get_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1443,1
    - Dst: RSA_meth_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - rsa
    argTypes:
    - RSA*
    constantsTouched: []
    func_position:
      end: 1446
      start: 1437
    functionDepth: 0
    functionLinenumber: 1437
    functionLinenumberEnd: 1446
    functionName: openvpn_extkey_rsa_finish
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - RSA_meth_free
    - RSA_get_method
    linkageType: ''
    returnType: int
    signature: 'static int openvpn_extkey_rsa_finish(RSA *rsa) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1432,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 5
    argNames:
    - flen
    - from
    - to
    - rsa
    - padding
    argTypes:
    - int
    - unsigned char*
    - unsigned char*
    - RSA*
    - int
    constantsTouched: []
    func_position:
      end: 1434
      start: 1429
    functionDepth: 0
    functionLinenumber: 1429
    functionLinenumberEnd: 1434
    functionName: rsa_priv_dec
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static int rsa_priv_dec(int flen, const unsigned char *from, unsigned
      char *to, RSA *rsa, int padding) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2120,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2133,1
    - Dst: VALGRIND_MAKE_READABLE
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2135,1
    - Dst: BIO_read
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2133,1
    - Dst: buf_forward_capacity
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2127,1
    - Dst: bio_debug_data
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2138,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2138,1
    - Dst: BIO_should_retry
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2144,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2146,1
    - Dst: ERR_clear_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2149,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2161,1
    - Dst: VALGRIND_MAKE_READABLE
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2161,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2161,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2158,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 29
    argCount: 3
    argNames:
    - bio
    - buf
    - desc
    argTypes:
    - BIO*
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 2164
      start: 2117
    functionDepth: 0
    functionLinenumber: 2117
    functionLinenumberEnd: 2164
    functionName: bio_read
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - BPTR
    - buf_forward_capacity
    - dmsg
    - BLEN
    - bio_debug_data
    - crypto_msg
    - ASSERT
    - ERR_clear_error
    - BIO_should_retry
    - VALGRIND_MAKE_READABLE
    - BIO_read
    linkageType: ''
    returnType: int
    signature: 'static int bio_read(BIO *bio, struct buffer *buf, const char *desc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2247,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2253,1
    - Dst: bio_write
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2251,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2249,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 3
    argNames:
    - ks_ssl
    - data
    - len
    argTypes:
    - struct key_state_ssl*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 2255
      start: 2243
    functionDepth: 0
    functionLinenumber: 2243
    functionLinenumberEnd: 2255
    functionName: key_state_write_plaintext_const
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - bio_write
    - perf_pop
    - ASSERT
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_write_plaintext_const(struct key_state_ssl *ks_ssl,
      const uint8_t *data, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2261,1
    - Dst: bio_read
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2265,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2263,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2267,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - ks_ssl
    - buf
    argTypes:
    - struct key_state_ssl*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 2269
      start: 2257
    functionDepth: 0
    functionLinenumber: 2257
    functionLinenumberEnd: 2269
    functionName: key_state_read_ciphertext
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - perf_pop
    - ASSERT
    - bio_read
    - perf_push
    linkageType: ''
    returnType: int
    signature: 'int key_state_read_ciphertext(struct key_state_ssl *ks_ssl, struct
      buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2109,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2109,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2109,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - status
    - buf
    argTypes:
    - int
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 2112
      start: 2104
    functionDepth: 0
    functionLinenumber: 2104
    functionLinenumberEnd: 2112
    functionName: bio_write_post
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - memset
    - BLEN
    - BPTR
    linkageType: ''
    returnType: void
    signature: 'static void bio_write_post(const int status, struct buffer *buf) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2060,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2078,1
    - Dst: BIO_should_retry
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2076,1
    - Dst: BIO_write
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2072,1
    - Dst: bio_debug_data
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2070,1
    - Dst: ERR_clear_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2080,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2085,1
    - Dst: ERR_clear_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2088,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2092,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 4
    argNames:
    - bio
    - data
    - size
    - desc
    argTypes:
    - BIO*
    - uint8_t*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 2097
      start: 2055
    functionDepth: 0
    functionLinenumber: 2055
    functionLinenumberEnd: 2097
    functionName: bio_write
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - BIO_write
    - dmsg
    - crypto_msg
    - ASSERT
    - ERR_clear_error
    - BIO_should_retry
    - bio_debug_data
    linkageType: ''
    returnType: int
    signature: 'static int bio_write(BIO *bio, const uint8_t *data, int size, const
      char *desc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:105,1
    - Dst: SSL_CTX_new_ex
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:107,1
    - Dst: ERR_peek_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:113,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:111,1
    - Dst: SSLv23_server_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:107,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:115,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 118
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 118
    functionName: tls_ctx_server_new
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ERR_peek_error
    - SSLv23_server_method
    - crypto_msg
    - ASSERT
    - SSL_CTX_new_ex
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_server_new(struct tls_root_ctx *ctx) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2009,1
    - Dst: getpid
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2010,1
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2020,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2019,1
    - Dst: close_biofp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2014,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2021,1
    - Dst: time
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2022,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 2025
      start: 2006
    functionDepth: 0
    functionLinenumber: 2006
    functionLinenumberEnd: 2025
    functionName: open_biofp
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - close_biofp
    - getpid
    - snprintf
    - fopen
    - ASSERT
    - time
    linkageType: ''
    returnType: void
    signature: 'static void open_biofp(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:123,1
    - Dst: SSLv23_client_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:125,1
    - Dst: ERR_peek_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:131,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:129,1
    - Dst: SSL_CTX_new_ex
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:125,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:133,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - struct tls_root_ctx*
    constantsTouched: []
    func_position:
      end: 136
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 136
    functionName: tls_ctx_client_new
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ERR_peek_error
    - SSLv23_client_method
    - crypto_msg
    - ASSERT
    - SSL_CTX_new_ex
    linkageType: ''
    returnType: void
    signature: 'void tls_ctx_client_new(struct tls_root_ctx *ctx) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1663,1
    - Dst: EC_KEY_OpenSSL
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1665,1
    - Dst: EC_KEY_METHOD_set_sign
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1674,1
    - Dst: EC_KEY_METHOD_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1665,1
    - Dst: EC_KEY_METHOD_set_init
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1672,1
    - Dst: EC_KEY_METHOD_set_sign
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1676,1
    - Dst: EC_KEY_dup
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1679,1
    - Dst: EVP_PKEY_get0_EC_KEY
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1679,1
    - Dst: EC_KEY_METHOD_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1682,1
    - Dst: EC_KEY_set_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1685,1
    - Dst: EC_KEY_METHOD_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1687,1
    - Dst: EVP_PKEY_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1692,1
    - Dst: EVP_PKEY_assign_EC_KEY
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1693,1
    - Dst: EC_KEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1711,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1699,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1705,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1710,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 32
    argCount: 2
    argNames:
    - ctx
    - pkey
    argTypes:
    - struct tls_root_ctx*
    - EVP_PKEY*
    constantsTouched: []
    func_position:
      end: 1713
      start: 1656
    functionDepth: 0
    functionLinenumber: 1656
    functionLinenumberEnd: 1713
    functionName: tls_ctx_use_external_ec_key
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_CTX_use_PrivateKey
    - EC_KEY_METHOD_new
    - EVP_PKEY_free
    - EVP_PKEY_new
    - EC_KEY_dup
    - EC_KEY_METHOD_free
    - EVP_PKEY_get0_EC_KEY
    - EC_KEY_free
    - EC_KEY_METHOD_set_init
    - ASSERT
    - EVP_PKEY_assign_EC_KEY
    - EC_KEY_OpenSSL
    - EC_KEY_set_method
    - EC_KEY_METHOD_set_sign
    linkageType: ''
    returnType: int
    signature: 'static int tls_ctx_use_external_ec_key(struct tls_root_ctx *ctx, EVP_PKEY
      *pkey) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2030,1
    - Dst: time
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2035,1
    - Dst: open_biofp
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2033,1
    - Dst: fprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2034,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2035,1
    - Dst: fflush
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2036,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2038,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 5
    argNames:
    - mode
    - bio
    - buf
    - len
    - desc
    argTypes:
    - char*
    - BIO*
    - uint8_t*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 2039
      start: 2027
    functionDepth: 0
    functionLinenumber: 2027
    functionLinenumberEnd: 2039
    functionName: bio_debug_data
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - fflush
    - format_hex
    - open_biofp
    - gc_new
    - gc_free
    - fprintf
    - time
    linkageType: ''
    returnType: void
    signature: 'static void bio_debug_data(const char *mode, BIO *bio, const uint8_t
      *buf, int len, const char *desc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_export_keying_material
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:162,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:169,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 5
    argNames:
    - session
    - label
    - label_size
    - ekm
    - ekm_size
    argTypes:
    - struct tls_session*
    - char*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 172
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 172
    functionName: key_state_export_keying_material
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - SSL_export_keying_material
    - secure_memzero
    linkageType: ''
    returnType: bool
    signature: 'bool key_state_export_keying_material(struct tls_session *session,
      const char *label, size_t label_size, void *ekm, size_t ekm_size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ECDSA_size
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1640,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1641,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1643,1
    - Dst: ecdsa_sign
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1644,1
    - Dst: d2i_ECDSA_SIG
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1649,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:1652,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 10
    argCount: 5
    argNames:
    - dgst
    - dgstlen
    - in_kinv
    - in_r
    - ec
    argTypes:
    - unsigned char*
    - int
    - BIGNUM*
    - BIGNUM*
    - EC_KEY*
    constantsTouched: []
    func_position:
      end: 1654
      start: 1635
    functionDepth: 0
    functionLinenumber: 1635
    functionLinenumberEnd: 1654
    functionName: ecdsa_sign_sig
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - ECDSA_size
    - d2i_ECDSA_SIG
    - gc_malloc
    - gc_new
    - ecdsa_sign
    - gc_free
    linkageType: ''
    returnType: ECDSA_SIG*
    signature: 'static ECDSA_SIG *ecdsa_sign_sig(const unsigned char *dgst, int dgstlen,
      const BIGNUM *in_kinv, const BIGNUM *in_r, EC_KEY *ec) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_pubkey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2380,1
    - Dst: print_pkey_details
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2382,1
    - Dst: X509_get_signature_nid
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2385,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2389,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2388,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2392,1
    - Dst: EVP_PKEY_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:2395,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 3
    argNames:
    - cert
    - buf
    - buflen
    argTypes:
    - X509*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 2396
      start: 2377
    functionDepth: 0
    functionLinenumber: 2377
    functionLinenumberEnd: 2396
    functionName: print_cert_details
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_free
    - X509_get_pubkey
    - OBJ_nid2sn
    - snprintf
    - print_pkey_details
    - X509_get_signature_nid
    linkageType: ''
    returnType: void
    signature: 'static void print_cert_details(X509 *cert, char *buf, size_t buflen) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_file
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:843,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:848,1
    - Dst: SSL_CTX_get_default_passwd_cb
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:849,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:851,1
    - Dst: SSL_CTX_get_default_passwd_cb_userdata
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:850,1
    - Dst: UI_create_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:858,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:861,1
    - Dst: UI_method_set_reader
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:864,1
    - Dst: OSSL_STORE_open_ex
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:866,1
    - Dst: OSSL_STORE_expect
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:872,1
    - Dst: OSSL_STORE_load
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:878,1
    - Dst: clear_ossl_store_error
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:887,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:895,1
    - Dst: UI_destroy_method
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:899,1
    - Dst: OSSL_STORE_INFO_get1_PKEY
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:893,1
    - Dst: OSSL_STORE_close
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:898,1
    - Dst: OSSL_STORE_INFO_free
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:894,1
    - Dst: OSSL_STORE_eof
      Src: /src/openvpn/src/openvpn/ssl_openssl.c:879,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 37
    argCount: 2
    argNames:
    - uri
    - ssl_ctx
    argTypes:
    - char*
    - SSL_CTX*
    constantsTouched: []
    func_position:
      end: 904
      start: 835
    functionDepth: 0
    functionLinenumber: 835
    functionLinenumberEnd: 904
    functionName: load_pkey_from_uri
    functionSourceFile: /src/openvpn/src/openvpn/ssl_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_STORE_expect
    - BIO_new_file
    - UI_destroy_method
    - PEM_read_bio_PrivateKey
    - msg
    - UI_method_set_reader
    - clear_ossl_store_error
    - SSL_CTX_get_default_passwd_cb_userdata
    - OSSL_STORE_INFO_free
    - OSSL_STORE_open_ex
    - OSSL_STORE_eof
    - OSSL_STORE_load
    - UI_create_method
    - OSSL_STORE_close
    - OSSL_STORE_INFO_get1_PKEY
    - BIO_free
    - SSL_CTX_get_default_passwd_cb
    linkageType: ''
    returnType: void*
    signature: 'static void *load_pkey_from_uri(const char *uri, SSL_CTX *ssl_ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/tun_afunix.c:55,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/tun_afunix.c:63,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/tun_afunix.c:59,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/tun_afunix.c:61,1
    - Dst: openvpn_waitpid_check
      Src: /src/openvpn/src/openvpn/tun_afunix.c:65,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/tun_afunix.c:69,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 3
    argNames:
    - dev_node
    - tt
    - env
    argTypes:
    - char*
    - struct tuntap*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 70
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 70
    functionName: tun_afunix_exec_child
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - argv_printf
    - argv_free
    - argv_new
    - strlen
    - openvpn_execve_check
    - openvpn_waitpid_check
    linkageType: ''
    returnType: void
    signature: 'static void tun_afunix_exec_child(const char *dev_node, struct tuntap
      *tt, struct env_set *env) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun_afunix.c:130,1
    - Dst: kill
      Src: /src/openvpn/src/openvpn/tun_afunix.c:136,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun_afunix.c:139,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/tun_afunix.c:138,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun_afunix.c:133,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 140
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 140
    functionName: close_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - free
    - kill
    - ASSERT
    - close
    linkageType: ''
    returnType: void
    signature: 'void close_tun_afunix(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun_afunix.c:173,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 5
    argNames:
    - dev
    - dev_type
    - mtu
    - tt
    - env
    argTypes:
    - char*
    - char*
    - int
    - struct tuntap*
    - struct env_set
    constantsTouched: []
    func_position:
      end: 174
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 174
    functionName: open_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void open_tun_afunix(const char *dev, const char *dev_type, int mtu,
      struct tuntap *tt, struct env_set env) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/tun_afunix.c:78,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/tun_afunix.c:83,1
    - Dst: socket_set_buffers
      Src: /src/openvpn/src/openvpn/tun_afunix.c:93,1
    - Dst: socket_set_buffers
      Src: /src/openvpn/src/openvpn/tun_afunix.c:92,1
    - Dst: socketpair
      Src: /src/openvpn/src/openvpn/tun_afunix.c:81,1
    - Dst: set_cloexec
      Src: /src/openvpn/src/openvpn/tun_afunix.c:98,1
    - Dst: env_set_create
      Src: /src/openvpn/src/openvpn/tun_afunix.c:102,1
    - Dst: env_set_inherit
      Src: /src/openvpn/src/openvpn/tun_afunix.c:103,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/tun_afunix.c:105,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun_afunix.c:106,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun_afunix.c:110,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/tun_afunix.c:114,1
    - Dst: tun_afunix_exec_child
      Src: /src/openvpn/src/openvpn/tun_afunix.c:117,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/tun_afunix.c:122,1
    - Dst: dev_type_string
      Src: /src/openvpn/src/openvpn/tun_afunix.c:106,1
    - Dst: setenv_int
      Src: /src/openvpn/src/openvpn/tun_afunix.c:107,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/tun_afunix.c:119,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/tun_afunix.c:124,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 26
    argCount: 4
    argNames:
    - o
    - mtu
    - tt
    - orig_env
    argTypes:
    - struct options*
    - int
    - struct tuntap*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 125
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 125
    functionName: open_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - set_cloexec
    - msg
    - dev_type_string
    - socket_set_buffers
    - gc_new
    - socketpair
    - setenv_str
    - gc_free
    - setenv_int
    - env_set_create
    - close
    - env_set_inherit
    - tun_afunix_exec_child
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void open_tun_afunix(struct options *o, int mtu, struct tuntap *tt,
      struct env_set *orig_env) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_waitpid_check
      Src: /src/openvpn/src/openvpn/tun_afunix.c:159,1
    - Dst: read
      Src: /src/openvpn/src/openvpn/tun_afunix.c:166,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 167
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 167
    functionName: read_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - read
    - openvpn_waitpid_check
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t read_tun_afunix(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_waitpid_check
      Src: /src/openvpn/src/openvpn/tun_afunix.c:146,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/tun_afunix.c:152,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 153
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 153
    functionName: write_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - write
    - openvpn_waitpid_check
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t write_tun_afunix(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun_afunix.c:180,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - tt
    argTypes:
    - struct tuntap*
    constantsTouched: []
    func_position:
      end: 181
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 181
    functionName: close_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void close_tun_afunix(struct tuntap *tt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun_afunix.c:187,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 188
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 188
    functionName: write_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t write_tun_afunix(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/tun_afunix.c:194,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - tt
    - buf
    - len
    argTypes:
    - struct tuntap*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 195
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 195
    functionName: read_tun_afunix
    functionSourceFile: /src/openvpn/src/openvpn/tun_afunix.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t read_tun_afunix(struct tuntap *tt, uint8_t *buf, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: md_full
      Src: /src/openvpn/src/openvpn/ntlm.c:62,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ntlm.c:63,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 3
    argNames:
    - data
    - data_len
    - result
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 64
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 64
    functionName: gen_md4_hash
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - md_full
    - memcpy
    linkageType: ''
    returnType: void
    signature: 'static void gen_md4_hash(const uint8_t *data, int data_len, uint8_t
      *result) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: toupper
      Src: /src/openvpn/src/openvpn/ntlm.c:122,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 125
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 125
    functionName: my_strupr
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - toupper
    linkageType: ''
    returnType: void
    signature: 'static void my_strupr(char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: openvpn_time
      Src: /src/openvpn/src/openvpn/ntlm.c:89,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:90,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:94,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:93,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:90,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:95,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:96,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:97,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:98,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:99,1
    - Dst: UINT64
      Src: /src/openvpn/src/openvpn/ntlm.c:100,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 39
    argCount: 1
    argNames:
    - timestamp
    argTypes:
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 101
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 101
    functionName: gen_timestamp
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - UINT64
    - openvpn_time
    linkageType: ''
    returnType: void
    signature: 'static void gen_timestamp(uint8_t *timestamp) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ntlm.c:160,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ntlm.c:169,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 6
    argNames:
    - sb_offset
    - data
    - length
    - msg_buf
    - msg_bufpos
    - msg_bufsize
    argTypes:
    - int
    - void*
    - int
    - unsigned char*
    - int*
    - size_t
    constantsTouched: []
    func_position:
      end: 171
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 171
    functionName: add_security_buffer
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - msg
    - memcpy
    linkageType: ''
    returnType: void
    signature: 'static void add_security_buffer(int sb_offset, void *data, int length,
      unsigned char *msg_buf, int *msg_bufpos, size_t msg_bufsize) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hmac_ctx_new
      Src: /src/openvpn/src/openvpn/ntlm.c:70,1
    - Dst: hmac_ctx_cleanup
      Src: /src/openvpn/src/openvpn/ntlm.c:75,1
    - Dst: hmac_ctx_init
      Src: /src/openvpn/src/openvpn/ntlm.c:72,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/ntlm.c:73,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/ntlm.c:74,1
    - Dst: hmac_ctx_free
      Src: /src/openvpn/src/openvpn/ntlm.c:76,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 4
    argNames:
    - data
    - data_len
    - key
    - result
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 77
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 77
    functionName: gen_hmac_md5
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - hmac_ctx_init
    - hmac_ctx_final
    - hmac_ctx_free
    - hmac_ctx_update
    - hmac_ctx_new
    - hmac_ctx_cleanup
    linkageType: ''
    returnType: void
    signature: 'static void gen_hmac_md5(const uint8_t *data, int data_len, const
      uint8_t *key, uint8_t *result) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_random
      Src: /src/openvpn/src/openvpn/ntlm.c:111,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - nonce
    argTypes:
    - unsigned char*
    constantsTouched: []
    func_position:
      end: 113
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 113
    functionName: gen_nonce
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - get_random
    linkageType: ''
    returnType: void
    signature: 'static void gen_nonce(unsigned char *nonce) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ntlm.c:176,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ntlm.c:186,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ntlm.c:187,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 2
    argNames:
    - p
    - gc
    argTypes:
    - struct http_proxy_info*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 188
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 188
    functionName: ntlm_phase_1
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - buf_printf
    - alloc_buf_gc
    - BSTR
    linkageType: ''
    returnType: char*
    signature: 'const char *ntlm_phase_1(const struct http_proxy_info *p, struct gc_arena
      *gc) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ntlm.c:222,1
    - Dst: strcat
      Src: /src/openvpn/src/openvpn/ntlm.c:280,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ntlm.c:278,1
    - Dst: unicodize
      Src: /src/openvpn/src/openvpn/ntlm.c:286,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ntlm.c:360,1
    - Dst: add_security_buffer
      Src: /src/openvpn/src/openvpn/ntlm.c:368,1
    - Dst: add_security_buffer
      Src: /src/openvpn/src/openvpn/ntlm.c:372,1
    - Dst: add_security_buffer
      Src: /src/openvpn/src/openvpn/ntlm.c:377,1
    - Dst: make_base64_string2
      Src: /src/openvpn/src/openvpn/ntlm.c:388,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ntlm.c:372,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ntlm.c:222,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/ntlm.c:234,1
    - Dst: unicodize
      Src: /src/openvpn/src/openvpn/ntlm.c:247,1
    - Dst: gen_md4_hash
      Src: /src/openvpn/src/openvpn/ntlm.c:248,1
    - Dst: openvpn_base64_decode
      Src: /src/openvpn/src/openvpn/ntlm.c:259,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ntlm.c:262,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ntlm.c:258,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ntlm.c:287,1
    - Dst: gen_nonce
      Src: /src/openvpn/src/openvpn/ntlm.c:296,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ntlm.c:330,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ntlm.c:377,1
    - Dst: gen_hmac_md5
      Src: /src/openvpn/src/openvpn/ntlm.c:354,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ntlm.c:221,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/ntlm.c:241,1
    - Dst: my_strupr
      Src: /src/openvpn/src/openvpn/ntlm.c:277,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ntlm.c:284,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ntlm.c:321,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/ntlm.c:364,1
    - Dst: strchr
      Src: /src/openvpn/src/openvpn/ntlm.c:225,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ntlm.c:221,1
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/ntlm.c:228,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/ntlm.c:251,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/ntlm.c:276,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ntlm.c:278,1
    - Dst: gen_hmac_md5
      Src: /src/openvpn/src/openvpn/ntlm.c:287,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/ntlm.c:291,1
    - Dst: gen_timestamp
      Src: /src/openvpn/src/openvpn/ntlm.c:295,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/ntlm.c:362,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ntlm.c:351,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ntlm.c:336,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 122
    argCount: 3
    argNames:
    - p
    - phase_2
    - gc
    argTypes:
    - struct http_proxy_info*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 390
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 390
    functionName: ntlm_phase_3
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached:
    - memcpy
    - msg
    - openvpn_base64_decode
    - gen_nonce
    - strchr
    - unicodize
    - gen_hmac_md5
    - make_base64_string2
    - strncpy
    - memset
    - gen_timestamp
    - CLEAR
    - strcpy
    - strlen
    - strcat
    - gen_md4_hash
    - add_security_buffer
    - my_strupr
    - ASSERT
    linkageType: ''
    returnType: char*
    signature: 'const char *ntlm_phase_3(const struct http_proxy_info *p, const char
      *phase_2, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 2
    argNames:
    - dst
    - src
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 152
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 152
    functionName: unicodize
    functionSourceFile: /src/openvpn/src/openvpn/ntlm.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int unicodize(char *dst, const char *src) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:149,1
    - Dst: setup_engine
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:151,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:155,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:150,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - engine_name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 157
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 157
    functionName: crypto_init_lib_engine
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - msg
    - setup_engine
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void crypto_init_lib_engine(const char *engine_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:681,1
    - Dst: EVP_CIPHER_key_length
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:682,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:683,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 685
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 685
    functionName: cipher_kt_key_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CIPHER_key_length
    - EVP_CIPHER_free
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_key_size(const char *ciphername) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:709,1
    - Dst: translate_cipher_name_to_openvpn
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:723,1
    - Dst: EVP_CIPHER_block_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:715,1
    - Dst: EVP_CIPHER_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:717,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:723,1
    - Dst: strrchr
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:724,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:725,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:730,1
    - Dst: EVP_CIPHER_fetch
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:732,1
    - Dst: translate_cipher_name_from_openvpn
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:732,1
    - Dst: EVP_CIPHER_block_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:735,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:741,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:740,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:739,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 29
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 743
      start: 696
    functionDepth: 0
    functionLinenumber: 696
    functionLinenumberEnd: 743
    functionName: cipher_kt_block_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CIPHER_fetch
    - translate_cipher_name_from_openvpn
    - strlen
    - EVP_CIPHER_free
    - EVP_CIPHER_name
    - strcpy
    - free
    - strrchr
    - EVP_CIPHER_block_size
    - translate_cipher_name_to_openvpn
    - string_alloc
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_block_size(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:858,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_CIPHER_CTX*
    constantsTouched: []
    func_position:
      end: 859
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 859
    functionName: cipher_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_free
    linkageType: ''
    returnType: void
    signature: 'void cipher_ctx_free(EVP_CIPHER_CTX *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MAC_init
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1321,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1323,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - hmac_ctx_t*
    constantsTouched: []
    func_position:
      end: 1325
      start: 1315
    functionDepth: 0
    functionLinenumber: 1315
    functionLinenumberEnd: 1325
    functionName: hmac_ctx_reset
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - crypto_msg
    - EVP_MAC_init
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_reset(hmac_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:690,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:692,1
    - Dst: EVP_CIPHER_iv_length
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:691,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 694
      start: 687
    functionDepth: 0
    functionLinenumber: 687
    functionLinenumberEnd: 694
    functionName: cipher_kt_iv_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CIPHER_free
    - EVP_CIPHER_iv_length
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_iv_size(const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:748,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 756
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 756
    functionName: cipher_kt_tag_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_aead
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_tag_size(const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:865,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:871,1
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:866,1
    - Dst: EVP_CipherInit_ex
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:869,1
    - Dst: EVP_CIPHER_CTX_reset
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:868,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:875,1
    - Dst: EVP_CIPHER_CTX_key_length
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:875,1
    - Dst: EVP_CIPHER_key_length
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:875,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:876,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 4
    argNames:
    - ctx
    - key
    - ciphername
    - enc
    argTypes:
    - EVP_CIPHER_CTX*
    - uint8_t*
    - char*
    - crypto_operation_t
    constantsTouched: []
    func_position:
      end: 877
      start: 861
    functionDepth: 0
    functionLinenumber: 861
    functionLinenumberEnd: 877
    functionName: cipher_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CipherInit_ex
    - EVP_CIPHER_CTX_key_length
    - EVP_CIPHER_key_length
    - EVP_CIPHER_free
    - crypto_msg
    - ASSERT
    - EVP_CIPHER_CTX_reset
    linkageType: ''
    returnType: void
    signature: 'void cipher_ctx_init(EVP_CIPHER_CTX *ctx, const uint8_t *key, const
      char *ciphername, crypto_operation_t enc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MAC_update
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1330,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - src
    - src_len
    argTypes:
    - hmac_ctx_t*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1331
      start: 1327
    functionDepth: 0
    functionLinenumber: 1327
    functionLinenumberEnd: 1331
    functionName: hmac_ctx_update
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MAC_update
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_update(hmac_ctx_t *ctx, const uint8_t *src, int src_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:791,1
    - Dst: EVP_CIPHER_flags
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:796,1
    - Dst: EVP_CIPHER_flags
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:798,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:799,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:793,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 801
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 801
    functionName: cipher_kt_mode_cbc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CIPHER_flags
    - cipher_kt_mode
    - EVP_CIPHER_free
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_mode_cbc(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_iv_length
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:882,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_CIPHER_CTX*
    constantsTouched: []
    func_position:
      end: 883
      start: 879
    functionDepth: 0
    functionLinenumber: 879
    functionLinenumberEnd: 883
    functionName: cipher_ctx_iv_length
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_iv_length
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_iv_length(const EVP_CIPHER_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MD_CTX_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_MD_CTX*
    constantsTouched: []
    func_position:
      end: 1136
      start: 1132
    functionDepth: 0
    functionLinenumber: 1132
    functionLinenumberEnd: 1136
    functionName: md_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_CTX_free
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_free(EVP_MD_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:806,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:811,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:808,1
    - Dst: cipher_kt_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:807,1
    - Dst: EVP_CIPHER_flags
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:810,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 813
      start: 803
    functionDepth: 0
    functionLinenumber: 803
    functionLinenumberEnd: 813
    functionName: cipher_kt_mode_ofb_cfb
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CIPHER_flags
    - cipher_kt_mode
    - EVP_CIPHER_free
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_mode_ofb_cfb(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_ctrl
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:888,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - tag_buf
    - tag_size
    argTypes:
    - EVP_CIPHER_CTX*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 889
      start: 885
    functionDepth: 0
    functionLinenumber: 885
    functionLinenumberEnd: 889
    functionName: cipher_ctx_get_tag
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_ctrl
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_get_tag(EVP_CIPHER_CTX *ctx, uint8_t *tag_buf, int
      tag_size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1141,1
    - Dst: EVP_DigestInit
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1145,1
    - Dst: EVP_MD_CTX_init
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1144,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1147,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1142,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1149,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - ctx
    - mdname
    argTypes:
    - EVP_MD_CTX*
    - char*
    constantsTouched: []
    func_position:
      end: 1150
      start: 1138
    functionDepth: 0
    functionLinenumber: 1138
    functionLinenumberEnd: 1150
    functionName: md_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - crypto_msg
    - EVP_DigestInit
    - ASSERT
    - EVP_MD_free
    - md_get
    - EVP_MD_CTX_init
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_init(EVP_MD_CTX *ctx, const char *mdname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_clear_error
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 232
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 232
    functionName: crypto_clear_error
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - ERR_clear_error
    linkageType: ''
    returnType: void
    signature: 'void crypto_clear_error(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_flags
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:943,1
    - Dst: EVP_CIPHER_CTX_nid
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:950,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - cipher_ctx_t*
    constantsTouched: []
    func_position:
      end: 958
      start: 938
    functionDepth: 0
    functionLinenumber: 938
    functionLinenumberEnd: 958
    functionName: cipher_ctx_mode_aead
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_flags
    - EVP_CIPHER_CTX_nid
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_ctx_mode_aead(const cipher_ctx_t *ctx) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ERR_get_error_all
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:241,1
    - Dst: ERR_GET_REASON
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:249,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:257,1
    - Dst: ERR_GET_REASON
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:255,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:251,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:267,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:269,1
    - Dst: ERR_error_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:269,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:273,1
    - Dst: ERR_error_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:273,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - flags
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 277
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 277
    functionName: crypto_print_openssl_errors
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - ERR_error_string
    - check_debug_level
    - msg
    - ERR_get_error_all
    - ERR_GET_REASON
    linkageType: ''
    returnType: void
    signature: 'void crypto_print_openssl_errors(const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CipherInit_ex
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:964,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - iv_buf
    argTypes:
    - EVP_CIPHER_CTX*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 965
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 965
    functionName: cipher_ctx_reset
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CipherInit_ex
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_reset(EVP_CIPHER_CTX *ctx, const uint8_t *iv_buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 6
    argNames:
    - label
    - label_len
    - sec
    - slen
    - out1
    - olen
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1462
      start: 1457
    functionDepth: 0
    functionLinenumber: 1457
    functionLinenumberEnd: 1462
    functionName: ssl_tls1_PRF
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_tls1_PRF(const uint8_t *label, int label_len, const uint8_t
      *sec, int slen, uint8_t *out1, int olen) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1020,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1028,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1026,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1024,1
    - Dst: EVP_MD_fetch
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1021,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1031,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - digest
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1034
      start: 1016
    functionDepth: 0
    functionLinenumber: 1016
    functionLinenumberEnd: 1034
    functionName: md_get
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_size
    - crypto_msg
    - EVP_MD_fetch
    - ASSERT
    linkageType: ''
    returnType: evp_md_type*
    signature: 'static evp_md_type *md_get(const char *digest) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MD_fetch
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1040,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1042,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - digest
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1044
      start: 1037
    functionDepth: 0
    functionLinenumber: 1037
    functionLinenumberEnd: 1044
    functionName: md_valid
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_free
    - EVP_MD_fetch
    linkageType: ''
    returnType: bool
    signature: 'bool md_valid(const char *digest) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1202,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1203,1
    - Dst: HMAC_Init_ex
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1207,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1205,1
    - Dst: HMAC_CTX_reset
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1206,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1209,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1213,1
    - Dst: HMAC_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1213,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 3
    argNames:
    - ctx
    - key
    - mdname
    argTypes:
    - HMAC_CTX*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 1214
      start: 1199
    functionDepth: 0
    functionLinenumber: 1199
    functionLinenumberEnd: 1214
    functionName: hmac_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - HMAC_Init_ex
    - HMAC_size
    - EVP_MD_size
    - crypto_msg
    - HMAC_CTX_reset
    - ASSERT
    - md_get
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_init(HMAC_CTX *ctx, const uint8_t *key, const char *mdname) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_flags
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:912,1
    - Dst: EVP_CIPHER_CTX_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:913,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - cipher_ctx_t*
    constantsTouched: []
    func_position:
      end: 921
      start: 904
    functionDepth: 0
    functionLinenumber: 904
    functionLinenumberEnd: 921
    functionName: cipher_ctx_mode_cbc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_mode
    - EVP_CIPHER_CTX_flags
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_ctx_mode_cbc(const cipher_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_DigestUpdate
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1167,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - src
    - src_len
    argTypes:
    - EVP_MD_CTX*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1168
      start: 1164
    functionDepth: 0
    functionLinenumber: 1164
    functionLinenumberEnd: 1168
    functionName: md_ctx_update
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_DigestUpdate
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_update(EVP_MD_CTX *ctx, const uint8_t *src, int src_len) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ENGINE_load_builtin_engines
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:111,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:117,1
    - Dst: ENGINE_register_all_complete
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:118,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:115,1
    - Dst: ENGINE_by_id
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:121,1
    - Dst: try_load_engine
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:122,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:124,1
    - Dst: ENGINE_set_default
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:128,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:130,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:135,1
    - Dst: ENGINE_get_id
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:136,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 23
    argCount: 1
    argNames:
    - engine
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 139
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 139
    functionName: setup_engine
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - ENGINE_load_builtin_engines
    - msg
    - ENGINE_register_all_complete
    - try_load_engine
    - strcmp
    - crypto_msg
    - ENGINE_get_id
    - ENGINE_by_id
    - ENGINE_set_default
    linkageType: ''
    returnType: ENGINE*
    signature: 'static ENGINE *setup_engine(const char *engine) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:332,1
    - Dst: EVP_CIPHER_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:332,1
    - Dst: EVP_CIPHER_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:332,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 333
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 333
    functionName: cipher_name_cmp
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - strcmp
    - EVP_CIPHER_get0_name
    linkageType: ''
    returnType: int
    signature: 'static int cipher_name_cmp(const void *a, const void *b) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_get_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:931,1
    - Dst: EVP_CIPHER_CTX_flags
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:935,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - cipher_ctx_t*
    constantsTouched: []
    func_position:
      end: 936
      start: 923
    functionDepth: 0
    functionLinenumber: 923
    functionLinenumberEnd: 936
    functionName: cipher_ctx_mode_ofb_cfb
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_flags
    - EVP_CIPHER_CTX_get_mode
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_ctx_mode_ofb_cfb(const cipher_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_DigestFinal
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1175,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - dst
    argTypes:
    - EVP_MD_CTX*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 1176
      start: 1170
    functionDepth: 0
    functionLinenumber: 1170
    functionLinenumberEnd: 1176
    functionName: md_ctx_final
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_DigestFinal
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_final(EVP_MD_CTX *ctx, uint8_t *dst) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_CTX_new_id
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1412,1
    - Dst: EVP_PKEY_CTX_set1_tls1_prf_secret
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1429,1
    - Dst: EVP_PKEY_derive_init
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1419,1
    - Dst: EVP_md5_sha1
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1424,1
    - Dst: EVP_PKEY_CTX_set_tls1_prf_md
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1424,1
    - Dst: EVP_PKEY_CTX_add1_tls1_prf_seed
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1434,1
    - Dst: EVP_PKEY_derive
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1440,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1450,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 24
    argCount: 6
    argNames:
    - seed
    - seed_len
    - secret
    - secret_len
    - output
    - output_len
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1452
      start: 1408
    functionDepth: 0
    functionLinenumber: 1408
    functionLinenumberEnd: 1452
    functionName: ssl_tls1_PRF
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_PKEY_derive
    - EVP_PKEY_derive_init
    - EVP_md5_sha1
    - EVP_PKEY_CTX_add1_tls1_prf_seed
    - EVP_PKEY_CTX_set1_tls1_prf_secret
    - EVP_PKEY_CTX_new_id
    - EVP_PKEY_CTX_set_tls1_prf_md
    - EVP_PKEY_CTX_free
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_tls1_PRF(const uint8_t *seed, int seed_len, const uint8_t
      *secret, int secret_len, uint8_t *output, int output_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MD_CTX_reset
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_MD_CTX*
    constantsTouched: []
    func_position:
      end: 1156
      start: 1152
    functionDepth: 0
    functionLinenumber: 1152
    functionLinenumberEnd: 1156
    functionName: md_ctx_cleanup
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_CTX_reset
    linkageType: ''
    returnType: void
    signature: 'void md_ctx_cleanup(EVP_MD_CTX *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_PROVIDER_load
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:164,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:171,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:167,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 1
    argNames:
    - provider
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 174
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 174
    functionName: crypto_load_provider
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_load
    - crypto_msg
    - msg
    linkageType: ''
    returnType: provider_t*
    signature: 'provider_t *crypto_load_provider(const char *provider) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:374,1
    - Dst: EVP_CIPHER_do_all_provided
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:382,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:378,1
    - Dst: EVP_get_cipherbyname
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:394,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:391,1
    - Dst: EVP_get_cipherbynid
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:397,1
    - Dst: collect_ciphers
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:401,1
    - Dst: qsort
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:406,1
    - Dst: cipher_kt_insecure
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:410,1
    - Dst: EVP_CIPHER_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:410,1
    - Dst: cipher_kt_insecure
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:420,1
    - Dst: EVP_CIPHER_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:420,1
    - Dst: EVP_CIPHER_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:412,1
    - Dst: print_cipher
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:422,1
    - Dst: print_cipher
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:412,1
    - Dst: EVP_CIPHER_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:422,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:425,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:416,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 31
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 426
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 426
    functionName: show_available_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - qsort
    - EVP_get_cipherbyname
    - EVP_get_cipherbynid
    - OBJ_nid2sn
    - EVP_CIPHER_get0_name
    - print_cipher
    - cipher_kt_insecure
    - EVP_CIPHER_do_all_provided
    - collect_ciphers
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_ciphers(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:439,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:444,1
    - Dst: EVP_MD_do_all_provided
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:448,1
    - Dst: EVP_get_digestbyname
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:460,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:457,1
    - Dst: EVP_get_digestbynid
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:463,1
    - Dst: print_digest
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:469,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:473,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 15
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 474
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 474
    functionName: show_available_digests
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_get_digestbyname
    - EVP_get_digestbynid
    - OBJ_nid2sn
    - EVP_MD_do_all_provided
    - print_digest
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_digests(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:621,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:635,1
    - Dst: FIPS_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:633,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:624,1
    - Dst: EVP_CIPHER_flags
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:633,1
    - Dst: EVP_CIPHER_key_length
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:641,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:643,1
    - Dst: EVP_CIPHER_key_length
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:645,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:654,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 23
    argCount: 2
    argNames:
    - ciphername
    - reason
    argTypes:
    - char*
    - char**
    constantsTouched: []
    func_position:
      end: 656
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 656
    functionName: cipher_valid_reason
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - msg
    - EVP_CIPHER_key_length
    - EVP_CIPHER_free
    - crypto_msg
    - FIPS_mode
    - EVP_CIPHER_flags
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_valid_reason(const char *ciphername, const char **reason) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MD_CTX_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1161,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_MD_CTX*
    constantsTouched: []
    func_position:
      end: 1162
      start: 1158
    functionDepth: 0
    functionLinenumber: 1158
    functionLinenumberEnd: 1162
    functionName: md_ctx_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_CTX_size
    linkageType: ''
    returnType: int
    signature: 'int md_ctx_size(const EVP_MD_CTX *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OSSL_PROVIDER_unload
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:180,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:182,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - provname
    - provider
    argTypes:
    - char*
    - provider_t*
    constantsTouched: []
    func_position:
      end: 185
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 185
    functionName: crypto_unload_provider
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PROVIDER_unload
    - crypto_msg
    linkageType: ''
    returnType: void
    signature: 'void crypto_unload_provider(const char *provname, provider_t *provider) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:482,1
    - Dst: ENGINE_get_first
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:486,1
    - Dst: ENGINE_get_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:490,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:489,1
    - Dst: ENGINE_load_builtin_engines
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:484,1
    - Dst: ENGINE_get_id
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:491,1
    - Dst: ENGINE_get_next
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:492,1
    - Dst: ENGINE_cleanup
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:494,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:496,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 498
      start: 476
    functionDepth: 0
    functionLinenumber: 476
    functionLinenumberEnd: 498
    functionName: show_available_engines
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - ENGINE_load_builtin_engines
    - ENGINE_get_first
    - ENGINE_cleanup
    - ENGINE_get_next
    - ENGINE_get_name
    - ENGINE_get_id
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_engines(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:431,1
    - Dst: md_kt_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:431,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:432,1
    - Dst: EVP_MD_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:431,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - digest
    - unused
    argTypes:
    - EVP_MD*
    - void*
    constantsTouched: []
    func_position:
      end: 433
      start: 428
    functionDepth: 0
    functionLinenumber: 428
    functionLinenumberEnd: 433
    functionName: print_digest
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_size
    - EVP_MD_get0_name
    - md_kt_name
    - printf
    linkageType: ''
    returnType: void
    signature: 'void print_digest(EVP_MD *digest, void *unused) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:661,1
    - Dst: EVP_CIPHER_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:673,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:662,1
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:667,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:674,1
    - Dst: translate_cipher_name_to_openvpn
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:675,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 676
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 676
    functionName: cipher_kt_name
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CIPHER_free
    - strcmp
    - EVP_CIPHER_name
    - ASSERT
    - translate_cipher_name_to_openvpn
    linkageType: ''
    returnType: char*
    signature: 'const char *cipher_kt_name(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_memcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1347,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - a
    - b
    - size
    argTypes:
    - void*
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 1348
      start: 1344
    functionDepth: 0
    functionLinenumber: 1344
    functionLinenumberEnd: 1348
    functionName: memcmp_constant_time
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - CRYPTO_memcmp
    linkageType: ''
    returnType: int
    signature: 'int memcmp_constant_time(const void *a, const void *b, size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CipherFinal
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:992,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - dst
    - dst_len
    argTypes:
    - EVP_CIPHER_CTX*
    - uint8_t*
    - int*
    constantsTouched: []
    func_position:
      end: 993
      start: 989
    functionDepth: 0
    functionLinenumber: 989
    functionLinenumberEnd: 993
    functionName: cipher_ctx_final
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CipherFinal
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_final(EVP_CIPHER_CTX *ctx, uint8_t *dst, int *dst_len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:999,1
    - Dst: EVP_CIPHER_CTX_ctrl
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1000,1
    - Dst: cipher_ctx_final
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1005,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 5
    argNames:
    - ctx
    - dst
    - dst_len
    - tag
    - tag_len
    argTypes:
    - EVP_CIPHER_CTX*
    - uint8_t*
    - int*
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 1006
      start: 995
    functionDepth: 0
    functionLinenumber: 995
    functionLinenumberEnd: 1006
    functionName: cipher_ctx_final_check_tag
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_ctx_final
    - ASSERT
    - EVP_CIPHER_CTX_ctrl
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_final_check_tag(EVP_CIPHER_CTX *ctx, uint8_t *dst,
      int *dst_len, uint8_t *tag, size_t tag_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_init_crypto
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:196,1
    - Dst: CRYPTO_mem_ctrl
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 206
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 206
    functionName: crypto_init_lib
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - CRYPTO_mem_ctrl
    - OPENSSL_init_crypto
    linkageType: ''
    returnType: void
    signature: 'void crypto_init_lib(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_block_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:762,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:771,1
    - Dst: EVP_CIPHER_nid
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:770,1
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:767,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 779
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 779
    functionName: cipher_kt_insecure
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - cipher_kt_block_size
    - EVP_CIPHER_nid
    - EVP_CIPHER_free
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_insecure(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HMAC_CTX_new
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1188,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1189,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1191
      start: 1185
    functionDepth: 0
    functionLinenumber: 1185
    functionLinenumberEnd: 1191
    functionName: hmac_ctx_new
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - HMAC_CTX_new
    - check_malloc_return
    linkageType: ''
    returnType: HMAC_CTX*
    signature: 'HMAC_CTX *hmac_ctx_new(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: HMAC_Init_ex
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1231,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1233,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - HMAC_CTX*
    constantsTouched: []
    func_position:
      end: 1235
      start: 1228
    functionDepth: 0
    functionLinenumber: 1228
    functionLinenumberEnd: 1235
    functionName: hmac_ctx_reset
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - crypto_msg
    - HMAC_Init_ex
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_reset(HMAC_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HMAC_Update
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1240,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - src
    - src_len
    argTypes:
    - HMAC_CTX*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1241
      start: 1237
    functionDepth: 0
    functionLinenumber: 1237
    functionLinenumberEnd: 1241
    functionName: hmac_ctx_update
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - HMAC_Update
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_update(HMAC_CTX *ctx, const uint8_t *src, int src_len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:212,1
    - Dst: ENGINE_cleanup
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:221,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:213,1
    - Dst: fclose
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:215,1
    - Dst: CRYPTO_mem_leaks_fp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:214,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 226
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 226
    functionName: crypto_uninit_lib
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - ENGINE_cleanup
    - fclose
    - fopen
    - ASSERT
    - CRYPTO_mem_leaks_fp
    linkageType: ''
    returnType: void
    signature: 'void crypto_uninit_lib(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:784,1
    - Dst: EVP_CIPHER_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:785,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - cipher_kt
    argTypes:
    - EVP_CIPHER*
    constantsTouched: []
    func_position:
      end: 786
      start: 781
    functionDepth: 0
    functionLinenumber: 781
    functionLinenumberEnd: 786
    functionName: cipher_kt_mode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    - EVP_CIPHER_mode
    linkageType: ''
    returnType: int
    signature: 'int cipher_kt_mode(const EVP_CIPHER *cipher_kt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MAC_CTX_get_mac_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1338,1
    - Dst: EVP_MAC_final
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1340,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - ctx
    - dst
    argTypes:
    - hmac_ctx_t*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 1341
      start: 1333
    functionDepth: 0
    functionLinenumber: 1333
    functionLinenumberEnd: 1341
    functionName: hmac_ctx_final
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MAC_final
    - EVP_MAC_CTX_get_mac_size
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_final(hmac_ctx_t *ctx, uint8_t *dst) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HMAC_CTX_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - HMAC_CTX*
    constantsTouched: []
    func_position:
      end: 1197
      start: 1193
    functionDepth: 0
    functionLinenumber: 1193
    functionLinenumberEnd: 1197
    functionName: hmac_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - HMAC_CTX_free
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_free(HMAC_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_tls1_prf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1405,1
    - Dst: EVP_md5_sha1
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1405,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 6
    argNames:
    - label
    - label_len
    - sec
    - slen
    - out1
    - olen
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1406
      start: 1401
    functionDepth: 0
    functionLinenumber: 1401
    functionLinenumberEnd: 1406
    functionName: ssl_tls1_PRF
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - CRYPTO_tls1_prf
    - EVP_md5_sha1
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_tls1_PRF(const uint8_t *label, int label_len, const uint8_t
      *sec, int slen, uint8_t *out1, int olen) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1072,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1089,1
    - Dst: EVP_MD_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1077,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1083,1
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1076,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 13
    argCount: 1
    argNames:
    - mdname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1091
      start: 1069
    functionDepth: 0
    functionLinenumber: 1069
    functionLinenumberEnd: 1091
    functionName: md_kt_name
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_free
    - strcmp
    - EVP_MD_get0_name
    - md_get
    linkageType: ''
    returnType: char*
    signature: 'const char *md_kt_name(const char *mdname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MAC_init
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1306,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - hmac_ctx_t*
    constantsTouched: []
    func_position:
      end: 1307
      start: 1303
    functionDepth: 0
    functionLinenumber: 1303
    functionLinenumberEnd: 1307
    functionName: hmac_ctx_cleanup
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MAC_init
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_cleanup(hmac_ctx_t *ctx) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1096,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1101,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1102,1
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - mdname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1104
      start: 1093
    functionDepth: 0
    functionLinenumber: 1093
    functionLinenumberEnd: 1104
    functionName: md_kt_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_free
    - strcmp
    - EVP_MD_size
    - md_get
    linkageType: ''
    returnType: unsigned char
    signature: 'unsigned char md_kt_size(const char *mdname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_set_mem_ex_functions
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:310,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 313
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 313
    functionName: crypto_init_dmalloc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - CRYPTO_set_mem_ex_functions
    linkageType: ''
    returnType: void
    signature: 'void crypto_init_dmalloc(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MAC_CTX_get_mac_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1312,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - hmac_ctx_t*
    constantsTouched: []
    func_position:
      end: 1313
      start: 1309
    functionDepth: 0
    functionLinenumber: 1309
    functionLinenumberEnd: 1313
    functionName: hmac_ctx_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MAC_CTX_get_mac_size
    linkageType: ''
    returnType: int
    signature: 'int hmac_ctx_size(hmac_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:611,1
    - Dst: translate_cipher_name_from_openvpn
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:613,1
    - Dst: EVP_CIPHER_fetch
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:614,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 615
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 615
    functionName: cipher_get
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_fetch
    - ASSERT
    - translate_cipher_name_from_openvpn
    linkageType: ''
    returnType: evp_cipher_type*
    signature: 'static evp_cipher_type *cipher_get(const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unlikely
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:594,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:596,1
    - Dst: RAND_bytes
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:594,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - output
    - len
    argTypes:
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 600
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 600
    functionName: rand_bytes
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - RAND_bytes
    - crypto_msg
    - unlikely
    linkageType: ''
    returnType: int
    signature: 'int rand_bytes(uint8_t *output, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_new
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:850,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:851,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 853
      start: 847
    functionDepth: 0
    functionLinenumber: 847
    functionLinenumberEnd: 853
    functionName: cipher_ctx_new
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - check_malloc_return
    - EVP_CIPHER_CTX_new
    linkageType: ''
    returnType: cipher_ctx_t*
    signature: 'cipher_ctx_t *cipher_ctx_new(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HMAC_CTX_reset
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1219,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - HMAC_CTX*
    constantsTouched: []
    func_position:
      end: 1220
      start: 1216
    functionDepth: 0
    functionLinenumber: 1216
    functionLinenumberEnd: 1220
    functionName: hmac_ctx_cleanup
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - HMAC_CTX_reset
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_cleanup(HMAC_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1255,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1258,1
    - Dst: EVP_MAC_fetch
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1256,1
    - Dst: EVP_MAC_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1260,1
    - Dst: EVP_MAC_CTX_new
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1257,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1263
      start: 1251
    functionDepth: 0
    functionLinenumber: 1251
    functionLinenumberEnd: 1263
    functionName: hmac_ctx_new
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MAC_free
    - EVP_MAC_CTX_new
    - EVP_MAC_fetch
    - ALLOC_OBJ_CLEAR
    - check_malloc_return
    linkageType: ''
    returnType: hmac_ctx_t*
    signature: 'hmac_ctx_t *hmac_ctx_new(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HMAC_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1225,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - HMAC_CTX*
    constantsTouched: []
    func_position:
      end: 1226
      start: 1222
    functionDepth: 0
    functionLinenumber: 1222
    functionLinenumberEnd: 1226
    functionName: hmac_ctx_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - HMAC_size
    linkageType: ''
    returnType: int
    signature: 'int hmac_ctx_size(HMAC_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MAC_CTX_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1268,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1269,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1270,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - hmac_ctx_t*
    constantsTouched: []
    func_position:
      end: 1271
      start: 1265
    functionDepth: 0
    functionLinenumber: 1265
    functionLinenumberEnd: 1271
    functionName: hmac_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MAC_CTX_free
    - secure_memzero
    - free
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_free(hmac_ctx_t *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:820,1
    - Dst: EVP_CIPHER_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:823,1
    - Dst: EVP_CIPHER_nid
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:829,1
    - Dst: EVP_CIPHER_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:836,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 839
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 839
    functionName: cipher_kt_mode_aead
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_get
    - EVP_CIPHER_nid
    - EVP_CIPHER_mode
    - EVP_CIPHER_free
    linkageType: ''
    returnType: bool
    signature: 'bool cipher_kt_mode_aead(const char *ciphername) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:506,1
    - Dst: PEM_write_bio
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:507,1
    - Dst: BIO_s_mem
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:506,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:507,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:507,1
    - Dst: BIO_get_mem_ptr
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:514,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:516,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:517,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:517,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:521,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 21
    argCount: 4
    argNames:
    - name
    - dst
    - src
    - gc
    argTypes:
    - char*
    - struct buffer*
    - struct buffer*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 527
      start: 501
    functionDepth: 0
    functionLinenumber: 501
    functionLinenumberEnd: 527
    functionName: crypto_pem_encode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - BIO_new
    - buf_write
    - BPTR
    - BIO_s_mem
    - BLEN
    - BIO_get_mem_ptr
    - PEM_write_bio
    - ASSERT
    - BIO_free
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool crypto_pem_encode(const char *name, struct buffer *dst, const
      struct buffer *src, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ENGINE_by_id
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:93,1
    - Dst: ENGINE_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:99,1
    - Dst: ENGINE_ctrl_cmd_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:97,1
    - Dst: ENGINE_ctrl_cmd_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:96,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 1
    argNames:
    - engine
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 104
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 104
    functionName: try_load_engine
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - ENGINE_ctrl_cmd_string
    - ENGINE_by_id
    - ENGINE_free
    linkageType: ''
    returnType: ENGINE*
    signature: 'static ENGINE *try_load_engine(const char *engine) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_mem_buf
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:535,1
    - Dst: PEM_read_bio
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:545,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:535,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:535,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:538,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:548,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:552,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:554,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:560,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:563,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:567,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:573,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:572,1
    - Dst: BIO_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:574,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:571,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:564,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 28
    argCount: 3
    argNames:
    - name
    - dst
    - src
    argTypes:
    - char*
    - struct buffer*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 580
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 580
    functionName: crypto_pem_decode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - memcpy
    - BPTR
    - dmsg
    - PEM_read_bio
    - BIO_new_mem_buf
    - BLEN
    - buf_write_alloc
    - BIO_free
    - strcmp
    - crypto_msg
    - OPENSSL_free
    - BCAP
    linkageType: ''
    returnType: bool
    signature: 'bool crypto_pem_decode(const char *name, struct buffer *dst, const
      struct buffer *src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_block_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:894,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_CIPHER_CTX*
    constantsTouched: []
    func_position:
      end: 895
      start: 891
    functionDepth: 0
    functionLinenumber: 891
    functionLinenumberEnd: 895
    functionName: cipher_ctx_block_size
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_block_size
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_block_size(const EVP_CIPHER_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CIPHER_CTX_mode
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:900,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_CIPHER_CTX*
    constantsTouched: []
    func_position:
      end: 901
      start: 897
    functionDepth: 0
    functionLinenumber: 897
    functionLinenumberEnd: 901
    functionName: cipher_ctx_mode
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CIPHER_CTX_mode
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_mode(const EVP_CIPHER_CTX *ctx) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: EVP_KDF_fetch
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1358,1
    - Dst: EVP_KDF_CTX_new
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1364,1
    - Dst: OSSL_PARAM_construct_octet_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1377,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1376,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1375,1
    - Dst: OSSL_PARAM_construct_octet_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1379,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1381,1
    - Dst: EVP_KDF_derive
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1383,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1385,1
    - Dst: EVP_KDF_CTX_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1395,1
    - Dst: EVP_KDF_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1396,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 24
    argCount: 6
    argNames:
    - seed
    - seed_len
    - secret
    - secret_len
    - output
    - output_len
    argTypes:
    - uint8_t*
    - int
    - uint8_t*
    - int
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1399
      start: 1350
    functionDepth: 0
    functionLinenumber: 1350
    functionLinenumberEnd: 1399
    functionName: ssl_tls1_PRF
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PARAM_construct_end
    - EVP_KDF_fetch
    - EVP_KDF_free
    - EVP_KDF_CTX_free
    - OSSL_PARAM_construct_octet_string
    - EVP_KDF_CTX_new
    - crypto_msg
    - EVP_KDF_derive
    - strlen
    - OSSL_PARAM_construct_utf8_string
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_tls1_PRF(const uint8_t *seed, int seed_len, const uint8_t
      *secret, int secret_len, uint8_t *output, int output_len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CipherUpdate
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:971,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:973,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 3
    argNames:
    - ctx
    - src
    - src_len
    argTypes:
    - EVP_CIPHER_CTX*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 976
      start: 967
    functionDepth: 0
    functionLinenumber: 967
    functionLinenumberEnd: 976
    functionName: cipher_ctx_update_ad
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CipherUpdate
    - crypto_msg
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_update_ad(EVP_CIPHER_CTX *ctx, const uint8_t *src,
      int src_len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EVP_CipherUpdate
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:982,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:984,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 5
    argNames:
    - ctx
    - dst
    - dst_len
    - src
    - src_len
    argTypes:
    - EVP_CIPHER_CTX*
    - uint8_t*
    - int*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 987
      start: 978
    functionDepth: 0
    functionLinenumber: 978
    functionLinenumberEnd: 987
    functionName: cipher_ctx_update
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_CipherUpdate
    - crypto_msg
    linkageType: ''
    returnType: int
    signature: 'int cipher_ctx_update(EVP_CIPHER_CTX *ctx, uint8_t *dst, int *dst_len,
      uint8_t *src, int src_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmalloc_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:304,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 305
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 305
    functionName: crypto_free
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - dmalloc_free
    linkageType: ''
    returnType: void
    signature: 'static void crypto_free(void *ptr) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:349,1
    - Dst: EVP_CIPHER_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:355,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:361,1
    - Dst: cipher_kt_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:359,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:351,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 2
    argNames:
    - cipher
    - list
    argTypes:
    - EVP_CIPHER*
    - void*
    constantsTouched: []
    func_position:
      end: 366
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 366
    functionName: collect_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_ofb_cfb
    - msg
    - SIZE
    - EVP_CIPHER_get0_name
    - cipher_kt_mode_aead
    linkageType: ''
    returnType: void
    signature: 'static void collect_ciphers(EVP_CIPHER *cipher, void *list) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmalloc_malloc
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:292,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - size
    - file
    - line
    argTypes:
    - size_t
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 293
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 293
    functionName: crypto_malloc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - dmalloc_malloc
    linkageType: ''
    returnType: void*
    signature: 'static void *crypto_malloc(size_t size, const char *file, int line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1117,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1120,1
    - Dst: EVP_Digest
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1119,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 4
    argNames:
    - mdname
    - src
    - src_len
    - dst
    argTypes:
    - char*
    - uint8_t*
    - int
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 1122
      start: 1113
    functionDepth: 0
    functionLinenumber: 1113
    functionLinenumberEnd: 1122
    functionName: md_full
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_free
    - EVP_Digest
    - md_get
    linkageType: ''
    returnType: int
    signature: 'int md_full(const char *mdname, const uint8_t *src, int src_len, uint8_t
      *dst) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dmalloc_realloc
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:298,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 4
    argNames:
    - ptr
    - size
    - file
    - line
    argTypes:
    - void*
    - size_t
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 299
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 299
    functionName: crypto_realloc
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - dmalloc_realloc
    linkageType: ''
    returnType: void*
    signature: 'static void *crypto_realloc(void *ptr, size_t size, const char *file,
      int line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_MD_CTX_new
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1127,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1128,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1130
      start: 1124
    functionDepth: 0
    functionLinenumber: 1124
    functionLinenumberEnd: 1130
    functionName: md_ctx_new
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - EVP_MD_CTX_new
    - check_malloc_return
    linkageType: ''
    returnType: EVP_MD_CTX*
    signature: 'EVP_MD_CTX *md_ctx_new(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HMAC_Final
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1248,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - ctx
    - dst
    argTypes:
    - HMAC_CTX*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 1249
      start: 1243
    functionDepth: 0
    functionLinenumber: 1243
    functionLinenumberEnd: 1249
    functionName: hmac_ctx_final
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - HMAC_Final
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_final(HMAC_CTX *ctx, uint8_t *dst) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: md_get
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1276,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1281,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1277,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1281,1
    - Dst: OSSL_PARAM_construct_utf8_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1289,1
    - Dst: EVP_MD_get0_name
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1290,1
    - Dst: OSSL_PARAM_construct_octet_string
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1291,1
    - Dst: EVP_MD_size
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1292,1
    - Dst: OSSL_PARAM_construct_end
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1293,1
    - Dst: EVP_MAC_init
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1295,1
    - Dst: crypto_msg
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1297,1
    - Dst: EVP_MD_free
      Src: /src/openvpn/src/openvpn/crypto_openssl.c:1300,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 3
    argNames:
    - ctx
    - key
    - mdname
    argTypes:
    - hmac_ctx_t*
    - uint8_t*
    - char*
    constantsTouched: []
    func_position:
      end: 1301
      start: 1273
    functionDepth: 0
    functionLinenumber: 1273
    functionLinenumberEnd: 1301
    functionName: hmac_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/crypto_openssl.c
    functionUses: []
    functionsReached:
    - OSSL_PARAM_construct_end
    - memcpy
    - EVP_MD_get0_name
    - EVP_MD_size
    - EVP_MAC_init
    - OSSL_PARAM_construct_octet_string
    - crypto_msg
    - ASSERT
    - EVP_MD_free
    - OSSL_PARAM_construct_utf8_string
    - md_get
    linkageType: ''
    returnType: void
    signature: 'void hmac_ctx_init(hmac_ctx_t *ctx, const uint8_t *key, const char
      *mdname) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - pl
    argTypes:
    - struct plugin_list*
    constantsTouched: []
    func_position:
      end: 161
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 161
    functionName: plugin_n
    functionSourceFile: /src/openvpn/src/openvpn/plugin.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int plugin_n(const struct plugin_list *pl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: plugin_call_ssl
      Src: /src/openvpn/src/openvpn/plugin.h:207,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 2
    argCount: 5
    argNames:
    - pl
    - type
    - av
    - pr
    - es
    argTypes:
    - struct plugin_list*
    - int
    - struct argv*
    - struct plugin_return*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 208
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 208
    functionName: plugin_call
    functionSourceFile: /src/openvpn/src/openvpn/plugin.h
    functionUses: []
    functionsReached:
    - plugin_call_ssl
    linkageType: ''
    returnType: int
    signature: 'static inline int plugin_call(const struct plugin_list *pl, const
      int type, const struct argv *av, struct plugin_return *pr, struct env_set *es) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - pl
    - type
    argTypes:
    - struct plugin_list*
    - int
    constantsTouched: []
    func_position:
      end: 183
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 183
    functionName: plugin_defined
    functionSourceFile: /src/openvpn/src/openvpn/plugin.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool plugin_defined(const struct plugin_list *pl, const
      int type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 1
    argCount: 7
    argNames:
    - pl
    - type
    - av
    - pr
    - es
    - current_cert_depth
    - current_cert
    argTypes:
    - struct plugin_list*
    - int
    - struct argv*
    - struct plugin_return*
    - struct env_set*
    - int
    - openvpn_x509_cert_t*
    constantsTouched: []
    func_position:
      end: 196
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 196
    functionName: plugin_call_ssl
    functionSourceFile: /src/openvpn/src/openvpn/plugin.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int plugin_call_ssl(const struct plugin_list *pl, const
      int type, const struct argv *av, struct plugin_return *pr, struct env_set *es,
      int current_cert_depth, openvpn_x509_cert_t *current_cert ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - pr
    argTypes:
    - struct plugin_return*
    constantsTouched: []
    func_position:
      end: 173
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 173
    functionName: plugin_return_init
    functionSourceFile: /src/openvpn/src/openvpn/plugin.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void plugin_return_init(struct plugin_return *pr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - pr
    argTypes:
    - struct plugin_return*
    constantsTouched: []
    func_position:
      end: 167
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 167
    functionName: plugin_return_defined
    functionSourceFile: /src/openvpn/src/openvpn/plugin.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool plugin_return_defined(const struct plugin_return
      *pr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:287,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:291,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:288,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - state
    argTypes:
    - struct tls_pre_decrypt_state*
    constantsTouched: []
    func_position:
      end: 293
      start: 284
    functionDepth: 0
    functionLinenumber: 284
    functionLinenumberEnd: 293
    functionName: free_tls_pre_decrypt_state
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - free_key_ctx_bi
    - free_buf
    linkageType: ''
    returnType: void
    signature: 'void free_tls_pre_decrypt_state(struct tls_pre_decrypt_state *state) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:183,1
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:186,1
    - Dst: reliable_ack_write
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:187,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:187,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:186,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:191,1
    - Dst: packet_opcode_name
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:191,1
    - Dst: tls_wrap_control
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:193,1
    - Dst: tls_session_get_tls_wrap
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:193,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 21
    argCount: 7
    argNames:
    - session
    - ks
    - buf
    - to_link_addr
    - opcode
    - max_ack
    - prepend_ack
    argTypes:
    - struct tls_session*
    - struct key_state*
    - struct buffer*
    - struct link_socket_actual**
    - int
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 196
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 196
    functionName: write_control_auth
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - tls_wrap_control
    - msg
    - reliable_ack_write
    - link_socket_actual_defined
    - tls_session_get_tls_wrap
    - min_int
    - ASSERT
    - packet_opcode_name
    linkageType: ''
    returnType: void
    signature: 'void write_control_auth(struct tls_session *session, struct key_state
      *ks, struct buffer *buf, struct link_socket_actual **to_link_addr, int opcode,
      int max_ack, bool prepend_ack) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:439,1
    - Dst: buf_write_u32
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:446,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:443,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:439,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:449,1
    - Dst: htonpid
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:453,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:455,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:455,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:460,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:461,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:462,1
    - Dst: tls_wrap_control
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:467,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 14
    argCount: 6
    argNames:
    - ctx
    - tas
    - own_sid
    - remote_sid
    - header
    - request_resend_wkc
    argTypes:
    - struct tls_wrap_ctx*
    - struct tls_auth_standalone*
    - struct session_id*
    - struct session_id*
    - uint8_t
    - bool
    constantsTouched: []
    func_position:
      end: 470
      start: 427
    functionDepth: 0
    functionLinenumber: 427
    functionLinenumberEnd: 470
    functionName: tls_reset_standalone
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - buf_init
    - buf_write
    - tls_wrap_control
    - buf_write_u16
    - buf_write_u32
    - ASSERT
    - buf_write_u8
    - htonpid
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer tls_reset_standalone(struct tls_wrap_ctx *ctx, struct
      tls_auth_standalone *tas, struct session_id *own_sid, struct session_id *remote_sid,
      uint8_t header, bool request_resend_wkc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:500,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:505,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:516,1
    - Dst: hmac_ctx_reset
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:502,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:512,1
    - Dst: hmac_ctx_update
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:521,1
    - Dst: hmac_ctx_final
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:523,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 13
    argCount: 5
    argNames:
    - client_sid
    - from
    - hmac
    - handwindow
    - offset
    argTypes:
    - struct session_id
    - struct openvpn_sockaddr*
    - hmac_ctx_t*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 526
      start: 486
    functionDepth: 0
    functionLinenumber: 486
    functionLinenumberEnd: 526
    functionName: calculate_session_id_hmac
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - hmac_ctx_final
    - hmac_ctx_reset
    - ntohl
    - hmac_ctx_update
    linkageType: ''
    returnType: struct session_id
    signature: 'struct session_id calculate_session_id_hmac(struct session_id client_sid,
      const struct openvpn_sockaddr *from, hmac_ctx_t *hmac, int handwindow, int offset) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:205,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:238,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:240,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:250,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:251,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:256,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:208,1
    - Dst: openvpn_decrypt
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:235,1
    - Dst: buf_forward_capacity_total
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:247,1
    - Dst: tls_crypt_unwrap
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:248,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:235,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:254,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:255,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:275,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:280,1
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:221,1
    - Dst: swap_hmac
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:224,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:255,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:261,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:262,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:213,1
    - Dst: tls_crypt_v2_extract_client_key
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:211,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:215,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:226,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:228,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:229,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:247,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:254,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 53
    argCount: 5
    argNames:
    - buf
    - ctx
    - from
    - opt
    - initial_packet
    argTypes:
    - struct buffer*
    - struct tls_wrap_ctx*
    - struct link_socket_actual*
    - struct tls_options*
    - bool
    constantsTouched: []
    func_position:
      end: 282
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 282
    functionName: read_control_auth
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - buf_copy
    - clear_buf
    - buf_forward_capacity_total
    - buf_init
    - buf_clear
    - BPTR
    - tls_crypt_v2_extract_client_key
    - msg
    - openvpn_decrypt
    - tls_crypt_unwrap
    - gc_new
    - buf_advance
    - print_link_socket_actual
    - gc_free
    - swap_hmac
    - ASSERT
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool read_control_auth(struct buffer *buf, struct tls_wrap_ctx *ctx,
      const struct link_socket_actual *from, const struct tls_options *opt, bool initial_packet) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:476,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:480,1
    - Dst: hmac_ctx_new
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:477,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:480,1
    - Dst: md_valid
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:476,1
    - Dst: hmac_ctx_init
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:482,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 484
      start: 472
    functionDepth: 0
    functionLinenumber: 472
    functionLinenumberEnd: 484
    functionName: session_id_hmac_init
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - md_valid
    - hmac_ctx_init
    - rand_bytes
    - ASSERT
    - hmac_ctx_new
    linkageType: ''
    returnType: hmac_ctx_t*
    signature: 'hmac_ctx_t *session_id_hmac_init(void) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reliable_ack_parse
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:542,1
    - Dst: calculate_session_id_hmac
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:551,1
    - Dst: memcmp_constant_time
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:553,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 11
    argCount: 4
    argNames:
    - state
    - from
    - hmac
    - handwindow
    argTypes:
    - struct tls_pre_decrypt_state*
    - struct openvpn_sockaddr*
    - hmac_ctx_t*
    - int
    constantsTouched: []
    func_position:
      end: 559
      start: 528
    functionDepth: 0
    functionLinenumber: 528
    functionLinenumberEnd: 559
    functionName: check_session_id_hmac
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - reliable_ack_parse
    - calculate_session_id_hmac
    - memcmp_constant_time
    linkageType: ''
    returnType: bool
    signature: 'bool check_session_id_hmac(struct tls_pre_decrypt_state *state, const
      struct openvpn_sockaddr *from, hmac_ctx_t *hmac, int handwindow) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strnlen
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:566,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:566,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:568,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:566,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:570,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:581,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:582,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:582,1
    - Dst: buf_chomp
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:586,1
    - Dst: string_check_buf
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:590,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:593,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:593,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:597,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:592,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:593,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 23
    argCount: 2
    argNames:
    - buf
    - gc
    argTypes:
    - struct buffer*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 599
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 599
    functionName: extract_command_buffer
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - buf_write
    - format_hex
    - BSTR
    - BPTR
    - buf_chomp
    - string_check_buf
    - strnlen
    - BLEN
    - msg
    - buf_advance
    - alloc_buf_gc
    linkageType: ''
    returnType: struct buffer
    signature: 'struct buffer extract_command_buffer(struct buffer *buf, struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:62,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:66,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:76,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:70,1
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:70,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:91,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:95,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:96,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:97,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:98,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 29
    argCount: 3
    argNames:
    - buf
    - co
    - incoming
    argTypes:
    - struct buffer*
    - struct crypto_options*
    - bool
    constantsTouched: []
    func_position:
      end: 106
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 106
    functionName: swap_hmac
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - hmac_ctx_size
    - packet_id_size
    - memcpy
    - BPTR
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static bool swap_hmac(struct buffer *buf, const struct crypto_options
      *co, bool incoming) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:126,1
    - Dst: session_id_write_prepend
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:126,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:127,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:127,1
    - Dst: clear_buf
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:131,1
    - Dst: openvpn_encrypt
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:134,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:135,1
    - Dst: swap_hmac
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:135,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:139,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:139,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:140,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:140,1
    - Dst: tls_crypt_wrap
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:142,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:151,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:154,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:141,1
    - Dst: session_id_write
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:141,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 39
    argCount: 4
    argNames:
    - ctx
    - header
    - buf
    - session_id
    argTypes:
    - struct tls_wrap_ctx*
    - uint8_t
    - struct buffer*
    - struct session_id*
    constantsTouched: []
    func_position:
      end: 164
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 164
    functionName: tls_wrap_control
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - buf_copy
    - clear_buf
    - buf_init
    - buf_write
    - tls_crypt_wrap
    - msg
    - session_id_write_prepend
    - ASSERT
    - swap_hmac
    - session_id_write
    - buf_write_prepend
    - openvpn_encrypt
    linkageType: ''
    returnType: void
    signature: 'static void tls_wrap_control(struct tls_wrap_ctx *ctx, uint8_t header,
      struct buffer *buf, struct session_id *session_id) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:312,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:316,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:318,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:323,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:340,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:342,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:349,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:352,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:359,1
    - Dst: session_id_read
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:360,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:361,1
    - Dst: clone_buf
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:369,1
    - Dst: read_control_auth
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:375,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:363,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:422,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:421,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:365,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl_pkt.c:398,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 53
    argCount: 4
    argNames:
    - tas
    - state
    - from
    - buf
    argTypes:
    - struct tls_auth_standalone*
    - struct tls_pre_decrypt_state*
    - struct link_socket_actual*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 424
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 424
    functionName: tls_pre_decrypt_lite
    functionSourceFile: /src/openvpn/src/openvpn/ssl_pkt.c
    functionUses: []
    functionsReached:
    - BPTR
    - dmsg
    - msg
    - read_control_auth
    - session_id_read
    - gc_new
    - print_link_socket_actual
    - gc_free
    - tls_clear_error
    - clone_buf
    - buf_advance
    - session_id_defined
    linkageType: ''
    returnType: enum first_packet_verdict
    signature: 'enum first_packet_verdict tls_pre_decrypt_lite(const struct tls_auth_standalone
      *tas, struct tls_pre_decrypt_state *state, const struct link_socket_actual *from,
      const struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/ssl.c:155,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/ssl.c:171,1
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/ssl.c:156,1
    - Dst: tls_crypt_buf_overhead
      Src: /src/openvpn/src/openvpn/ssl.c:155,1
    - Dst: ACK_SIZE
      Src: /src/openvpn/src/openvpn/ssl.c:162,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/ssl.c:179,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/ssl.c:180,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - frame
    - tls_mtu
    argTypes:
    - struct frame*
    - int
    constantsTouched: []
    func_position:
      end: 181
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 181
    functionName: tls_init_control_channel_frame_parameters
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_crypt_buf_overhead
    - ACK_SIZE
    - packet_id_size
    - max_int
    - min_int
    linkageType: ''
    returnType: void
    signature: 'void tls_init_control_channel_frame_parameters(struct frame *frame,
      int tls_mtu) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1096,1
    - Dst: session_index_name
      Src: /src/openvpn/src/openvpn/ssl.c:1097,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1100,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1101,1
    - Dst: session_index_name
      Src: /src/openvpn/src/openvpn/ssl.c:1098,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1102,1
    - Dst: tls_session_free
      Src: /src/openvpn/src/openvpn/ssl.c:1103,1
    - Dst: tls_session_init
      Src: /src/openvpn/src/openvpn/ssl.c:1108,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1112,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:1115,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 4
    argNames:
    - multi
    - dest
    - src
    - reinit_src
    argTypes:
    - struct tls_multi*
    - int
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 1116
      start: 1093
    functionDepth: 0
    functionLinenumber: 1093
    functionLinenumberEnd: 1116
    functionName: move_session
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_session_init
    - dmsg
    - tls_session_free
    - msg
    - secure_memzero
    - ASSERT
    - session_index_name
    linkageType: ''
    returnType: void
    signature: 'static void move_session(struct tls_multi *multi, int dest, int src,
      bool reinit_src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_auth_token
      Src: /src/openvpn/src/openvpn/ssl.c:367,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - token
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 368
      start: 364
    functionDepth: 0
    functionLinenumber: 364
    functionLinenumberEnd: 368
    functionName: ssl_set_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - set_auth_token
    linkageType: ''
    returnType: void
    signature: 'void ssl_set_auth_token(const char *token) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tls_wrap_free
      Src: /src/openvpn/src/openvpn/ssl.c:1067,1
    - Dst: cert_hash_free
      Src: /src/openvpn/src/openvpn/ssl.c:1080,1
    - Dst: tls_wrap_free
      Src: /src/openvpn/src/openvpn/ssl.c:1068,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1078,1
    - Dst: key_state_free
      Src: /src/openvpn/src/openvpn/ssl.c:1075,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1084,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 2
    argNames:
    - session
    - clear
    argTypes:
    - struct tls_session*
    - bool
    constantsTouched: []
    func_position:
      end: 1086
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1086
    functionName: tls_session_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_wrap_free
    - cert_hash_free
    - secure_memzero
    - key_state_free
    - free
    linkageType: ''
    returnType: void
    signature: 'static void tls_session_free(struct tls_session *session, bool clear) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 359
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 359
    functionName: ssl_get_auth_nocache
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_get_auth_nocache(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_load_cryptoapi
      Src: /src/openvpn/src/openvpn/ssl.c:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cryptoapi_cert
    argTypes:
    - options
    constantsTouched: []
    func_position:
      end: 591
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 591
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_ctx_load_cryptoapi
    linkageType: ''
    returnType: else
    signature: 'else if (options->cryptoapi_cert) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:993,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/ssl.c:1003,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:995,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:997,1
    - Dst: session_id_random
      Src: /src/openvpn/src/openvpn/ssl.c:1005,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ssl.c:1021,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/ssl.c:1021,1
    - Dst: packet_id_init
      Src: /src/openvpn/src/openvpn/ssl.c:1024,1
    - Dst: packet_id_persist_load_obj
      Src: /src/openvpn/src/openvpn/ssl.c:1038,1
    - Dst: key_state_init
      Src: /src/openvpn/src/openvpn/ssl.c:1041,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:1043,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:1046,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:1044,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 2
    argNames:
    - multi
    - session
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1047
      start: 990
    functionDepth: 0
    functionLinenumber: 990
    functionLinenumberEnd: 1047
    functionName: tls_session_init
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - dmsg
    - session_id_random
    - BUF_SIZE
    - key_state_init
    - gc_new
    - packet_id_persist_load_obj
    - CLEAR
    - gc_free
    - session_id_print
    - packet_id_init
    - alloc_buf
    - session_id_defined
    linkageType: ''
    returnType: void
    signature: 'static void tls_session_init(struct tls_multi *multi, struct tls_session
      *session) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reliable_get_buf_output_sequenced
      Src: /src/openvpn/src/openvpn/ssl.c:2809,1
    - Dst: write_outgoing_tls_ciphertext
      Src: /src/openvpn/src/openvpn/ssl.c:2812,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 8
    argCount: 3
    argNames:
    - ks
    - session
    - continue_tls_process
    argTypes:
    - struct key_state*
    - struct tls_session*
    - bool*
    constantsTouched: []
    func_position:
      end: 2819
      start: 2802
    functionDepth: 0
    functionLinenumber: 2802
    functionLinenumberEnd: 2819
    functionName: check_outgoing_ciphertext
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - write_outgoing_tls_ciphertext
    - reliable_get_buf_output_sequenced
    linkageType: ''
    returnType: bool
    signature: 'static bool check_outgoing_ciphertext(struct key_state *ks, struct
      tls_session *session, bool *continue_tls_process) '
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: reliable_empty
      Src: /src/openvpn/src/openvpn/ssl.c:2856,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2863,1
    - Dst: reliable_empty
      Src: /src/openvpn/src/openvpn/ssl.c:2869,1
    - Dst: read_incoming_tls_plaintext
      Src: /src/openvpn/src/openvpn/ssl.c:2935,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2889,1
    - Dst: check_outgoing_ciphertext
      Src: /src/openvpn/src/openvpn/ssl.c:2989,1
    - Dst: key_state_ssl_shutdown
      Src: /src/openvpn/src/openvpn/ssl.c:3000,1
    - Dst: tls_x509_clear_env
      Src: /src/openvpn/src/openvpn/ssl.c:2862,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2847,1
    - Dst: session_move_active
      Src: /src/openvpn/src/openvpn/ssl.c:2871,1
    - Dst: write_control_auth
      Src: /src/openvpn/src/openvpn/ssl.c:2886,1
    - Dst: read_incoming_tls_ciphertext
      Src: /src/openvpn/src/openvpn/ssl.c:2924,1
    - Dst: is_hard_reset_method2
      Src: /src/openvpn/src/openvpn/ssl.c:2915,1
    - Dst: key_state_write_plaintext
      Src: /src/openvpn/src/openvpn/ssl.c:2976,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2979,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:2996,1
    - Dst: check_outgoing_ciphertext
      Src: /src/openvpn/src/openvpn/ssl.c:3001,1
    - Dst: session_move_pre_start
      Src: /src/openvpn/src/openvpn/ssl.c:2841,1
    - Dst: reliable_send
      Src: /src/openvpn/src/openvpn/ssl.c:2881,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:2882,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2952,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2968,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2986,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3007,1
    - Dst: reliable_can_send
      Src: /src/openvpn/src/openvpn/ssl.c:2877,1
    - Dst: reliable_get_entry_sequenced
      Src: /src/openvpn/src/openvpn/ssl.c:2910,1
    - Dst: key_method_2_write
      Src: /src/openvpn/src/openvpn/ssl.c:2946,1
    - Dst: parse_early_negotiation_tlvs
      Src: /src/openvpn/src/openvpn/ssl.c:2917,1
    - Dst: key_method_2_read
      Src: /src/openvpn/src/openvpn/ssl.c:2962,1
    CyclomaticComplexity: 67
    EdgeCount: 67
    ICount: 110
    argCount: 6
    argNames:
    - multi
    - session
    - to_link
    - to_link_addr
    - to_link_socket_info
    - wakeup
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    - struct buffer*
    - struct link_socket_actual**
    - struct link_socket_info*
    - interval_t*
    constantsTouched: []
    func_position:
      end: 3010
      start: 2821
    functionDepth: 0
    functionLinenumber: 2821
    functionLinenumberEnd: 3010
    functionName: tls_process_state
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - read_incoming_tls_plaintext
    - parse_early_negotiation_tlvs
    - dmsg
    - msg
    - key_state_write_plaintext
    - key_method_2_write
    - is_hard_reset_method2
    - reliable_send
    - write_control_auth
    - tls_x509_clear_env
    - read_incoming_tls_ciphertext
    - key_method_2_read
    - tls_clear_error
    - reliable_get_entry_sequenced
    - reliable_empty
    - check_outgoing_ciphertext
    - session_move_active
    - key_state_ssl_shutdown
    - reliable_can_send
    - session_move_pre_start
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_process_state(struct tls_multi *multi, struct tls_session
      *session, struct buffer *to_link, struct link_socket_actual **to_link_addr,
      struct link_socket_info *to_link_socket_info, interval_t *wakeup) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:2113,1
    - Dst: options_string_compat_lzo
      Src: /src/openvpn/src/openvpn/ssl.c:2114,1
    - Dst: write_string
      Src: /src/openvpn/src/openvpn/ssl.c:2115,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2116,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - options
    argTypes:
    - struct buffer*
    - char*
    constantsTouched: []
    func_position:
      end: 2118
      start: 2110
    functionDepth: 0
    functionLinenumber: 2110
    functionLinenumberEnd: 2118
    functionName: write_compat_local_options
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - write_string
    - options_string_compat_lzo
    - gc_free
    - gc_new
    linkageType: ''
    returnType: bool
    signature: 'static bool write_compat_local_options(struct buffer *buf, const char
      *options) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: management_query_cert
      Src: /src/openvpn/src/openvpn/ssl.c:596,1
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/src/openvpn/ssl.c:598,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:599,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - MF_EXTERNAL_CERT
    argTypes:
    - options
    constantsTouched: []
    func_position:
      end: 600
      start: 594
    functionDepth: 0
    functionLinenumber: 594
    functionLinenumberEnd: 600
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - management_query_cert
    - tls_ctx_load_cert_file
    - free
    linkageType: ''
    returnType: else
    signature: 'else if (options->management_flags & MF_EXTERNAL_CERT) '
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_ARRAY_CLEAR_GC
      Src: /src/openvpn/src/openvpn/ssl.c:2290,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl.c:2293,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:2342,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/ssl.c:2359,1
    - Dst: options_warning
      Src: /src/openvpn/src/openvpn/ssl.c:2415,1
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/ssl.c:2431,1
    - Dst: tls_session_user_pass_enabled
      Src: /src/openvpn/src/openvpn/ssl.c:2366,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2295,1
    - Dst: key_source2_read
      Src: /src/openvpn/src/openvpn/ssl.c:2311,1
    - Dst: strstr
      Src: /src/openvpn/src/openvpn/ssl.c:2345,1
    - Dst: read_string
      Src: /src/openvpn/src/openvpn/ssl.c:2331,1
    - Dst: read_string
      Src: /src/openvpn/src/openvpn/ssl.c:2332,1
    - Dst: options_string_extract_option
      Src: /src/openvpn/src/openvpn/ssl.c:2344,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl.c:2349,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2357,1
    - Dst: abs
      Src: /src/openvpn/src/openvpn/ssl.c:2358,1
    - Dst: abs
      Src: /src/openvpn/src/openvpn/ssl.c:2358,1
    - Dst: plugin_call
      Src: /src/openvpn/src/openvpn/ssl.c:2435,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2450,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:2455,1
    - Dst: options_string_compat_lzo
      Src: /src/openvpn/src/openvpn/ssl.c:2411,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2419,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/ssl.c:2301,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2304,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2313,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2320,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:2335,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:2351,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:2371,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2374,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2386,1
    - Dst: verify_final_auth_checks
      Src: /src/openvpn/src/openvpn/ssl.c:2399,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/ssl.c:2440,1
    - Dst: p2p_mode_ncp
      Src: /src/openvpn/src/openvpn/ssl.c:2447,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/ssl.c:2460,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2409,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:2285,1
    - Dst: read_string
      Src: /src/openvpn/src/openvpn/ssl.c:2318,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/ssl.c:2330,1
    - Dst: read_string_alloc
      Src: /src/openvpn/src/openvpn/ssl.c:2336,1
    - Dst: output_peer_info_env
      Src: /src/openvpn/src/openvpn/ssl.c:2339,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl.c:2352,1
    - Dst: verify_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:2379,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:2394,1
    - Dst: options_cmp_equal
      Src: /src/openvpn/src/openvpn/ssl.c:2403,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/ssl.c:2424,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2461,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:2458,1
    - Dst: export_user_keying_material
      Src: /src/openvpn/src/openvpn/ssl.c:2433,1
    CyclomaticComplexity: 46
    EdgeCount: 46
    ICount: 110
    argCount: 3
    argNames:
    - buf
    - multi
    - session
    argTypes:
    - struct buffer*
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 2463
      start: 2280
    functionDepth: 0
    functionLinenumber: 2280
    functionLinenumberEnd: 2463
    functionName: key_method_2_read
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_session_user_pass_enabled
    - buf_clear
    - msg
    - plugin_call
    - verify_user_pass
    - abs
    - read_string
    - free
    - ALLOC_ARRAY_CLEAR_GC
    - buf_read_u8
    - read_string_alloc
    - strstr
    - options_cmp_equal
    - verify_final_auth_checks
    - gc_new
    - secure_memzero
    - ALLOC_OBJ_CLEAR_GC
    - auth_set_client_reason
    - options_string_compat_lzo
    - setenv_del
    - gc_free
    - plugin_defined
    - string_alloc
    - strcmp
    - CLEAR
    - options_string_extract_option
    - p2p_mode_ncp
    - output_peer_info_env
    - key_source2_read
    - export_user_keying_material
    - options_warning
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'static bool key_method_2_read(struct buffer *buf, struct tls_multi
      *multi, struct tls_session *session) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:411,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 413
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 413
    functionName: ssl_purge_auth_challenge
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void ssl_purge_auth_challenge(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: plugin_defined
      Src: /src/openvpn/src/openvpn/ssl.c:962,1
    - Dst: management_enable_def_auth
      Src: /src/openvpn/src/openvpn/ssl.c:964,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - session
    argTypes:
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 967
      start: 958
    functionDepth: 0
    functionLinenumber: 958
    functionLinenumberEnd: 967
    functionName: tls_session_user_pass_enabled
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - management_enable_def_auth
    - plugin_defined
    linkageType: ''
    returnType: bool
    signature: 'static inline bool tls_session_user_pass_enabled(struct tls_session
      *session) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:2695,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2702,1
    - Dst: key_state_read_plaintext
      Src: /src/openvpn/src/openvpn/ssl.c:2697,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/ssl.c:2699,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/ssl.c:2695,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2708,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 13
    argCount: 4
    argNames:
    - ks
    - buf
    - wakeup
    - continue_tls_process
    argTypes:
    - struct key_state*
    - struct buffer*
    - interval_t*
    - bool*
    constantsTouched: []
    func_position:
      end: 2714
      start: 2691
    functionDepth: 0
    functionLinenumber: 2691
    functionLinenumberEnd: 2714
    functionName: read_incoming_tls_plaintext
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_read_plaintext
    - buf_init
    - dmsg
    - msg
    - update_time
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static bool read_incoming_tls_plaintext(struct key_state *ks, struct
      buffer *buf, interval_t *wakeup, bool *continue_tls_process) '
  - BBCount: 32
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl.c:3702,1
    - Dst: session_id_equal
      Src: /src/openvpn/src/openvpn/ssl.c:3784,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3942,1
    - Dst: session_id_read
      Src: /src/openvpn/src/openvpn/ssl.c:3758,1
    - Dst: read_control_auth
      Src: /src/openvpn/src/openvpn/ssl.c:3897,1
    - Dst: key_state_soft_reset
      Src: /src/openvpn/src/openvpn/ssl.c:3903,1
    - Dst: reliable_schedule_now
      Src: /src/openvpn/src/openvpn/ssl.c:3987,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:4010,1
    - Dst: reliable_ack_read_packet_id
      Src: /src/openvpn/src/openvpn/ssl.c:4022,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3779,1
    - Dst: is_hard_reset_method2
      Src: /src/openvpn/src/openvpn/ssl.c:3806,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3823,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/ssl.c:3836,1
    - Dst: link_socket_actual_match
      Src: /src/openvpn/src/openvpn/ssl.c:3972,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3729,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3789,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3885,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3957,1
    - Dst: tls_session_get_tls_wrap
      Src: /src/openvpn/src/openvpn/ssl.c:3827,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:4052,1
    - Dst: state_name
      Src: /src/openvpn/src/openvpn/ssl.c:3777,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3781,1
    - Dst: tls_session_get_tls_wrap
      Src: /src/openvpn/src/openvpn/ssl.c:3928,1
    - Dst: reliable_wont_break_sequentiality
      Src: /src/openvpn/src/openvpn/ssl.c:4025,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3872,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3994,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3741,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl.c:3757,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3791,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3886,1
    - Dst: reliable_not_replay
      Src: /src/openvpn/src/openvpn/ssl.c:4027,1
    - Dst: link_socket_actual_match
      Src: /src/openvpn/src/openvpn/ssl.c:3883,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3794,1
    - Dst: reliable_mark_active_incoming
      Src: /src/openvpn/src/openvpn/ssl.c:4038,1
    - Dst: tls_session_get_tls_wrap
      Src: /src/openvpn/src/openvpn/ssl.c:3897,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3974,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3774,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3852,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3854,1
    - Dst: packet_opcode_name
      Src: /src/openvpn/src/openvpn/ssl.c:3876,1
    - Dst: reliable_send_purge
      Src: /src/openvpn/src/openvpn/ssl.c:4014,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/ssl.c:3958,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/ssl.c:4032,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3751,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3760,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3905,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:4034,1
    - Dst: print_key_id
      Src: /src/openvpn/src/openvpn/ssl.c:3996,1
    - Dst: handle_data_channel_packet
      Src: /src/openvpn/src/openvpn/ssl.c:3707,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3743,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3780,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3940,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3796,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:4057,1
    - Dst: reliable_ack_acknowledge_packet_id
      Src: /src/openvpn/src/openvpn/ssl.c:4042,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3725,1
    - Dst: packet_opcode_name
      Src: /src/openvpn/src/openvpn/ssl.c:3752,1
    - Dst: read_control_auth
      Src: /src/openvpn/src/openvpn/ssl.c:3827,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3874,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3958,1
    - Dst: reliable_can_get
      Src: /src/openvpn/src/openvpn/ssl.c:4017,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3976,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4031,1
    - Dst: is_hard_reset_method2
      Src: /src/openvpn/src/openvpn/ssl.c:3734,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3778,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3782,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3820,1
    - Dst: read_control_auth
      Src: /src/openvpn/src/openvpn/ssl.c:3928,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3855,1
    - Dst: reliable_get_buf
      Src: /src/openvpn/src/openvpn/ssl.c:4030,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3907,1
    - Dst: reliable_ack_read
      Src: /src/openvpn/src/openvpn/ssl.c:4008,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:3698,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3727,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3762,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3752,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/ssl.c:3758,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3956,1
    CyclomaticComplexity: 94
    EdgeCount: 94
    ICount: 184
    argCount: 6
    argNames:
    - multi
    - from
    - buf
    - opt
    - floated
    - ad_start
    argTypes:
    - struct tls_multi*
    - struct link_socket_actual*
    - struct buffer*
    - struct crypto_options**
    - bool
    - uint8_t**
    constantsTouched: []
    func_position:
      end: 4059
      start: 3682
    functionDepth: 0
    functionLinenumber: 3682
    functionLinenumberEnd: 4059
    functionName: tls_pre_decrypt
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_soft_reset
    - buf_copy
    - dmsg
    - msg
    - reliable_send_purge
    - reliable_ack_read_packet_id
    - session_id_read
    - state_name
    - tls_session_get_tls_wrap
    - reliable_mark_active_incoming
    - packet_opcode_name
    - session_id_defined
    - is_hard_reset_method2
    - management_set_state
    - BPTR
    - gc_new
    - reliable_get_buf
    - gc_free
    - print_key_id
    - handle_data_channel_packet
    - reliable_schedule_now
    - reliable_wont_break_sequentiality
    - reliable_ack_read
    - session_id_print
    - tls_clear_error
    - reliable_not_replay
    - read_control_auth
    - session_id_equal
    - link_socket_actual_match
    - print_link_socket_actual
    - reliable_ack_acknowledge_packet_id
    - reliable_can_get
    - ASSERT
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'bool tls_pre_decrypt(struct tls_multi *multi, const struct link_socket_actual
      *from, struct buffer *buf, struct crypto_options **opt, bool floated, const
      uint8_t **ad_start) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:4234,1
    - Dst: link_socket_actual_match
      Src: /src/openvpn/src/openvpn/ssl.c:4244,1
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/ssl.c:4243,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:4249,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:4250,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:4251,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:4256,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 16
    argCount: 2
    argNames:
    - multi
    - addr
    argTypes:
    - struct tls_multi*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 4257
      start: 4231
    functionDepth: 0
    functionLinenumber: 4231
    functionLinenumberEnd: 4257
    functionName: tls_update_remote_addr
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - dmsg
    - link_socket_actual_defined
    - link_socket_actual_match
    - gc_new
    - print_link_socket_actual
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void tls_update_remote_addr(struct tls_multi *multi, const struct
      link_socket_actual *addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ssl_purge_auth_challenge
      Src: /src/openvpn/src/openvpn/ssl.c:418,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/ssl.c:419,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - cr_str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 420
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 420
    functionName: ssl_put_auth_challenge
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - ssl_purge_auth_challenge
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void ssl_put_auth_challenge(const char *cr_str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct tls_options*
    constantsTouched: []
    func_position:
      end: 2476
      start: 2465
    functionDepth: 0
    functionLinenumber: 2465
    functionLinenumberEnd: 2476
    functionName: auth_deferred_expire_window
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int auth_deferred_expire_window(const struct tls_options *o) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: reliable_mark_active_outgoing
      Src: /src/openvpn/src/openvpn/ssl.c:2791,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/ssl.c:2740,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2767,1
    - Dst: reliable_get_buf_output_sequenced
      Src: /src/openvpn/src/openvpn/ssl.c:2786,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:2788,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2795,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/ssl.c:2729,1
    - Dst: calc_control_channel_frame_overhead
      Src: /src/openvpn/src/openvpn/ssl.c:2732,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2748,1
    - Dst: key_state_read_ciphertext
      Src: /src/openvpn/src/openvpn/ssl.c:2761,1
    - Dst: control_packet_needs_wkc
      Src: /src/openvpn/src/openvpn/ssl.c:2778,1
    - Dst: reliable_get_num_output_sequenced_available
      Src: /src/openvpn/src/openvpn/ssl.c:2721,1
    - Dst: control_packet_needs_wkc
      Src: /src/openvpn/src/openvpn/ssl.c:2738,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:2758,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl.c:2759,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2765,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/ssl.c:2781,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/ssl.c:2784,1
    - Dst: buf_copy_n
      Src: /src/openvpn/src/openvpn/ssl.c:2789,1
    - Dst: max_int
      Src: /src/openvpn/src/openvpn/ssl.c:2781,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2798,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 44
    argCount: 2
    argNames:
    - session
    - continue_tls_process
    argTypes:
    - struct tls_session*
    - bool*
    constantsTouched: []
    func_position:
      end: 2800
      start: 2716
    functionDepth: 0
    functionLinenumber: 2716
    functionLinenumberEnd: 2800
    functionName: write_outgoing_tls_ciphertext
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buf_copy_n
    - reliable_get_num_output_sequenced_available
    - dmsg
    - msg
    - max_int
    - buf_len
    - gc_new
    - reliable_get_buf_output_sequenced
    - control_packet_needs_wkc
    - min_int
    - calc_control_channel_frame_overhead
    - gc_free
    - ASSERT
    - key_state_read_ciphertext
    - reliable_mark_active_outgoing
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'static bool write_outgoing_tls_ciphertext(struct tls_session *session,
      bool *continue_tls_process) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl.c:4068,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4071,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 15
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 4085
      start: 4062
    functionDepth: 0
    functionLinenumber: 4062
    functionLinenumberEnd: 4085
    functionName: tls_select_encryption_key
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - get_key_scan
    - ASSERT
    linkageType: ''
    returnType: struct key_state*
    signature: 'struct key_state *tls_select_encryption_key(struct tls_multi *multi) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl.c:4264,1
    - Dst: show_available_tls_ciphers_list
      Src: /src/openvpn/src/openvpn/ssl.c:4269,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl.c:4268,1
    - Dst: tls_version_max
      Src: /src/openvpn/src/openvpn/ssl.c:4266,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl.c:4272,1
    - Dst: show_available_tls_ciphers_list
      Src: /src/openvpn/src/openvpn/ssl.c:4273,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/ssl.c:4275,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 3
    argNames:
    - cipher_list
    - cipher_list_tls13
    - tls_cert_profile
    argTypes:
    - char*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 4280
      start: 4259
    functionDepth: 0
    functionLinenumber: 4259
    functionLinenumberEnd: 4280
    functionName: show_available_tls_ciphers
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_version_max
    - show_available_tls_ciphers_list
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show_available_tls_ciphers(const char *cipher_list, const char
      *cipher_list_tls13, const char *tls_cert_profile) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1152,1
    - Dst: compute_earliest_wakeup
      Src: /src/openvpn/src/openvpn/ssl.c:1155,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - session
    - wakeup
    argTypes:
    - struct tls_session*
    - interval_t*
    constantsTouched: []
    func_position:
      end: 1171
      start: 1146
    functionDepth: 0
    functionLinenumber: 1146
    functionLinenumberEnd: 1171
    functionName: lame_duck_must_die
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - compute_earliest_wakeup
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool lame_duck_must_die(const struct tls_session *session,
      interval_t *wakeup) '
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4318,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:4379,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4385,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl.c:4385,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:4408,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4419,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl.c:4419,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4423,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl.c:4427,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4300,1
    - Dst: packet_opcode_name
      Src: /src/openvpn/src/openvpn/ssl.c:4318,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:4312,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:4351,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/ssl.c:4374,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4357,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl.c:4357,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4396,1
    - Dst: reliable_ack_print
      Src: /src/openvpn/src/openvpn/ssl.c:4396,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl.c:4419,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl.c:4289,1
    - Dst: session_id_read
      Src: /src/openvpn/src/openvpn/ssl.c:4331,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4337,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:4337,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4378,1
    - Dst: packet_id_net_print
      Src: /src/openvpn/src/openvpn/ssl.c:4378,1
    - Dst: packet_id_net_print
      Src: /src/openvpn/src/openvpn/ssl.c:4364,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4364,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:4413,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4349,1
    - Dst: packet_id_read
      Src: /src/openvpn/src/openvpn/ssl.c:4360,1
    - Dst: ntohpid
      Src: /src/openvpn/src/openvpn/ssl.c:4412,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl.c:4419,1
    CyclomaticComplexity: 41
    EdgeCount: 41
    ICount: 82
    argCount: 3
    argNames:
    - buffer
    - flags
    - gc
    argTypes:
    - struct buffer*
    - unsigned int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 4428
      start: 4286
    functionDepth: 0
    functionLinenumber: 4286
    functionLinenumberEnd: 4428
    functionName: protocol_dump
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - reliable_ack_print
    - format_hex
    - BPTR
    - buf_printf
    - BSTR
    - buf_read
    - session_id_read
    - BLEN
    - packet_id_read
    - session_id_print
    - ASSERT
    - packet_opcode_name
    - packet_id_net_print
    - ntohpid
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'const char *protocol_dump(struct buffer *buffer, unsigned int flags,
      struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:1178,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 1
    argNames:
    - tls_options
    argTypes:
    - struct tls_options*
    constantsTouched: []
    func_position:
      end: 1186
      start: 1173
    functionDepth: 0
    functionLinenumber: 1173
    functionLinenumberEnd: 1186
    functionName: tls_multi_init
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct tls_multi*
    signature: 'struct tls_multi *tls_multi_init(struct tls_options *tls_options) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2541,1
    - Dst: link_socket_set_outgoing_addr
      Src: /src/openvpn/src/openvpn/ssl.c:2554,1
    - Dst: print_details
      Src: /src/openvpn/src/openvpn/ssl.c:2546,1
    - Dst: check_debug_level
      Src: /src/openvpn/src/openvpn/ssl.c:2544,1
    - Dst: flush_payload_buffer
      Src: /src/openvpn/src/openvpn/ssl.c:2573,1
    - Dst: show_tls_performance_stats
      Src: /src/openvpn/src/openvpn/ssl.c:2576,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 18
    argCount: 4
    argNames:
    - multi
    - session
    - to_link_socket_info
    - ks
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    - struct link_socket_info*
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 2578
      start: 2536
    functionDepth: 0
    functionLinenumber: 2536
    functionLinenumberEnd: 2578
    functionName: session_move_active
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - check_debug_level
    - dmsg
    - print_details
    - link_socket_set_outgoing_addr
    - show_tls_performance_stats
    - flush_payload_buffer
    linkageType: ''
    returnType: void
    signature: 'static void session_move_active(struct tls_multi *multi, struct tls_session
      *session, struct link_socket_info *to_link_socket_info, struct key_state *ks) '
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 2
    argCount: 1
    argNames:
    - state
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 729
      start: 688
    functionDepth: 0
    functionLinenumber: 688
    functionLinenumberEnd: 729
    functionName: state_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *state_name(int state) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:1296,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:1302,1
    - Dst: VALGRIND_MAKE_READABLE
      Src: /src/openvpn/src/openvpn/ssl.c:1300,1
    - Dst: VALGRIND_MAKE_READABLE
      Src: /src/openvpn/src/openvpn/ssl.c:1299,1
    - Dst: VALGRIND_MAKE_READABLE
      Src: /src/openvpn/src/openvpn/ssl.c:1298,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl.c:1305,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:1306,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl.c:1309,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:1310,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/ssl.c:1313,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:1315,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 2
    argNames:
    - k
    - prefix
    argTypes:
    - struct key_source*
    - char*
    constantsTouched: []
    func_position:
      end: 1316
      start: 1292
    functionDepth: 0
    functionLinenumber: 1292
    functionLinenumberEnd: 1316
    functionName: key_source_print
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - format_hex
    - dmsg
    - gc_new
    - gc_free
    - VALGRIND_MAKE_READABLE
    linkageType: ''
    returnType: void
    signature: 'static void key_source_print(const struct key_source *k, const char
      *prefix) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/ssl.c:1896,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:1904,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl.c:1899,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - buf
    - str
    - capacity
    argTypes:
    - struct buffer*
    - char*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 1910
      start: 1893
    functionDepth: 0
    functionLinenumber: 1893
    functionLinenumberEnd: 1910
    functionName: read_string
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buf_read
    - buf_read_u16
    - buf_advance
    linkageType: ''
    returnType: int
    signature: 'static int read_string(struct buffer *buf, char *str, const unsigned
      int capacity) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 89
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 89
    functionName: show_tls_performance_stats
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void show_tls_performance_stats(void) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/ssl.c:1915,1
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/ssl.c:1922,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1926,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:1924,1
    - Dst: check_malloc_return
      Src: /src/openvpn/src/openvpn/ssl.c:1923,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1931
      start: 1912
    functionDepth: 0
    functionLinenumber: 1912
    functionLinenumberEnd: 1931
    functionName: read_string_alloc
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buf_read
    - buf_read_u16
    - malloc
    - free
    - check_malloc_return
    linkageType: ''
    returnType: char*
    signature: 'static char *read_string_alloc(struct buffer *buf) '
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_server_new
      Src: /src/openvpn/src/openvpn/ssl.c:535,1
    - Dst: tls_ctx_load_dh_params
      Src: /src/openvpn/src/openvpn/ssl.c:539,1
    - Dst: tls_ctx_restrict_ciphers
      Src: /src/openvpn/src/openvpn/ssl.c:554,1
    - Dst: tls_ctx_load_pkcs12
      Src: /src/openvpn/src/openvpn/ssl.c:570,1
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/src/openvpn/ssl.c:598,1
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/src/openvpn/ssl.c:604,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:620,1
    - Dst: tls_ctx_check_cert_time
      Src: /src/openvpn/src/openvpn/ssl.c:640,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:658,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:676,1
    - Dst: tls_ctx_load_ecdh_params
      Src: /src/openvpn/src/openvpn/ssl.c:668,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:526,1
    - Dst: tls_ctx_client_new
      Src: /src/openvpn/src/openvpn/ssl.c:545,1
    - Dst: tls_ctx_restrict_ciphers_tls13
      Src: /src/openvpn/src/openvpn/ssl.c:555,1
    - Dst: tls_ctx_set_tls_groups
      Src: /src/openvpn/src/openvpn/ssl.c:560,1
    - Dst: tls_ctx_load_priv_file
      Src: /src/openvpn/src/openvpn/ssl.c:609,1
    - Dst: tls_ctx_load_ca
      Src: /src/openvpn/src/openvpn/ssl.c:628,1
    - Dst: tls_ctx_load_extra_certs
      Src: /src/openvpn/src/openvpn/ssl.c:636,1
    - Dst: tls_ctx_reload_crl
      Src: /src/openvpn/src/openvpn/ssl.c:654,1
    - Dst: prepend_dir
      Src: /src/openvpn/src/openvpn/ssl.c:659,1
    - Dst: tls_ctx_reload_crl
      Src: /src/openvpn/src/openvpn/ssl.c:660,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:680,1
    - Dst: key_is_external
      Src: /src/openvpn/src/openvpn/ssl.c:528,1
    - Dst: load_xkey_provider
      Src: /src/openvpn/src/openvpn/ssl.c:530,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:599,1
    - Dst: tls_ctx_use_pkcs11
      Src: /src/openvpn/src/openvpn/ssl.c:579,1
    - Dst: tls_ctx_set_options
      Src: /src/openvpn/src/openvpn/ssl.c:563,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl.c:660,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:661,1
    - Dst: tls_ctx_personalise_random
      Src: /src/openvpn/src/openvpn/ssl.c:673,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:524,1
    - Dst: tls_ctx_set_cert_profile
      Src: /src/openvpn/src/openvpn/ssl.c:549,1
    - Dst: management_query_cert
      Src: /src/openvpn/src/openvpn/ssl.c:596,1
    - Dst: tls_ctx_load_cryptoapi
      Src: /src/openvpn/src/openvpn/ssl.c:590,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:581,1
    - Dst: tls_ctx_use_management_external_key
      Src: /src/openvpn/src/openvpn/ssl.c:618,1
    - Dst: tls_ctx_free
      Src: /src/openvpn/src/openvpn/ssl.c:681,1
    CyclomaticComplexity: 38
    EdgeCount: 38
    ICount: 74
    argCount: 3
    argNames:
    - options
    - new_ctx
    - in_chroot
    argTypes:
    - struct options*
    - struct tls_root_ctx*
    - bool
    constantsTouched: []
    func_position:
      end: 683
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 683
    functionName: init_ssl
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_ctx_load_cryptoapi
    - msg
    - tls_ctx_load_cert_file
    - tls_ctx_personalise_random
    - tls_ctx_load_dh_params
    - tls_ctx_load_priv_file
    - free
    - tls_ctx_load_ecdh_params
    - tls_ctx_use_management_external_key
    - tls_ctx_check_cert_time
    - tls_ctx_restrict_ciphers
    - tls_ctx_free
    - tls_ctx_reload_crl
    - gc_new
    - load_xkey_provider
    - gc_free
    - management_query_cert
    - prepend_dir
    - tls_ctx_use_pkcs11
    - tls_ctx_set_tls_groups
    - tls_ctx_load_extra_certs
    - tls_ctx_load_ca
    - tls_ctx_client_new
    - tls_clear_error
    - tls_ctx_restrict_ciphers_tls13
    - tls_ctx_set_options
    - BSTR
    - tls_ctx_load_pkcs12
    - ASSERT
    - key_is_external
    - tls_ctx_set_cert_profile
    - tls_ctx_server_new
    linkageType: ''
    returnType: void
    signature: 'void init_ssl(const struct options *options, struct tls_root_ctx *new_ctx,
      bool in_chroot) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1260,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1265,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1266,1
    - Dst: auth_set_client_reason
      Src: /src/openvpn/src/openvpn/ssl.c:1262,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1264,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1267,1
    - Dst: cert_hash_free
      Src: /src/openvpn/src/openvpn/ssl.c:1269,1
    - Dst: wipe_auth_token
      Src: /src/openvpn/src/openvpn/ssl.c:1271,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1273,1
    - Dst: tls_session_free
      Src: /src/openvpn/src/openvpn/ssl.c:1277,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:1285,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1282,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - multi
    - clear
    argTypes:
    - struct tls_multi*
    - bool
    constantsTouched: []
    func_position:
      end: 1286
      start: 1257
    functionDepth: 0
    functionLinenumber: 1257
    functionLinenumberEnd: 1286
    functionName: tls_multi_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_session_free
    - cert_hash_free
    - secure_memzero
    - wipe_auth_token
    - auth_set_client_reason
    - ASSERT
    - free
    linkageType: ''
    returnType: void
    signature: 'void tls_multi_free(struct tls_multi *multi, bool clear) '
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: perf_push
      Src: /src/openvpn/src/openvpn/ssl.c:3320,1
    - Dst: state_name
      Src: /src/openvpn/src/openvpn/ssl.c:3348,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/ssl.c:3357,1
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/ssl.c:3387,1
    - Dst: key_state_ssl_shutdown
      Src: /src/openvpn/src/openvpn/ssl.c:3431,1
    - Dst: lame_duck_must_die
      Src: /src/openvpn/src/openvpn/ssl.c:3452,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl.c:3490,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl.c:3507,1
    - Dst: GREMLIN_CONNECTION_FLOOD_LEVEL
      Src: /src/openvpn/src/openvpn/ssl.c:3502,1
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/ssl.c:3339,1
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/ssl.c:3340,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3349,1
    - Dst: tls_authentication_status
      Src: /src/openvpn/src/openvpn/ssl.c:3409,1
    - Dst: tls_authentication_status
      Src: /src/openvpn/src/openvpn/ssl.c:3470,1
    - Dst: perf_pop
      Src: /src/openvpn/src/openvpn/ssl.c:3517,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:3322,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:3350,1
    - Dst: check_session_buf_not_used
      Src: /src/openvpn/src/openvpn/ssl.c:3400,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/ssl.c:3407,1
    - Dst: reset_session
      Src: /src/openvpn/src/openvpn/ssl.c:3401,1
    - Dst: tls_session_generate_data_channel_keys
      Src: /src/openvpn/src/openvpn/ssl.c:3427,1
    - Dst: resend_auth_token_renegotiation
      Src: /src/openvpn/src/openvpn/ssl.c:3439,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3455,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:3518,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3471,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:3316,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3345,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3351,1
    - Dst: move_session
      Src: /src/openvpn/src/openvpn/ssl.c:3396,1
    - Dst: tls_process
      Src: /src/openvpn/src/openvpn/ssl.c:3359,1
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/ssl.c:3353,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3429,1
    - Dst: tls_session_free
      Src: /src/openvpn/src/openvpn/ssl.c:3454,1
    - Dst: TLS_AUTHENTICATED
      Src: /src/openvpn/src/openvpn/ssl.c:3467,1
    - Dst: move_session
      Src: /src/openvpn/src/openvpn/ssl.c:3469,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 109
    argCount: 5
    argNames:
    - multi
    - to_link
    - to_link_addr
    - to_link_socket_info
    - wakeup
    argTypes:
    - struct tls_multi*
    - struct buffer*
    - struct link_socket_actual**
    - struct link_socket_info*
    - interval_t*
    constantsTouched: []
    func_position:
      end: 3521
      start: 3309
    functionDepth: 0
    functionLinenumber: 3309
    functionLinenumberEnd: 3521
    functionName: tls_multi_process
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - move_session
    - dmsg
    - lame_duck_must_die
    - msg
    - tls_session_free
    - link_socket_actual_defined
    - state_name
    - resend_auth_token_renegotiation
    - get_key_scan
    - tls_authentication_status
    - perf_pop
    - get_primary_key
    - gc_new
    - gc_free
    - tls_process
    - TLS_AUTHENTICATED
    - reset_session
    - tls_session_generate_data_channel_keys
    - update_time
    - session_id_print
    - tls_clear_error
    - GREMLIN_CONNECTION_FLOOD_LEVEL
    - perf_push
    - key_state_ssl_shutdown
    - print_link_socket_actual
    - check_session_buf_not_used
    linkageType: ''
    returnType: int
    signature: 'int tls_multi_process(struct tls_multi *multi, struct buffer *to_link,
      struct link_socket_actual **to_link_addr, struct link_socket_info *to_link_socket_info,
      interval_t *wakeup) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl.c:3589,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:3651,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:3652,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:3587,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3614,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl.c:3619,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl.c:3621,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3635,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl.c:3624,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3630,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3642,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3640,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3631,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl.c:3595,1
    - Dst: link_socket_actual_match
      Src: /src/openvpn/src/openvpn/ssl.c:3612,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3621,1
    - Dst: print_key_id_not_found_reason
      Src: /src/openvpn/src/openvpn/ssl.c:3648,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:3643,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl.c:3635,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 46
    argCount: 6
    argNames:
    - multi
    - from
    - buf
    - opt
    - floated
    - ad_start
    argTypes:
    - struct tls_multi*
    - struct link_socket_actual*
    - struct buffer*
    - struct crypto_options**
    - bool
    - uint8_t**
    constantsTouched: []
    func_position:
      end: 3655
      start: 3579
    functionDepth: 0
    functionLinenumber: 3579
    functionLinenumberEnd: 3655
    functionName: handle_data_channel_packet
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - BPTR
    - dmsg
    - get_key_scan
    - msg
    - link_socket_actual_match
    - gc_new
    - print_key_id_not_found_reason
    - print_link_socket_actual
    - gc_free
    - ASSERT
    - tls_clear_error
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static inline void handle_data_channel_packet(struct tls_multi *multi,
      const struct link_socket_actual *from, struct buffer *buf, struct crypto_options
      **opt, bool floated, const uint8_t **ad_start) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/ssl.c:1735,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1737,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl.c:1739,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - buf
    - out
    - outlen
    argTypes:
    - struct buffer*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1744
      start: 1730
    functionDepth: 0
    functionLinenumber: 1730
    functionLinenumberEnd: 1744
    functionName: random_bytes_to_buf
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - rand_bytes
    - buf_write
    linkageType: ''
    returnType: bool
    signature: 'static bool random_bytes_to_buf(struct buffer *buf, uint8_t *out,
      int outlen) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: buf_write_u32
      Src: /src/openvpn/src/openvpn/ssl.c:2133,1
    - Dst: auth_user_pass_setup
      Src: /src/openvpn/src/openvpn/ssl.c:2177,1
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:2190,1
    - Dst: protect_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:2205,1
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:2203,1
    - Dst: push_peer_info
      Src: /src/openvpn/src/openvpn/ssl.c:2223,1
    - Dst: p2p_mode_ncp
      Src: /src/openvpn/src/openvpn/ssl.c:2233,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:2130,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/ssl.c:2139,1
    - Dst: write_string
      Src: /src/openvpn/src/openvpn/ssl.c:2163,1
    - Dst: write_string
      Src: /src/openvpn/src/openvpn/ssl.c:2192,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:2209,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:2240,1
    - Dst: key_source2_randomize_write
      Src: /src/openvpn/src/openvpn/ssl.c:2145,1
    - Dst: write_compat_local_options
      Src: /src/openvpn/src/openvpn/ssl.c:2156,1
    - Dst: auth_user_pass_setup
      Src: /src/openvpn/src/openvpn/ssl.c:2173,1
    - Dst: write_string
      Src: /src/openvpn/src/openvpn/ssl.c:2196,1
    - Dst: write_empty_string
      Src: /src/openvpn/src/openvpn/ssl.c:2213,1
    - Dst: protect_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:2207,1
    - Dst: write_empty_string
      Src: /src/openvpn/src/openvpn/ssl.c:2217,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2239,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/ssl.c:2130,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/ssl.c:2204,1
    CyclomaticComplexity: 44
    EdgeCount: 44
    ICount: 65
    argCount: 3
    argNames:
    - buf
    - multi
    - session
    argTypes:
    - struct buffer*
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 2242
      start: 2125
    functionDepth: 0
    functionLinenumber: 2125
    functionLinenumberEnd: 2242
    functionName: key_method_2_write
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - p2p_mode_ncp
    - write_string
    - key_source2_randomize_write
    - buf_init
    - write_empty_string
    - msg
    - buf_write_u32
    - purge_user_pass
    - secure_memzero
    - strncpynt
    - push_peer_info
    - ASSERT
    - unprotect_user_pass
    - buf_write_u8
    - write_compat_local_options
    - protect_user_pass
    - auth_user_pass_setup
    linkageType: ''
    returnType: bool
    signature: 'static bool key_method_2_write(struct buffer *buf, struct tls_multi
      *multi, struct tls_session *session) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3259,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3278,1
    - Dst: state_name
      Src: /src/openvpn/src/openvpn/ssl.c:3280,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3287,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 21
    argCount: 2
    argNames:
    - to_link
    - session
    argTypes:
    - struct buffer*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 3301
      start: 3247
    functionDepth: 0
    functionLinenumber: 3247
    functionLinenumberEnd: 3301
    functionName: check_session_buf_not_used
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - state_name
    linkageType: ''
    returnType: void
    signature: 'static void check_session_buf_not_used(struct buffer *to_link, struct
      tls_session *session) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:3531,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3547,1
    - Dst: print_link_socket_actual
      Src: /src/openvpn/src/openvpn/ssl.c:3532,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:3550,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl.c:3537,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3555,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:3559,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3564,1
    - Dst: print_key_id
      Src: /src/openvpn/src/openvpn/ssl.c:3568,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:3569,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 24
    argCount: 3
    argNames:
    - multi
    - from
    - key_id
    argTypes:
    - struct tls_multi*
    - struct link_socket_actual*
    - int
    constantsTouched: []
    func_position:
      end: 3570
      start: 3527
    functionDepth: 0
    functionLinenumber: 3527
    functionLinenumberEnd: 3570
    functionName: print_key_id_not_found_reason
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - get_key_scan
    - msg
    - gc_new
    - print_link_socket_actual
    - gc_free
    - print_key_id
    linkageType: ''
    returnType: void
    signature: 'static void print_key_id_not_found_reason(struct tls_multi *multi,
      const struct link_socket_actual *from, int key_id) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:1757,1
    - Dst: random_bytes_to_buf
      Src: /src/openvpn/src/openvpn/ssl.c:1761,1
    - Dst: random_bytes_to_buf
      Src: /src/openvpn/src/openvpn/ssl.c:1767,1
    - Dst: random_bytes_to_buf
      Src: /src/openvpn/src/openvpn/ssl.c:1771,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 3
    argNames:
    - k2
    - buf
    - server
    argTypes:
    - struct key_source2*
    - struct buffer*
    - bool
    constantsTouched: []
    func_position:
      end: 1777
      start: 1746
    functionDepth: 0
    functionLinenumber: 1746
    functionLinenumberEnd: 1777
    functionName: key_source2_randomize_write
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - CLEAR
    - random_bytes_to_buf
    linkageType: ''
    returnType: bool
    signature: 'static bool key_source2_randomize_write(struct key_source2 *k2, struct
      buffer *buf, bool server) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:2250,1
    - Dst: setenv_str
      Src: /src/openvpn/src/openvpn/ssl.c:2261,1
    - Dst: key_state_export_keying_material
      Src: /src/openvpn/src/openvpn/ssl.c:2253,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl.c:2260,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/ssl.c:2252,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2263,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:2265,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2269,1
    - Dst: setenv_del
      Src: /src/openvpn/src/openvpn/ssl.c:2270,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2272,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - session
    argTypes:
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 2274
      start: 2244
    functionDepth: 0
    functionLinenumber: 2244
    functionLinenumberEnd: 2274
    functionName: export_user_keying_material
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - dmsg
    - msg
    - gc_malloc
    - gc_new
    - format_hex_ex
    - secure_memzero
    - setenv_str
    - gc_free
    - setenv_del
    - key_state_export_keying_material
    linkageType: ''
    returnType: void
    signature: 'static void export_user_keying_material(struct tls_session *session) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 350
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 350
    functionName: ssl_set_auth_nocache
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void ssl_set_auth_nocache(void) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: platform_stat
      Src: /src/openvpn/src/openvpn/ssl.c:487,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:492,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:496,1
    - Dst: backend_tls_ctx_reload_crl
      Src: /src/openvpn/src/openvpn/ssl.c:514,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 18
    argCount: 3
    argNames:
    - ssl_ctx
    - crl_file
    - crl_file_inline
    argTypes:
    - struct tls_root_ctx*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 515
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 515
    functionName: tls_ctx_reload_crl
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - backend_tls_ctx_reload_crl
    - platform_stat
    linkageType: ''
    returnType: void
    signature: 'static void tls_ctx_reload_crl(struct tls_root_ctx *ssl_ctx, const
      char *crl_file, bool crl_file_inline) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 2
    argNames:
    - earliest
    - seconds_from_now
    argTypes:
    - interval_t*
    - interval_t
    constantsTouched: []
    func_position:
      end: 1140
      start: 1129
    functionDepth: 0
    functionLinenumber: 1129
    functionLinenumberEnd: 1140
    functionName: compute_earliest_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void compute_earliest_wakeup(interval_t *earliest, interval_t
      seconds_from_now) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/ssl.c:1857,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1862
      start: 1854
    functionDepth: 0
    functionLinenumber: 1854
    functionLinenumberEnd: 1862
    functionName: write_empty_string
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buf_write_u16
    linkageType: ''
    returnType: bool
    signature: 'static bool write_empty_string(struct buffer *buf) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:306,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/src/openvpn/ssl.c:311,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:337,1
    - Dst: get_user_pass_cr
      Src: /src/openvpn/src/openvpn/ssl.c:328,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 22
    argCount: 3
    argNames:
    - auth_file
    - is_inline
    - sci
    argTypes:
    - char*
    - bool
    - struct static_challenge_info*
    constantsTouched: []
    func_position:
      end: 340
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 340
    functionName: auth_user_pass_setup
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - get_user_pass
    - get_user_pass_cr
    - unprotect_user_pass
    linkageType: ''
    returnType: void
    signature: 'void auth_user_pass_setup(const char *auth_file, bool is_inline, const
      struct static_challenge_info *sci) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: tls_version_max
      Src: /src/openvpn/src/openvpn/ssl.c:432,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl.c:441,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl.c:433,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl.c:445,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl.c:437,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/ssl.c:449,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 27
    argCount: 2
    argNames:
    - vstr
    - extra
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 457
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 457
    functionName: tls_version_parse
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - strcmp
    - tls_version_max
    linkageType: ''
    returnType: int
    signature: 'int tls_version_parse(const char *vstr, const char *extra) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_session_free
      Src: /src/openvpn/src/openvpn/ssl.c:1121,1
    - Dst: tls_session_init
      Src: /src/openvpn/src/openvpn/ssl.c:1122,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - multi
    - session
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1123
      start: 1118
    functionDepth: 0
    functionLinenumber: 1118
    functionLinenumberEnd: 1123
    functionName: reset_session
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_session_free
    - tls_session_init
    linkageType: ''
    returnType: void
    signature: 'static void reset_session(struct tls_multi *multi, struct tls_session
      *session) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl.c:1867,1
    - Dst: buf_write_u16
      Src: /src/openvpn/src/openvpn/ssl.c:1872,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl.c:1876,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 15
    argCount: 3
    argNames:
    - buf
    - str
    - maxlen
    argTypes:
    - struct buffer*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 1881
      start: 1864
    functionDepth: 0
    functionLinenumber: 1864
    functionLinenumberEnd: 1881
    functionName: write_string
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - strlen
    - buf_write
    - buf_write_u16
    linkageType: ''
    returnType: bool
    signature: 'static bool write_string(struct buffer *buf, const char *str, const
      int maxlen) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pem_password_setup
      Src: /src/openvpn/src/openvpn/ssl.c:265,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:268,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl.c:270,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:266,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/ssl.c:267,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 4
    argNames:
    - buf
    - size
    - rwflag
    - u
    argTypes:
    - char*
    - int
    - int
    - void*
    constantsTouched: []
    func_position:
      end: 273
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 273
    functionName: pem_password_callback
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - pem_password_setup
    - purge_user_pass
    - strncpynt
    - ASSERT
    - strlen
    linkageType: ''
    returnType: int
    signature: 'int pem_password_callback(char *buf, int size, int rwflag, void *u) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl.c:775,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl.c:779,1
    - Dst: state_name
      Src: /src/openvpn/src/openvpn/ssl.c:781,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:780,1
    - Dst: ks_auth_name
      Src: /src/openvpn/src/openvpn/ssl.c:781,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:783,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl.c:786,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 10
    argCount: 2
    argNames:
    - multi
    - gc
    argTypes:
    - struct tls_multi*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 787
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 787
    functionName: print_key_id
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - ks_auth_name
    - buf_printf
    - get_key_scan
    - BSTR
    - state_name
    - session_id_print
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *print_key_id(struct tls_multi *multi, struct gc_arena
      *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: key_state_export_keying_material
      Src: /src/openvpn/src/openvpn/ssl.c:1463,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl.c:1464,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - session
    - key2
    argTypes:
    - struct tls_session*
    - struct key2*
    constantsTouched: []
    func_position:
      end: 1472
      start: 1460
    functionDepth: 0
    functionLinenumber: 1460
    functionLinenumberEnd: 1472
    functionName: generate_key_expansion_tls_export
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_export_keying_material
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'static bool generate_key_expansion_tls_export(struct tls_session *session,
      struct key2 *key2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_load_cert_file
      Src: /src/openvpn/src/openvpn/ssl.c:604,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cert_file
    argTypes:
    - options
    constantsTouched: []
    func_position:
      end: 605
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 605
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_ctx_load_cert_file
    linkageType: ''
    returnType: else
    signature: 'else if (options->cert_file) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - op
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 799
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 799
    functionName: is_hard_reset_method2
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool is_hard_reset_method2(int op) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: key_source2_print
      Src: /src/openvpn/src/openvpn/ssl.c:1488,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1521,1
    - Dst: openvpn_PRF
      Src: /src/openvpn/src/openvpn/ssl.c:1491,1
    - Dst: openvpn_PRF
      Src: /src/openvpn/src/openvpn/ssl.c:1507,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 11
    argCount: 2
    argNames:
    - session
    - key2
    argTypes:
    - struct tls_session*
    - struct key2*
    constantsTouched: []
    func_position:
      end: 1526
      start: 1474
    functionDepth: 0
    functionLinenumber: 1474
    functionLinenumberEnd: 1526
    functionName: generate_key_expansion_openvpn_prf
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_source2_print
    - secure_memzero
    - openvpn_PRF
    linkageType: ''
    returnType: bool
    signature: 'static bool generate_key_expansion_openvpn_prf(const struct tls_session
      *session, struct key2 *key2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reliable_ack_outstanding
      Src: /src/openvpn/src/openvpn/ssl.c:201,1
    - Dst: tls_crypt_buf_overhead
      Src: /src/openvpn/src/openvpn/ssl.c:209,1
    - Dst: min_int
      Src: /src/openvpn/src/openvpn/ssl.c:202,1
    - Dst: hmac_ctx_size
      Src: /src/openvpn/src/openvpn/ssl.c:213,1
    - Dst: ACK_SIZE
      Src: /src/openvpn/src/openvpn/ssl.c:202,1
    - Dst: packet_id_size
      Src: /src/openvpn/src/openvpn/ssl.c:214,1
    - Dst: datagram_overhead
      Src: /src/openvpn/src/openvpn/ssl.c:220,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - session
    argTypes:
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 224
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 224
    functionName: calc_control_channel_frame_overhead
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - ACK_SIZE
    - hmac_ctx_size
    - tls_crypt_buf_overhead
    - packet_id_size
    - reliable_ack_outstanding
    - datagram_overhead
    - min_int
    linkageType: ''
    returnType: int
    signature: 'static int calc_control_channel_frame_overhead(const struct tls_session
      *session) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_init_lib
      Src: /src/openvpn/src/openvpn/ssl.c:229,1
    - Dst: crypto_init_lib
      Src: /src/openvpn/src/openvpn/ssl.c:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 232
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 232
    functionName: init_ssl_lib
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_init_lib
    - crypto_init_lib
    linkageType: ''
    returnType: void
    signature: 'void init_ssl_lib(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pkcs11_logout
      Src: /src/openvpn/src/openvpn/ssl.c:396,1
    - Dst: ssl_purge_auth_challenge
      Src: /src/openvpn/src/openvpn/ssl.c:402,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:398,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:400,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - auth_user_pass_only
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 404
      start: 390
    functionDepth: 0
    functionLinenumber: 390
    functionLinenumberEnd: 404
    functionName: ssl_purge_auth
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - pkcs11_logout
    - purge_user_pass
    - ssl_purge_auth_challenge
    linkageType: ''
    returnType: void
    signature: 'void ssl_purge_auth(const bool auth_user_pass_only) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 3
    argNames:
    - multi
    - local
    - remote
    argTypes:
    - struct tls_multi*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 1252
      start: 1244
    functionDepth: 0
    functionLinenumber: 1244
    functionLinenumberEnd: 1252
    functionName: tls_multi_init_set_options
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void tls_multi_init_set_options(struct tls_multi *multi, const char
      *local, const char *remote) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1608,1
    - Dst: generate_key_expansion
      Src: /src/openvpn/src/openvpn/ssl.c:1614,1
    - Dst: tls_limit_reneg_bytes
      Src: /src/openvpn/src/openvpn/ssl.c:1619,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1616,1
    - Dst: tls_get_limit_aead
      Src: /src/openvpn/src/openvpn/ssl.c:1622,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1629,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 15
    argCount: 2
    argNames:
    - multi
    - session
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1631
      start: 1599
    functionDepth: 0
    functionLinenumber: 1599
    functionLinenumberEnd: 1631
    functionName: tls_session_generate_data_channel_keys
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - tls_get_limit_aead
    - secure_memzero
    - tls_limit_reneg_bytes
    - generate_key_expansion
    linkageType: ''
    returnType: bool
    signature: 'bool tls_session_generate_data_channel_keys(struct tls_multi *multi,
      struct tls_session *session) '
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/ssl.c:1953,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2060,1
    - Dst: win32_version_string
      Src: /src/openvpn/src/openvpn/ssl.c:2060,1
    - Dst: uname
      Src: /src/openvpn/src/openvpn/ssl.c:2063,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl.c:2077,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl.c:2079,1
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/ssl.c:2082,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2105,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:1951,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1976,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1980,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2020,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl.c:2016,1
    - Dst: get_default_gateway
      Src: /src/openvpn/src/openvpn/ssl.c:2053,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2064,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl.c:2076,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/ssl.c:2080,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2084,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2010,1
    - Dst: tls_item_in_cipher_list
      Src: /src/openvpn/src/openvpn/ssl.c:2017,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2039,1
    - Dst: comp_generate_peer_info_string
      Src: /src/openvpn/src/openvpn/ssl.c:2045,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2034,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2056,1
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/ssl.c:2056,1
    - Dst: write_string
      Src: /src/openvpn/src/openvpn/ssl.c:2090,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/ssl.c:2090,1
    - Dst: write_empty_string
      Src: /src/openvpn/src/openvpn/ssl.c:2097,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl.c:2082,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1962,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1958,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1964,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1966,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1968,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1970,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1972,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:1974,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/ssl.c:2058,1
    - Dst: get_ssl_library_version
      Src: /src/openvpn/src/openvpn/ssl.c:2058,1
    CyclomaticComplexity: 44
    EdgeCount: 44
    ICount: 95
    argCount: 2
    argNames:
    - buf
    - session
    argTypes:
    - struct buffer*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 2107
      start: 1948
    functionDepth: 0
    functionLinenumber: 1948
    functionLinenumberEnd: 2107
    functionName: push_peer_info
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buf_safe
    - write_string
    - comp_generate_peer_info_string
    - strncmp
    - write_empty_string
    - BSTR
    - buf_printf
    - get_default_gateway
    - gc_new
    - win32_version_string
    - format_hex_ex
    - get_ssl_library_version
    - uname
    - gc_free
    - strlen
    - alloc_buf_gc
    - tls_item_in_cipher_list
    linkageType: ''
    returnType: bool
    signature: 'static bool push_peer_info(struct buffer *buf, struct tls_session
      *session) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:4142,1
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/ssl.c:4146,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/ssl.c:4148,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4144,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4148,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 2
    argNames:
    - multi
    - buf
    argTypes:
    - struct tls_multi*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 4149
      start: 4136
    functionDepth: 0
    functionLinenumber: 4136
    functionLinenumberEnd: 4149
    functionName: tls_prepend_opcode_v2
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - htonl
    - ASSERT
    - buf_write_prepend
    linkageType: ''
    returnType: void
    signature: 'void tls_prepend_opcode_v2(const struct tls_multi *multi, struct buffer
      *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: crypto_uninit_lib
      Src: /src/openvpn/src/openvpn/ssl.c:237,1
    - Dst: tls_free_lib
      Src: /src/openvpn/src/openvpn/ssl.c:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 240
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 240
    functionName: free_ssl_lib
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_free_lib
    - crypto_uninit_lib
    linkageType: ''
    returnType: void
    signature: 'void free_ssl_lib(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4159,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 6
    argCount: 2
    argNames:
    - multi
    - buf
    argTypes:
    - struct tls_multi*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 4164
      start: 4151
    functionDepth: 0
    functionLinenumber: 4151
    functionLinenumberEnd: 4164
    functionName: tls_post_encrypt
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_post_encrypt(struct tls_multi *multi, struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:252,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:255,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl.c:253,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - auth_file
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 257
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 257
    functionName: pem_password_setup
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - strlen
    - get_user_pass
    - unprotect_user_pass
    linkageType: ''
    returnType: void
    signature: 'void pem_password_setup(const char *auth_file) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_use_pkcs11
      Src: /src/openvpn/src/openvpn/ssl.c:579,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:581,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - pkcs11_providers
    argTypes:
    - options
    constantsTouched: []
    func_position:
      end: 585
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 585
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - tls_ctx_use_pkcs11
    linkageType: ''
    returnType: else
    signature: 'else if (options->pkcs11_providers[0]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_free
      Src: /src/openvpn/src/openvpn/ssl.c:1236,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - tas
    argTypes:
    - struct tls_auth_standalone*
    constantsTouched: []
    func_position:
      end: 1237
      start: 1228
    functionDepth: 0
    functionLinenumber: 1228
    functionLinenumberEnd: 1237
    functionName: tls_auth_standalone_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - packet_id_free
    linkageType: ''
    returnType: void
    signature: 'void tls_auth_standalone_free(struct tls_auth_standalone *tas) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1542,1
    - Dst: generate_key_expansion_tls_export
      Src: /src/openvpn/src/openvpn/ssl.c:1550,1
    - Dst: generate_key_expansion_openvpn_prf
      Src: /src/openvpn/src/openvpn/ssl.c:1558,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1552,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1560,1
    - Dst: key2_print
      Src: /src/openvpn/src/openvpn/ssl.c:1570,1
    - Dst: check_key
      Src: /src/openvpn/src/openvpn/ssl.c:1576,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1578,1
    - Dst: init_key_contexts
      Src: /src/openvpn/src/openvpn/ssl.c:1583,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1588,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 24
    argCount: 3
    argNames:
    - multi
    - ks
    - session
    argTypes:
    - struct tls_multi*
    - struct key_state*
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1591
      start: 1532
    functionDepth: 0
    functionLinenumber: 1532
    functionLinenumberEnd: 1591
    functionName: generate_key_expansion
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key2_print
    - generate_key_expansion_openvpn_prf
    - generate_key_expansion_tls_export
    - msg
    - check_key
    - init_key_contexts
    - secure_memzero
    linkageType: ''
    returnType: bool
    signature: 'static bool generate_key_expansion(struct tls_multi *multi, struct
      key_state *ks, struct tls_session *session) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_direction_state_init
      Src: /src/openvpn/src/openvpn/ssl.c:1383,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1407,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl.c:1391,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/ssl.c:1395,1
    - Dst: epoch_init_key_ctx
      Src: /src/openvpn/src/openvpn/ssl.c:1405,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:1408,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 9
    argCount: 5
    argNames:
    - ks
    - multi
    - key_type
    - server
    - key2
    argTypes:
    - struct key_state*
    - struct tls_multi*
    - struct key_type*
    - bool
    - struct key2*
    constantsTouched: []
    func_position:
      end: 1409
      start: 1369
    functionDepth: 0
    functionLinenumber: 1369
    functionLinenumberEnd: 1409
    functionName: init_epoch_keys
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - epoch_init_key_ctx
    - memcpy
    - key_direction_state_init
    - secure_memzero
    linkageType: ''
    returnType: void
    signature: 'static void init_epoch_keys(struct key_state *ks, struct tls_multi
      *multi, const struct key_type *key_type, bool server, struct key2 *key2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_state_free
      Src: /src/openvpn/src/openvpn/ssl.c:1836,1
    - Dst: key_state_init
      Src: /src/openvpn/src/openvpn/ssl.c:1839,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 1
    argNames:
    - session
    argTypes:
    - struct tls_session*
    constantsTouched: []
    func_position:
      end: 1842
      start: 1829
    functionDepth: 0
    functionLinenumber: 1829
    functionLinenumberEnd: 1842
    functionName: key_state_soft_reset
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_init
    - key_state_free
    linkageType: ''
    returnType: void
    signature: 'static void key_state_soft_reset(struct tls_session *session) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:4178,1
    - Dst: key_state_write_plaintext_const
      Src: /src/openvpn/src/openvpn/ssl.c:4184,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4180,1
    - Dst: buffer_list_new
      Src: /src/openvpn/src/openvpn/ssl.c:4193,1
    - Dst: buffer_list_push_data
      Src: /src/openvpn/src/openvpn/ssl.c:4195,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:4200,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 3
    argNames:
    - ks
    - data
    - size
    argTypes:
    - struct key_state*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 4203
      start: 4171
    functionDepth: 0
    functionLinenumber: 4171
    functionLinenumberEnd: 4203
    functionName: tls_send_payload
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_write_plaintext_const
    - buffer_list_new
    - buffer_list_push_data
    - ASSERT
    - tls_clear_error
    linkageType: ''
    returnType: bool
    signature: 'bool tls_send_payload(struct key_state *ks, const uint8_t *data, int
      size) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1428,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1435,1
    - Dst: init_key_dco_bi
      Src: /src/openvpn/src/openvpn/ssl.c:1431,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:1440,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/ssl.c:1436,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:1441,1
    - Dst: cipher_kt_mode_aead
      Src: /src/openvpn/src/openvpn/ssl.c:1446,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1448,1
    - Dst: cipher_kt_name
      Src: /src/openvpn/src/openvpn/ssl.c:1450,1
    - Dst: init_epoch_keys
      Src: /src/openvpn/src/openvpn/ssl.c:1452,1
    - Dst: init_key_ctx_bi
      Src: /src/openvpn/src/openvpn/ssl.c:1456,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 23
    argCount: 6
    argNames:
    - ks
    - multi
    - key_type
    - server
    - key2
    - dco_enabled
    argTypes:
    - struct key_state*
    - struct tls_multi*
    - struct key_type*
    - bool
    - struct key2*
    - bool
    constantsTouched: []
    func_position:
      end: 1458
      start: 1411
    functionDepth: 0
    functionLinenumber: 1411
    functionLinenumberEnd: 1458
    functionName: init_key_contexts
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - strerror
    - init_key_dco_bi
    - init_key_ctx_bi
    - cipher_kt_mode_aead
    - CLEAR
    - init_epoch_keys
    - cipher_kt_name
    linkageType: ''
    returnType: void
    signature: 'static void init_key_contexts(struct key_state *ks, struct tls_multi
      *multi, const struct key_type *key_type, bool server, struct key2 *key2, bool
      dco_enabled) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_state_soft_reset
      Src: /src/openvpn/src/openvpn/ssl.c:1847,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - tls_multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 1848
      start: 1844
    functionDepth: 0
    functionLinenumber: 1844
    functionLinenumberEnd: 1848
    functionName: tls_session_soft_reset
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_soft_reset
    linkageType: ''
    returnType: void
    signature: 'void tls_session_soft_reset(struct tls_multi *tls_multi) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:4211,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl.c:4217,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/ssl.c:4219,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4213,1
    - Dst: get_key_scan
      Src: /src/openvpn/src/openvpn/ssl.c:4215,1
    - Dst: tls_clear_error
      Src: /src/openvpn/src/openvpn/ssl.c:4226,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 13
    argCount: 2
    argNames:
    - multi
    - buf
    argTypes:
    - struct tls_multi*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 4229
      start: 4205
    functionDepth: 0
    functionLinenumber: 4205
    functionLinenumberEnd: 4229
    functionName: tls_rec_payload
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buf_copy
    - get_key_scan
    - BLEN
    - ASSERT
    - tls_clear_error
    linkageType: ''
    returnType: bool
    signature: 'bool tls_rec_payload(struct tls_multi *multi, struct buffer *buf) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3113,1
    - Dst: session_id_defined
      Src: /src/openvpn/src/openvpn/ssl.c:3115,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3121,1
    - Dst: control_packet_needs_wkc
      Src: /src/openvpn/src/openvpn/ssl.c:3175,1
    - Dst: compute_earliest_wakeup
      Src: /src/openvpn/src/openvpn/ssl.c:3207,1
    - Dst: compute_earliest_wakeup
      Src: /src/openvpn/src/openvpn/ssl.c:3213,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3114,1
    - Dst: key_state_soft_reset
      Src: /src/openvpn/src/openvpn/ssl.c:3133,1
    - Dst: key_state_free
      Src: /src/openvpn/src/openvpn/ssl.c:3139,1
    - Dst: reliable_ack_empty
      Src: /src/openvpn/src/openvpn/ssl.c:3173,1
    - Dst: state_name
      Src: /src/openvpn/src/openvpn/ssl.c:3151,1
    - Dst: reliable_mark_active_outgoing
      Src: /src/openvpn/src/openvpn/ssl.c:3186,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3191,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3217,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:3115,1
    - Dst: lame_duck_must_die
      Src: /src/openvpn/src/openvpn/ssl.c:3137,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:3140,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3148,1
    - Dst: state_name
      Src: /src/openvpn/src/openvpn/ssl.c:3150,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:3195,1
    - Dst: reliable_send_timeout
      Src: /src/openvpn/src/openvpn/ssl.c:3203,1
    - Dst: should_trigger_renegotiation
      Src: /src/openvpn/src/openvpn/ssl.c:3119,1
    - Dst: tls_process_state
      Src: /src/openvpn/src/openvpn/ssl.c:3154,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/ssl.c:3146,1
    - Dst: reliable_get_buf_output_sequenced
      Src: /src/openvpn/src/openvpn/ssl.c:3177,1
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/ssl.c:3164,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/ssl.c:3191,1
    - Dst: write_control_auth
      Src: /src/openvpn/src/openvpn/ssl.c:3192,1
    - Dst: compute_earliest_wakeup
      Src: /src/openvpn/src/openvpn/ssl.c:3202,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 66
    argCount: 6
    argNames:
    - multi
    - session
    - to_link
    - to_link_addr
    - to_link_socket_info
    - wakeup
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    - struct buffer*
    - struct link_socket_actual**
    - struct link_socket_info*
    - interval_t*
    constantsTouched: []
    func_position:
      end: 3237
      start: 3101
    functionDepth: 0
    functionLinenumber: 3101
    functionLinenumberEnd: 3237
    functionName: tls_process
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_soft_reset
    - dmsg
    - lame_duck_must_die
    - msg
    - state_name
    - reliable_send_timeout
    - session_id_defined
    - tls_process_state
    - reliable_get_buf_output_sequenced
    - control_packet_needs_wkc
    - write_control_auth
    - should_trigger_renegotiation
    - buf_init
    - reliable_ack_empty
    - update_time
    - compute_earliest_wakeup
    - ASSERT
    - key_state_free
    - reliable_mark_active_outgoing
    linkageType: ''
    returnType: bool
    signature: 'static bool tls_process(struct tls_multi *multi, struct tls_session
      *session, struct buffer *to_link, struct link_socket_actual **to_link_addr,
      struct link_socket_info *to_link_socket_info, interval_t *wakeup) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_close_to_wrapping
      Src: /src/openvpn/src/openvpn/ssl.c:3057,1
    - Dst: aead_usage_limit_reached
      Src: /src/openvpn/src/openvpn/ssl.c:3077,1
    - Dst: aead_usage_limit_reached
      Src: /src/openvpn/src/openvpn/ssl.c:3079,1
    - Dst: cipher_decrypt_verify_fail_warn
      Src: /src/openvpn/src/openvpn/ssl.c:3085,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 25
    argCount: 2
    argNames:
    - session
    - ks
    argTypes:
    - struct tls_session*
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 3091
      start: 3016
    functionDepth: 0
    functionLinenumber: 3016
    functionLinenumberEnd: 3091
    functionName: should_trigger_renegotiation
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - aead_usage_limit_reached
    - packet_id_close_to_wrapping
    - cipher_decrypt_verify_fail_warn
    linkageType: ''
    returnType: bool
    signature: 'static bool should_trigger_renegotiation(const struct tls_session
      *session, const struct key_state *ks) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: key_state_ssl_free
      Src: /src/openvpn/src/openvpn/ssl.c:918,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl.c:923,1
    - Dst: free_epoch_key_ctx
      Src: /src/openvpn/src/openvpn/ssl.c:921,1
    - Dst: free_key_ctx_bi
      Src: /src/openvpn/src/openvpn/ssl.c:920,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl.c:922,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl.c:924,1
    - Dst: buffer_list_free
      Src: /src/openvpn/src/openvpn/ssl.c:925,1
    - Dst: reliable_free
      Src: /src/openvpn/src/openvpn/ssl.c:927,1
    - Dst: reliable_free
      Src: /src/openvpn/src/openvpn/ssl.c:928,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:930,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:932,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/ssl.c:931,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/ssl.c:941,1
    - Dst: packet_id_free
      Src: /src/openvpn/src/openvpn/ssl.c:934,1
    - Dst: key_state_rm_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl.c:936,1
    - Dst: key_state_rm_auth_control_files
      Src: /src/openvpn/src/openvpn/ssl.c:937,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ks
    - clear
    argTypes:
    - struct key_state*
    - bool
    constantsTouched: []
    func_position:
      end: 943
      start: 913
    functionDepth: 0
    functionLinenumber: 913
    functionLinenumberEnd: 943
    functionName: key_state_free
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - free_epoch_key_ctx
    - buffer_list_free
    - key_state_ssl_free
    - reliable_free
    - free_key_ctx_bi
    - free_buf
    - packet_id_free
    - key_state_rm_auth_control_files
    - secure_memzero
    - free
    linkageType: ''
    returnType: void
    signature: 'static void key_state_free(struct key_state *ks, bool clear) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_source_print
      Src: /src/openvpn/src/openvpn/ssl.c:1321,1
    - Dst: key_source_print
      Src: /src/openvpn/src/openvpn/ssl.c:1322,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - k
    argTypes:
    - struct key_source2*
    constantsTouched: []
    func_position:
      end: 1323
      start: 1318
    functionDepth: 0
    functionLinenumber: 1318
    functionLinenumberEnd: 1323
    functionName: key_source2_print
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_source_print
    linkageType: ''
    returnType: void
    signature: 'static void key_source2_print(const struct key_source2 *k) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reliable_get_buf_output_sequenced
      Src: /src/openvpn/src/openvpn/ssl.c:2488,1
    - Dst: reliable_mark_active_outgoing
      Src: /src/openvpn/src/openvpn/ssl.c:2499,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:2511,1
    - Dst: auth_deferred_expire_window
      Src: /src/openvpn/src/openvpn/ssl.c:2496,1
    - Dst: reliable_mark_deleted
      Src: /src/openvpn/src/openvpn/ssl.c:2505,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2512,1
    - Dst: session_id_print
      Src: /src/openvpn/src/openvpn/ssl.c:2513,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:2514,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/ssl.c:2519,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 22
    argCount: 3
    argNames:
    - session
    - ks
    - skip_initial_send
    argTypes:
    - struct tls_session*
    - struct key_state*
    - bool
    constantsTouched: []
    func_position:
      end: 2530
      start: 2484
    functionDepth: 0
    functionLinenumber: 2484
    functionLinenumberEnd: 2530
    functionName: session_move_pre_start
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - management_set_state
    - dmsg
    - auth_deferred_expire_window
    - reliable_mark_deleted
    - gc_new
    - reliable_get_buf_output_sequenced
    - gc_free
    - session_id_print
    - reliable_mark_active_outgoing
    linkageType: ''
    returnType: bool
    signature: 'static bool session_move_pre_start(const struct tls_session *session,
      struct key_state *ks, bool skip_initial_send) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_select_encryption_key
      Src: /src/openvpn/src/openvpn/ssl.c:4101,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:4107,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:4113,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/ssl.c:4112,1
    - Dst: print_key_id
      Src: /src/openvpn/src/openvpn/ssl.c:4114,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/ssl.c:4115,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 18
    argCount: 3
    argNames:
    - multi
    - buf
    - opt
    argTypes:
    - struct tls_multi*
    - struct buffer*
    - struct crypto_options**
    constantsTouched: []
    func_position:
      end: 4120
      start: 4089
    functionDepth: 0
    functionLinenumber: 4089
    functionLinenumberEnd: 4120
    functionName: tls_pre_encrypt
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_select_encryption_key
    - dmsg
    - gc_new
    - gc_free
    - print_key_id
    linkageType: ''
    returnType: void
    signature: 'void tls_pre_encrypt(struct tls_multi *multi, struct buffer *buf,
      struct crypto_options **opt) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1345,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl.c:1347,1
    - Dst: ssl_tls1_PRF
      Src: /src/openvpn/src/openvpn/ssl.c:1359,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl.c:1355,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl.c:1340,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1346,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1351,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/ssl.c:1359,1
    - Dst: VALGRIND_MAKE_READABLE
      Src: /src/openvpn/src/openvpn/ssl.c:1365,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl.c:1345,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/ssl.c:1345,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1347,1
    - Dst: buf_clear
      Src: /src/openvpn/src/openvpn/ssl.c:1362,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:1355,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ssl.c:1340,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl.c:1346,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/ssl.c:1351,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/ssl.c:1363,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/ssl.c:1359,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 26
    argCount: 11
    argNames:
    - secret
    - secret_len
    - label
    - client_seed
    - client_seed_len
    - server_seed
    - server_seed_len
    - client_sid
    - server_sid
    - output
    - output_len
    argTypes:
    - uint8_t*
    - int
    - char*
    - uint8_t*
    - int
    - uint8_t*
    - int
    - struct session_id*
    - struct session_id*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 1367
      start: 1325
    functionDepth: 0
    functionLinenumber: 1325
    functionLinenumberEnd: 1367
    functionName: openvpn_PRF
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - ssl_tls1_PRF
    - buf_write
    - buf_clear
    - BPTR
    - BLEN
    - free_buf
    - ASSERT
    - alloc_buf
    - strlen
    - VALGRIND_MAKE_READABLE
    linkageType: ''
    returnType: bool
    signature: 'static bool openvpn_PRF(const uint8_t *secret, int secret_len, const
      char *label, const uint8_t *client_seed, int client_seed_len, const uint8_t
      *server_seed, int server_seed_len, const struct session_id *client_sid, const
      struct session_id *server_sid, uint8_t *output, int output_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:4128,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4130,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/ssl.c:4133,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/ssl.c:4133,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 2
    argNames:
    - multi
    - buf
    argTypes:
    - struct tls_multi*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 4134
      start: 4122
    functionDepth: 0
    functionLinenumber: 4122
    functionLinenumberEnd: 4134
    functionName: tls_prepend_opcode_v1
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - buf_write_prepend
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void tls_prepend_opcode_v1(const struct tls_multi *multi, struct buffer
      *buf) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/openvpn/src/openvpn/ssl.c:827,1
    - Dst: key_state_ssl_init
      Src: /src/openvpn/src/openvpn/ssl.c:835,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:860,1
    - Dst: packet_id_init
      Src: /src/openvpn/src/openvpn/ssl.c:877,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ssl.c:867,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:862,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:829,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:856,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ssl.c:865,1
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/ssl.c:866,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/ssl.c:867,1
    - Dst: reliable_init
      Src: /src/openvpn/src/openvpn/ssl.c:871,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/ssl.c:871,1
    - Dst: tls_ctx_reload_crl
      Src: /src/openvpn/src/openvpn/ssl.c:894,1
    - Dst: reliable_init
      Src: /src/openvpn/src/openvpn/ssl.c:868,1
    - Dst: reliable_set_timeout
      Src: /src/openvpn/src/openvpn/ssl.c:874,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:859,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:861,1
    - Dst: BUF_SIZE
      Src: /src/openvpn/src/openvpn/ssl.c:868,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 37
    argCount: 2
    argNames:
    - session
    - ks
    argTypes:
    - struct tls_session*
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 897
      start: 824
    functionDepth: 0
    functionLinenumber: 824
    functionLinenumberEnd: 897
    functionName: key_state_init
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - key_state_ssl_init
    - BUF_SIZE
    - tls_ctx_reload_crl
    - CLEAR
    - update_time
    - reliable_init
    - alloc_buf
    - packet_id_init
    - reliable_set_timeout
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: void
    signature: 'static void key_state_init(struct tls_session *session, struct key_state
      *ks) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/ssl.c:1208,1
    - Dst: packet_id_init
      Src: /src/openvpn/src/openvpn/ssl.c:1222,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 6
    argCount: 2
    argNames:
    - tls_options
    - gc
    argTypes:
    - struct tls_options*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1226
      start: 1202
    functionDepth: 0
    functionLinenumber: 1202
    functionLinenumberEnd: 1226
    functionName: tls_auth_standalone_init
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    - packet_id_init
    linkageType: ''
    returnType: struct tls_auth_standalone*
    signature: 'struct tls_auth_standalone *tls_auth_standalone_init(struct tls_options
      *tls_options, struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - auth
    argTypes:
    - enum ks_auth_state
    constantsTouched: []
    func_position:
      end: 748
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 748
    functionName: ks_auth_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *ks_auth_name(enum ks_auth_state auth) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tls_init_control_channel_frame_parameters
      Src: /src/openvpn/src/openvpn/ssl.c:1191,1
    - Dst: tls_session_init
      Src: /src/openvpn/src/openvpn/ssl.c:1195,1
    - Dst: tls_session_init
      Src: /src/openvpn/src/openvpn/ssl.c:1194,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - multi
    - tls_mtu
    argTypes:
    - struct tls_multi*
    - int
    constantsTouched: []
    func_position:
      end: 1196
      start: 1188
    functionDepth: 0
    functionLinenumber: 1188
    functionLinenumberEnd: 1196
    functionName: tls_multi_init_finalize
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_session_init
    - tls_init_control_channel_frame_parameters
    linkageType: ''
    returnType: void
    signature: 'void tls_multi_init_finalize(struct tls_multi *multi, int tls_mtu) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: init_key_type
      Src: /src/openvpn/src/openvpn/ssl.c:1649,1
    - Dst: frame_print
      Src: /src/openvpn/src/openvpn/ssl.c:1661,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/src/openvpn/ssl.c:1672,1
    - Dst: frame_calculate_dynamic
      Src: /src/openvpn/src/openvpn/ssl.c:1659,1
    - Dst: cipher_kt_mode_ofb_cfb
      Src: /src/openvpn/src/openvpn/ssl.c:1652,1
    - Dst: frame_print
      Src: /src/openvpn/src/openvpn/ssl.c:1673,1
    - Dst: tls_session_generate_dynamic_tls_crypt_key
      Src: /src/openvpn/src/openvpn/ssl.c:1682,1
    - Dst: dco_enabled
      Src: /src/openvpn/src/openvpn/ssl.c:1688,1
    - Dst: dco_set_peer
      Src: /src/openvpn/src/openvpn/ssl.c:1694,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:1700,1
    - Dst: tls_session_generate_data_channel_keys
      Src: /src/openvpn/src/openvpn/ssl.c:1706,1
    - Dst: strerror
      Src: /src/openvpn/src/openvpn/ssl.c:1701,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 31
    argCount: 7
    argNames:
    - multi
    - session
    - options
    - frame
    - frame_fragment
    - lsi
    - dco
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    - struct options*
    - struct frame*
    - struct frame*
    - struct link_socket_info*
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 1707
      start: 1633
    functionDepth: 0
    functionLinenumber: 1633
    functionLinenumberEnd: 1707
    functionName: tls_session_update_crypto_params_do_work
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - cipher_kt_mode_ofb_cfb
    - init_key_type
    - dco_set_peer
    - frame_print
    - msg
    - dco_enabled
    - tls_session_generate_dynamic_tls_crypt_key
    - strerror
    - frame_calculate_dynamic
    - tls_session_generate_data_channel_keys
    linkageType: ''
    returnType: bool
    signature: 'bool tls_session_update_crypto_params_do_work(struct tls_multi *multi,
      struct tls_session *session, struct options *options, struct frame *frame, struct
      frame *frame_fragment, struct link_socket_info *lsi, dco_context_t *dco) '
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 767
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 767
    functionName: session_index_name
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *session_index_name(int index) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: check_session_cipher
      Src: /src/openvpn/src/openvpn/ssl.c:1717,1
    - Dst: tls_session_update_crypto_params_do_work
      Src: /src/openvpn/src/openvpn/ssl.c:1725,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 6
    argCount: 7
    argNames:
    - multi
    - session
    - options
    - frame
    - frame_fragment
    - lsi
    - dco
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    - struct options*
    - struct frame*
    - struct frame*
    - struct link_socket_info*
    - dco_context_t*
    constantsTouched: []
    func_position:
      end: 1727
      start: 1709
    functionDepth: 0
    functionLinenumber: 1709
    functionLinenumberEnd: 1727
    functionName: tls_session_update_crypto_params
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_session_update_crypto_params_do_work
    - check_session_cipher
    linkageType: ''
    returnType: bool
    signature: 'bool tls_session_update_crypto_params(struct tls_multi *multi, struct
      tls_session *session, struct options *options, struct frame *frame, struct frame
      *frame_fragment, struct link_socket_info *lsi, dco_context_t *dco) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/ssl.c:383,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 385
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 385
    functionName: ssl_clean_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - purge_user_pass
    linkageType: ''
    returnType: bool
    signature: 'bool ssl_clean_auth_token(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_auth_token_user
      Src: /src/openvpn/src/openvpn/ssl.c:373,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - username
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 374
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 374
    functionName: ssl_set_auth_token_user
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - set_auth_token_user
    linkageType: ''
    returnType: void
    signature: 'void ssl_set_auth_token_user(const char *username) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/ssl.c:1791,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:1801,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:1805,1
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/ssl.c:1795,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 3
    argNames:
    - k2
    - buf
    - server
    argTypes:
    - struct key_source2*
    - struct buffer*
    - bool
    constantsTouched: []
    func_position:
      end: 1811
      start: 1779
    functionDepth: 0
    functionLinenumber: 1779
    functionLinenumberEnd: 1811
    functionName: key_source2_read
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buf_read
    - CLEAR
    linkageType: ''
    returnType: int
    signature: 'static int key_source2_read(struct key_source2 *k2, struct buffer
      *buf, bool server) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/ssl.c:2611,1
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/ssl.c:2616,1
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/ssl.c:2630,1
    - Dst: buf_read_u16
      Src: /src/openvpn/src/openvpn/ssl.c:2617,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/ssl.c:2618,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/ssl.c:2640,1
    - Dst: reliable_mark_deleted
      Src: /src/openvpn/src/openvpn/ssl.c:2643,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2647,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 21
    argCount: 2
    argNames:
    - buf
    - ks
    argTypes:
    - struct buffer*
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 2649
      start: 2606
    functionDepth: 0
    functionLinenumber: 2606
    functionLinenumberEnd: 2649
    functionName: parse_early_negotiation_tlvs
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - reliable_mark_deleted
    - buf_len
    - buf_read_u16
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'static bool parse_early_negotiation_tlvs(struct buffer *buf, struct
      key_state *ks) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 291
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 291
    functionName: enable_auth_user_pass
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void enable_auth_user_pass(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buffer_list_peek
      Src: /src/openvpn/src/openvpn/ssl.c:1818,1
    - Dst: key_state_write_plaintext_const
      Src: /src/openvpn/src/openvpn/ssl.c:1820,1
    - Dst: buffer_list_pop
      Src: /src/openvpn/src/openvpn/ssl.c:1821,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - ks
    argTypes:
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 1823
      start: 1813
    functionDepth: 0
    functionLinenumber: 1813
    functionLinenumberEnd: 1823
    functionName: flush_payload_buffer
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - buffer_list_pop
    - key_state_write_plaintext_const
    - buffer_list_peek
    linkageType: ''
    returnType: void
    signature: 'static void flush_payload_buffer(struct key_state *ks) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: session_move_pre_start
      Src: /src/openvpn/src/openvpn/ssl.c:2600,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 9
    argCount: 3
    argNames:
    - session
    - state
    - from
    argTypes:
    - struct tls_session*
    - struct tls_pre_decrypt_state*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 2601
      start: 2580
    functionDepth: 0
    functionLinenumber: 2580
    functionLinenumberEnd: 2601
    functionName: session_skip_to_pre_start
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - session_move_pre_start
    linkageType: ''
    returnType: bool
    signature: 'bool session_skip_to_pre_start(struct tls_session *session, struct
      tls_pre_decrypt_state *state, struct link_socket_actual *from) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: cipher_kt_insecure
      Src: /src/openvpn/src/openvpn/ssl.c:109,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:113,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - ciphername
    - reneg_bytes
    argTypes:
    - char*
    - int64_t*
    constantsTouched: []
    func_position:
      end: 118
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 118
    functionName: tls_limit_reneg_bytes
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - cipher_kt_insecure
    linkageType: ''
    returnType: void
    signature: 'static void tls_limit_reneg_bytes(const char *ciphername, int64_t
      *reneg_bytes) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: tls_ctx_use_management_external_key
      Src: /src/openvpn/src/openvpn/ssl.c:618,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:620,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - MF_EXTERNAL_KEY
    argTypes:
    - options
    constantsTouched: []
    func_position:
      end: 623
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 623
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - tls_ctx_use_management_external_key
    - msg
    linkageType: ''
    returnType: else
    signature: 'else if (options->management_flags & MF_EXTERNAL_KEY) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: key_state_write_ciphertext
      Src: /src/openvpn/src/openvpn/ssl.c:2662,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:2665,1
    - Dst: reliable_mark_deleted
      Src: /src/openvpn/src/openvpn/ssl.c:2676,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/ssl.c:2678,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 3
    argNames:
    - buf
    - ks
    - continue_tls_process
    argTypes:
    - struct buffer*
    - struct key_state*
    - bool*
    constantsTouched: []
    func_position:
      end: 2681
      start: 2655
    functionDepth: 0
    functionLinenumber: 2655
    functionLinenumberEnd: 2681
    functionName: read_incoming_tls_ciphertext
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - reliable_mark_deleted
    - dmsg
    - key_state_write_ciphertext
    linkageType: ''
    returnType: bool
    signature: 'static bool read_incoming_tls_ciphertext(struct buffer *buf, struct
      key_state *ks, bool *continue_tls_process) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_get_aead_limits
      Src: /src/openvpn/src/openvpn/ssl.c:123,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/ssl.c:134,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 138
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 138
    functionName: tls_get_limit_aead
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached:
    - msg
    - cipher_get_aead_limits
    linkageType: ''
    returnType: uint64_t
    signature: 'static uint64_t tls_get_limit_aead(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - ks
    argTypes:
    - struct key_state*
    constantsTouched: []
    func_position:
      end: 2688
      start: 2683
    functionDepth: 0
    functionLinenumber: 2683
    functionLinenumberEnd: 2688
    functionName: control_packet_needs_wkc
    functionSourceFile: /src/openvpn/src/openvpn/ssl.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool control_packet_needs_wkc(const struct key_state *ks) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: verify_align_4
      Src: /src/openvpn/src/openvpn/proto.c:45,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.c:48,1
    - Dst: htons
      Src: /src/openvpn/src/openvpn/proto.c:71,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/proto.c:62,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.c:57,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.c:74,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/proto.c:80,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/proto.c:86,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/proto.c:96,1
    - Dst: OPENVPN_IPH_GET_VER
      Src: /src/openvpn/src/openvpn/proto.c:99,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/proto.c:101,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 42
    argCount: 3
    argNames:
    - tunnel_type
    - buf
    - ip_ver
    argTypes:
    - int
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 107
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 107
    functionName: is_ipv_X
    functionSourceFile: /src/openvpn/src/openvpn/proto.c
    functionUses: []
    functionsReached:
    - BPTR
    - BLEN
    - OPENVPN_IPH_GET_VER
    - buf_advance
    - verify_align_4
    - ntohs
    - htons
    linkageType: ''
    returnType: bool
    signature: 'static bool is_ipv_X(int tunnel_type, struct buffer *buf, int ip_ver) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_ipv_X
      Src: /src/openvpn/src/openvpn/proto.c:117,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - tunnel_type
    - buf
    argTypes:
    - int
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 118
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 118
    functionName: is_ipv6
    functionSourceFile: /src/openvpn/src/openvpn/proto.c
    functionUses: []
    functionsReached:
    - is_ipv_X
    linkageType: ''
    returnType: bool
    signature: 'bool is_ipv6(int tunnel_type, struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 6
    argNames:
    - af
    - payload
    - len_payload
    - src_addr
    - dest_addr
    - proto
    argTypes:
    - sa_family_t
    - uint8_t*
    - int
    - uint8_t*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 170
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 170
    functionName: ip_checksum
    functionSourceFile: /src/openvpn/src/openvpn/proto.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: 'uint16_t ip_checksum(const sa_family_t af, const uint8_t *payload,
      const int len_payload, const uint8_t *src_addr, const uint8_t *dest_addr, const
      int proto) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_ipv_X
      Src: /src/openvpn/src/openvpn/proto.c:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - tunnel_type
    - buf
    argTypes:
    - int
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 113
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 113
    functionName: is_ipv4
    functionSourceFile: /src/openvpn/src/openvpn/proto.c
    functionUses: []
    functionsReached:
    - is_ipv_X
    linkageType: ''
    returnType: bool
    signature: 'bool is_ipv4(int tunnel_type, struct buffer *buf) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: buf_set_read
      Src: /src/openvpn/src/openvpn/proto.c:185,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/proto.c:201,1
    - Dst: verify_align_4
      Src: /src/openvpn/src/openvpn/proto.c:200,1
    - Dst: is_ipv4
      Src: /src/openvpn/src/openvpn/proto.c:187,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.c:195,1
    - Dst: OPENVPN_IPH_GET_LEN
      Src: /src/openvpn/src/openvpn/proto.c:203,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/proto.c:204,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.c:206,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proto.c:216,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proto.c:219,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 24
    argCount: 5
    argNames:
    - data
    - size
    - tunnel_type
    - prefix
    - errors
    argTypes:
    - uint8_t*
    - int
    - int
    - char*
    - counter_type*
    constantsTouched: []
    func_position:
      end: 225
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 225
    functionName: ipv4_packet_size_verify
    functionSourceFile: /src/openvpn/src/openvpn/proto.c
    functionUses: []
    functionsReached:
    - OPENVPN_IPH_GET_LEN
    - buf_set_read
    - BPTR
    - msg
    - BLEN
    - verify_align_4
    - is_ipv4
    - ntohs
    linkageType: ''
    returnType: void
    signature: 'void ipv4_packet_size_verify(const uint8_t *data, const int size,
      const int tunnel_type, const char *prefix, counter_type *errors) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_proto_connection_oriented
      Src: /src/openvpn/src/openvpn/socket.h:842,1
    - Dst: addrlist_port_match
      Src: /src/openvpn/src/openvpn/socket.h:844,1
    - Dst: addrlist_match
      Src: /src/openvpn/src/openvpn/socket.h:843,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 3
    argNames:
    - a1
    - addr_list
    - proto
    argTypes:
    - struct openvpn_sockaddr*
    - struct addrinfo*
    - int
    constantsTouched: []
    func_position:
      end: 845
      start: 837
    functionDepth: 0
    functionLinenumber: 837
    functionLinenumberEnd: 845
    functionName: addrlist_match_proto
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_proto_connection_oriented
    - addrlist_port_match
    - addrlist_match
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addrlist_match_proto(const struct openvpn_sockaddr
      *a1, struct addrinfo *addr_list, const int proto) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.h:1225,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 6
    argCount: 2
    argNames:
    - sock
    - ipbuf
    argTypes:
    - struct link_socket*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1229
      start: 1220
    functionDepth: 0
    functionLinenumber: 1220
    functionLinenumberEnd: 1229
    functionName: link_socket_extract_tos
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - BPTR
    linkageType: ''
    returnType: void
    signature: 'static inline void link_socket_extract_tos(struct link_socket *sock,
      const struct buffer *ipbuf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: event_ctl
      Src: /src/openvpn/src/openvpn/socket.h:1283,1
    - Dst: socket_listen_event_handle
      Src: /src/openvpn/src/openvpn/socket.h:1283,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 3
    argNames:
    - sock
    - es
    - arg
    argTypes:
    - struct link_socket*
    - struct event_set*
    - void*
    constantsTouched: []
    func_position:
      end: 1286
      start: 1276
    functionDepth: 0
    functionLinenumber: 1276
    functionLinenumberEnd: 1286
    functionName: socket_set_listen_persistent
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - event_ctl
    - socket_listen_event_handle
    linkageType: ''
    returnType: void
    signature: 'static inline void socket_set_listen_persistent(struct link_socket
      *sock, struct event_set *es, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.h:378,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - gc
    argTypes:
    - struct openvpn_sockaddr*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 379
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 379
    functionName: print_openvpn_sockaddr
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - print_sockaddr_ex
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *print_openvpn_sockaddr(const struct openvpn_sockaddr
      *addr, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/openvpn/src/openvpn/socket.h:857,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 1
    argNames:
    - addr
    argTypes:
    - struct openvpn_sockaddr*
    constantsTouched: []
    func_position:
      end: 860
      start: 847
    functionDepth: 0
    functionLinenumber: 847
    functionLinenumberEnd: 860
    functionName: addr_zero_host
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - memset
    linkageType: ''
    returnType: void
    signature: 'static inline void addr_zero_host(struct openvpn_sockaddr *addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 906
      start: 902
    functionDepth: 0
    functionLinenumber: 902
    functionLinenumberEnd: 906
    functionName: socket_foreign_protocol_sd
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int socket_foreign_protocol_sd(const struct link_socket
      *sock) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/socket.h:1160,1
    - Dst: sendto
      Src: /src/openvpn/src/openvpn/socket.h:1167,1
    - Dst: addr_defined_ipi
      Src: /src/openvpn/src/openvpn/socket.h:1161,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.h:1167,1
    - Dst: link_socket_write_udp_posix_sendmsg
      Src: /src/openvpn/src/openvpn/socket.h:1163,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.h:1167,1
    - Dst: af_addr_size
      Src: /src/openvpn/src/openvpn/socket.h:1169,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 12
    argCount: 3
    argNames:
    - sock
    - buf
    - to
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 1170
      start: 1154
    functionDepth: 0
    functionLinenumber: 1154
    functionLinenumberEnd: 1170
    functionName: link_socket_write_udp_posix
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - BPTR
    - BLEN
    - proto_is_udp
    - af_addr_size
    - addr_defined_ipi
    - link_socket_write_udp_posix_sendmsg
    - sendto
    linkageType: ''
    returnType: ssize_t
    signature: 'static inline ssize_t link_socket_write_udp_posix(struct link_socket
      *sock, struct buffer *buf, struct link_socket_actual *to) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1265
      start: 1257
    functionDepth: 0
    functionLinenumber: 1257
    functionLinenumberEnd: 1265
    functionName: socket_event_handle
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: event_t
    signature: 'static inline event_t socket_event_handle(const struct link_socket
      *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_net_event_win32
      Src: /src/openvpn/src/openvpn/socket.h:1292,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1294
      start: 1288
    functionDepth: 0
    functionLinenumber: 1288
    functionLinenumberEnd: 1294
    functionName: socket_reset_listen_persistent
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - reset_net_event_win32
    linkageType: ''
    returnType: void
    signature: 'static inline void socket_reset_listen_persistent(struct link_socket
      *sock) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: socket_is_dco_win
      Src: /src/openvpn/src/openvpn/socket.h:1046,1
    - Dst: sockethandle_finalize
      Src: /src/openvpn/src/openvpn/socket.h:1052,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 3
    argNames:
    - sock
    - buf
    - from
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 1053
      start: 1040
    functionDepth: 0
    functionLinenumber: 1040
    functionLinenumberEnd: 1053
    functionName: link_socket_read_udp_win32
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - socket_is_dco_win
    - sockethandle_finalize
    linkageType: ''
    returnType: int
    signature: 'static inline int link_socket_read_udp_win32(struct link_socket *sock,
      struct buffer *buf, struct link_socket_actual *from) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: socket_is_dco_win
      Src: /src/openvpn/src/openvpn/socket.h:1112,1
    - Dst: sockethandle_finalize
      Src: /src/openvpn/src/openvpn/socket.h:1115,1
    - Dst: SocketHandleGetLastError
      Src: /src/openvpn/src/openvpn/socket.h:1118,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/socket.h:1127,1
    - Dst: overlapped_io_active
      Src: /src/openvpn/src/openvpn/socket.h:1113,1
    - Dst: buf_write_prepend
      Src: /src/openvpn/src/openvpn/socket.h:1131,1
    - Dst: socket_send_queue
      Src: /src/openvpn/src/openvpn/socket.h:1135,1
    - Dst: SocketHandleSetLastError
      Src: /src/openvpn/src/openvpn/socket.h:1138,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.h:1143,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 23
    argCount: 3
    argNames:
    - sock
    - buf
    - to
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 1145
      start: 1105
    functionDepth: 0
    functionLinenumber: 1105
    functionLinenumberEnd: 1145
    functionName: link_socket_write_win32
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - sockethandle_finalize
    - socket_send_queue
    - BLEN
    - SocketHandleGetLastError
    - buf_write_prepend
    - overlapped_io_active
    - socket_is_dco_win
    - SocketHandleSetLastError
    linkageType: ''
    returnType: int
    signature: 'static inline int link_socket_write_win32(struct link_socket *sock,
      struct buffer *buf, struct link_socket_actual *to) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: print_sockaddr_ex
      Src: /src/openvpn/src/openvpn/socket.h:386,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - gc
    argTypes:
    - struct sockaddr*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 387
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 387
    functionName: print_sockaddr
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - print_sockaddr_ex
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *print_sockaddr(const struct sockaddr *addr,
      struct gc_arena *gc) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/socket.h:686,1
    - Dst: IN6_IS_ADDR_LOOPBACK
      Src: /src/openvpn/src/openvpn/socket.h:689,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 7
    argCount: 1
    argNames:
    - addr
    argTypes:
    - struct sockaddr*
    constantsTouched: []
    func_position:
      end: 694
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 694
    functionName: addr_local
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - IN6_IS_ADDR_LOOPBACK
    - htonl
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addr_local(const struct sockaddr *addr) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IN6_ARE_ADDR_EQUAL
      Src: /src/openvpn/src/openvpn/socket.h:761,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:768,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 10
    argCount: 2
    argNames:
    - a1
    - addrlist
    argTypes:
    - struct openvpn_sockaddr*
    - struct addrinfo*
    constantsTouched: []
    func_position:
      end: 772
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 772
    functionName: addrlist_match
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - ASSERT
    - IN6_ARE_ADDR_EQUAL
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addrlist_match(const struct openvpn_sockaddr *a1,
      const struct addrinfo *addrlist) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: addr_match_proto
      Src: /src/openvpn/src/openvpn/socket.h:992,1
    - Dst: link_socket_connection_initiated
      Src: /src/openvpn/src/openvpn/socket.h:1001,1
    - Dst: addrlist_match_proto
      Src: /src/openvpn/src/openvpn/socket.h:997,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 12
    argCount: 4
    argNames:
    - info
    - act
    - common_name
    - es
    argTypes:
    - struct link_socket_info*
    - struct link_socket_actual*
    - char*
    - struct env_set*
    constantsTouched: []
    func_position:
      end: 1003
      start: 982
    functionDepth: 0
    functionLinenumber: 982
    functionLinenumberEnd: 1003
    functionName: link_socket_set_outgoing_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_connection_initiated
    - addrlist_match_proto
    - addr_match_proto
    linkageType: ''
    returnType: void
    signature: 'static inline void link_socket_set_outgoing_addr(struct link_socket_info
      *info, const struct link_socket_actual *act, const char *common_name, struct
      env_set *es) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/socket.h:1199,1
    - Dst: proto_is_tcp
      Src: /src/openvpn/src/openvpn/socket.h:1204,1
    - Dst: link_socket_write_udp
      Src: /src/openvpn/src/openvpn/socket.h:1202,1
    - Dst: link_socket_write_tcp
      Src: /src/openvpn/src/openvpn/socket.h:1206,1
    - Dst: socket_is_dco_win
      Src: /src/openvpn/src/openvpn/socket.h:1199,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:1210,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 11
    argCount: 3
    argNames:
    - sock
    - buf
    - to
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 1213
      start: 1194
    functionDepth: 0
    functionLinenumber: 1194
    functionLinenumberEnd: 1213
    functionName: link_socket_write
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_write_tcp
    - proto_is_udp
    - ASSERT
    - link_socket_write_udp
    - socket_is_dco_win
    - proto_is_tcp
    linkageType: ''
    returnType: ssize_t
    signature: 'static inline ssize_t link_socket_write(struct link_socket *sock,
      struct buffer *buf, struct link_socket_actual *to) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpn/socket.h:321,1
    - Dst: WSASetLastError
      Src: /src/openvpn/src/openvpn/socket.h:321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - sh
    argTypes:
    - sockethandle_t
    constantsTouched: []
    func_position:
      end: 322
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 322
    functionName: SocketHandleSetInvalError
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - SetLastError
    - WSASetLastError
    linkageType: ''
    returnType: void
    signature: 'static inline void SocketHandleSetInvalError(sockethandle_t sh) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/socket.h:714,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:719,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 10
    argCount: 1
    argNames:
    - lsa
    argTypes:
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 722
      start: 697
    functionDepth: 0
    functionLinenumber: 697
    functionLinenumberEnd: 722
    functionName: addr_defined_ipi
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - IN6_IS_ADDR_UNSPECIFIED
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addr_defined_ipi(const struct link_socket_actual
      *lsa) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IN6_ARE_ADDR_EQUAL
      Src: /src/openvpn/src/openvpn/socket.h:793,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:801,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 18
    argCount: 2
    argNames:
    - a1
    - a2
    argTypes:
    - struct openvpn_sockaddr*
    - struct addrinfo*
    constantsTouched: []
    func_position:
      end: 805
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 805
    functionName: addrlist_port_match
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - ASSERT
    - IN6_ARE_ADDR_EQUAL
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addrlist_port_match(const struct openvpn_sockaddr
      *a1, const struct addrinfo *a2) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/socket.h:1069,1
    - Dst: link_socket_read_udp_posix
      Src: /src/openvpn/src/openvpn/socket.h:1078,1
    - Dst: proto_is_tcp
      Src: /src/openvpn/src/openvpn/socket.h:1082,1
    - Dst: link_socket_read_udp_win32
      Src: /src/openvpn/src/openvpn/socket.h:1076,1
    - Dst: socket_is_dco_win
      Src: /src/openvpn/src/openvpn/socket.h:1069,1
    - Dst: link_socket_read_tcp
      Src: /src/openvpn/src/openvpn/socket.h:1086,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:1090,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 3
    argNames:
    - sock
    - buf
    - from
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 1093
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1093
    functionName: link_socket_read
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_read_tcp
    - link_socket_read_udp_posix
    - proto_is_udp
    - ASSERT
    - socket_is_dco_win
    - proto_is_tcp
    - link_socket_read_udp_win32
    linkageType: ''
    returnType: int
    signature: 'static inline int link_socket_read(struct link_socket *sock, struct
      buffer *buf, struct link_socket_actual *from) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_write_win32
      Src: /src/openvpn/src/openvpn/socket.h:1187,1
    - Dst: link_socket_write_udp_posix
      Src: /src/openvpn/src/openvpn/socket.h:1189,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 3
    argNames:
    - sock
    - buf
    - to
    argTypes:
    - struct link_socket*
    - struct buffer*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 1191
      start: 1181
    functionDepth: 0
    functionLinenumber: 1181
    functionLinenumberEnd: 1191
    functionName: link_socket_write_udp
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_write_udp_posix
    - link_socket_write_win32
    linkageType: ''
    returnType: ssize_t
    signature: 'static inline ssize_t link_socket_write_udp(struct link_socket *sock,
      struct buffer *buf, struct link_socket_actual *to) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/openvpn/src/openvpn/socket.h:1240,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1242
      start: 1235
    functionDepth: 0
    functionLinenumber: 1235
    functionLinenumberEnd: 1242
    functionName: link_socket_set_tos
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - setsockopt
    linkageType: ''
    returnType: void
    signature: 'static inline void link_socket_set_tos(struct link_socket *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:607,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - proto
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 609
      start: 604
    functionDepth: 0
    functionLinenumber: 604
    functionLinenumberEnd: 609
    functionName: proto_is_tcp
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool proto_is_tcp(int proto) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - af
    - proto
    argTypes:
    - sa_family_t
    - int
    constantsTouched: []
    func_position:
      end: 634
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 634
    functionName: datagram_overhead
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int datagram_overhead(sa_family_t af, int proto) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/socket.h:874,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:875,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 4
    argCount: 1
    argNames:
    - af
    argTypes:
    - sa_family_t
    constantsTouched: []
    func_position:
      end: 879
      start: 862
    functionDepth: 0
    functionLinenumber: 862
    functionLinenumberEnd: 879
    functionName: af_addr_size
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - msg
    - ASSERT
    linkageType: ''
    returnType: int
    signature: 'static inline int af_addr_size(sa_family_t af) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_connection_oriented
      Src: /src/openvpn/src/openvpn/socket.h:892,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 894
      start: 889
    functionDepth: 0
    functionLinenumber: 889
    functionLinenumberEnd: 894
    functionName: socket_foreign_protocol_detected
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_connection_oriented
    linkageType: ''
    returnType: bool
    signature: 'static inline bool socket_foreign_protocol_detected(const struct link_socket
      *sock) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_connection_oriented
      Src: /src/openvpn/src/openvpn/socket.h:913,1
    - Dst: openvpn_errno
      Src: /src/openvpn/src/openvpn/socket.h:921,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 14
    argCount: 2
    argNames:
    - sock
    - status
    argTypes:
    - struct link_socket*
    - int
    constantsTouched: []
    func_position:
      end: 931
      start: 910
    functionDepth: 0
    functionLinenumber: 910
    functionLinenumberEnd: 931
    functionName: socket_connection_reset
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_connection_oriented
    - openvpn_errno
    linkageType: ''
    returnType: bool
    signature: 'static inline bool socket_connection_reset(const struct link_socket
      *sock, int status) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/socket.h:944,1
    - Dst: addrlist_match_proto
      Src: /src/openvpn/src/openvpn/socket.h:952,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 12
    argCount: 3
    argNames:
    - buf
    - info
    - from_addr
    argTypes:
    - struct buffer*
    - struct link_socket_info*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 959
      start: 933
    functionDepth: 0
    functionLinenumber: 933
    functionLinenumberEnd: 959
    functionName: link_socket_verify_incoming_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_actual_defined
    - addrlist_match_proto
    linkageType: ''
    returnType: bool
    signature: 'static inline bool link_socket_verify_incoming_addr(struct buffer
      *buf, const struct link_socket_info *info, const struct link_socket_actual *from_addr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_connection_oriented
      Src: /src/openvpn/src/openvpn/socket.h:1010,1
    - Dst: stream_buf_read_setup_dowork
      Src: /src/openvpn/src/openvpn/socket.h:1012,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1018
      start: 1007
    functionDepth: 0
    functionLinenumber: 1007
    functionLinenumberEnd: 1018
    functionName: stream_buf_read_setup
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_connection_oriented
    - stream_buf_read_setup_dowork
    linkageType: ''
    returnType: bool
    signature: 'static inline bool stream_buf_read_setup(struct link_socket *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOverlappedResult
      Src: /src/openvpn/src/openvpn/socket.h:302,1
    - Dst: WSAGetOverlappedResult
      Src: /src/openvpn/src/openvpn/socket.h:303,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - sh
    - io
    argTypes:
    - sockethandle_t
    - struct overlapped_io*
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: SocketHandleGetOverlappedResult
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - WSAGetOverlappedResult
    - GetOverlappedResult
    linkageType: ''
    returnType: BOOL
    signature: 'static inline BOOL SocketHandleGetOverlappedResult(sockethandle_t
      sh, struct overlapped_io *io) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: addr_port_match
      Src: /src/openvpn/src/openvpn/socket.h:884,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - a1
    - a2
    argTypes:
    - struct link_socket_actual*
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 885
      start: 881
    functionDepth: 0
    functionLinenumber: 881
    functionLinenumberEnd: 885
    functionName: link_socket_actual_match
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - addr_port_match
    linkageType: ''
    returnType: bool
    signature: 'static inline bool link_socket_actual_match(const struct link_socket_actual
      *a1, const struct link_socket_actual *a2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 900
      start: 896
    functionDepth: 0
    functionLinenumber: 896
    functionLinenumberEnd: 900
    functionName: socket_foreign_protocol_head
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct buffer*
    signature: 'static inline const struct buffer *socket_foreign_protocol_head(const
      struct link_socket *sock) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_actual_defined
      Src: /src/openvpn/src/openvpn/socket.h:969,1
    - Dst: link_socket_bad_outgoing_addr
      Src: /src/openvpn/src/openvpn/socket.h:975,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 10
    argCount: 3
    argNames:
    - buf
    - info
    - act
    argTypes:
    - struct buffer*
    - struct link_socket_info*
    - struct link_socket_actual**
    constantsTouched: []
    func_position:
      end: 980
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 980
    functionName: link_socket_get_outgoing_addr
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_bad_outgoing_addr
    - link_socket_actual_defined
    linkageType: ''
    returnType: void
    signature: 'static inline void link_socket_get_outgoing_addr(struct buffer *buf,
      const struct link_socket_info *info, struct link_socket_actual **act) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_udp
      Src: /src/openvpn/src/openvpn/socket.h:598,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - proto
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 599
      start: 595
    functionDepth: 0
    functionLinenumber: 595
    functionLinenumberEnd: 599
    functionName: proto_is_dgram
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - proto_is_udp
    linkageType: ''
    returnType: bool
    signature: 'static inline bool proto_is_dgram(int proto) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetLastError
      Src: /src/openvpn/src/openvpn/socket.h:309,1
    - Dst: WSAGetLastError
      Src: /src/openvpn/src/openvpn/socket.h:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - sh
    argTypes:
    - sockethandle_t
    constantsTouched: []
    func_position:
      end: 310
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 310
    functionName: SocketHandleGetLastError
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - GetLastError
    - WSAGetLastError
    linkageType: ''
    returnType: int
    signature: 'static inline int SocketHandleGetLastError(sockethandle_t sh) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:587,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - proto
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 589
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 589
    functionName: proto_is_udp
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool proto_is_udp(int proto) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_proto_connection_oriented
      Src: /src/openvpn/src/openvpn/socket.h:651,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - sock
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 657
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 657
    functionName: link_socket_connection_oriented
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_proto_connection_oriented
    linkageType: ''
    returnType: bool
    signature: 'static inline bool link_socket_connection_oriented(const struct link_socket
      *sock) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: addr_defined
      Src: /src/openvpn/src/openvpn/socket.h:727,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - act
    argTypes:
    - struct link_socket_actual*
    constantsTouched: []
    func_position:
      end: 728
      start: 724
    functionDepth: 0
    functionLinenumber: 724
    functionLinenumberEnd: 728
    functionName: link_socket_actual_defined
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - addr_defined
    linkageType: ''
    returnType: bool
    signature: 'static inline bool link_socket_actual_defined(const struct link_socket_actual
      *act) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IN6_ARE_ADDR_EQUAL
      Src: /src/openvpn/src/openvpn/socket.h:819,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:822,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 9
    argCount: 2
    argNames:
    - a1
    - a2
    argTypes:
    - struct openvpn_sockaddr*
    - struct openvpn_sockaddr*
    constantsTouched: []
    func_position:
      end: 824
      start: 809
    functionDepth: 0
    functionLinenumber: 809
    functionLinenumberEnd: 824
    functionName: addr_port_match
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - ASSERT
    - IN6_ARE_ADDR_EQUAL
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addr_port_match(const struct openvpn_sockaddr *a1,
      const struct openvpn_sockaddr *a2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetLastError
      Src: /src/openvpn/src/openvpn/socket.h:315,1
    - Dst: WSASetLastError
      Src: /src/openvpn/src/openvpn/socket.h:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - sh
    - err
    argTypes:
    - sockethandle_t
    - DWORD
    constantsTouched: []
    func_position:
      end: 316
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 316
    functionName: SocketHandleSetLastError
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - SetLastError
    - WSASetLastError
    linkageType: ''
    returnType: void
    signature: 'inline static void SocketHandleSetLastError(sockethandle_t sh, DWORD
      err) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IN6_IS_ADDR_UNSPECIFIED
      Src: /src/openvpn/src/openvpn/socket.h:670,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 7
    argCount: 1
    argNames:
    - addr
    argTypes:
    - struct openvpn_sockaddr*
    constantsTouched: []
    func_position:
      end: 674
      start: 659
    functionDepth: 0
    functionLinenumber: 659
    functionLinenumberEnd: 674
    functionName: addr_defined
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - IN6_IS_ADDR_UNSPECIFIED
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addr_defined(const struct openvpn_sockaddr *addr) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IN6_ARE_ADDR_EQUAL
      Src: /src/openvpn/src/openvpn/socket.h:739,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:741,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 2
    argNames:
    - a1
    - a2
    argTypes:
    - struct openvpn_sockaddr*
    - struct openvpn_sockaddr*
    constantsTouched: []
    func_position:
      end: 743
      start: 730
    functionDepth: 0
    functionLinenumber: 730
    functionLinenumberEnd: 743
    functionName: addr_match
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - ASSERT
    - IN6_ARE_ADDR_EQUAL
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addr_match(const struct openvpn_sockaddr *a1, const
      struct openvpn_sockaddr *a2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: link_socket_proto_connection_oriented
      Src: /src/openvpn/src/openvpn/socket.h:831,1
    - Dst: addr_match
      Src: /src/openvpn/src/openvpn/socket.h:832,1
    - Dst: addr_port_match
      Src: /src/openvpn/src/openvpn/socket.h:833,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 3
    argNames:
    - a1
    - a2
    - proto
    argTypes:
    - struct openvpn_sockaddr*
    - struct openvpn_sockaddr*
    - int
    constantsTouched: []
    func_position:
      end: 834
      start: 826
    functionDepth: 0
    functionLinenumber: 826
    functionLinenumberEnd: 834
    functionName: addr_match_proto
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - link_socket_proto_connection_oriented
    - addr_port_match
    - addr_match
    linkageType: ''
    returnType: bool
    signature: 'static inline bool addr_match_proto(const struct openvpn_sockaddr
      *a1, const struct openvpn_sockaddr *a2, const int proto) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: send
      Src: /src/openvpn/src/openvpn/socket.h:1176,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/socket.h:1176,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/socket.h:1176,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - sock
    - buf
    argTypes:
    - struct link_socket*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1177
      start: 1172
    functionDepth: 0
    functionLinenumber: 1172
    functionLinenumberEnd: 1177
    functionName: link_socket_write_tcp_posix
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - send
    - BLEN
    - BPTR
    linkageType: ''
    returnType: ssize_t
    signature: 'static inline ssize_t link_socket_write_tcp_posix(struct link_socket
      *sock, struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/socket.h:577,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - proto
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 579
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 579
    functionName: proto_is_net
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool proto_is_net(int proto) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/socket.h:643,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - proto
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 644
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 644
    functionName: link_socket_proto_connection_oriented
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached:
    - proto_is_dgram
    linkageType: ''
    returnType: bool
    signature: 'static inline bool link_socket_proto_connection_oriented(int proto) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct link_socket*
    constantsTouched: []
    func_position:
      end: 1029
      start: 1025
    functionDepth: 0
    functionLinenumber: 1025
    functionLinenumberEnd: 1029
    functionName: socket_is_dco_win
    functionSourceFile: /src/openvpn/src/openvpn/socket.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool socket_is_dco_win(const struct link_socket *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: X509_OBJECT_free_contents
      Src: /src/openvpn/src/openvpn/openssl_compat.h:65,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/src/openvpn/openssl_compat.h:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - obj
    argTypes:
    - X509_OBJECT*
    constantsTouched: []
    func_position:
      end: 68
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 68
    functionName: X509_OBJECT_free
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached:
    - X509_OBJECT_free_contents
    - OPENSSL_free
    linkageType: ''
    returnType: void
    signature: 'static inline void X509_OBJECT_free(X509_OBJECT *obj) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - cipher
    argTypes:
    - EVP_CIPHER*
    constantsTouched: []
    func_position:
      end: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    functionName: EVP_CIPHER_free
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void EVP_CIPHER_free(const EVP_CIPHER *cipher) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: EVP_PKEY_get0_EC_KEY
      Src: /src/openvpn/src/openvpn/openssl_compat.h:93,1
    - Dst: EC_KEY_get0_group
      Src: /src/openvpn/src/openvpn/openssl_compat.h:98,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/openssl_compat.h:105,1
    - Dst: EC_GROUP_get_curve_name
      Src: /src/openvpn/src/openvpn/openssl_compat.h:99,1
    - Dst: strncpynt
      Src: /src/openvpn/src/openvpn/openssl_compat.h:111,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/openssl_compat.h:114,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 15
    argCount: 4
    argNames:
    - pkey
    - gname
    - gname_sz
    - gname_len
    argTypes:
    - EVP_PKEY*
    - char*
    - size_t
    - size_t*
    constantsTouched: []
    func_position:
      end: 116
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 116
    functionName: EVP_PKEY_get_group_name
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached:
    - EC_KEY_get0_group
    - OBJ_nid2sn
    - EVP_PKEY_get0_EC_KEY
    - EC_GROUP_get_curve_name
    - strncpynt
    - strlen
    linkageType: ''
    returnType: int
    signature: 'static inline int EVP_PKEY_get_group_name(EVP_PKEY *pkey, char *gname,
      size_t gname_sz, size_t *gname_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/openssl_compat.h:137,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/openssl_compat.h:138,1
    - Dst: EVP_get_cipherbyname
      Src: /src/openvpn/src/openvpn/openssl_compat.h:139,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - ctx
    - algorithm
    - properties
    argTypes:
    - void*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 140
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 140
    functionName: EVP_CIPHER_fetch
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached:
    - ASSERT
    - EVP_get_cipherbyname
    linkageType: ''
    returnType: EVP_CIPHER*
    signature: 'static inline const EVP_CIPHER *EVP_CIPHER_fetch(void *ctx, const
      char *algorithm, const char *properties) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 2
    argNames:
    - ssl
    - sigalg
    argTypes:
    - SSL*
    - char**
    constantsTouched: []
    func_position:
      end: 196
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 196
    functionName: SSL_get0_peer_signature_name
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int SSL_get0_peer_signature_name(const SSL *ssl, const
      char **sigalg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/openssl_compat.h:145,1
    - Dst: EVP_get_digestbyname
      Src: /src/openvpn/src/openvpn/openssl_compat.h:147,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/openssl_compat.h:146,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - ctx
    - algorithm
    - properties
    argTypes:
    - void*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: EVP_MD_fetch
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached:
    - EVP_get_digestbyname
    - ASSERT
    linkageType: ''
    returnType: EVP_MD*
    signature: 'static inline const EVP_MD *EVP_MD_fetch(void *ctx, const char *algorithm,
      const char *properties) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - md
    argTypes:
    - EVP_MD*
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 160
    functionName: EVP_MD_free
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void EVP_MD_free(const EVP_MD *md) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_get_error_line_data
      Src: /src/openvpn/src/openvpn/openssl_compat.h:169,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 3
    argCount: 5
    argNames:
    - file
    - line
    - func
    - data
    - flags
    argTypes:
    - char**
    - int*
    - char**
    - char**
    - int*
    constantsTouched: []
    func_position:
      end: 171
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 171
    functionName: ERR_get_error_all
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached:
    - ERR_get_error_line_data
    linkageType: ''
    returnType: unsigned long
    signature: 'static inline unsigned long ERR_get_error_all(const char **file, int
      *line, const char **func, const char **data, int *flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_negotiated_group
      Src: /src/openvpn/src/openvpn/openssl_compat.h:203,1
    - Dst: SSL_group_to_name
      Src: /src/openvpn/src/openvpn/openssl_compat.h:204,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - SSL*
    constantsTouched: []
    func_position:
      end: 205
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 205
    functionName: SSL_get0_group_name
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached:
    - SSL_group_to_name
    - SSL_get_negotiated_group
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *SSL_get0_group_name(SSL *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_peer_signature_nid
      Src: /src/openvpn/src/openvpn/openssl_compat.h:180,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/src/openvpn/openssl_compat.h:183,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 2
    argNames:
    - ssl
    - sigalg
    argTypes:
    - SSL*
    - char**
    constantsTouched: []
    func_position:
      end: 187
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 187
    functionName: SSL_get0_peer_signature_name
    functionSourceFile: /src/openvpn/src/openvpn/openssl_compat.h
    functionUses: []
    functionsReached:
    - SSL_get_peer_signature_nid
    - OBJ_nid2sn
    linkageType: ''
    returnType: int
    signature: 'static inline int SSL_get0_peer_signature_name(SSL *ssl, const char
      **sigalg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - ack
    argTypes:
    - struct reliable_ack*
    constantsTouched: []
    func_position:
      end: 178
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 178
    functionName: reliable_ack_empty
    functionSourceFile: /src/openvpn/src/openvpn/reliable.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool reliable_ack_empty(struct reliable_ack *ack) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - ack
    argTypes:
    - struct reliable_ack*
    constantsTouched: []
    func_position:
      end: 191
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 191
    functionName: reliable_ack_outstanding
    functionSourceFile: /src/openvpn/src/openvpn/reliable.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int reliable_ack_outstanding(struct reliable_ack *ack) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - rel
    - timeout
    argTypes:
    - struct reliable*
    - interval_t
    constantsTouched: []
    func_position:
      end: 533
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 533
    functionName: reliable_set_timeout
    functionSourceFile: /src/openvpn/src/openvpn/reliable.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void reliable_set_timeout(struct reliable *rel, interval_t
      timeout) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - modBits
    - hLen
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 172
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 172
    functionName: xkey_max_saltlen
    functionSourceFile: /src/openvpn/src/openvpn/xkey_common.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int xkey_max_saltlen(int modBits, int hLen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/env_set.h:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 108
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 108
    functionName: is_password_env_var
    functionSourceFile: /src/openvpn/src/openvpn/env_set.h
    functionUses: []
    functionsReached:
    - strncmp
    linkageType: ''
    returnType: bool
    signature: 'static inline bool is_password_env_var(const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_password_env_var
      Src: /src/openvpn/src/openvpn/env_set.h:115,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 121
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 121
    functionName: env_safe_to_print
    functionSourceFile: /src/openvpn/src/openvpn/env_set.h
    functionUses: []
    functionsReached:
    - is_password_env_var
    linkageType: ''
    returnType: bool
    signature: 'static inline bool env_safe_to_print(const char *str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: tls_client_reason
    functionSourceFile: /src/openvpn/src/openvpn/ssl_verify.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static inline const char *tls_client_reason(struct tls_multi *multi) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/shaper.c:74,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 2
    argNames:
    - tv
    - delay
    argTypes:
    - struct timeval*
    - int
    constantsTouched: []
    func_position:
      end: 78
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 78
    functionName: shaper_soonest_event
    functionSourceFile: /src/openvpn/src/openvpn/shaper.c
    functionUses: []
    functionsReached:
    - dmsg
    linkageType: ''
    returnType: bool
    signature: 'bool shaper_soonest_event(struct timeval *tv, int delay) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/shaper.c:89,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct shaper*
    constantsTouched: []
    func_position:
      end: 91
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 91
    functionName: shaper_msg
    functionSourceFile: /src/openvpn/src/openvpn/shaper.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: void
    signature: 'void shaper_msg(struct shaper *s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/shaper.c:83,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - struct shaper*
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 84
    functionName: shaper_reset_wakeup
    functionSourceFile: /src/openvpn/src/openvpn/shaper.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void shaper_reset_wakeup(struct shaper *s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    argCount: 2
    argNames:
    - c
    - ctx
    argTypes:
    - struct context*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 53
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 53
    functionName: net_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/networking.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int net_ctx_init(struct context *c, openvpn_net_ctx_t
      *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: net_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/networking.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void net_ctx_free(openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: net_ctx_reset
    functionSourceFile: /src/openvpn/src/openvpn/networking.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void net_ctx_reset(openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - long_form
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 318
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 318
    functionName: packet_id_size
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int packet_id_size(bool long_form) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_persist_enabled
      Src: /src/openvpn/src/openvpn/packet_id.h:290,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 2
    argNames:
    - p
    - pid
    argTypes:
    - struct packet_id_persist*
    - struct packet_id*
    constantsTouched: []
    func_position:
      end: 295
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 295
    functionName: packet_id_persist_save_obj
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.h
    functionUses: []
    functionsReached:
    - packet_id_persist_enabled
    linkageType: ''
    returnType: void
    signature: 'static inline void packet_id_persist_save_obj(struct packet_id_persist
      *p, const struct packet_id *pid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_send*
    constantsTouched: []
    func_position:
      end: 310
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 310
    functionName: reset_packet_id_send
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void reset_packet_id_send(struct packet_id_send *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - pid
    argTypes:
    - struct packet_id*
    constantsTouched: []
    func_position:
      end: 277
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 277
    functionName: packet_id_initialized
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool packet_id_initialized(const struct packet_id *pid) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_send*
    constantsTouched: []
    func_position:
      end: 324
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 324
    functionName: packet_id_close_to_wrapping
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool packet_id_close_to_wrapping(const struct packet_id_send
      *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_persist*
    constantsTouched: []
    func_position:
      end: 284
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 284
    functionName: packet_id_persist_enabled
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool packet_id_persist_enabled(const struct packet_id_persist
      *p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: packet_id_reap
      Src: /src/openvpn/src/openvpn/packet_id.h:331,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - p
    argTypes:
    - struct packet_id_rec*
    constantsTouched: []
    func_position:
      end: 333
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 333
    functionName: packet_id_reap_test
    functionSourceFile: /src/openvpn/src/openvpn/packet_id.h
    functionUses: []
    functionsReached:
    - packet_id_reap
    linkageType: ''
    returnType: void
    signature: 'static inline void packet_id_reap_test(struct packet_id_rec *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cipher_valid_reason
      Src: /src/openvpn/src/openvpn/crypto_backend.h:207,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 208
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 208
    functionName: cipher_valid
    functionSourceFile: /src/openvpn/src/openvpn/crypto_backend.h
    functionUses: []
    functionsReached:
    - cipher_valid_reason
    linkageType: ''
    returnType: bool
    signature: 'static inline bool cipher_valid(const char *ciphername) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_backend.h:506,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - mdname
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 507
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 507
    functionName: md_defined
    functionSourceFile: /src/openvpn/src/openvpn/crypto_backend.h
    functionUses: []
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: bool
    signature: 'static inline bool md_defined(const char *mdname) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/crypto_backend.h:220,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/crypto_backend.h:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - ciphername
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 222
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 222
    functionName: cipher_defined
    functionSourceFile: /src/openvpn/src/openvpn/crypto_backend.h
    functionUses: []
    functionsReached:
    - strcmp
    - ASSERT
    linkageType: ''
    returnType: bool
    signature: 'static inline bool cipher_defined(const char *ciphername) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MBUF_INDEX
      Src: /src/openvpn/src/openvpn/mbuf.c:55,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/mbuf.c:56,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/mbuf.c:58,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/mbuf.c:59,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct mbuf_set*
    constantsTouched: []
    func_position:
      end: 61
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 61
    functionName: mbuf_free
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - mbuf_free_buf
    - MBUF_INDEX
    - free
    linkageType: ''
    returnType: void
    signature: 'void mbuf_free(struct mbuf_set *ms) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/mbuf.c:81,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/mbuf.c:82,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 1
    argNames:
    - mb
    argTypes:
    - struct mbuf_buffer*
    constantsTouched: []
    func_position:
      end: 85
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 85
    functionName: mbuf_free_buf
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - free_buf
    - free
    linkageType: ''
    returnType: void
    signature: 'void mbuf_free_buf(struct mbuf_buffer *mb) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: MBUF_INDEX
      Src: /src/openvpn/src/openvpn/mbuf.c:118,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 2
    argNames:
    - ms
    - item
    argTypes:
    - struct mbuf_set*
    - struct mbuf_item*
    constantsTouched: []
    func_position:
      end: 128
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 128
    functionName: mbuf_extract_item
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - MBUF_INDEX
    linkageType: ''
    returnType: bool
    signature: 'bool mbuf_extract_item(struct mbuf_set *ms, struct mbuf_item *item) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/mbuf.c:41,1
    - Dst: adjust_power_of_2
      Src: /src/openvpn/src/openvpn/mbuf.c:42,1
    - Dst: ALLOC_ARRAY
      Src: /src/openvpn/src/openvpn/mbuf.c:43,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - size
    argTypes:
    - unsigned int
    constantsTouched: []
    func_position:
      end: 45
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 45
    functionName: mbuf_init
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - adjust_power_of_2
    - ALLOC_OBJ_CLEAR
    - ALLOC_ARRAY
    linkageType: ''
    returnType: struct mbuf_set*
    signature: 'struct mbuf_set *mbuf_init(unsigned int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ
      Src: /src/openvpn/src/openvpn/mbuf.c:67,1
    - Dst: clone_buf
      Src: /src/openvpn/src/openvpn/mbuf.c:68,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 72
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 72
    functionName: mbuf_alloc_buf
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ
    - clone_buf
    linkageType: ''
    returnType: struct mbuf_buffer*
    signature: 'struct mbuf_buffer *mbuf_alloc_buf(const struct buffer *buf) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mbuf.c:90,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/mbuf.c:95,1
    - Dst: mbuf_extract_item
      Src: /src/openvpn/src/openvpn/mbuf.c:94,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mbuf.c:94,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mbuf.c:96,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/mbuf.c:99,1
    - Dst: MBUF_INDEX
      Src: /src/openvpn/src/openvpn/mbuf.c:101,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 2
    argNames:
    - ms
    - item
    argTypes:
    - struct mbuf_set*
    - struct mbuf_item*
    constantsTouched: []
    func_position:
      end: 107
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 107
    functionName: mbuf_add_item
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - msg
    - MBUF_INDEX
    - mbuf_free_buf
    - mbuf_extract_item
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'void mbuf_add_item(struct mbuf_set *ms, const struct mbuf_item *item) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: MBUF_INDEX
      Src: /src/openvpn/src/openvpn/mbuf.c:139,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 8
    argCount: 1
    argNames:
    - ms
    argTypes:
    - struct mbuf_set*
    constantsTouched: []
    func_position:
      end: 148
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 148
    functionName: mbuf_peek_dowork
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - MBUF_INDEX
    linkageType: ''
    returnType: struct multi_instance*
    signature: 'struct multi_instance *mbuf_peek_dowork(struct mbuf_set *ms) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: MBUF_INDEX
      Src: /src/openvpn/src/openvpn/mbuf.c:158,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mbuf.c:164,1
    - Dst: mbuf_free_buf
      Src: /src/openvpn/src/openvpn/mbuf.c:161,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 12
    argCount: 2
    argNames:
    - ms
    - mi
    argTypes:
    - struct mbuf_set*
    - struct multi_instance*
    constantsTouched: []
    func_position:
      end: 168
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 168
    functionName: mbuf_dereference_instance
    functionSourceFile: /src/openvpn/src/openvpn/mbuf.c
    functionUses: []
    functionsReached:
    - mbuf_free_buf
    - MBUF_INDEX
    - msg
    linkageType: ''
    returnType: void
    signature: 'void mbuf_dereference_instance(struct mbuf_set *ms, struct multi_instance
      *mi) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/push.c:138,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:140,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:138,1
    - Dst: ssl_purge_auth
      Src: /src/openvpn/src/openvpn/push.c:166,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/push.c:138,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:172,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:174,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:178,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:180,1
    - Dst: management_notify
      Src: /src/openvpn/src/openvpn/push.c:185,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 35
    argCount: 4
    argNames:
    - c
    - buffer
    - restart
    - adv
    argTypes:
    - struct context*
    - struct buffer*
    - bool
    - int
    constantsTouched: []
    func_position:
      end: 189
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 189
    functionName: server_pushed_signal
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - BSTR
    - msg
    - management_notify
    - BLEN
    - register_signal
    - ssl_purge_auth
    - buf_read_u8
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'void server_pushed_signal(struct context *c, const struct buffer *buffer,
      const bool restart, const int adv) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/push.c:303,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:304,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:303,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/push.c:304,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/push.c:309,1
    - Dst: management_set_state
      Src: /src/openvpn/src/openvpn/push.c:325,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:326,1
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/push.c:330,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/push.c:332,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:334,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 23
    argCount: 2
    argNames:
    - buffer
    - server_timeout
    argTypes:
    - struct buffer*
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 337
      start: 296
    functionDepth: 0
    functionLinenumber: 296
    functionLinenumberEnd: 337
    functionName: parse_auth_pending_keywords
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - sscanf
    - management_set_state
    - BSTR
    - msg
    - BLEN
    - buf_parse
    - strlen
    - buf_read_u8
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'static void parse_auth_pending_keywords(const struct buffer *buffer,
      unsigned int *server_timeout) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:508,1
    - Dst: process_incoming_push_msg
      Src: /src/openvpn/src/openvpn/push.c:513,1
    - Dst: sanitize_control_message
      Src: /src/openvpn/src/openvpn/push.c:511,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:511,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:511,1
    - Dst: pull_permission_mask
      Src: /src/openvpn/src/openvpn/push.c:514,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:519,1
    - Dst: sanitize_control_message
      Src: /src/openvpn/src/openvpn/push.c:519,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:519,1
    - Dst: options_postprocess_pull
      Src: /src/openvpn/src/openvpn/push.c:528,1
    - Dst: do_up
      Src: /src/openvpn/src/openvpn/push.c:532,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/push.c:538,1
    - Dst: event_timeout_clear
      Src: /src/openvpn/src/openvpn/push.c:539,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:545,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:547,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:534,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 30
    argCount: 2
    argNames:
    - c
    - buffer
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 548
      start: 505
    functionDepth: 0
    functionLinenumber: 505
    functionLinenumberEnd: 548
    functionName: incoming_push_message
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - process_incoming_push_msg
    - sanitize_control_message
    - do_up
    - BSTR
    - pull_permission_mask
    - msg
    - event_timeout_clear
    - gc_new
    - register_signal
    - options_postprocess_pull
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void incoming_push_message(struct context *c, const struct buffer
      *buffer) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:741,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:746,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/push.c:746,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:742,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:744,1
    - Dst: buf_reset_len
      Src: /src/openvpn/src/openvpn/push.c:753,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:754,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:757,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:759,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:762,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 25
    argCount: 6
    argNames:
    - c
    - buf
    - push_list
    - safe_cap
    - push_sent
    - multi_push
    argTypes:
    - struct context*
    - struct buffer*
    - struct push_list*
    - int
    - bool*
    - bool*
    constantsTouched: []
    func_position:
      end: 767
      start: 730
    functionDepth: 0
    functionLinenumber: 730
    functionLinenumberEnd: 767
    functionName: send_push_options
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - msg
    - BLEN
    - buf_reset_len
    - send_control_channel_string
    - strlen
    linkageType: ''
    returnType: bool
    signature: 'static bool send_push_options(struct context *c, struct buffer *buf,
      struct push_list *push_list, int safe_cap, bool *push_sent, bool *multi_push) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/push.c:934,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 935
      start: 931
    functionDepth: 0
    functionLinenumber: 931
    functionLinenumberEnd: 935
    functionName: push_reset
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - CLEAR
    linkageType: ''
    returnType: void
    signature: 'void push_reset(struct options *o) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: tls_authentication_status
      Src: /src/openvpn/src/openvpn/push.c:981,1
    - Dst: send_auth_failed
      Src: /src/openvpn/src/openvpn/push.c:985,1
    - Dst: openvpn_time
      Src: /src/openvpn/src/openvpn/push.c:993,1
    - Dst: tls_authentication_status
      Src: /src/openvpn/src/openvpn/push.c:988,1
    - Dst: tls_client_reason
      Src: /src/openvpn/src/openvpn/push.c:984,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:1002,1
    - Dst: prepare_push_reply
      Src: /src/openvpn/src/openvpn/push.c:1004,1
    - Dst: send_push_reply
      Src: /src/openvpn/src/openvpn/push.c:1005,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:1010,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 30
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 1019
      start: 975
    functionDepth: 0
    functionLinenumber: 975
    functionLinenumberEnd: 1019
    functionName: process_incoming_push_request
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - send_push_reply
    - prepare_push_reply
    - tls_authentication_status
    - gc_new
    - openvpn_time
    - gc_free
    - send_auth_failed
    - tls_client_reason
    linkageType: ''
    returnType: int
    signature: 'int process_incoming_push_request(struct context *c) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/push.c:194,1
    - Dst: management_notify
      Src: /src/openvpn/src/openvpn/push.c:221,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:216,1
    - Dst: schedule_exit
      Src: /src/openvpn/src/openvpn/push.c:208,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 224
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 224
    functionName: receive_exit_message
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - management_notify
    - schedule_exit
    - register_signal
    - dmsg
    linkageType: ''
    returnType: void
    signature: 'void receive_exit_message(struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: max_uint
      Src: /src/openvpn/src/openvpn/push.c:349,1
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/push.c:361,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:357,1
    - Dst: min_uint
      Src: /src/openvpn/src/openvpn/push.c:359,1
    - Dst: parse_auth_pending_keywords
      Src: /src/openvpn/src/openvpn/push.c:355,1
    - Dst: min_uint
      Src: /src/openvpn/src/openvpn/push.c:362,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 2
    argNames:
    - c
    - buffer
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 363
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 363
    functionName: receive_auth_pending
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - parse_auth_pending_keywords
    - msg
    - get_primary_key
    - max_uint
    - min_uint
    linkageType: ''
    returnType: void
    signature: 'void receive_auth_pending(struct context *c, const struct buffer *buffer) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/push.c:553,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/push.c:567,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:571,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:574,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 577
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 577
    functionName: send_push_request
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - msg
    - send_control_channel_string
    - get_primary_key
    - register_signal
    linkageType: ''
    returnType: bool
    signature: 'bool send_push_request(struct context *c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:772,1
    - Dst: prepare_auth_token_push_reply
      Src: /src/openvpn/src/openvpn/push.c:776,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/push.c:780,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:784,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/push.c:783,1
    - Dst: send_control_channel_string_dowork
      Src: /src/openvpn/src/openvpn/push.c:785,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:785,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:786,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 10
    argCount: 1
    argNames:
    - multi
    argTypes:
    - struct tls_multi*
    constantsTouched: []
    func_position:
      end: 787
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 787
    functionName: send_push_reply_auth_token
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - prepare_auth_token_push_reply
    - gc_new
    - send_control_channel_string_dowork
    - gc_free
    - ASSERT
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void send_push_reply_auth_token(struct tls_multi *multi) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:940,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:964,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/push.c:950,1
    - Dst: streq
      Src: /src/openvpn/src/openvpn/push.c:943,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/push.c:964,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:966,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 19
    argCount: 2
    argNames:
    - o
    - p
    argTypes:
    - struct options*
    - char*
    constantsTouched: []
    func_position:
      end: 973
      start: 937
    functionDepth: 0
    functionLinenumber: 937
    functionLinenumberEnd: 973
    functionName: push_remove_option
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - strlen
    - msg
    - streq
    - strncmp
    linkageType: ''
    returnType: void
    signature: 'void push_remove_option(struct options *o, const char *p) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_parse
      Src: /src/openvpn/src/openvpn/push.c:1025,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/push.c:1030,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/push.c:1028,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/push.c:1035,1
    - Dst: strprefix
      Src: /src/openvpn/src/openvpn/push.c:1029,1
    - Dst: md_ctx_update
      Src: /src/openvpn/src/openvpn/push.c:1039,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:1039,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 16
    argCount: 3
    argNames:
    - ctx
    - buf
    - opt
    argTypes:
    - md_ctx_t*
    - struct buffer*
    - struct options*
    constantsTouched: []
    func_position:
      end: 1041
      start: 1021
    functionDepth: 0
    functionLinenumber: 1021
    functionLinenumberEnd: 1041
    functionName: push_update_digest
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - strprefix
    - strlen
    - md_ctx_update
    - buf_parse
    linkageType: ''
    returnType: void
    signature: 'static void push_update_digest(md_ctx_t *ctx, struct buffer *buf,
      const struct options *opt) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: schedule_exit
      Src: /src/openvpn/src/openvpn/push.c:497,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/push.c:498,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - c
    - kill_msg
    argTypes:
    - struct context*
    - char*
    constantsTouched: []
    func_position:
      end: 499
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 499
    functionName: send_restart
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - schedule_exit
    - send_control_channel_string
    linkageType: ''
    returnType: void
    signature: 'void send_restart(struct context *c, const char *kill_msg) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: ssl_put_auth_challenge
      Src: /src/openvpn/src/openvpn/push.c:122,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:52,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:52,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/push.c:120,1
    - Dst: auth_retry_get
      Src: /src/openvpn/src/openvpn/push.c:91,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:95,1
    - Dst: buf_string_compare_advance
      Src: /src/openvpn/src/openvpn/push.c:64,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:67,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:75,1
    - Dst: ssl_clean_auth_token
      Src: /src/openvpn/src/openvpn/push.c:83,1
    - Dst: ssl_purge_auth
      Src: /src/openvpn/src/openvpn/push.c:99,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:120,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:122,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:69,1
    - Dst: buf_string_match_head_str
      Src: /src/openvpn/src/openvpn/push.c:72,1
    - Dst: parse_auth_failed_temp
      Src: /src/openvpn/src/openvpn/push.c:74,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:74,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:86,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/push.c:108,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/push.c:104,1
    - Dst: management_auth_failure
      Src: /src/openvpn/src/openvpn/push.c:114,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 39
    argCount: 2
    argNames:
    - c
    - buffer
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 126
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 126
    functionName: receive_auth_failed
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - auth_retry_get
    - buf_string_compare_advance
    - buf_string_match_head_str
    - ssl_put_auth_challenge
    - BSTR
    - msg
    - ssl_clean_auth_token
    - BLEN
    - register_signal
    - ASSERT
    - strlen
    - ssl_purge_auth
    - management_auth_failure
    - parse_auth_failed_temp
    linkageType: ''
    returnType: void
    signature: 'void receive_auth_failed(struct context *c, const struct buffer *buffer) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/push.c:233,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:235,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/push.c:233,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:242,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:233,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/push.c:248,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:249,1
    - Dst: management_notify_generic
      Src: /src/openvpn/src/openvpn/push.c:251,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:251,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:255,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:258,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:261,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 22
    argCount: 2
    argNames:
    - buffer
    - adv
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 262
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 262
    functionName: server_pushed_info
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - management_notify_generic
    - BSTR
    - buf_printf
    - msg
    - BLEN
    - gc_new
    - gc_free
    - alloc_buf_gc
    - buf_read_u8
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'void server_pushed_info(const struct buffer *buffer, const int adv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: push_option_ex
      Src: /src/openvpn/src/openvpn/push.c:886,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - o
    - opt
    - msglevel
    argTypes:
    - struct options*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 887
      start: 883
    functionDepth: 0
    functionLinenumber: 883
    functionLinenumberEnd: 887
    functionName: push_option
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - push_option_ex
    linkageType: ''
    returnType: void
    signature: 'void push_option(struct options *o, const char *opt, int msglevel) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:792,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/push.c:793,1
    - Dst: BCAP
      Src: /src/openvpn/src/openvpn/push.c:796,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:799,1
    - Dst: send_push_options
      Src: /src/openvpn/src/openvpn/push.c:802,1
    - Dst: send_push_options
      Src: /src/openvpn/src/openvpn/push.c:809,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:817,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:820,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/push.c:822,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:822,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:846,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:838,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:839,1
    - Dst: send_control_channel_string
      Src: /src/openvpn/src/openvpn/push.c:839,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:850,1
    - Dst: buf_reset_len
      Src: /src/openvpn/src/openvpn/push.c:837,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 34
    argCount: 2
    argNames:
    - c
    - per_client_push_list
    argTypes:
    - struct context*
    - struct push_list*
    constantsTouched: []
    func_position:
      end: 852
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 852
    functionName: send_push_reply
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - BLEN
    - buf_reset_len
    - gc_new
    - send_control_channel_string
    - gc_free
    - send_push_options
    - BCAP
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool send_push_reply(struct context *c, struct push_list *per_client_push_list) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/push.c:270,1
    - Dst: get_primary_key
      Src: /src/openvpn/src/openvpn/push.c:278,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/push.c:270,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:272,1
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/push.c:270,1
    - Dst: management_notify_client_cr_response
      Src: /src/openvpn/src/openvpn/push.c:280,1
    - Dst: verify_crresponse_plugin
      Src: /src/openvpn/src/openvpn/push.c:283,1
    - Dst: verify_crresponse_script
      Src: /src/openvpn/src/openvpn/push.c:285,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:286,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 15
    argCount: 2
    argNames:
    - c
    - buffer
    argTypes:
    - struct context*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 287
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 287
    functionName: receive_cr_response
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - verify_crresponse_plugin
    - BSTR
    - msg
    - management_notify_client_cr_response
    - BLEN
    - get_primary_key
    - verify_crresponse_script
    - buf_read_u8
    - buf_advance
    linkageType: ''
    returnType: void
    signature: 'void receive_cr_response(struct context *c, const struct buffer *buffer) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: string_class
      Src: /src/openvpn/src/openvpn/push.c:858,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/push.c:870,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:860,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/push.c:876,1
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/push.c:865,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 5
    argNames:
    - gc
    - push_list
    - opt
    - enable
    - msglevel
    argTypes:
    - struct gc_arena*
    - struct push_list*
    - char*
    - bool
    - int
    constantsTouched: []
    func_position:
      end: 881
      start: 854
    functionDepth: 0
    functionLinenumber: 854
    functionLinenumberEnd: 881
    functionName: push_option_ex
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - string_class
    - msg
    - ALLOC_OBJ_CLEAR_GC
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void push_option_ex(struct gc_arena *gc, struct push_list *push_list,
      const char *opt, bool enable, int msglevel) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: push_reset
      Src: /src/openvpn/src/openvpn/push.c:895,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/push.c:899,1
    - Dst: push_option_ex
      Src: /src/openvpn/src/openvpn/push.c:898,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 903
      start: 889
    functionDepth: 0
    functionLinenumber: 889
    functionLinenumberEnd: 903
    functionName: clone_push_list
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - push_reset
    - push_option_ex
    - string_alloc
    linkageType: ''
    returnType: void
    signature: 'void clone_push_list(struct options *o) '
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: prepare_auth_token_push_reply
      Src: /src/openvpn/src/openvpn/push.c:664,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/push.c:678,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/push.c:633,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:688,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:703,1
    - Dst: extract_var_peer_info
      Src: /src/openvpn/src/openvpn/push.c:713,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:649,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/push.c:651,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:657,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:675,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/push.c:706,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:682,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:717,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:720,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:632,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/push.c:635,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/push.c:650,1
    - Dst: tls_peer_supports_ncp
      Src: /src/openvpn/src/openvpn/push.c:673,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:693,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:698,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:708,1
    - Dst: buf_str
      Src: /src/openvpn/src/openvpn/push.c:708,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/push.c:715,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 53
    argCount: 3
    argNames:
    - c
    - gc
    - push_list
    argTypes:
    - struct context*
    - struct gc_arena*
    - struct push_list*
    constantsTouched: []
    func_position:
      end: 728
      start: 622
    functionDepth: 0
    functionLinenumber: 622
    functionLinenumberEnd: 728
    functionName: prepare_push_reply
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - buf_str
    - sscanf
    - buf_printf
    - print_in_addr_t
    - msg
    - prepare_auth_token_push_reply
    - buf_len
    - print_in6_addr
    - push_option_fmt
    - alloc_buf_gc
    - extract_var_peer_info
    - tls_peer_supports_ncp
    linkageType: ''
    returnType: bool
    signature: 'bool prepare_push_reply(struct context *c, struct gc_arena *gc, struct
      push_list *push_list) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: make_extended_arg_array
      Src: /src/openvpn/src/openvpn/push.c:908,1
    - Dst: push_option
      Src: /src/openvpn/src/openvpn/push.c:910,1
    - Dst: print_argv
      Src: /src/openvpn/src/openvpn/push.c:909,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 4
    argCount: 4
    argNames:
    - o
    - p
    - msglevel
    - gc
    argTypes:
    - struct options*
    - char**
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 911
      start: 905
    functionDepth: 0
    functionLinenumber: 905
    functionLinenumberEnd: 911
    functionName: push_options
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - push_option
    - print_argv
    - make_extended_arg_array
    linkageType: ''
    returnType: void
    signature: 'void push_options(struct options *o, char **p, int msglevel, struct
      gc_arena *gc) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: buf_read_u8
      Src: /src/openvpn/src/openvpn/push.c:1050,1
    - Dst: md_ctx_new
      Src: /src/openvpn/src/openvpn/push.c:1056,1
    - Dst: apply_push_options
      Src: /src/openvpn/src/openvpn/push.c:1060,1
    - Dst: push_update_digest
      Src: /src/openvpn/src/openvpn/push.c:1066,1
    - Dst: md_ctx_init
      Src: /src/openvpn/src/openvpn/push.c:1057,1
    - Dst: md_ctx_final
      Src: /src/openvpn/src/openvpn/push.c:1072,1
    - Dst: md_ctx_cleanup
      Src: /src/openvpn/src/openvpn/push.c:1074,1
    - Dst: md_ctx_free
      Src: /src/openvpn/src/openvpn/push.c:1075,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 24
    argCount: 4
    argNames:
    - c
    - permission_mask
    - option_types_found
    - buf
    argTypes:
    - struct context*
    - unsigned int
    - unsigned int*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 1093
      start: 1043
    functionDepth: 0
    functionLinenumber: 1043
    functionLinenumberEnd: 1093
    functionName: process_incoming_push_reply
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - apply_push_options
    - md_ctx_free
    - md_ctx_init
    - md_ctx_new
    - md_ctx_cleanup
    - buf_read_u8
    - push_update_digest
    - md_ctx_final
    linkageType: ''
    returnType: int
    signature: 'static int process_incoming_push_reply(struct context *c, unsigned
      int permission_mask, unsigned int *option_types_found, struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/openvpn/src/openvpn/push.c:920,1
    - Dst: push_option_ex
      Src: /src/openvpn/src/openvpn/push.c:927,1
    - Dst: vsnprintf
      Src: /src/openvpn/src/openvpn/push.c:921,1
    - Dst: va_end
      Src: /src/openvpn/src/openvpn/push.c:922,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/push.c:927,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 4
    argNames:
    - gc
    - push_list
    - msglevel
    - format
    - '...'
    argTypes:
    - struct gc_arena*
    - struct push_list*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 929
      start: 913
    functionDepth: 0
    functionLinenumber: 913
    functionLinenumberEnd: 929
    functionName: push_option_fmt
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - va_end
    - vsnprintf
    - va_start
    - push_option_ex
    - string_alloc
    linkageType: ''
    returnType: bool
    signature: 'static bool push_option_fmt(struct gc_arena *gc, struct push_list
      *push_list, int msglevel, const char *format, ...) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_string_compare_advance
      Src: /src/openvpn/src/openvpn/push.c:1104,1
    - Dst: buf_string_compare_advance
      Src: /src/openvpn/src/openvpn/push.c:1110,1
    - Dst: process_incoming_push_request
      Src: /src/openvpn/src/openvpn/push.c:1107,1
    - Dst: process_incoming_push_reply
      Src: /src/openvpn/src/openvpn/push.c:1112,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 10
    argCount: 5
    argNames:
    - c
    - buffer
    - honor_received_options
    - permission_mask
    - option_types_found
    argTypes:
    - struct context*
    - struct buffer*
    - bool
    - unsigned int
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 1119
      start: 1095
    functionDepth: 0
    functionLinenumber: 1095
    functionLinenumberEnd: 1119
    functionName: process_incoming_push_msg
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - process_incoming_push_reply
    - buf_string_compare_advance
    - process_incoming_push_request
    linkageType: ''
    returnType: int
    signature: 'int process_incoming_push_msg(struct context *c, const struct buffer
      *buffer, bool honor_received_options, unsigned int permission_mask, unsigned
      int *option_types_found) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: schedule_exit
      Src: /src/openvpn/src/openvpn/push.c:398,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:404,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/push.c:415,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:408,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:400,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:416,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:419,1
    - Dst: send_control_channel_string_dowork
      Src: /src/openvpn/src/openvpn/push.c:424,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:425,1
    - Dst: send_control_channel_string_dowork
      Src: /src/openvpn/src/openvpn/push.c:426,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:427,1
    - Dst: reschedule_multi_process
      Src: /src/openvpn/src/openvpn/push.c:429,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:433,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 24
    argCount: 2
    argNames:
    - c
    - client_reason
    argTypes:
    - struct context*
    - char*
    constantsTouched: []
    func_position:
      end: 434
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 434
    functionName: send_auth_failed
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - msg
    - gc_new
    - send_control_channel_string_dowork
    - gc_free
    - reschedule_multi_process
    - strlen
    - schedule_exit
    - alloc_buf_gc
    linkageType: ''
    returnType: void
    signature: 'void send_auth_failed(struct context *c, const char *client_reason) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:597,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/push.c:609,1
    - Dst: push_option_fmt
      Src: /src/openvpn/src/openvpn/push.c:606,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:602,1
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/push.c:601,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 11
    argCount: 3
    argNames:
    - tls_multi
    - gc
    - push_list
    argTypes:
    - struct tls_multi*
    - struct gc_arena*
    - struct push_list*
    constantsTouched: []
    func_position:
      end: 611
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 611
    functionName: prepare_auth_token_push_reply
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - strlen
    - push_option_fmt
    - openvpn_base64_encode
    - free
    linkageType: ''
    returnType: void
    signature: 'void prepare_auth_token_push_reply(struct tls_multi *tls_multi, struct
      gc_arena *gc, struct push_list *push_list) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: extract_iv_proto
      Src: /src/openvpn/src/openvpn/push.c:447,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:456,1
    - Dst: max_uint
      Src: /src/openvpn/src/openvpn/push.c:451,1
    - Dst: send_control_channel_string_dowork
      Src: /src/openvpn/src/openvpn/push.c:459,1
    - Dst: min_uint
      Src: /src/openvpn/src/openvpn/push.c:454,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/push.c:467,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:468,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:469,1
    - Dst: send_control_channel_string_dowork
      Src: /src/openvpn/src/openvpn/push.c:470,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:470,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/push.c:473,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:487,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:482,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/push.c:483,1
    - Dst: send_control_channel_string_dowork
      Src: /src/openvpn/src/openvpn/push.c:483,1
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/push.c:480,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:476,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/push.c:481,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 36
    argCount: 4
    argNames:
    - tls_multi
    - session
    - extra
    - timeout
    argTypes:
    - struct tls_multi*
    - struct tls_session*
    - char*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 489
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 489
    functionName: send_auth_pending_messages
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - extract_iv_proto
    - gc_new
    - max_uint
    - send_control_channel_string_dowork
    - min_uint
    - gc_free
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: bool
    signature: 'bool send_auth_pending_messages(struct tls_multi *tls_multi, struct
      tls_session *session, const char *extra, unsigned int timeout) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/push.c:1130,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/push.c:1140,1
    - Dst: parse_line
      Src: /src/openvpn/src/openvpn/push.c:1142,1
    - Dst: SIZE
      Src: /src/openvpn/src/openvpn/push.c:1142,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/push.c:1145,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/push.c:1149,1
    - Dst: getaddr
      Src: /src/openvpn/src/openvpn/push.c:1150,1
    - Dst: netbits_to_netmask
      Src: /src/openvpn/src/openvpn/push.c:1160,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/push.c:1168,1
    - Dst: get_ipv6_addr
      Src: /src/openvpn/src/openvpn/push.c:1176,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/push.c:1183,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/push.c:1197,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/push.c:1204,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 61
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct options*
    constantsTouched: []
    func_position:
      end: 1206
      start: 1125
    functionDepth: 0
    functionLinenumber: 1125
    functionLinenumberEnd: 1206
    functionName: remove_iroutes_from_push_route_list
    functionSourceFile: /src/openvpn/src/openvpn/push.c
    functionUses: []
    functionsReached:
    - get_ipv6_addr
    - netbits_to_netmask
    - parse_line
    - msg
    - SIZE
    - gc_new
    - strcmp
    - CLEAR
    - gc_free
    - getaddr
    - memcmp
    linkageType: ''
    returnType: void
    signature: 'void remove_iroutes_from_push_route_list(struct options *o) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/mstats.c:60,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/mstats.c:75,1
    - Dst: open
      Src: /src/openvpn/src/openvpn/mstats.c:66,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mstats.c:62,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mstats.c:69,1
    - Dst: write
      Src: /src/openvpn/src/openvpn/mstats.c:77,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mstats.c:80,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/mstats.c:81,1
    - Dst: mmap
      Src: /src/openvpn/src/openvpn/mstats.c:86,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mstats.c:89,1
    - Dst: strcpy
      Src: /src/openvpn/src/openvpn/mstats.c:101,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mstats.c:106,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mstats.c:97,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/mstats.c:95,1
    - Dst: close
      Src: /src/openvpn/src/openvpn/mstats.c:90,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 35
    argCount: 1
    argNames:
    - fn
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 107
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 107
    functionName: mstats_open
    functionSourceFile: /src/openvpn/src/openvpn/mstats.c
    functionUses: []
    functionsReached:
    - mmap
    - msg
    - CLEAR
    - write
    - strcpy
    - open
    - strlen
    - close
    linkageType: ''
    returnType: void
    signature: 'void mstats_open(const char *fn) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: munmap
      Src: /src/openvpn/src/openvpn/mstats.c:115,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/mstats.c:117,1
    - Dst: platform_unlink
      Src: /src/openvpn/src/openvpn/mstats.c:119,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 122
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 122
    functionName: mstats_close
    functionSourceFile: /src/openvpn/src/openvpn/mstats.c
    functionUses: []
    functionsReached:
    - munmap
    - msg
    - platform_unlink
    linkageType: ''
    returnType: void
    signature: 'void mstats_close(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: mbed_log_func_line
      Src: /src/openvpn/src/openvpn/crypto_mbedtls.h:131,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 4
    argNames:
    - flags
    - errval
    - func
    - line
    argTypes:
    - unsigned int
    - int
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 134
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 134
    functionName: mbed_log_func_line_lite
    functionSourceFile: /src/openvpn/src/openvpn/crypto_mbedtls.h
    functionUses: []
    functionsReached:
    - mbed_log_func_line
    linkageType: ''
    returnType: bool
    signature: 'static inline bool mbed_log_func_line_lite(unsigned int flags, int
      errval, const char *func, int line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: make_base64_string2
      Src: /src/openvpn/src/openvpn/proxy.c:239,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:239,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - str
    - gc
    argTypes:
    - uint8_t*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 240
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 240
    functionName: make_base64_string
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - strlen
    - make_base64_string2
    linkageType: ''
    returnType: uint8_t*
    signature: 'uint8_t *make_base64_string(const uint8_t *str, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:313,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:318,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/proxy.c:317,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 3
    argNames:
    - sd
    - timeout
    - signal_received
    argTypes:
    - socket_descriptor_t
    - int
    - int*
    constantsTouched: []
    func_position:
      end: 320
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 320
    functionName: dump_residual
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - chomp
    - msg
    - recv_line
    linkageType: ''
    returnType: void
    signature: 'static void dump_residual(socket_descriptor_t sd, int timeout, volatile
      int *signal_received) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf_gc
      Src: /src/openvpn/src/openvpn/proxy.c:246,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:246,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:246,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:247,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:247,1
    - Dst: buf_printf
      Src: /src/openvpn/src/openvpn/proxy.c:248,1
    - Dst: make_base64_string
      Src: /src/openvpn/src/openvpn/proxy.c:249,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/proxy.c:249,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/proxy.c:250,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/proxy.c:250,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 14
    argCount: 2
    argNames:
    - p
    - gc
    argTypes:
    - struct http_proxy_info*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 252
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 252
    functionName: username_password_as_base64
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - BSTR
    - buf_printf
    - make_base64_string
    - secure_memzero
    - ASSERT
    - strlen
    - alloc_buf_gc
    linkageType: ''
    returnType: char*
    signature: 'static const char *username_password_as_base64(const struct http_proxy_info
      *p, struct gc_arena *gc) '
  - BBCount: 42
    BranchProfiles: []
    Callsites:
    - Dst: add_proxy_headers
      Src: /src/openvpn/src/openvpn/proxy.c:695,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:726,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:751,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/proxy.c:790,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:827,1
    - Dst: send_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:857,1
    - Dst: format_hex
      Src: /src/openvpn/src/openvpn/proxy.c:1091,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:787,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:917,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:912,1
    - Dst: DigestCalcResponse
      Src: /src/openvpn/src/openvpn/proxy.c:935,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:883,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:982,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:1033,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proxy.c:1089,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/proxy.c:1101,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/proxy.c:912,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:738,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/proxy.c:992,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:1021,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/proxy.c:1091,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/proxy.c:874,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:818,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/proxy.c:729,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/proxy.c:1006,1
    - Dst: get_proxy_authenticate
      Src: /src/openvpn/src/openvpn/proxy.c:1020,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/proxy.c:742,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:769,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:983,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1028,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1052,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:1064,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1091,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:844,1
    - Dst: username_password_as_base64
      Src: /src/openvpn/src/openvpn/proxy.c:708,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:711,1
    - Dst: add_proxy_headers
      Src: /src/openvpn/src/openvpn/proxy.c:960,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:1072,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:821,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:806,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:721,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:751,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/proxy.c:757,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:798,1
    - Dst: send_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:987,1
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:901,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:906,1
    - Dst: unprotect_user_pass
      Src: /src/openvpn/src/openvpn/proxy.c:670,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:687,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:709,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:813,1
    - Dst: register_signal
      Src: /src/openvpn/src/openvpn/proxy.c:1102,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:782,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:828,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:847,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:951,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1043,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:1081,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:707,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:759,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:863,1
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:899,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/proxy.c:924,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:995,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1011,1
    - Dst: get_user_pass_http
      Src: /src/openvpn/src/openvpn/proxy.c:664,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:690,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/proxy.c:762,1
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/proxy.c:1096,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/proxy.c:1103,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/proxy.c:792,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:803,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:850,1
    - Dst: make_base64_string2
      Src: /src/openvpn/src/openvpn/proxy.c:913,1
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/proxy.c:651,1
    - Dst: clear_user_pass_http
      Src: /src/openvpn/src/openvpn/proxy.c:668,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:682,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:730,1
    - Dst: send_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:745,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:1072,1
    - Dst: ntlm_phase_1
      Src: /src/openvpn/src/openvpn/proxy.c:727,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:946,1
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:902,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1061,1
    - Dst: dump_residual
      Src: /src/openvpn/src/openvpn/proxy.c:1064,1
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/proxy.c:1097,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:720,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:728,1
    - Dst: dmsg
      Src: /src/openvpn/src/openvpn/proxy.c:710,1
    - Dst: add_proxy_headers
      Src: /src/openvpn/src/openvpn/proxy.c:834,1
    - Dst: ntlm_phase_3
      Src: /src/openvpn/src/openvpn/proxy.c:841,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:925,1
    - Dst: DigestCalcHA1
      Src: /src/openvpn/src/openvpn/proxy.c:928,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:966,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:1044,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:851,1
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:900,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:923,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:782,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/proxy.c:786,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:871,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1003,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1032,1
    - Dst: store_proxy_authenticate
      Src: /src/openvpn/src/openvpn/proxy.c:1037,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/proxy.c:1091,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/proxy.c:869,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:839,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:954,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:791,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:863,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:995,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/proxy.c:1001,1
    CyclomaticComplexity: 115
    EdgeCount: 115
    ICount: 230
    argCount: 7
    argNames:
    - p
    - sd
    - /* already open to proxy */
    - host
    - /* openvpn server remote */
    - port
    - /* openvpn server port */
    - server_poll_timeout
    - lookahead
    - sig_info
    argTypes:
    - struct http_proxy_info*
    - socket_descriptor_t
    - char*
    - char*
    - struct event_timeout*
    - struct buffer*
    - struct signal_info*
    constantsTouched: []
    func_position:
      end: 1105
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 1105
    functionName: establish_http_proxy_passthru
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - sscanf
    - dmsg
    - msg
    - ntlm_phase_3
    - BLEN
    - purge_user_pass
    - get_proxy_authenticate
    - rand_bytes
    - free
    - get_server_poll_remaining_time
    - add_proxy_headers
    - DigestCalcHA1
    - BPTR
    - gc_new
    - register_signal
    - secure_memzero
    - gc_free
    - make_base64_string2
    - DigestCalcResponse
    - unprotect_user_pass
    - dump_residual
    - username_password_as_base64
    - get_pa_var
    - recv_line
    - format_hex
    - send_line_crlf
    - CLEAR
    - strlen
    - ntlm_phase_1
    - send_crlf
    - store_proxy_authenticate
    - snprintf
    - get_user_pass_http
    - gc_malloc
    - ASSERT
    - chomp
    - clear_user_pass_http
    linkageType: ''
    returnType: bool
    signature: 'bool establish_http_proxy_passthru(struct http_proxy_info *p, socket_descriptor_t
      sd, /* already open to proxy */ const char *host, /* openvpn server remote */
      const char *port, /* openvpn server port */ struct event_timeout *server_poll_timeout,
      struct buffer *lookahead, struct signal_info *sig_info) '
  - BBCount: 11
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 35
    argCount: 6
    argNames:
    - str
    - /* source string */
    - key
    - /* key stored here */
    - value
    - /* value stored here */
    - max_key_len
    - max_value_len
    - endptr
    argTypes:
    - char*
    - char*
    - char*
    - int
    - int
    - char**
    constantsTouched: []
    func_position:
      end: 466
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 466
    functionName: get_key_value
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool get_key_value(const char *str, /* source string */ char
      *key, /* key stored here */ char *value, /* value stored here */ int max_key_len,
      int max_value_len, const char **endptr) /* next search position */ '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:902,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:951,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:946,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:983,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:995,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:982,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:883,1
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:899,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:912,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:917,1
    - Dst: DigestCalcResponse
      Src: /src/openvpn/src/openvpn/proxy.c:935,1
    - Dst: add_proxy_headers
      Src: /src/openvpn/src/openvpn/proxy.c:960,1
    - Dst: DigestCalcHA1
      Src: /src/openvpn/src/openvpn/proxy.c:928,1
    - Dst: gc_malloc
      Src: /src/openvpn/src/openvpn/proxy.c:924,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:925,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:966,1
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:900,1
    - Dst: rand_bytes
      Src: /src/openvpn/src/openvpn/proxy.c:912,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:923,1
    - Dst: send_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:987,1
    - Dst: secure_memzero
      Src: /src/openvpn/src/openvpn/proxy.c:992,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1003,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1011,1
    - Dst: get_pa_var
      Src: /src/openvpn/src/openvpn/proxy.c:901,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:906,1
    - Dst: make_base64_string2
      Src: /src/openvpn/src/openvpn/proxy.c:913,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:954,1
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:995,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/proxy.c:1001,1
    - Dst: sscanf
      Src: /src/openvpn/src/openvpn/proxy.c:1006,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 56
    argCount: 1
    argNames:
    - processed
    argTypes:
    - p
    constantsTouched: []
    func_position:
      end: 1014
      start: 879
    functionDepth: 0
    functionLinenumber: 879
    functionLinenumberEnd: 1014
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - get_pa_var
    - sscanf
    - recv_line
    - DigestCalcHA1
    - msg
    - snprintf
    - gc_malloc
    - secure_memzero
    - rand_bytes
    - send_line_crlf
    - make_base64_string2
    - ASSERT
    - DigestCalcResponse
    - chomp
    - strlen
    - get_server_poll_remaining_time
    - send_crlf
    - add_proxy_headers
    linkageType: ''
    returnType: else
    signature: 'else if (p->auth_method == HTTP_AUTH_DIGEST && !processed) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - sd
    argTypes:
    - socket_descriptor_t
    constantsTouched: []
    func_position:
      end: 223
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 223
    functionName: send_crlf
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - send_line_crlf
    linkageType: ''
    returnType: bool
    signature: 'static bool send_crlf(socket_descriptor_t sd) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_key_value
      Src: /src/openvpn/src/openvpn/proxy.c:477,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/proxy.c:482,1
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/proxy.c:495,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/proxy.c:480,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 14
    argCount: 3
    argNames:
    - key
    - pa
    - gc
    argTypes:
    - char*
    - char*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 500
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 500
    functionName: get_pa_var
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - strcmp
    - get_key_value
    - isspace
    - string_alloc
    linkageType: ''
    returnType: char*
    signature: 'static char *get_pa_var(const char *key, const char *pa, struct gc_arena
      *gc) '
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:110,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:133,1
    - Dst: isprint
      Src: /src/openvpn/src/openvpn/proxy.c:139,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:141,1
    - Dst: recv
      Src: /src/openvpn/src/openvpn/proxy.c:126,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:145,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:164,1
    - Dst: buf_init
      Src: /src/openvpn/src/openvpn/proxy.c:89,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:89,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/proxy.c:157,1
    - Dst: isprint
      Src: /src/openvpn/src/openvpn/proxy.c:160,1
    - Dst: CLEAR
      Src: /src/openvpn/src/openvpn/proxy.c:73,1
    - Dst: openvpn_fd_set
      Src: /src/openvpn/src/openvpn/proxy.c:93,1
    - Dst: select
      Src: /src/openvpn/src/openvpn/proxy.c:97,1
    - Dst: buf_defined
      Src: /src/openvpn/src/openvpn/proxy.c:87,1
    - Dst: FD_ZERO
      Src: /src/openvpn/src/openvpn/proxy.c:92,1
    - Dst: get_signal
      Src: /src/openvpn/src/openvpn/proxy.c:99,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:120,1
    - Dst: isspace
      Src: /src/openvpn/src/openvpn/proxy.c:160,1
    - Dst: buf_write_u8
      Src: /src/openvpn/src/openvpn/proxy.c:159,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 64
    argCount: 7
    argNames:
    - sd
    - buf
    - len
    - timeout_sec
    - verbose
    - lookahead
    - signal_received
    argTypes:
    - socket_descriptor_t
    - char*
    - int
    - int
    - bool
    - struct buffer*
    - int*
    constantsTouched: []
    func_position:
      end: 190
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 190
    functionName: recv_line
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - recv
    - buf_init
    - msg
    - openvpn_fd_set
    - isspace
    - get_signal
    - CLEAR
    - ASSERT
    - FD_ZERO
    - isprint
    - buf_write_u8
    - select
    - buf_defined
    linkageType: ''
    returnType: bool
    signature: 'static bool recv_line(socket_descriptor_t sd, char *buf, int len,
      const int timeout_sec, const bool verbose, struct buffer *lookahead, volatile
      int *signal_received) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:230,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:232,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/proxy.c:231,1
    - Dst: openvpn_base64_encode
      Src: /src/openvpn/src/openvpn/proxy.c:230,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 3
    argNames:
    - str
    - src_len
    - gc
    argTypes:
    - uint8_t*
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 234
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 234
    functionName: make_base64_string2
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - free
    - openvpn_base64_encode
    - ASSERT
    - string_alloc
    linkageType: ''
    returnType: uint8_t*
    signature: 'uint8_t *make_base64_string2(const uint8_t *str, int src_len, struct
      gc_arena *gc) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:509,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/proxy.c:525,1
    - Dst: ALLOC_OBJ_CLEAR
      Src: /src/openvpn/src/openvpn/proxy.c:514,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/proxy.c:521,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:512,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/proxy.c:530,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:532,1
    - Dst: strcmp
      Src: /src/openvpn/src/openvpn/proxy.c:535,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:542,1
    - Dst: get_user_pass_http
      Src: /src/openvpn/src/openvpn/proxy.c:552,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:558,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 40
    argCount: 1
    argNames:
    - o
    argTypes:
    - struct http_proxy_options*
    constantsTouched: []
    func_position:
      end: 564
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 564
    functionName: http_proxy_new
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - msg
    - get_user_pass_http
    - strcmp
    - ASSERT
    - ALLOC_OBJ_CLEAR
    linkageType: ''
    returnType: struct http_proxy_info*
    signature: 'struct http_proxy_info *http_proxy_new(const struct http_proxy_options
      *o) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: send
      Src: /src/openvpn/src/openvpn/proxy.c:196,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:197,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:196,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - sd
    - buf
    argTypes:
    - socket_descriptor_t
    - char*
    constantsTouched: []
    func_position:
      end: 203
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 203
    functionName: send_line
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - strlen
    - send
    - msg
    linkageType: ''
    returnType: bool
    signature: 'static bool send_line(socket_descriptor_t sd, const char *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: purge_user_pass
      Src: /src/openvpn/src/openvpn/proxy.c:257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 258
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 258
    functionName: clear_user_pass_http
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - purge_user_pass
    linkageType: ''
    returnType: void
    signature: 'static void clear_user_pass_http(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:569,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - hp
    argTypes:
    - struct http_proxy_info*
    constantsTouched: []
    func_position:
      end: 570
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 570
    functionName: http_proxy_close
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'void http_proxy_close(struct http_proxy_info *hp) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_proxy_authenticate
      Src: /src/openvpn/src/openvpn/proxy.c:1020,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:1033,1
    - Dst: get_server_poll_remaining_time
      Src: /src/openvpn/src/openvpn/proxy.c:1021,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1028,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1032,1
    - Dst: store_proxy_authenticate
      Src: /src/openvpn/src/openvpn/proxy.c:1037,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:1043,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:1044,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 1
    argNames:
    - auth_retry
    argTypes:
    - p
    constantsTouched: []
    func_position:
      end: 1047
      start: 1016
    functionDepth: 0
    functionLinenumber: 1016
    functionLinenumberEnd: 1047
    functionName: if
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - store_proxy_authenticate
    - msg
    - get_proxy_authenticate
    - free
    - get_server_poll_remaining_time
    linkageType: ''
    returnType: else
    signature: 'else if (p->options.auth_retry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: alloc_buf
      Src: /src/openvpn/src/openvpn/proxy.c:211,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/proxy.c:212,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:212,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:212,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:211,1
    - Dst: ASSERT
      Src: /src/openvpn/src/openvpn/proxy.c:213,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/proxy.c:213,1
    - Dst: send_line
      Src: /src/openvpn/src/openvpn/proxy.c:214,1
    - Dst: BSTR
      Src: /src/openvpn/src/openvpn/proxy.c:214,1
    - Dst: free_buf
      Src: /src/openvpn/src/openvpn/proxy.c:215,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - sd
    - src
    argTypes:
    - socket_descriptor_t
    - char*
    constantsTouched: []
    func_position:
      end: 217
      start: 205
    functionDepth: 0
    functionLinenumber: 205
    functionLinenumberEnd: 217
    functionName: send_line_crlf
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - buf_write
    - BSTR
    - free_buf
    - ASSERT
    - alloc_buf
    - strlen
    - send_line
    linkageType: ''
    returnType: bool
    signature: 'static bool send_line_crlf(socket_descriptor_t sd, const char *src) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: clear_user_pass_http
      Src: /src/openvpn/src/openvpn/proxy.c:269,1
    - Dst: get_user_pass
      Src: /src/openvpn/src/openvpn/proxy.c:288,1
    - Dst: protect_user_pass
      Src: /src/openvpn/src/openvpn/proxy.c:293,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 18
    argCount: 2
    argNames:
    - p
    - force
    argTypes:
    - struct http_proxy_info*
    - bool
    constantsTouched: []
    func_position:
      end: 301
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 301
    functionName: get_user_pass_http
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - clear_user_pass_http
    - protect_user_pass
    - get_user_pass
    linkageType: ''
    returnType: void
    signature: 'static void get_user_pass_http(struct http_proxy_info *p, const bool
      force) '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:591,1
    - Dst: strncasecmp
      Src: /src/openvpn/src/openvpn/proxy.c:603,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:601,1
    - Dst: strcasecmp
      Src: /src/openvpn/src/openvpn/proxy.c:594,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:609,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:610,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:618,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:619,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:620,1
    - Dst: snprintf
      Src: /src/openvpn/src/openvpn/proxy.c:629,1
    - Dst: send_line_crlf
      Src: /src/openvpn/src/openvpn/proxy.c:632,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:631,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 34
    argCount: 3
    argNames:
    - p
    - sd
    - /* already open to proxy */
    - host
    - /* openvpn server remote */
    argTypes:
    - struct http_proxy_info*
    - socket_descriptor_t
    - char*
    constantsTouched: []
    func_position:
      end: 639
      start: 572
    functionDepth: 0
    functionLinenumber: 572
    functionLinenumberEnd: 639
    functionName: add_proxy_headers
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - strcasecmp
    - msg
    - snprintf
    - send_line_crlf
    - strncasecmp
    linkageType: ''
    returnType: bool
    signature: 'static bool add_proxy_headers(struct http_proxy_info *p, socket_descriptor_t
      sd, /* already open to proxy */ const char *host /* openvpn server remote */
      ) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: recv_line
      Src: /src/openvpn/src/openvpn/proxy.c:337,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/proxy.c:344,1
    - Dst: chomp
      Src: /src/openvpn/src/openvpn/proxy.c:343,1
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:339,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/proxy.c:348,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/proxy.c:350,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:352,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/proxy.c:353,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/proxy.c:357,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:359,1
    - Dst: msg
      Src: /src/openvpn/src/openvpn/proxy.c:367,1
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/proxy.c:365,1
    - Dst: string_alloc
      Src: /src/openvpn/src/openvpn/proxy.c:360,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 41
    argCount: 4
    argNames:
    - sd
    - timeout
    - data
    - signal_received
    argTypes:
    - socket_descriptor_t
    - int
    - char**
    - int*
    constantsTouched: []
    func_position:
      end: 374
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 374
    functionName: get_proxy_authenticate
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - recv_line
    - msg
    - string_alloc
    - free
    - chomp
    - strlen
    - strncmp
    linkageType: ''
    returnType: int
    signature: 'static int get_proxy_authenticate(socket_descriptor_t sd, int timeout,
      char **data, volatile int *signal_received) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/src/openvpn/proxy.c:379,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 2
    argNames:
    - p
    - data
    argTypes:
    - struct http_proxy_info*
    - char*
    constantsTouched: []
    func_position:
      end: 381
      start: 376
    functionDepth: 0
    functionLinenumber: 376
    functionLinenumberEnd: 381
    functionName: store_proxy_authenticate
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: 'static void store_proxy_authenticate(struct http_proxy_info *p, char
      *data) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_CLEAR_GC
      Src: /src/openvpn/src/openvpn/proxy.c:50,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 5
    argCount: 2
    argNames:
    - hpo
    - gc
    argTypes:
    - struct http_proxy_options**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 55
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 55
    functionName: init_http_proxy_options_once
    functionSourceFile: /src/openvpn/src/openvpn/proxy.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_CLEAR_GC
    linkageType: ''
    returnType: struct http_proxy_options*
    signature: 'struct http_proxy_options *init_http_proxy_options_once(struct http_proxy_options
      **hpo, struct gc_arena *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:134,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:137,1
    - Dst: MAC_PRINT_ARG
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:139,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:142,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:141,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:148,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 3
    argNames:
    - ctx
    - iface
    - addr
    argTypes:
    - openvpn_net_ctx_t*
    - openvpn_net_iface_t*
    - uint8_t*
    constantsTouched: []
    func_position:
      end: 151
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 151
    functionName: net_addr_ll_set
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - MAC_PRINT_ARG
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_addr_ll_set(openvpn_net_ctx_t *ctx, const openvpn_net_iface_t
      *iface, uint8_t *addr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:211,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:216,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:212,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:217,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:214,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:219,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - struct in6_addr*
    - int
    constantsTouched: []
    func_position:
      end: 222
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 222
    functionName: net_addr_v6_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - print_in6_addr
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v6_del(openvpn_net_ctx_t *ctx, const char *iface, const
      struct in6_addr *addr, int prefixlen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:157,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:161,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:163,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:164,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:159,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:166,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - int
    constantsTouched: []
    func_position:
      end: 169
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 169
    functionName: net_addr_v4_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - print_in_addr_t
    - argv_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v4_add(openvpn_net_ctx_t *ctx, const char *iface, const
      in_addr_t *addr, int prefixlen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:228,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:234,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:230,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:229,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:232,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:235,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:237,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 4
    argNames:
    - ctx
    - iface
    - local
    - remote
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - in_addr_t*
    constantsTouched: []
    func_position:
      end: 240
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 240
    functionName: net_addr_ptp_v4_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - print_in_addr_t
    - argv_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_addr_ptp_v4_add(openvpn_net_ctx_t *ctx, const char *iface,
      const in_addr_t *local, const in_addr_t *remote) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 61
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 61
    functionName: net_ctx_free
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'void net_ctx_free(openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:175,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:180,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:181,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:176,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:178,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:184,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 7
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - struct in6_addr*
    - int
    constantsTouched: []
    func_position:
      end: 187
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 187
    functionName: net_addr_v6_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - print_in6_addr
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v6_add(openvpn_net_ctx_t *ctx, const char *iface, const
      struct in6_addr *addr, int prefixlen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:67,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:70,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:71,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:69,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:73,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 4
    argNames:
    - ctx
    - iface
    - type
    - arg
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - char*
    - void*
    constantsTouched: []
    func_position:
      end: 76
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 76
    functionName: net_iface_new
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_iface_new(openvpn_net_ctx_t *ctx, const char *iface, const
      char *type, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:193,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:199,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:200,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:194,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:196,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:202,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 4
    argNames:
    - ctx
    - iface
    - addr
    - prefixlen
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - int
    constantsTouched: []
    func_position:
      end: 205
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 205
    functionName: net_addr_v4_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - print_in_addr_t
    - argv_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_addr_v4_del(openvpn_net_ctx_t *ctx, const char *iface, const
      in_addr_t *addr, int prefixlen) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:366,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:367,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:377,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:375,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:370,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:382,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:385,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:386,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:391,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 16
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - struct in6_addr*
    - int
    - struct in6_addr*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 394
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 394
    functionName: net_route_v6_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - print_in6_addr
    - argv_new
    - argv_printf_cat
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_route_v6_del(openvpn_net_ctx_t *ctx, const struct in6_addr
      *dst, int prefixlen, const struct in6_addr *gw, const char *iface, uint32_t
      table, int metric) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:46,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 2
    argNames:
    - c
    - ctx
    argTypes:
    - struct context*
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: net_ctx_init
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - gc_new
    linkageType: ''
    returnType: int
    signature: 'int net_ctx_init(struct context *c, openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:103,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:110,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:105,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:107,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:108,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 3
    argNames:
    - ctx
    - iface
    - up
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - bool
    constantsTouched: []
    func_position:
      end: 113
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 113
    functionName: net_iface_up
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_iface_up(openvpn_net_ctx_t *ctx, const char *iface, bool up) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:246,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:252,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:248,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:247,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:250,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:253,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:255,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 4
    argNames:
    - ctx
    - iface
    - local
    - remote
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - in_addr_t*
    - in_addr_t*
    constantsTouched: []
    func_position:
      end: 258
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 258
    functionName: net_addr_ptp_v4_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - print_in_addr_t
    - argv_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_addr_ptp_v4_del(openvpn_net_ctx_t *ctx, const char *iface,
      const in_addr_t *local, const in_addr_t *remote) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:304,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:305,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:315,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:308,1
    - Dst: print_in6_addr
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:313,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:320,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:323,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:324,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:329,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 16
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - struct in6_addr*
    - int
    - struct in6_addr*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 332
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 332
    functionName: net_route_v6_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - print_in6_addr
    - argv_new
    - argv_printf_cat
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_route_v6_add(openvpn_net_ctx_t *ctx, const struct in6_addr
      *dst, int prefixlen, const struct in6_addr *gw, const char *iface, uint32_t
      table, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_reset
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:54,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - openvpn_net_ctx_t*
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: net_ctx_reset
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - gc_reset
    linkageType: ''
    returnType: void
    signature: 'void net_ctx_reset(openvpn_net_ctx_t *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:118,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:120,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:122,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:123,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:125,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 3
    argNames:
    - ctx
    - iface
    - mtu
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 128
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 128
    functionName: net_iface_mtu_set
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - argv_free
    - argv_new
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_iface_mtu_set(openvpn_net_ctx_t *ctx, const char *iface, uint32_t
      mtu) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:265,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:269,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:266,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:278,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:273,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:283,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:285,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:288,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:289,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:294,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 18
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - in_addr_t*
    - int
    - in_addr_t*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 297
      start: 260
    functionDepth: 0
    functionLinenumber: 260
    functionLinenumberEnd: 297
    functionName: net_route_v4_add
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - print_in_addr_t
    - argv_free
    - argv_new
    - argv_printf_cat
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_route_v4_add(openvpn_net_ctx_t *ctx, const in_addr_t *dst,
      int prefixlen, const in_addr_t *gw, const char *iface, uint32_t table, int metric) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:339,1
    - Dst: print_in_addr_t
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:340,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:343,1
    - Dst: argv_msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:350,1
    - Dst: argv_printf_cat
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:347,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:351,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:356,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 13
    argCount: 7
    argNames:
    - ctx
    - dst
    - prefixlen
    - gw
    - iface
    - table
    - metric
    argTypes:
    - openvpn_net_ctx_t*
    - in_addr_t*
    - int
    - in_addr_t*
    - char*
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 359
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 359
    functionName: net_route_v4_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_msg
    - argv_printf
    - print_in_addr_t
    - argv_free
    - argv_new
    - argv_printf_cat
    - openvpn_execve_check
    linkageType: ''
    returnType: int
    signature: 'int net_route_v4_del(openvpn_net_ctx_t *ctx, const in_addr_t *dst,
      int prefixlen, const in_addr_t *gw, const char *iface, uint32_t table, int metric) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:83,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - ctx
    - iface
    - type
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    - char
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: net_iface_type
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: int
    signature: 'int net_iface_type(openvpn_net_ctx_t *ctx, const char *iface, char
      type[IFACE_TYPE_LEN_MAX]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: argv_new
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:90,1
    - Dst: argv_printf
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:92,1
    - Dst: openvpn_execve_check
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:93,1
    - Dst: argv_free
      Src: /src/openvpn/src/openvpn/networking_iproute2.c:95,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - ctx
    - iface
    argTypes:
    - openvpn_net_ctx_t*
    - char*
    constantsTouched: []
    func_position:
      end: 98
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 98
    functionName: net_iface_del
    functionSourceFile: /src/openvpn/src/openvpn/networking_iproute2.c
    functionUses: []
    functionsReached:
    - argv_free
    - openvpn_execve_check
    - argv_new
    - argv_printf
    linkageType: ''
    returnType: int
    signature: 'int net_iface_del(openvpn_net_ctx_t *ctx, const char *iface) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 330
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 330
    functionName: get_link_socket_info
    functionSourceFile: /src/openvpn/src/openvpn/forward.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct link_socket_info*
    signature: 'static inline struct link_socket_info *get_link_socket_info(struct
      context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 363
      start: 350
    functionDepth: 0
    functionLinenumber: 350
    functionLinenumberEnd: 363
    functionName: p2p_iow_flags
    functionSourceFile: /src/openvpn/src/openvpn/forward.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned int
    signature: 'static inline unsigned int p2p_iow_flags(const struct context *c) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_link_socket_info
      Src: /src/openvpn/src/openvpn/forward.h:403,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - c
    argTypes:
    - struct context*
    constantsTouched: []
    func_position:
      end: 405
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 405
    functionName: connection_established
    functionSourceFile: /src/openvpn/src/openvpn/forward.h
    functionUses: []
    functionsReached:
    - get_link_socket_info
    linkageType: ''
    returnType: bool
    signature: 'static inline bool connection_established(struct context *c) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: event_timeout_reset
      Src: /src/openvpn/src/openvpn/forward.h:341,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - c
    - size
    argTypes:
    - struct context*
    - int
    constantsTouched: []
    func_position:
      end: 344
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 344
    functionName: register_activity
    functionSourceFile: /src/openvpn/src/openvpn/forward.h
    functionUses: []
    functionsReached:
    - event_timeout_reset
    linkageType: ''
    returnType: void
    signature: 'static inline void register_activity(struct context *c, const int
      size) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: proto_is_dgram
      Src: /src/openvpn/src/openvpn/forward.h:372,1
    - Dst: io_wait_dowork
      Src: /src/openvpn/src/openvpn/forward.h:390,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 18
    argCount: 2
    argNames:
    - c
    - flags
    argTypes:
    - struct context*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 392
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 392
    functionName: io_wait
    functionSourceFile: /src/openvpn/src/openvpn/forward.h
    functionUses: []
    functionsReached:
    - io_wait_dowork
    - proto_is_dgram
    linkageType: ''
    returnType: void
    signature: 'static inline void io_wait(struct context *c, const unsigned int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: freeaddrinfo
      Src: /src/openvpn/src/openvpn/buffer.h:216,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - addr
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 217
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 217
    functionName: gc_freeaddrinfo_callback
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - freeaddrinfo
    linkageType: ''
    returnType: void
    signature: 'static inline void gc_freeaddrinfo_callback(void *addr) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:254,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 262
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 262
    functionName: buf_len
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    linkageType: ''
    returnType: int
    signature: 'static int buf_len(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.h:792,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:796,1
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/buffer.h:797,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 799
      start: 788
    functionDepth: 0
    functionLinenumber: 788
    functionLinenumberEnd: 799
    functionName: buf_read_u8
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - BLEN
    - buf_advance
    - BPTR
    linkageType: ''
    returnType: int
    signature: 'static inline int buf_read_u8(struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/buffer.h:852,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:852,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 6
    argCount: 3
    argNames:
    - src
    - match
    - size
    argTypes:
    - struct buffer*
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 853
      start: 845
    functionDepth: 0
    functionLinenumber: 845
    functionLinenumberEnd: 853
    functionName: buf_string_match
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - memcmp
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_string_match(const struct buffer *src, const
      void *match, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_bptr
      Src: /src/openvpn/src/openvpn/buffer.h:267,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/buffer.h:267,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 268
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 268
    functionName: buf_bend
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_bptr
    - buf_len
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline uint8_t *buf_bend(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/buffer.h:805,1
    - Dst: ntohs
      Src: /src/openvpn/src/openvpn/buffer.h:809,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 810
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 810
    functionName: buf_read_u16
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_read
    - ntohs
    linkageType: ''
    returnType: int
    signature: 'static inline int buf_read_u16(struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SecureZeroMemory
      Src: /src/openvpn/src/openvpn/buffer.h:416,1
    - Dst: memset
      Src: /src/openvpn/src/openvpn/buffer.h:418,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 427
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 427
    functionName: secure_memzero
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - memset
    - SecureZeroMemory
    linkageType: ''
    returnType: void
    signature: 'static inline void secure_memzero(void *data, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.h:838,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.h:838,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:838,1
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/buffer.h:838,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:838,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.h:838,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - struct buffer*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 839
      start: 835
    functionDepth: 0
    functionLinenumber: 835
    functionLinenumberEnd: 839
    functionName: buf_equal
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - memcmp
    - BLEN
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_equal(const struct buffer *a, const struct
      buffer *b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strncmp
      Src: /src/openvpn/src/openvpn/buffer.h:978,1
    - Dst: strlen
      Src: /src/openvpn/src/openvpn/buffer.h:978,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - str
    - prefix
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 979
      start: 975
    functionDepth: 0
    functionLinenumber: 975
    functionLinenumberEnd: 979
    functionName: strprefix
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: bool
    signature: 'static inline bool strprefix(const char *str, const char *prefix) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: x_gc_free
      Src: /src/openvpn/src/openvpn/buffer.h:1036,1
    - Dst: x_gc_freespecial
      Src: /src/openvpn/src/openvpn/buffer.h:1040,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1042
      start: 1031
    functionDepth: 0
    functionLinenumber: 1031
    functionLinenumberEnd: 1042
    functionName: gc_free
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - x_gc_free
    - x_gc_freespecial
    linkageType: ''
    returnType: void
    signature: 'static inline void gc_free(struct gc_arena *a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: likely
      Src: /src/openvpn/src/openvpn/buffer.h:235,1
    - Dst: likely
      Src: /src/openvpn/src/openvpn/buffer.h:235,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: buf_valid
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - likely
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_valid(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/buffer.h:273,1
    - Dst: buf_len
      Src: /src/openvpn/src/openvpn/buffer.h:275,1
    - Dst: buf_bptr
      Src: /src/openvpn/src/openvpn/buffer.h:275,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 281
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 281
    functionName: buf_blast
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_bptr
    - buf_len
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline uint8_t *buf_blast(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:528,1
    - Dst: buf_size_valid_signed
      Src: /src/openvpn/src/openvpn/buffer.h:528,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 537
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 537
    functionName: buf_safe_bidir
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    - buf_size_valid_signed
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_safe_bidir(const struct buffer *buf, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:607,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:613,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 614
      start: 604
    functionDepth: 0
    functionLinenumber: 604
    functionLinenumberEnd: 614
    functionName: buf_prepend
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    - BPTR
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline uint8_t *buf_prepend(struct buffer *buf, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/buffer.h:649,1
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/buffer.h:649,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 3
    argNames:
    - buf
    - size
    - prepend
    argTypes:
    - struct buffer*
    - int
    - bool
    constantsTouched: []
    func_position:
      end: 650
      start: 646
    functionDepth: 0
    functionLinenumber: 646
    functionLinenumberEnd: 650
    functionName: buf_write_alloc_prepend
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_prepend
    - buf_write_alloc
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline uint8_t *buf_write_alloc_prepend(struct buffer *buf,
      int size, bool prepend) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/buffer.h:693,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - dest
    - data
    argTypes:
    - struct buffer*
    - uint8_t
    constantsTouched: []
    func_position:
      end: 694
      start: 690
    functionDepth: 0
    functionLinenumber: 690
    functionLinenumberEnd: 694
    functionName: buf_write_u8
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_write
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_write_u8(struct buffer *dest, uint8_t data) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_advance
      Src: /src/openvpn/src/openvpn/buffer.h:764,1
    - Dst: buf_copy
      Src: /src/openvpn/src/openvpn/buffer.h:768,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 11
    argCount: 3
    argNames:
    - dest
    - src
    - len
    argTypes:
    - struct buffer*
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 774
      start: 751
    functionDepth: 0
    functionLinenumber: 751
    functionLinenumberEnd: 774
    functionName: buf_copy_excess
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_copy
    - buf_advance
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_copy_excess(struct buffer *dest, struct buffer
      *src, int len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:241,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 249
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 249
    functionName: buf_bptr
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline uint8_t *buf_bptr(const struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: likely
      Src: /src/openvpn/src/openvpn/buffer.h:286,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 287
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 287
    functionName: buf_size_valid
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - likely
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_size_valid(const size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: format_hex_ex
      Src: /src/openvpn/src/openvpn/buffer.h:506,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 4
    argNames:
    - data
    - size
    - maxoutput
    - gc
    argTypes:
    - uint8_t*
    - int
    - int
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 507
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 507
    functionName: format_hex
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - format_hex_ex
    linkageType: ''
    returnType: char*
    signature: 'static inline char *format_hex(const uint8_t *data, int size, int
      maxoutput, struct gc_arena *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:542,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 555
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 555
    functionName: buf_forward_capacity
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    linkageType: ''
    returnType: int
    signature: 'static inline int buf_forward_capacity(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:660,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 664
      start: 652
    functionDepth: 0
    functionLinenumber: 652
    functionLinenumberEnd: 664
    functionName: buf_read_alloc
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - BPTR
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline uint8_t *buf_read_alloc(struct buffer *buf, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htons
      Src: /src/openvpn/src/openvpn/buffer.h:699,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/buffer.h:700,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - dest
    - data
    argTypes:
    - struct buffer*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 701
      start: 696
    functionDepth: 0
    functionLinenumber: 696
    functionLinenumberEnd: 701
    functionName: buf_write_u16
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_write
    - htons
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_write_u16(struct buffer *dest, uint16_t data) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_read_alloc
      Src: /src/openvpn/src/openvpn/buffer.h:779,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/buffer.h:784,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 3
    argNames:
    - src
    - dest
    - size
    argTypes:
    - struct buffer*
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 786
      start: 776
    functionDepth: 0
    functionLinenumber: 776
    functionLinenumberEnd: 786
    functionName: buf_read
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - memcpy
    - buf_read_alloc
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_read(struct buffer *src, void *dest, int size) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: buf_read
      Src: /src/openvpn/src/openvpn/buffer.h:816,1
    - Dst: ntohl
      Src: /src/openvpn/src/openvpn/buffer.h:830,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 10
    argCount: 2
    argNames:
    - buf
    - good
    argTypes:
    - struct buffer*
    - bool*
    constantsTouched: []
    func_position:
      end: 832
      start: 812
    functionDepth: 0
    functionLinenumber: 812
    functionLinenumberEnd: 832
    functionName: buf_read_u32
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_read
    - ntohl
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t buf_read_u32(struct buffer *buf, bool *good) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_safe_bidir
      Src: /src/openvpn/src/openvpn/buffer.h:591,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - inc
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 597
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 597
    functionName: buf_inc_len
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_safe_bidir
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_inc_len(struct buffer *buf, int inc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/openvpn/src/openvpn/buffer.h:866,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:866,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 3
    argNames:
    - src
    - match
    - size
    argTypes:
    - struct buffer*
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 867
      start: 859
    functionDepth: 0
    functionLinenumber: 859
    functionLinenumberEnd: 867
    functionName: buf_string_match_head
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - memcmp
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_string_match_head(const struct buffer *src,
      const void *match, int size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: out_of_memory
      Src: /src/openvpn/src/openvpn/buffer.h:1106,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 1108
      start: 1101
    functionDepth: 0
    functionLinenumber: 1101
    functionLinenumberEnd: 1108
    functionName: check_malloc_return
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - out_of_memory
    linkageType: ''
    returnType: void
    signature: 'static inline void check_malloc_return(void *p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: likely
      Src: /src/openvpn/src/openvpn/buffer.h:292,1
    - Dst: likely
      Src: /src/openvpn/src/openvpn/buffer.h:292,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 293
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 293
    functionName: buf_size_valid_signed
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - likely
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_size_valid_signed(const int size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 2
    argNames:
    - buf
    - offset
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 327
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 327
    functionName: buf_init_dowork
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_init_dowork(struct buffer *buf, int offset) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strncpy
      Src: /src/openvpn/src/openvpn/buffer.h:364,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 3
    argNames:
    - dest
    - src
    - maxlen
    argTypes:
    - char*
    - char*
    - size_t
    constantsTouched: []
    func_position:
      end: 367
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 367
    functionName: strncpynt
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - strncpy
    linkageType: ''
    returnType: void
    signature: 'static inline void strncpynt(char *dest, const char *src, size_t maxlen) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:521,1
    - Dst: buf_size_valid
      Src: /src/openvpn/src/openvpn/buffer.h:521,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - struct buffer*
    - size_t
    constantsTouched: []
    func_position:
      end: 523
      start: 518
    functionDepth: 0
    functionLinenumber: 518
    functionLinenumberEnd: 523
    functionName: buf_safe
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    - buf_size_valid
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_safe(const struct buffer *buf, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1008
      start: 1004
    functionDepth: 0
    functionLinenumber: 1004
    functionLinenumberEnd: 1008
    functionName: gc_defined
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool gc_defined(struct gc_arena *a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/buffer.h:1020,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1021
      start: 1017
    functionDepth: 0
    functionLinenumber: 1017
    functionLinenumberEnd: 1021
    functionName: gc_detach
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - gc_init
    linkageType: ''
    returnType: void
    signature: 'static inline void gc_detach(struct gc_arena *a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_bptr
      Src: /src/openvpn/src/openvpn/buffer.h:298,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 299
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 299
    functionName: buf_str
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_bptr
    linkageType: ''
    returnType: char*
    signature: 'static inline char *buf_str(const struct buffer *buf) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_size_valid
      Src: /src/openvpn/src/openvpn/buffer.h:332,1
    - Dst: buf_size_error
      Src: /src/openvpn/src/openvpn/buffer.h:334,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 13
    argCount: 3
    argNames:
    - buf
    - data
    - size
    argTypes:
    - struct buffer*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 344
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 344
    functionName: buf_set_write
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_size_error
    - buf_size_valid
    linkageType: ''
    returnType: void
    signature: 'static inline void buf_set_write(struct buffer *buf, uint8_t *data,
      int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1015
      start: 1010
    functionDepth: 0
    functionLinenumber: 1010
    functionLinenumberEnd: 1015
    functionName: gc_init
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void gc_init(struct gc_arena *a) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_size_valid
      Src: /src/openvpn/src/openvpn/buffer.h:349,1
    - Dst: buf_size_error
      Src: /src/openvpn/src/openvpn/buffer.h:351,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 3
    argNames:
    - buf
    - data
    - size
    argTypes:
    - struct buffer*
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 356
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 356
    functionName: buf_set_read
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_size_error
    - buf_size_valid
    linkageType: ''
    returnType: void
    signature: 'static inline void buf_set_read(struct buffer *buf, const uint8_t
      *data, size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 224
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 224
    functionName: clear_buf
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct buffer
    signature: 'static inline struct buffer clear_buf(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 308
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 308
    functionName: buf_reset
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void buf_reset(struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: isdigit
      Src: /src/openvpn/src/openvpn/buffer.h:376,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - src
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 382
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 382
    functionName: has_digit
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - isdigit
    linkageType: ''
    returnType: bool
    signature: 'static inline bool has_digit(const char *src) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:560,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 573
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 573
    functionName: buf_forward_capacity_total
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    linkageType: ''
    returnType: int
    signature: 'static inline int buf_forward_capacity_total(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_safe
      Src: /src/openvpn/src/openvpn/buffer.h:637,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:641,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - struct buffer*
    - size_t
    constantsTouched: []
    func_position:
      end: 644
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 644
    functionName: buf_write_alloc
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_safe
    - BPTR
    linkageType: ''
    returnType: uint8_t*
    signature: 'static inline uint8_t *buf_write_alloc(struct buffer *buf, size_t
      size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_write_alloc
      Src: /src/openvpn/src/openvpn/buffer.h:669,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/buffer.h:674,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 3
    argNames:
    - dest
    - src
    - size
    argTypes:
    - struct buffer*
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 676
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 676
    functionName: buf_write
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - memcpy
    - buf_write_alloc
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_write(struct buffer *dest, const void *src,
      size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/openvpn/src/openvpn/buffer.h:706,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/buffer.h:707,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - dest
    - data
    argTypes:
    - struct buffer*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 708
      start: 703
    functionDepth: 0
    functionLinenumber: 703
    functionLinenumberEnd: 708
    functionName: buf_write_u32
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_write
    - htonl
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_write_u32(struct buffer *dest, uint32_t data) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_read_alloc
      Src: /src/openvpn/src/openvpn/buffer.h:719,1
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/buffer.h:724,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 3
    argNames:
    - dest
    - src
    - n
    argTypes:
    - struct buffer*
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 725
      start: 716
    functionDepth: 0
    functionLinenumber: 716
    functionLinenumberEnd: 725
    functionName: buf_copy_n
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_read_alloc
    - buf_write
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_copy_n(struct buffer *dest, struct buffer *src,
      int n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 230
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 230
    functionName: buf_defined
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_defined(const struct buffer *buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 315
      start: 310
    functionDepth: 0
    functionLinenumber: 310
    functionLinenumberEnd: 315
    functionName: buf_reset_len
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static inline void buf_reset_len(struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:578,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - buf
    argTypes:
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 586
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 586
    functionName: buf_reverse_capacity
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    linkageType: ''
    returnType: int
    signature: 'static inline int buf_reverse_capacity(const struct buffer *buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_prepend
      Src: /src/openvpn/src/openvpn/buffer.h:681,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/buffer.h:686,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 5
    argCount: 3
    argNames:
    - dest
    - src
    - size
    argTypes:
    - struct buffer*
    - void*
    - int
    constantsTouched: []
    func_position:
      end: 688
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 688
    functionName: buf_write_prepend
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_prepend
    - memcpy
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_write_prepend(struct buffer *dest, const void
      *src, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: buf_write
      Src: /src/openvpn/src/openvpn/buffer.h:713,1
    - Dst: BPTR
      Src: /src/openvpn/src/openvpn/buffer.h:713,1
    - Dst: BLEN
      Src: /src/openvpn/src/openvpn/buffer.h:713,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - struct buffer*
    - struct buffer*
    constantsTouched: []
    func_position:
      end: 714
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 714
    functionName: buf_copy
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_write
    - BLEN
    - BPTR
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_copy(struct buffer *dest, const struct buffer
      *src) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/buffer.h:742,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 24
    argCount: 5
    argNames:
    - dest
    - dest_index
    - src
    - src_index
    - src_len
    argTypes:
    - struct buffer*
    - int
    - struct buffer*
    - int
    - int
    constantsTouched: []
    func_position:
      end: 748
      start: 727
    functionDepth: 0
    functionLinenumber: 727
    functionLinenumberEnd: 748
    functionName: buf_copy_range
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_copy_range(struct buffer *dest, int dest_index,
      const struct buffer *src, int src_index, int src_len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_init
      Src: /src/openvpn/src/openvpn/buffer.h:1027,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1029
      start: 1023
    functionDepth: 0
    functionLinenumber: 1023
    functionLinenumberEnd: 1029
    functionName: gc_new
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - gc_init
    linkageType: ''
    returnType: struct gc_arena
    signature: 'static inline struct gc_arena gc_new(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: gc_free
      Src: /src/openvpn/src/openvpn/buffer.h:1047,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 1048
      start: 1044
    functionDepth: 0
    functionLinenumber: 1044
    functionLinenumberEnd: 1048
    functionName: gc_reset
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - gc_free
    linkageType: ''
    returnType: void
    signature: 'static inline void gc_reset(struct gc_arena *a) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: buf_valid
      Src: /src/openvpn/src/openvpn/buffer.h:619,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - struct buffer*
    - int
    constantsTouched: []
    func_position:
      end: 626
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 626
    functionName: buf_advance
    functionSourceFile: /src/openvpn/src/openvpn/buffer.h
    functionUses: []
    functionsReached:
    - buf_valid
    linkageType: ''
    returnType: bool
    signature: 'static inline bool buf_advance(struct buffer *buf, int size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/openvpn/src/openvpn/fuzz.h:17,1
    - Dst: memcpy
      Src: /src/openvpn/src/openvpn/fuzz.h:18,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - provider
    argTypes:
    - FuzzedDataProvider
    constantsTouched: []
    func_position:
      end: 21
      start: 15
    functionDepth: 0
    functionLinenumber: 15
    functionLinenumberEnd: 21
    functionName: get_modifiable_string
    functionSourceFile: /src/openvpn/src/openvpn/fuzz.h
    functionUses: []
    functionsReached:
    - memcpy
    - malloc
    linkageType: ''
    returnType: char*
    signature: 'char *get_modifiable_string(FuzzedDataProvider &provider) '
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 45
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 45
    functionName: fuzz_get_random_data
    functionSourceFile: /src/openvpn/src/openvpn/fuzz.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t fuzz_get_random_data(void *buf, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fuzz_get_random_data
      Src: /src/openvpn/src/openvpn/fuzz_header.h:23,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - sockfd
    - buf
    - len
    - flags
    argTypes:
    - int
    - void*
    - size_t
    - int
    constantsTouched: []
    func_position:
      end: 24
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 24
    functionName: fuzz_recv
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached:
    - fuzz_get_random_data
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t fuzz_recv(int sockfd, void *buf, size_t len, int flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 3
    argNames:
    - fd
    - buf
    - count
    argTypes:
    - int
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 32
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 32
    functionName: fuzz_write
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t fuzz_write(int fd, const void *buf, size_t count) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fuzz_get_random_data
      Src: /src/openvpn/src/openvpn/fuzz_header.h:39,1
    - Dst: printf
      Src: /src/openvpn/src/openvpn/fuzz_header.h:42,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 3
    argNames:
    - s
    - size
    - stream
    argTypes:
    - char*
    - int
    - FILE*
    constantsTouched: []
    func_position:
      end: 48
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 48
    functionName: fuzz_fgets
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached:
    - fuzz_get_random_data
    - printf
    linkageType: ''
    returnType: char*
    signature: 'char *fuzz_fgets(char *s, int size, FILE *stream) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 4
    argNames:
    - sockfd
    - buf
    - len
    - flags
    argTypes:
    - int
    - void*
    - size_t
    - int
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: fuzz_send
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t fuzz_send(int sockfd, const void *buf, size_t len, int flags) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 2
    argNames:
    - pathname
    - mode
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: fuzz_fopen
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FILE*
    signature: 'FILE *fuzz_fopen(const char *pathname, const char *mode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    functionName: fuzz_isatty
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int fuzz_isatty(int fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fuzz_get_random_data
      Src: /src/openvpn/src/openvpn/fuzz_header.h:27,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 3
    argNames:
    - sockfd
    - buf
    - len
    argTypes:
    - int
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: fuzz_read
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached:
    - fuzz_get_random_data
    linkageType: ''
    returnType: ssize_t
    signature: 'ssize_t fuzz_read(int sockfd, void *buf, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fuzz_get_random_data
      Src: /src/openvpn/src/openvpn/fuzz_header.h:52,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 5
    argNames:
    - nfds
    - readfds
    - writefds
    - exceptfds
    - timeout
    argTypes:
    - int
    - fd_set*
    - fd_set*
    - fd_set*
    - struct timeval*
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: fuzz_select
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached:
    - fuzz_get_random_data
    linkageType: ''
    returnType: int
    signature: 'int fuzz_select(int nfds, fd_set *readfds, fd_set *writefds,fd_set
      *exceptfds, struct timeval *timeout) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 69
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 69
    functionName: fuzz_fclose
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int fuzz_fclose(FILE *stream) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 6
    argNames:
    - sockfd
    - buf
    - len
    - flags
    - dest_addr
    - addrlen
    argTypes:
    - int
    - void*
    - size_t
    - int
    - struct sockaddr*
    - socklen_t
    constantsTouched: []
    func_position:
      end: 76
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 76
    functionName: fuzz_sendto
    functionSourceFile: /src/openvpn/src/openvpn/fuzz_header.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t fuzz_sendto(int sockfd, void *buf, size_t len, int flags, struct
      sockaddr *dest_addr, socklen_t addrlen) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:57,1
    - Dst: strncmp
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:60,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 71
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 71
    functionName: get_env
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/simple.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:109,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:114,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:110,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:113,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 12
    argCount: 4
    argNames:
    - handle
    - type
    - argv
    - envp
    argTypes:
    - openvpn_plugin_handle_t
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 122
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 122
    functionName: openvpn_plugin_func_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/simple.c
    functionUses: []
    functionsReached:
    - strcmp
    - get_env
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v1(openvpn_plugin_handle_t
      handle, const int type, const char *argv[], const char *envp[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:128,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 129
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 129
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/simple.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:81,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:84,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/simple/simple.c:98,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 10
    argCount: 3
    argNames:
    - type_mask
    - argv
    - envp
    argTypes:
    - unsigned int*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 101
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 101
    functionName: openvpn_plugin_open_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/simple.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - calloc
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT openvpn_plugin_handle_t openvpn_plugin_open_v1(unsigned
      int *type_mask, const char *argv[], const char *envp[]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:62,1
    - Dst: strncmp
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:65,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 76
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 76
    functionName: get_env
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/base64.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:109,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:119,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:115,1
    - Dst: ovpn_log
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:128,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:116,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 3
    argNames:
    - v3structver
    - args
    - ret
    argTypes:
    - int
    - struct openvpn_plugin_args_open_in*
    - struct openvpn_plugin_args_open_return*
    constantsTouched: []
    func_position:
      end: 133
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 133
    functionName: openvpn_plugin_open_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/base64.c
    functionUses: []
    functionsReached:
    - ovpn_log
    - OPENVPN_PLUGIN_MASK
    - calloc
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_open_v3(const int v3structver, struct
      openvpn_plugin_args_open_in const *args, struct openvpn_plugin_args_open_return
      *ret) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_log
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:163,1
    - Dst: ovpn_log
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:178,1
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:177,1
    - Dst: ovpn_base64_encode
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:177,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:168,1
    - Dst: ovpn_base64_decode
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:183,1
    - Dst: ovpn_log
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:184,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:188,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:189,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 4
    argNames:
    - handle
    - type
    - argv
    - envp
    argTypes:
    - openvpn_plugin_handle_t
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 192
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 192
    functionName: openvpn_plugin_func_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/base64.c
    functionUses: []
    functionsReached:
    - ovpn_log
    - ovpn_base64_encode
    - get_env
    - strcmp
    - free
    - strlen
    - ovpn_base64_decode
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v1(openvpn_plugin_handle_t
      handle, const int type, const char *argv[], const char *envp[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/simple/base64.c:206,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 207
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 207
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/simple/base64.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:81,1
    - Dst: snprintf
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:85,1
    - Dst: va_start
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:89,1
    - Dst: _plugin_vlog_func
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:90,1
    - Dst: va_end
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:91,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 3
    argNames:
    - ctx
    - flags
    - fmt
    - '...'
    argTypes:
    - struct plugin_context*
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 92
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 92
    functionName: plog
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - _plugin_vlog_func
    - va_end
    - snprintf
    - va_start
    linkageType: ''
    returnType: void
    signature: 'static void plog(const struct plugin_context *ctx, int flags, char
      *fmt, ...) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:127,1
    - Dst: strncmp
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:130,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 141
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 141
    functionName: get_env
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 175
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 175
    functionName: openvpn_plugin_min_version_required_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_min_version_required_v1() '
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:185,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:210,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:192,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:198,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:207,1
    - Dst: atoi_null0
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:213,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:214,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:217,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:220,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:223,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:244,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:251,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:241,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:235,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:229,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:248,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 42
    argCount: 3
    argNames:
    - v3structver
    - args
    - ret
    argTypes:
    - int
    - struct openvpn_plugin_args_open_in*
    - struct openvpn_plugin_args_open_return*
    constantsTouched: []
    func_position:
      end: 254
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 254
    functionName: openvpn_plugin_open_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - strdup
    - free
    - plog
    - fprintf
    - atoi_null0
    - calloc
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_open_v3(const int v3structver, struct
      openvpn_plugin_args_open_in const *args, struct openvpn_plugin_args_open_return
      *ret) '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:293,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:304,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:298,1
    - Dst: fork
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:332,1
    - Dst: open
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:356,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:361,1
    - Dst: usleep
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:353,1
    - Dst: do_auth_user_pass
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:365,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:294,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:305,1
    - Dst: waitpid
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:327,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:336,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:372,1
    - Dst: close
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:374,1
    - Dst: fork
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:320,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:341,1
    - Dst: write
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:370,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:359,1
    - Dst: do_auth_user_pass
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:299,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:335,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:351,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:376,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 46
    argCount: 4
    argNames:
    - context
    - pcc
    - argv
    - envp
    argTypes:
    - struct plugin_context*
    - struct plugin_per_client_context*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 377
      start: 287
    functionDepth: 0
    functionLinenumber: 287
    functionLinenumberEnd: 377
    functionName: auth_user_pass_verify
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - exit
    - waitpid
    - get_env
    - plog
    - write
    - fork
    - do_auth_user_pass
    - open
    - usleep
    - close
    linkageType: ''
    returnType: int
    signature: 'static int auth_user_pass_verify(struct plugin_context *context, struct
      plugin_per_client_context *pcc, const char *argv[], const char *envp[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:410,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:411,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 412
      start: 406
    functionDepth: 0
    functionLinenumber: 406
    functionLinenumberEnd: 412
    functionName: openvpn_plugin_client_constructor_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - plog
    - calloc
    linkageType: ''
    returnType: OPENVPN_EXPORT*
    signature: 'OPENVPN_EXPORT void *openvpn_plugin_client_constructor_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:260,1
    - Dst: np
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:262,1
    - Dst: np
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:264,1
    - Dst: np
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:263,1
    - Dst: np
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:265,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:269,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:270,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:272,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:278,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 3
    argNames:
    - context
    - username
    - password
    argTypes:
    - struct plugin_context*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 284
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 284
    functionName: do_auth_user_pass
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - strcmp
    - plog
    - np
    linkageType: ''
    returnType: bool
    signature: 'static bool do_auth_user_pass(struct plugin_context *context, const
      char *username, const char *password) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:387,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:401,1
    - Dst: auth_user_pass_verify
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:398,1
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:397,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 8
    argCount: 3
    argNames:
    - v3structver
    - args
    - ret
    argTypes:
    - int
    - struct openvpn_plugin_args_func_in*
    - struct openvpn_plugin_args_func_return*
    constantsTouched: []
    func_position:
      end: 404
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 404
    functionName: openvpn_plugin_func_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - plog
    - auth_user_pass_verify
    - fprintf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v3(const int v3structver, struct
      openvpn_plugin_args_func_in const *args, struct openvpn_plugin_args_func_return
      *ret) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:418,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:419,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 2
    argNames:
    - handle
    - per_client_context
    argTypes:
    - openvpn_plugin_handle_t
    - void*
    constantsTouched: []
    func_position:
      end: 420
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 420
    functionName: openvpn_plugin_client_destructor_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - plog
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_client_destructor_v1(openvpn_plugin_handle_t
      handle, void *per_client_context) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: plog
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:426,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:427,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 428
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 428
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - plog
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: atoi
      Src: /src/openvpn/sample/sample-plugins/defer/multi-auth.c:162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 168
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 168
    functionName: atoi_null0
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached:
    - atoi
    linkageType: ''
    returnType: int
    signature: 'static int atoi_null0(const char *str) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 155
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 155
    functionName: np
    functionSourceFile: /src/openvpn/sample/sample-plugins/defer/multi-auth.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char *np(const char *str) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:58,1
    - Dst: strncmp
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:61,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 72
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 72
    functionName: get_env
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log_v3.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_subject_name
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:207,1
    - Dst: X509_NAME_get_entry
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:211,1
    - Dst: X509_NAME_entry_count
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:208,1
    - Dst: X509_NAME_ENTRY_get_object
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:216,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:221,1
    - Dst: OBJ_obj2nid
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:226,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:231,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:236,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:241,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:242,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 33
    argCount: 1
    argNames:
    - x509crt
    argTypes:
    - X509*
    constantsTouched: []
    func_position:
      end: 244
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 244
    functionName: x509_print_info
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log_v3.c
    functionUses: []
    functionsReached:
    - OBJ_obj2nid
    - X509_NAME_ENTRY_get_object
    - OBJ_nid2sn
    - X509_NAME_entry_count
    - ASN1_STRING_to_UTF8
    - OPENSSL_free
    - X509_get_subject_name
    - X509_NAME_get_entry
    - X509_NAME_ENTRY_get_data
    - printf
    linkageType: ''
    returnType: void
    signature: 'static void x509_print_info(X509 *x509crt) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:84,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:95,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:90,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:102,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:101,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:103,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:104,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:105,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:106,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:107,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:114,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:109,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:117,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:110,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:108,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 36
    argCount: 3
    argNames:
    - v3structver
    - args
    - ret
    argTypes:
    - int
    - struct openvpn_plugin_args_open_in*
    - struct openvpn_plugin_args_open_return*
    constantsTouched: []
    func_position:
      end: 129
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 129
    functionName: openvpn_plugin_open_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log_v3.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - calloc
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_open_v3(const int v3structver, struct
      openvpn_plugin_args_open_in const *args, struct openvpn_plugin_args_open_return
      *ret) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:138,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:150,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:142,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:146,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:154,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:158,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:162,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:166,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:170,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:174,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:188,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:185,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:182,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:191,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:178,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 23
    argCount: 3
    argNames:
    - type
    - argv
    - envp
    argTypes:
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 193
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 193
    functionName: show
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log_v3.c
    functionUses: []
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show(const int type, const char *argv[], const char *envp[]) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:255,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:262,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:261,1
    - Dst: show
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:256,1
    - Dst: x509_print_info
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:263,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:264,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:271,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:272,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:274,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:275,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 24
    argCount: 3
    argNames:
    - version
    - args
    - retptr
    argTypes:
    - int
    - struct openvpn_plugin_args_func_in*
    - struct openvpn_plugin_args_func_return*
    constantsTouched: []
    func_position:
      end: 288
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 288
    functionName: openvpn_plugin_func_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log_v3.c
    functionUses: []
    functionsReached:
    - show
    - printf
    - get_env
    - strcmp
    - x509_print_info
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v3(const int version, struct
      openvpn_plugin_args_func_in const *args, struct openvpn_plugin_args_func_return
      *retptr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/log/log_v3.c:294,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 295
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 295
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log_v3.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/log/log.c:55,1
    - Dst: strncmp
      Src: /src/openvpn/sample/sample-plugins/log/log.c:58,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 69
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 69
    functionName: get_env
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:117,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:133,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:121,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:129,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:125,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:137,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:141,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:145,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:149,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:153,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:170,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:161,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:157,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:164,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:167,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 23
    argCount: 3
    argNames:
    - type
    - argv
    - envp
    argTypes:
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 172
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 172
    functionName: show
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log.c
    functionUses: []
    functionsReached:
    - printf
    linkageType: ''
    returnType: void
    signature: 'void show(const int type, const char *argv[], const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/log/log.c:79,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:96,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:97,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/log/log.c:82,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:98,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:99,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:100,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:101,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:102,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:103,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:104,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/log/log.c:105,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 3
    argNames:
    - type_mask
    - argv
    - envp
    argTypes:
    - unsigned int*
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 108
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 108
    functionName: openvpn_plugin_open_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - calloc
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT openvpn_plugin_handle_t openvpn_plugin_open_v1(unsigned
      int *type_mask, const char *argv[], const char *envp[]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: show
      Src: /src/openvpn/sample/sample-plugins/log/log.c:179,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/log/log.c:188,1
    - Dst: strcmp
      Src: /src/openvpn/sample/sample-plugins/log/log.c:189,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/log/log.c:186,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/log/log.c:185,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 16
    argCount: 4
    argNames:
    - handle
    - type
    - argv
    - envp
    argTypes:
    - openvpn_plugin_handle_t
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 202
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 202
    functionName: openvpn_plugin_func_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log.c
    functionUses: []
    functionsReached:
    - show
    - get_env
    - strcmp
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v1(openvpn_plugin_handle_t
      handle, const int type, const char *argv[], const char *envp[]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/log/log.c:208,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 209
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 209
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/log/log.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:212,1
    - Dst: fprintf
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:223,1
    - Dst: fprintf
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:227,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:215,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:220,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:230,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:232,1
    - Dst: fprintf
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:233,1
    - Dst: fclose
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:235,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 16
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char**
    constantsTouched: []
    func_position:
      end: 238
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 238
    functionName: write_cc_options_file
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - fclose
    - fopen
    - get_env
    - fprintf
    - plugin_log
    linkageType: ''
    returnType: int
    signature: 'int write_cc_options_file(const char *name, const char **envp) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: atoi
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:111,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 117
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 117
    functionName: atoi_null0
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - atoi
    linkageType: ''
    returnType: int
    signature: 'static int atoi_null0(const char *str) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:356,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:365,1
    - Dst: atoi
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:372,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:360,1
    - Dst: cc_handle_deferred_v1
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:372,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:378,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:381,1
    - Dst: write_cc_options_file
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:386,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 16
    argCount: 3
    argNames:
    - context
    - argv
    - envp
    argTypes:
    - struct plugin_context*
    - char**
    - char**
    constantsTouched: []
    func_position:
      end: 389
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 389
    functionName: openvpn_plugin_client_connect
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - atoi
    - write_cc_options_file
    - cc_handle_deferred_v1
    - get_env
    - plugin_log
    linkageType: ''
    returnType: int
    signature: 'int openvpn_plugin_client_connect(struct plugin_context *context,
      const char **argv, const char **envp) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: time
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:473,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:494,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:497,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:474,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:486,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:500,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:503,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:504,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:508,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:513,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:516,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:514,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:515,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 30
    argCount: 3
    argNames:
    - context
    - pcc
    - return_list
    argTypes:
    - struct plugin_context*
    - struct plugin_per_client_context*
    - struct openvpn_plugin_string_list**
    constantsTouched: []
    func_position:
      end: 523
      start: 467
    functionDepth: 0
    functionLinenumber: 467
    functionLinenumberEnd: 523
    functionName: openvpn_plugin_client_connect_defer_v2
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - strdup
    - free
    - time
    - plugin_log
    - calloc
    linkageType: ''
    returnType: int
    signature: 'int openvpn_plugin_client_connect_defer_v2(struct plugin_context *context,
      struct plugin_per_client_context *pcc, struct openvpn_plugin_string_list **return_list) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:597,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:598,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 599
      start: 594
    functionDepth: 0
    functionLinenumber: 594
    functionLinenumberEnd: 599
    functionName: openvpn_plugin_client_constructor_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - calloc
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT*
    signature: 'OPENVPN_EXPORT void *openvpn_plugin_client_constructor_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:243,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:246,1
    - Dst: close
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:271,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:295,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:317,1
    - Dst: write
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:265,1
    - Dst: open
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:258,1
    - Dst: fork
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:292,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:310,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:329,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:341,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:267,1
    - Dst: fork
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:280,1
    - Dst: waitpid
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:287,1
    - Dst: write_cc_options_file
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:314,1
    - Dst: sleep
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:311,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:320,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:296,1
    - Dst: open
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:325,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:332,1
    - Dst: write
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:335,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:261,1
    - Dst: close
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:268,1
    - Dst: exit
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:300,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:328,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:337,1
    - Dst: close
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:339,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 56
    argCount: 3
    argNames:
    - seconds
    - name
    - envp
    argTypes:
    - int
    - char*
    - char**
    constantsTouched: []
    func_position:
      end: 342
      start: 240
    functionDepth: 0
    functionLinenumber: 240
    functionLinenumberEnd: 342
    functionName: cc_handle_deferred_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - sleep
    - exit
    - write_cc_options_file
    - waitpid
    - get_env
    - write
    - fork
    - open
    - plugin_log
    - close
    linkageType: ''
    returnType: int
    signature: 'int cc_handle_deferred_v1(int seconds, const char *name, const char
      **envp) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:398,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:407,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:399,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:400,1
    - Dst: time
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:420,1
    - Dst: atoi
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:420,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:424,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:431,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:436,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:439,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:445,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:446,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:450,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:456,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:457,1
    - Dst: strdup
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:442,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:455,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:458,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 43
    argCount: 4
    argNames:
    - context
    - pcc
    - envp
    - return_list
    argTypes:
    - struct plugin_context*
    - struct plugin_per_client_context*
    - char**
    - struct openvpn_plugin_string_list**
    constantsTouched: []
    func_position:
      end: 465
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 465
    functionName: openvpn_plugin_client_connect_v2
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - atoi
    - strdup
    - get_env
    - free
    - time
    - plugin_log
    - calloc
    linkageType: ''
    returnType: int
    signature: 'int openvpn_plugin_client_connect_v2(struct plugin_context *context,
      struct plugin_per_client_context *pcc, const char **envp, struct openvpn_plugin_string_list
      **return_list) '
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:543,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:555,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:547,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:559,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:551,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:563,1
    - Dst: openvpn_plugin_client_connect
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:564,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:567,1
    - Dst: openvpn_plugin_client_connect_v2
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:568,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:572,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:581,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:577,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:585,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:589,1
    - Dst: openvpn_plugin_client_connect_defer_v2
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:573,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 17
    argCount: 6
    argNames:
    - handle
    - type
    - argv
    - envp
    - per_client_context
    - return_list
    argTypes:
    - openvpn_plugin_handle_t
    - int
    - char*
    - char*
    - void*
    - struct openvpn_plugin_string_list**
    constantsTouched: []
    func_position:
      end: 592
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 592
    functionName: openvpn_plugin_func_v2
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - openvpn_plugin_client_connect_v2
    - openvpn_plugin_client_connect
    - plugin_log
    - openvpn_plugin_client_connect_defer_v2
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v2(openvpn_plugin_handle_t
      handle, const int type, const char *argv[], const char *envp[], void *per_client_context,
      struct openvpn_plugin_string_list **return_list) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:604,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:605,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - handle
    - per_client_context
    argTypes:
    - openvpn_plugin_handle_t
    - void*
    constantsTouched: []
    func_position:
      end: 606
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 606
    functionName: openvpn_plugin_client_destructor_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - free
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_client_destructor_v1(openvpn_plugin_handle_t
      handle, void *per_client_context) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:612,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:613,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 614
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 614
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - free
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:89,1
    - Dst: strncmp
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:92,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 103
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 103
    functionName: get_env
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:131,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:150,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:149,1
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:138,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:148,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:151,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:152,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:153,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:154,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:155,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:156,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:175,1
    - Dst: plugin_log
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:171,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:157,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:158,1
    - Dst: atoi_null0
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:168,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c:168,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 38
    argCount: 3
    argNames:
    - v3structver
    - args
    - ret
    argTypes:
    - int
    - struct openvpn_plugin_args_open_in*
    - struct openvpn_plugin_args_open_return*
    constantsTouched: []
    func_position:
      end: 177
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 177
    functionName: openvpn_plugin_open_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/client-connect/sample-client-connect.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - free
    - get_env
    - fprintf
    - atoi_null0
    - plugin_log
    - calloc
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_open_v3(const int v3structver, struct
      openvpn_plugin_args_open_in const *args, struct openvpn_plugin_args_open_return
      *ret) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:72,1
    - Dst: strncmp
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:75,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 12
    argCount: 2
    argNames:
    - name
    - envp
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 86
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 86
    functionName: get_env
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - strlen
    - strncmp
    linkageType: ''
    returnType: char*
    signature: 'static const char *get_env(const char *name, const char *envp[]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:93,1
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:101,1
    - Dst: printf
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:97,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:104,1
    - Dst: OPENVPN_PLUGIN_MASK
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:105,1
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:107,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 3
    argNames:
    - version
    - args
    - rv
    argTypes:
    - int
    - struct openvpn_plugin_args_open_in*
    - struct openvpn_plugin_args_open_return*
    constantsTouched: []
    func_position:
      end: 113
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 113
    functionName: openvpn_plugin_open_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - OPENVPN_PLUGIN_MASK
    - get_env
    - ovpn_note
    - calloc
    - printf
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_open_v3(const int version, struct
      openvpn_plugin_args_open_in const *args, struct openvpn_plugin_args_open_return
      *rv) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_err
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:178,1
    - Dst: session_user_set
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:182,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 7
    argCount: 1
    argNames:
    - args
    argTypes:
    - struct openvpn_plugin_args_func_in*
    constantsTouched: []
    func_position:
      end: 185
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 185
    functionName: tls_verify
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - ovpn_err
    - session_user_set
    linkageType: ''
    returnType: int
    signature: 'static int tls_verify(struct openvpn_plugin_args_func_in const *args) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:207,1
    - Dst: file_store
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:209,1
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:208,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 5
    argCount: 1
    argNames:
    - args
    argTypes:
    - struct openvpn_plugin_args_func_in*
    constantsTouched: []
    func_position:
      end: 210
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 210
    functionName: server_store
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - snprintf
    - file_store
    - ovpn_note
    linkageType: ''
    returnType: void
    signature: 'static void server_store(struct openvpn_plugin_args_func_in const
      *args) '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_env
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:231,1
    - Dst: strncpy
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:236,1
    - Dst: server_store
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:242,1
    - Dst: client_store
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:246,1
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:237,1
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:250,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 12
    argCount: 2
    argNames:
    - args
    - rv
    argTypes:
    - struct openvpn_plugin_args_func_in*
    - struct openvpn_plugin_args_func_return*
    constantsTouched: []
    func_position:
      end: 252
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 252
    functionName: tls_final
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - client_store
    - server_store
    - get_env
    - strncpy
    - ovpn_note
    linkageType: ''
    returnType: int
    signature: 'static int tls_final(struct openvpn_plugin_args_func_in const *args,
      struct openvpn_plugin_args_func_return *rv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: calloc
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:274,1
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:276,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 279
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 279
    functionName: openvpn_plugin_client_constructor_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - ovpn_note
    - calloc
    linkageType: ''
    returnType: OPENVPN_EXPORT*
    signature: 'OPENVPN_EXPORT void *openvpn_plugin_client_constructor_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: X509_get_subject_name
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:125,1
    - Dst: X509_NAME_get_entry
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:129,1
    - Dst: X509_NAME_ENTRY_get_object
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:133,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:137,1
    - Dst: X509_NAME_entry_count
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:126,1
    - Dst: OBJ_obj2nid
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:141,1
    - Dst: OBJ_nid2sn
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:145,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:150,1
    - Dst: strncasecmp
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:155,1
    - Dst: strncpy
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:157,1
    - Dst: OPENSSL_free
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:160,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 36
    argCount: 2
    argNames:
    - sess
    - x509
    argTypes:
    - struct session*
    - X509*
    constantsTouched: []
    func_position:
      end: 162
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 162
    functionName: session_user_set
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - OBJ_obj2nid
    - X509_NAME_ENTRY_get_object
    - OBJ_nid2sn
    - X509_NAME_entry_count
    - ASN1_STRING_to_UTF8
    - OPENSSL_free
    - X509_get_subject_name
    - strncpy
    - X509_NAME_get_entry
    - strncasecmp
    - X509_NAME_ENTRY_get_data
    linkageType: ''
    returnType: void
    signature: 'static void session_user_set(struct session *sess, X509 *x509) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:191,1
    - Dst: fprintf
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:196,1
    - Dst: fclose
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:197,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - file
    - content
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 198
      start: 187
    functionDepth: 0
    functionLinenumber: 187
    functionLinenumberEnd: 198
    functionName: file_store
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - fopen
    - fclose
    - fprintf
    linkageType: ''
    returnType: void
    signature: 'static void file_store(char *file, char *content) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:219,1
    - Dst: file_store
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:220,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - struct openvpn_plugin_args_func_in*
    constantsTouched: []
    func_position:
      end: 221
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 221
    functionName: client_store
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - file_store
    - ovpn_note
    linkageType: ''
    returnType: void
    signature: 'static void client_store(struct openvpn_plugin_args_func_in const
      *args) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: tls_verify
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:262,1
    - Dst: tls_final
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:265,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 4
    argCount: 3
    argNames:
    - version
    - args
    - rv
    argTypes:
    - int
    - struct openvpn_plugin_args_func_in*
    - struct openvpn_plugin_args_func_return*
    constantsTouched: []
    func_position:
      end: 268
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 268
    functionName: openvpn_plugin_func_v3
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - tls_verify
    - tls_final
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT int openvpn_plugin_func_v3(const int version, struct
      openvpn_plugin_args_func_in const *args, struct openvpn_plugin_args_func_return
      *rv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:287,1
    - Dst: ovpn_note
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:288,1
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:290,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 4
    argCount: 2
    argNames:
    - handle
    - ctx
    argTypes:
    - openvpn_plugin_handle_t
    - void*
    constantsTouched: []
    func_position:
      end: 291
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 291
    functionName: openvpn_plugin_client_destructor_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - ovpn_note
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_client_destructor_v1(openvpn_plugin_handle_t
      handle, void *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c:297,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 1
    argNames:
    - handle
    argTypes:
    - openvpn_plugin_handle_t
    constantsTouched: []
    func_position:
      end: 298
      start: 293
    functionDepth: 0
    functionLinenumber: 293
    functionLinenumberEnd: 298
    functionName: openvpn_plugin_close_v1
    functionSourceFile: /src/openvpn/sample/sample-plugins/keying-material-exporter-demo/keyingmaterialexporter.c
    functionUses: []
    functionsReached:
    - free
    linkageType: ''
    returnType: OPENVPN_EXPORT
    signature: 'OPENVPN_EXPORT void openvpn_plugin_close_v1(openvpn_plugin_handle_t
      handle) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: front
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: T
    signature: 'const T & front() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: end
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *end() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 247
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 247
    functionName: size
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:272,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 274
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 274
    functionName: back
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: T
    signature: 'const T & back() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: destroy_n
      Src: /src/boringssl/crypto/mem_internal.h:282,1
    - Dst: OPENSSL_free
      Src: /src/boringssl/crypto/mem_internal.h:283,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 287
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 287
    functionName: clear
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_free
    - destroy_n
    linkageType: ''
    returnType: void
    signature: 'void clear() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 398
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 398
    functionName: size
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:403,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:404,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 405
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 405
    functionName: operator
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - data
    linkageType: ''
    returnType: T
    signature: 'const T & operator[](size_t i) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:444,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:445,1
    - Dst: destroy_n
      Src: /src/boringssl/crypto/mem_internal.h:445,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 447
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 447
    functionName: Shrink
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - data
    - destroy_n
    linkageType: ''
    returnType: void
    signature: 'void Shrink(size_t new_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: data
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *data() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: end
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *end() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InitUninitialized
      Src: /src/boringssl/crypto/mem_internal.h:163,1
    - Dst: uninitialized_value_construct_n
      Src: /src/boringssl/crypto/mem_internal.h:166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 168
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 168
    functionName: Init
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - InitUninitialized
    - uninitialized_value_construct_n
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool Init(size_t new_size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/boringssl/crypto/mem_internal.h:314,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - in
    argTypes:
    - Span
    constantsTouched: []
    func_position:
      end: 318
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 318
    functionName: CopyFrom
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - clear
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool CopyFrom(Span<const T> in) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MaybeGrow
      Src: /src/boringssl/crypto/mem_internal.h:298,1
    - Dst: new
      Src: /src/boringssl/crypto/mem_internal.h:301,1
    - Dst: move
      Src: /src/boringssl/crypto/mem_internal.h:301,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - elem
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 304
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 304
    functionName: Push
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - new
    - move
    - MaybeGrow
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool Push(T elem) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:511,1
    - Dst: TryCopyFrom
      Src: /src/boringssl/crypto/mem_internal.h:511,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - in
    argTypes:
    - Span
    constantsTouched: []
    func_position:
      end: 511
      start: 511
    functionDepth: 0
    functionLinenumber: 511
    functionLinenumberEnd: 511
    functionName: CopyFrom
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - TryCopyFrom
    linkageType: ''
    returnType: void
    signature: 'void CopyFrom(Span<const T> in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Shrink
      Src: /src/boringssl/crypto/mem_internal.h:433,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 433
      start: 433
    functionDepth: 0
    functionLinenumber: 433
    functionLinenumberEnd: 433
    functionName: clear
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - Shrink
    linkageType: ''
    returnType: void
    signature: 'void clear() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: destroy_n
      Src: /src/boringssl/crypto/mem_internal.h:143,1
    - Dst: OPENSSL_free
      Src: /src/boringssl/crypto/mem_internal.h:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - new_data
    - new_size
    argTypes:
    - T*
    - size_t
    constantsTouched: []
    func_position:
      end: 147
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 147
    functionName: Reset
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_free
    - destroy_n
    linkageType: ''
    returnType: void
    signature: 'void Reset(T *new_data, size_t new_size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/mem_internal.h:195,1
    - Dst: destroy_n
      Src: /src/boringssl/crypto/mem_internal.h:197,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 199
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 199
    functionName: Shrink
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - abort
    - destroy_n
    linkageType: ''
    returnType: void
    signature: 'void Shrink(size_t new_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:264,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: front
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: T
    signature: 'const T & front() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:424,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:425,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 426
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 426
    functionName: back
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - data
    linkageType: ''
    returnType: T
    signature: 'const T & back() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:507,1
    - Dst: TryResize
      Src: /src/boringssl/crypto/mem_internal.h:507,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 507
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 507
    functionName: Resize
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - TryResize
    linkageType: ''
    returnType: void
    signature: 'void Resize(size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 397
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 397
    functionName: data
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *data() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/boringssl/crypto/mem_internal.h:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - t
    argTypes:
    - T*
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: Free
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - Delete
    linkageType: ''
    returnType: void
    signature: 'static void Free(T *t) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 245
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 245
    functionName: data
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *data() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:251,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 253
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 253
    functionName: operator
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: T
    signature: 'const T & operator[](size_t i) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:509,1
    - Dst: TryResizeForOverwrite
      Src: /src/boringssl/crypto/mem_internal.h:509,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 510
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 510
    functionName: ResizeForOverwrite
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - TryResizeForOverwrite
    linkageType: ''
    returnType: void
    signature: 'void ResizeForOverwrite(size_t size) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Shrink
      Src: /src/boringssl/crypto/mem_internal.h:454,1
    - Dst: uninitialized_value_construct_n
      Src: /src/boringssl/crypto/mem_internal.h:460,1
    - Dst: capacity
      Src: /src/boringssl/crypto/mem_internal.h:457,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:460,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 463
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 463
    functionName: TryResize
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - data
    - Shrink
    - capacity
    - uninitialized_value_construct_n
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool TryResize(size_t new_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:429,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 429
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 429
    functionName: begin
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - data
    linkageType: ''
    returnType: T*
    signature: 'const T *begin() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/boringssl/crypto/mem_internal.h:496,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:499,1
    - Dst: capacity
      Src: /src/boringssl/crypto/mem_internal.h:496,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 503
      start: 495
    functionDepth: 0
    functionLinenumber: 495
    functionLinenumberEnd: 503
    functionName: TryPushBack
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - data
    - capacity
    - size
    linkageType: ''
    returnType: T*
    signature: '[[nodiscard]] T *TryPushBack(T val) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: data
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *data() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    functionName: empty
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool empty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/boringssl/crypto/mem_internal.h:138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 138
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 138
    functionName: Reset
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: 'void Reset() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 276
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 276
    functionName: begin
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *begin() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 399
      start: 399
    functionDepth: 0
    functionLinenumber: 399
    functionLinenumberEnd: 399
    functionName: capacity
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'static constexpr size_t capacity() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 400
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 400
    functionName: empty
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool empty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:416,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:417,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 418
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 418
    functionName: front
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - data
    linkageType: ''
    returnType: T
    signature: 'const T & front() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:431,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 431
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 431
    functionName: end
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - data
    linkageType: ''
    returnType: T*
    signature: 'const T *end() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 110
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 110
    functionName: operator
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: T
    signature: 'const T & operator[](size_t i) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InitUninitialized
      Src: /src/boringssl/crypto/mem_internal.h:184,1
    - Dst: uninitialized_copy
      Src: /src/boringssl/crypto/mem_internal.h:187,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - in
    argTypes:
    - Span
    constantsTouched: []
    func_position:
      end: 189
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 189
    functionName: CopyFrom
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - uninitialized_copy
    - InitUninitialized
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool CopyFrom(Span<const T> in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 277
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 277
    functionName: begin
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *begin() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 396
      start: 396
    functionDepth: 0
    functionLinenumber: 396
    functionLinenumberEnd: 396
    functionName: data
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *data() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:428,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 428
      start: 428
    functionDepth: 0
    functionLinenumber: 428
    functionLinenumberEnd: 428
    functionName: begin
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - data
    linkageType: ''
    returnType: T*
    signature: 'T *begin() '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Shrink
      Src: /src/boringssl/crypto/mem_internal.h:470,1
    - Dst: capacity
      Src: /src/boringssl/crypto/mem_internal.h:473,1
    - Dst: uninitialized_default_construct_n
      Src: /src/boringssl/crypto/mem_internal.h:476,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:476,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 479
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 479
    functionName: TryResizeForOverwrite
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - uninitialized_default_construct_n
    - data
    - Shrink
    - capacity
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool TryResizeForOverwrite(size_t new_size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: InitUninitialized
      Src: /src/boringssl/crypto/mem_internal.h:174,1
    - Dst: uninitialized_default_construct_n
      Src: /src/boringssl/crypto/mem_internal.h:177,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - new_size
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 179
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 179
    functionName: InitForOverwrite
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - uninitialized_default_construct_n
    - InitUninitialized
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool InitForOverwrite(size_t new_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Delete
      Src: /src/boringssl/crypto/mem_internal.h:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    functionName: internal
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - Delete
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: size
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:129,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 131
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 131
    functionName: back
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: T
    signature: 'const T & back() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 133
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 133
    functionName: begin
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *begin() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 2
    argNames:
    - out
    - out_size
    argTypes:
    - T**
    - size_t*
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: Release
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Release(T **out, size_t *out_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: data
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *data() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    functionName: empty
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool empty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    functionName: end
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *end() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: begin
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *begin() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 279
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 279
    functionName: end
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *end() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:430,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 430
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 430
    functionName: end
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - data
    linkageType: ''
    returnType: T*
    signature: 'T *end() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:290,1
    - Dst: destroy_at
      Src: /src/boringssl/crypto/mem_internal.h:291,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 293
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 293
    functionName: pop_back
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - destroy_at
    linkageType: ''
    returnType: void
    signature: 'void pop_back() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/crypto/mem_internal.h:436,1
    - Dst: Shrink
      Src: /src/boringssl/crypto/mem_internal.h:437,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 438
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 438
    functionName: pop_back
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - Shrink
    linkageType: ''
    returnType: void
    signature: 'void pop_back() '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: uninitialized_copy
      Src: /src/boringssl/crypto/mem_internal.h:488,1
    - Dst: clear
      Src: /src/boringssl/crypto/mem_internal.h:487,1
    - Dst: capacity
      Src: /src/boringssl/crypto/mem_internal.h:484,1
    - Dst: data
      Src: /src/boringssl/crypto/mem_internal.h:488,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - in
    argTypes:
    - Span
    constantsTouched: []
    func_position:
      end: 491
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 491
    functionName: TryCopyFrom
    functionSourceFile: /src/boringssl/crypto/mem_internal.h
    functionUses: []
    functionsReached:
    - uninitialized_copy
    - clear
    - data
    - capacity
    linkageType: ''
    returnType: bool
    signature: '[[nodiscard]] bool TryCopyFrom(Span<const T> in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1154,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1156
      start: 1150
    functionDepth: 0
    functionLinenumber: 1150
    functionLinenumberEnd: 1156
    functionName: CRYPTO_is_MOVBE_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_MOVBE_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1175
      start: 1169
    functionDepth: 0
    functionLinenumber: 1169
    functionLinenumberEnd: 1175
    functionName: CRYPTO_is_AVX_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_AVX_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: OPENSSL_init_cpuid
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void OPENSSL_init_cpuid(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1038
      start: 1038
    functionDepth: 0
    functionLinenumber: 1038
    functionLinenumberEnd: 1038
    functionName: boringssl_ensure_ffdh_self_test
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void boringssl_ensure_ffdh_self_test(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1164
      start: 1158
    functionDepth: 0
    functionLinenumber: 1158
    functionLinenumberEnd: 1164
    functionName: CRYPTO_is_AESNI_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_AESNI_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1181,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1182
      start: 1177
    functionDepth: 0
    functionLinenumber: 1177
    functionLinenumberEnd: 1182
    functionName: CRYPTO_is_RDRAND_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_RDRAND_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/boringssl/crypto/internal.h:182,1
    - Dst: assert
      Src: /src/boringssl/crypto/internal.h:190,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - ptr
    - alignment
    argTypes:
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 192
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 192
    functionName: align_pointer
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - assert
    linkageType: ''
    returnType: void*
    signature: 'static inline void *align_pointer(void *ptr, size_t alignment) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_bswap16
      Src: /src/boringssl/crypto/internal.h:771,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    constantsTouched: []
    func_position:
      end: 772
      start: 770
    functionDepth: 0
    functionLinenumber: 770
    functionLinenumberEnd: 772
    functionName: CRYPTO_bswap2
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_bswap16
    linkageType: ''
    returnType: uint16_t
    signature: 'static inline uint16_t CRYPTO_bswap2(uint16_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:932,1
    - Dst: CRYPTO_bswap8
      Src: /src/boringssl/crypto/internal.h:933,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 934
      start: 930
    functionDepth: 0
    functionLinenumber: 930
    functionLinenumberEnd: 934
    functionName: CRYPTO_load_u64_be
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - CRYPTO_bswap8
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_load_u64_be(const void *ptr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - a
    argTypes:
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 268
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 268
    functionName: constant_time_msb_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_msb_w(crypto_word_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_eq_w
      Src: /src/boringssl/crypto/internal.h:354,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - crypto_word_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 355
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 355
    functionName: constant_time_eq_8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_eq_w
    linkageType: ''
    returnType: uint8_t
    signature: 'static inline uint8_t constant_time_eq_8(crypto_word_t a, crypto_word_t
      b) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 3
    argNames:
    - val
    - expected
    - desired
    argTypes:
    - CRYPTO_atomic_u32*
    - uint32_t*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 561
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 561
    functionName: CRYPTO_atomic_compare_exchange_weak_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_atomic_compare_exchange_weak_u32(CRYPTO_atomic_u32
      *val, uint32_t *expected, uint32_t desired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_bswap32
      Src: /src/boringssl/crypto/internal.h:775,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 776
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 776
    functionName: CRYPTO_bswap4
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_bswap32
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_bswap4(uint32_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_bswap8
      Src: /src/boringssl/crypto/internal.h:937,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:938,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint64_t
    constantsTouched: []
    func_position:
      end: 939
      start: 936
    functionDepth: 0
    functionLinenumber: 936
    functionLinenumberEnd: 939
    functionName: CRYPTO_store_u64_be
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - CRYPTO_bswap8
    linkageType: ''
    returnType: void
    signature: 'static inline void CRYPTO_store_u64_be(void *out, uint64_t v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_is_zero_w
      Src: /src/boringssl/crypto/internal.h:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - crypto_word_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 349
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 349
    functionName: constant_time_eq_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_is_zero_w
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_eq_w(crypto_word_t a, crypto_word_t
      b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 251
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 251
    functionName: value_barrier_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t value_barrier_u32(uint32_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 259
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 259
    functionName: value_barrier_u64
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t value_barrier_u64(uint64_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - CRYPTO_atomic_u32*
    constantsTouched: []
    func_position:
      end: 533
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 533
    functionName: CRYPTO_atomic_load_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'inline uint32_t CRYPTO_atomic_load_u32(const CRYPTO_atomic_u32 *val) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    constantsTouched: []
    func_position:
      end: 789
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 789
    functionName: CRYPTO_bswap2
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: 'static inline uint16_t CRYPTO_bswap2(uint16_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - val
    - expected
    - desired
    argTypes:
    - CRYPTO_atomic_u32*
    - uint32_t*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 540
      start: 535
    functionDepth: 0
    functionLinenumber: 535
    functionLinenumberEnd: 540
    functionName: CRYPTO_atomic_compare_exchange_weak_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'inline bool CRYPTO_atomic_compare_exchange_weak_u32(CRYPTO_atomic_u32
      *val, uint32_t *expected, uint32_t desired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 795
      start: 791
    functionDepth: 0
    functionLinenumber: 791
    functionLinenumberEnd: 795
    functionName: CRYPTO_bswap4
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_bswap4(uint32_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_bswap4
      Src: /src/boringssl/crypto/internal.h:798,1
    - Dst: CRYPTO_bswap4
      Src: /src/boringssl/crypto/internal.h:798,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 799
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 799
    functionName: CRYPTO_bswap8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_bswap4
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_bswap8(uint64_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_addc_impl
      Src: /src/boringssl/crypto/internal.h:1474,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - carry
    - out_carry
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t*
    constantsTouched: []
    func_position:
      end: 1475
      start: 1472
    functionDepth: 0
    functionLinenumber: 1472
    functionLinenumberEnd: 1475
    functionName: CRYPTO_addc_u64
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_addc_impl
    linkageType: ''
    returnType: uint64_t
    signature: 'inline uint64_t CRYPTO_addc_u64(uint64_t x, uint64_t y, uint64_t carry,
      uint64_t *out_carry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_subc_impl
      Src: /src/boringssl/crypto/internal.h:1538,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - borrow
    - out_borrow
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t*
    constantsTouched: []
    func_position:
      end: 1539
      start: 1536
    functionDepth: 0
    functionLinenumber: 1536
    functionLinenumberEnd: 1539
    functionName: CRYPTO_subc_u64
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_subc_impl
    linkageType: ''
    returnType: uint64_t
    signature: 'inline uint64_t CRYPTO_subc_u64(uint64_t x, uint64_t y, uint64_t borrow,
      uint64_t *out_borrow) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 243
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 243
    functionName: value_barrier_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t value_barrier_w(crypto_word_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:922,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - in
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 924
      start: 920
    functionDepth: 0
    functionLinenumber: 920
    functionLinenumberEnd: 924
    functionName: CRYPTO_load_u64_le
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_load_u64_le(const void *in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1036
      start: 1036
    functionDepth: 0
    functionLinenumber: 1036
    functionLinenumberEnd: 1036
    functionName: boringssl_ensure_rsa_self_test
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void boringssl_ensure_rsa_self_test(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_subcll
      Src: /src/boringssl/crypto/internal.h:1528,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - borrow
    - out_borrow
    argTypes:
    - unsigned long long
    - unsigned long long
    - unsigned long long
    - unsigned long long*
    constantsTouched: []
    func_position:
      end: 1529
      start: 1524
    functionDepth: 0
    functionLinenumber: 1524
    functionLinenumberEnd: 1529
    functionName: CRYPTO_subc_impl
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_subcll
    linkageType: ''
    returnType: unsigned long long
    signature: 'inline unsigned long long CRYPTO_subc_impl(unsigned long long x, unsigned
      long long y, unsigned long long borrow, unsigned long long *out_borrow) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1037
      start: 1037
    functionDepth: 0
    functionLinenumber: 1037
    functionLinenumberEnd: 1037
    functionName: boringssl_ensure_ecc_self_test
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void boringssl_ensure_ecc_self_test(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:927,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint64_t
    constantsTouched: []
    func_position:
      end: 928
      start: 926
    functionDepth: 0
    functionLinenumber: 926
    functionLinenumberEnd: 928
    functionName: CRYPTO_store_u64_le
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    linkageType: ''
    returnType: void
    signature: 'static inline void CRYPTO_store_u64_le(void *out, uint64_t v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_subc_impl
      Src: /src/boringssl/crypto/internal.h:1533,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - borrow
    - out_borrow
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t*
    constantsTouched: []
    func_position:
      end: 1534
      start: 1531
    functionDepth: 0
    functionLinenumber: 1531
    functionLinenumberEnd: 1534
    functionName: CRYPTO_subc_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_subc_impl
    linkageType: ''
    returnType: uint32_t
    signature: 'inline uint32_t CRYPTO_subc_u32(uint32_t x, uint32_t y, uint32_t borrow,
      uint32_t *out_borrow) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_armcap
      Src: /src/boringssl/crypto/internal.h:1374,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1376
      start: 1368
    functionDepth: 0
    functionLinenumber: 1368
    functionLinenumberEnd: 1376
    functionName: CRYPTO_is_ARMv8_SHA1_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_armcap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_ARMv8_SHA1_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_subc
      Src: /src/boringssl/crypto/internal.h:1515,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - borrow
    - out_borrow
    argTypes:
    - unsigned int
    - unsigned int
    - unsigned int
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 1516
      start: 1512
    functionDepth: 0
    functionLinenumber: 1512
    functionLinenumberEnd: 1516
    functionName: CRYPTO_subc_impl
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_subc
    linkageType: ''
    returnType: unsigned int
    signature: 'inline unsigned int CRYPTO_subc_impl(unsigned int x, unsigned int
      y, unsigned int borrow, unsigned int *out_borrow) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - test
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1078
      start: 1078
    functionDepth: 0
    functionLinenumber: 1078
    functionLinenumberEnd: 1078
    functionName: boringssl_fips_break_test
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int boringssl_fips_break_test(const char *test) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_armcap
      Src: /src/boringssl/crypto/internal.h:1384,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1386
      start: 1378
    functionDepth: 0
    functionLinenumber: 1378
    functionLinenumberEnd: 1386
    functionName: CRYPTO_is_ARMv8_SHA256_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_armcap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_ARMv8_SHA256_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_subcl
      Src: /src/boringssl/crypto/internal.h:1521,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - borrow
    - out_borrow
    argTypes:
    - unsigned long
    - unsigned long
    - unsigned long
    - unsigned long*
    constantsTouched: []
    func_position:
      end: 1522
      start: 1518
    functionDepth: 0
    functionLinenumber: 1518
    functionLinenumberEnd: 1522
    functionName: CRYPTO_subc_impl
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_subcl
    linkageType: ''
    returnType: unsigned long
    signature: 'inline unsigned long CRYPTO_subc_impl(unsigned long x, unsigned long
      y, unsigned long borrow, unsigned long *out_borrow) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1247,1
    - Dst: CRYPTO_is_MOVBE_capable
      Src: /src/boringssl/crypto/internal.h:1248,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1249
      start: 1237
    functionDepth: 0
    functionLinenumber: 1237
    functionLinenumberEnd: 1249
    functionName: CRYPTO_cpu_perf_is_like_silvermont
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_MOVBE_capable
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_cpu_perf_is_like_silvermont(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/boringssl/crypto/internal.h:411,1
    - Dst: buffers_alias
      Src: /src/boringssl/crypto/internal.h:411,1
    - Dst: constant_time_select_8
      Src: /src/boringssl/crypto/internal.h:415,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 8
    argCount: 4
    argNames:
    - dst
    - src
    - n
    - mask
    argTypes:
    - void*
    - void*
    - size_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 417
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 417
    functionName: constant_time_conditional_memcpy
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - buffers_alias
    - constant_time_select_8
    - assert
    linkageType: ''
    returnType: void
    signature: 'static inline void constant_time_conditional_memcpy(void *dst, const
      void *src, const size_t n, const crypto_word_t mask) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: void
      Src: /src/boringssl/crypto/internal.h:646,1
    - Dst: void
      Src: /src/boringssl/crypto/internal.h:646,1
    - Dst: assert
      Src: /src/boringssl/crypto/internal.h:650,1
    - Dst: LockFunc
      Src: /src/boringssl/crypto/internal.h:651,1
    - Dst: MutexLockBase
      Src: /src/boringssl/crypto/internal.h:653,1
    - Dst: ReleaseFunc
      Src: /src/boringssl/crypto/internal.h:653,1
    - Dst: mu_
      Src: /src/boringssl/crypto/internal.h:649,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 662
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 662
    functionName: namespace
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - void
    - LockFunc
    - mu_
    - ReleaseFunc
    - assert
    - MutexLockBase
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_bswap64
      Src: /src/boringssl/crypto/internal.h:779,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 780
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 780
    functionName: CRYPTO_bswap8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_bswap64
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_bswap8(uint64_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1434
      start: 1434
    functionDepth: 0
    functionLinenumber: 1434
    functionLinenumberEnd: 1434
    functionName: CRYPTO_fuzzer_mode_enabled
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_fuzzer_mode_enabled(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1132
      start: 1126
    functionDepth: 0
    functionLinenumber: 1126
    functionLinenumberEnd: 1132
    functionName: CRYPTO_is_PCLMUL_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_PCLMUL_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_is_zero_w
      Src: /src/boringssl/crypto/internal.h:342,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - a
    argTypes:
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 343
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 343
    functionName: constant_time_is_zero_8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_is_zero_w
    linkageType: ''
    returnType: uint8_t
    signature: 'static inline uint8_t constant_time_is_zero_8(crypto_word_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:911,1
    - Dst: CRYPTO_bswap4
      Src: /src/boringssl/crypto/internal.h:912,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - in
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 913
      start: 909
    functionDepth: 0
    functionLinenumber: 909
    functionLinenumberEnd: 913
    functionName: CRYPTO_load_u32_be
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - CRYPTO_bswap4
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_load_u32_be(const void *in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_msb_w
      Src: /src/boringssl/crypto/internal.h:336,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - a
    argTypes:
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 337
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 337
    functionName: constant_time_is_zero_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_msb_w
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_is_zero_w(crypto_word_t
      a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_select_w
      Src: /src/boringssl/crypto/internal.h:401,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - mask
    - a
    - b
    argTypes:
    - crypto_word_t
    - int
    - int
    constantsTouched: []
    func_position:
      end: 403
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 403
    functionName: constant_time_select_int
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_select_w
    linkageType: ''
    returnType: int
    signature: 'static inline int constant_time_select_int(crypto_word_t mask, int
      a, int b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1122
      start: 1119
    functionDepth: 0
    functionLinenumber: 1119
    functionLinenumberEnd: 1122
    functionName: CRYPTO_is_intel_cpu
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_intel_cpu(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1315
      start: 1315
    functionDepth: 0
    functionLinenumber: 1315
    functionLinenumberEnd: 1315
    functionName: OPENSSL_get_armcap
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'inline uint32_t OPENSSL_get_armcap(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_bswap4
      Src: /src/boringssl/crypto/internal.h:916,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:917,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 918
      start: 915
    functionDepth: 0
    functionLinenumber: 915
    functionLinenumberEnd: 918
    functionName: CRYPTO_store_u32_be
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - CRYPTO_bswap4
    linkageType: ''
    returnType: void
    signature: 'static inline void CRYPTO_store_u32_be(void *out, uint32_t v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 4
    argNames:
    - a
    - a_bytes
    - b
    - b_bytes
    argTypes:
    - void*
    - size_t
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 175
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 175
    functionName: buffers_alias
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static inline int buffers_alias(const void *a, size_t a_bytes, const
      void *b, size_t b_bytes) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 153
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 153
    functionName: OPENSSL_enable_malloc_failures_for_testing
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void OPENSSL_enable_malloc_failures_for_testing(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_armcap
      Src: /src/boringssl/crypto/internal.h:1348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1350
      start: 1343
    functionDepth: 0
    functionLinenumber: 1343
    functionLinenumberEnd: 1350
    functionName: CRYPTO_is_NEON_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_armcap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_NEON_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/boringssl/crypto/internal.h:425,1
    - Dst: buffers_alias
      Src: /src/boringssl/crypto/internal.h:425,1
    - Dst: aligned
      Src: /src/boringssl/crypto/internal.h:430,1
    - Dst: value_barrier_w
      Src: /src/boringssl/crypto/internal.h:440,1
    - Dst: vector_size
      Src: /src/boringssl/crypto/internal.h:430,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 4
    argNames:
    - dst
    - src
    - n
    - mask
    argTypes:
    - void*
    - void*
    - size_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 442
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 442
    functionName: constant_time_conditional_memxor
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - aligned
    - buffers_alias
    - vector_size
    - value_barrier_w
    - assert
    linkageType: ''
    returnType: void
    signature: 'static inline void constant_time_conditional_memxor(void *dst, const
      void *src, size_t n, const crypto_word_t mask) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1190,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1192
      start: 1186
    functionDepth: 0
    functionLinenumber: 1186
    functionLinenumberEnd: 1192
    functionName: CRYPTO_is_BMI1_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_BMI1_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1223,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1225
      start: 1219
    functionDepth: 0
    functionLinenumber: 1219
    functionLinenumberEnd: 1225
    functionName: CRYPTO_is_x86_SHA_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_x86_SHA_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_ushort
      Src: /src/boringssl/crypto/internal.h:783,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint16_t
    constantsTouched: []
    func_position:
      end: 783
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 783
    functionName: CRYPTO_bswap2
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - _byteswap_ushort
    linkageType: ''
    returnType: uint16_t
    signature: 'static inline uint16_t CRYPTO_bswap2(uint16_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1198,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1200
      start: 1194
    functionDepth: 0
    functionLinenumber: 1194
    functionLinenumberEnd: 1200
    functionName: CRYPTO_is_AVX2_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_AVX2_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 151
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 151
    functionName: OPENSSL_reset_malloc_counter_for_testing
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void OPENSSL_reset_malloc_counter_for_testing(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:901,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - in
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 903
      start: 899
    functionDepth: 0
    functionLinenumber: 899
    functionLinenumberEnd: 903
    functionName: CRYPTO_load_u32_le
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_load_u32_le(const void *in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_armcap
      Src: /src/boringssl/crypto/internal.h:1356,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1358
      start: 1352
    functionDepth: 0
    functionLinenumber: 1352
    functionLinenumberEnd: 1358
    functionName: CRYPTO_is_ARMv8_AES_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_armcap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_ARMv8_AES_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: OPENSSL_disable_malloc_failures_for_testing
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void OPENSSL_disable_malloc_failures_for_testing(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - val
    - desired
    argTypes:
    - CRYPTO_atomic_u32*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 544
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 544
    functionName: CRYPTO_atomic_store_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void CRYPTO_atomic_store_u32(CRYPTO_atomic_u32 *val, uint32_t
      desired) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:906,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 907
      start: 905
    functionDepth: 0
    functionLinenumber: 905
    functionLinenumberEnd: 907
    functionName: CRYPTO_store_u32_le
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    linkageType: ''
    returnType: void
    signature: 'static inline void CRYPTO_store_u32_le(void *out, uint32_t v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_armcap
      Src: /src/boringssl/crypto/internal.h:1364,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1366
      start: 1360
    functionDepth: 0
    functionLinenumber: 1360
    functionLinenumberEnd: 1366
    functionName: CRYPTO_is_ARMv8_PMULL_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_armcap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_ARMv8_PMULL_capable(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcmp
      Src: /src/boringssl/crypto/internal.h:854,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 3
    argNames:
    - s1
    - s2
    - n
    argTypes:
    - void*
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 855
      start: 849
    functionDepth: 0
    functionLinenumber: 849
    functionLinenumberEnd: 855
    functionName: OPENSSL_memcmp
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - memcmp
    linkageType: ''
    returnType: int
    signature: 'static inline int OPENSSL_memcmp(const void *s1, const void *s2, size_t
      n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _rotr64
      Src: /src/boringssl/crypto/internal.h:996,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - value
    - shift
    argTypes:
    - uint64_t
    - int
    constantsTouched: []
    func_position:
      end: 1000
      start: 994
    functionDepth: 0
    functionLinenumber: 994
    functionLinenumberEnd: 1000
    functionName: CRYPTO_rotr_u64
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - _rotr64
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_rotr_u64(uint64_t value, int shift) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - counter
    argTypes:
    - enum fips_counter_t
    constantsTouched: []
    func_position:
      end: 1069
      start: 1069
    functionDepth: 0
    functionLinenumber: 1069
    functionLinenumberEnd: 1069
    functionName: boringssl_fips_inc_counter
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void boringssl_fips_inc_counter(enum fips_counter_t counter) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - val
    argTypes:
    - CRYPTO_atomic_u32*
    constantsTouched: []
    func_position:
      end: 550
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 550
    functionName: CRYPTO_atomic_load_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'inline uint32_t CRYPTO_atomic_load_u32(CRYPTO_atomic_u32 *val) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - val
    - desired
    argTypes:
    - CRYPTO_atomic_u32*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 565
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 565
    functionName: CRYPTO_atomic_store_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void CRYPTO_atomic_store_u32(CRYPTO_atomic_u32 *val, uint32_t
      desired) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/boringssl/crypto/internal.h:862,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 3
    argNames:
    - dst
    - src
    - n
    argTypes:
    - void*
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 863
      start: 857
    functionDepth: 0
    functionLinenumber: 857
    functionLinenumberEnd: 863
    functionName: OPENSSL_memcpy
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: void*
    signature: 'static inline void *OPENSSL_memcpy(void *dst, const void *src, size_t
      n) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memmove
      Src: /src/boringssl/crypto/internal.h:870,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 4
    argCount: 3
    argNames:
    - dst
    - src
    - n
    argTypes:
    - void*
    - void*
    - size_t
    constantsTouched: []
    func_position:
      end: 871
      start: 865
    functionDepth: 0
    functionLinenumber: 865
    functionLinenumberEnd: 871
    functionName: OPENSSL_memmove
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - memmove
    linkageType: ''
    returnType: void*
    signature: 'static inline void *OPENSSL_memmove(void *dst, const void *src, size_t
      n) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memchr
      Src: /src/boringssl/crypto/internal.h:825,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 3
    argNames:
    - s
    - c
    - n
    argTypes:
    - void*
    - int
    - size_t
    constantsTouched: []
    func_position:
      end: 826
      start: 820
    functionDepth: 0
    functionLinenumber: 820
    functionLinenumberEnd: 826
    functionName: OPENSSL_memchr
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - memchr
    linkageType: ''
    returnType: void*
    signature: 'static inline const void *OPENSSL_memchr(const void *s, int c, size_t
      n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _rotl
      Src: /src/boringssl/crypto/internal.h:972,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - value
    - shift
    argTypes:
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 976
      start: 970
    functionDepth: 0
    functionLinenumber: 970
    functionLinenumberEnd: 976
    functionName: CRYPTO_rotl_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - _rotl
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_rotl_u32(uint32_t value, int shift) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memchr
      Src: /src/boringssl/crypto/internal.h:833,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 3
    argNames:
    - s
    - c
    - n
    argTypes:
    - void*
    - int
    - size_t
    constantsTouched: []
    func_position:
      end: 834
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 834
    functionName: OPENSSL_memchr
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - memchr
    linkageType: ''
    returnType: void*
    signature: 'static inline void *OPENSSL_memchr(void *s, int c, size_t n) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/boringssl/crypto/internal.h:878,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 3
    argNames:
    - dst
    - c
    - n
    argTypes:
    - void*
    - int
    - size_t
    constantsTouched: []
    func_position:
      end: 879
      start: 873
    functionDepth: 0
    functionLinenumber: 873
    functionLinenumberEnd: 879
    functionName: OPENSSL_memset
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - memset
    linkageType: ''
    returnType: void*
    signature: 'static inline void *OPENSSL_memset(void *dst, int c, size_t n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_armcap
      Src: /src/boringssl/crypto/internal.h:1393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1395
      start: 1388
    functionDepth: 0
    functionLinenumber: 1388
    functionLinenumberEnd: 1395
    functionName: CRYPTO_is_ARMv8_SHA512_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_armcap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_ARMv8_SHA512_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CONSTTIME_DECLASSIFY
      Src: /src/boringssl/crypto/internal.h:476,1
    - Dst: value_barrier_w
      Src: /src/boringssl/crypto/internal.h:477,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 478
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 478
    functionName: constant_time_declassify_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CONSTTIME_DECLASSIFY
    - value_barrier_w
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_declassify_w(crypto_word_t
      v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:890,1
    - Dst: CRYPTO_bswap2
      Src: /src/boringssl/crypto/internal.h:891,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - in
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 892
      start: 888
    functionDepth: 0
    functionLinenumber: 888
    functionLinenumberEnd: 892
    functionName: CRYPTO_load_u16_be
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - CRYPTO_bswap2
    linkageType: ''
    returnType: uint16_t
    signature: 'static inline uint16_t CRYPTO_load_u16_be(const void *in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _rotr
      Src: /src/boringssl/crypto/internal.h:980,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - value
    - shift
    argTypes:
    - uint32_t
    - int
    constantsTouched: []
    func_position:
      end: 984
      start: 978
    functionDepth: 0
    functionLinenumber: 978
    functionLinenumberEnd: 984
    functionName: CRYPTO_rotr_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - _rotr
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_rotr_u32(uint32_t value, int shift) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1206,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1208
      start: 1202
    functionDepth: 0
    functionLinenumber: 1202
    functionLinenumberEnd: 1208
    functionName: CRYPTO_is_BMI2_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_BMI2_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: declassify_assert
      Src: /src/boringssl/crypto/internal.h:1481,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 4
    argNames:
    - x
    - y
    - carry
    - out_carry
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t*
    constantsTouched: []
    func_position:
      end: 1486
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1486
    functionName: CRYPTO_addc_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - declassify_assert
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_addc_u32(uint32_t x, uint32_t y, uint32_t
      carry, uint32_t *out_carry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_eq_8
      Src: /src/boringssl/crypto/internal.h:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 367
      start: 365
    functionDepth: 0
    functionLinenumber: 365
    functionLinenumberEnd: 367
    functionName: constant_time_eq_int_8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_eq_8
    linkageType: ''
    returnType: uint8_t
    signature: 'static inline uint8_t constant_time_eq_int_8(int a, int b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_assert
      Src: /src/boringssl/crypto/internal.h:481,1
    - Dst: CONSTTIME_DECLASSIFY
      Src: /src/boringssl/crypto/internal.h:484,1
    - Dst: value_barrier_u32
      Src: /src/boringssl/crypto/internal.h:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 486
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 486
    functionName: constant_time_declassify_int
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CONSTTIME_DECLASSIFY
    - value_barrier_u32
    - static_assert
    linkageType: ''
    returnType: int
    signature: 'static inline int constant_time_declassify_int(int v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_ulong
      Src: /src/boringssl/crypto/internal.h:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 785
      start: 785
    functionDepth: 0
    functionLinenumber: 785
    functionLinenumberEnd: 785
    functionName: CRYPTO_bswap4
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - _byteswap_ulong
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_bswap4(uint32_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_bswap2
      Src: /src/boringssl/crypto/internal.h:895,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:896,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - uint16_t
    constantsTouched: []
    func_position:
      end: 897
      start: 894
    functionDepth: 0
    functionLinenumber: 894
    functionLinenumberEnd: 897
    functionName: CRYPTO_store_u16_be
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - CRYPTO_bswap2
    linkageType: ''
    returnType: void
    signature: 'static inline void CRYPTO_store_u16_be(void *out, uint16_t v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _rotl64
      Src: /src/boringssl/crypto/internal.h:988,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - value
    - shift
    argTypes:
    - uint64_t
    - int
    constantsTouched: []
    func_position:
      end: 992
      start: 986
    functionDepth: 0
    functionLinenumber: 986
    functionLinenumberEnd: 992
    functionName: CRYPTO_rotl_u64
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - _rotl64
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_rotl_u64(uint64_t value, int shift) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1216
      start: 1210
    functionDepth: 0
    functionLinenumber: 1210
    functionLinenumberEnd: 1216
    functionName: CRYPTO_is_ADX_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_ADX_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: declassify_assert
      Src: /src/boringssl/crypto/internal.h:1490,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 4
    argNames:
    - x
    - y
    - carry
    - out_carry
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t*
    constantsTouched: []
    func_position:
      end: 1504
      start: 1488
    functionDepth: 0
    functionLinenumber: 1488
    functionLinenumberEnd: 1504
    functionName: CRYPTO_addc_u64
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - declassify_assert
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_addc_u64(uint64_t x, uint64_t y, uint64_t
      carry, uint64_t *out_carry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_eq_w
      Src: /src/boringssl/crypto/internal.h:360,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - int
    - int
    constantsTouched: []
    func_position:
      end: 361
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 361
    functionName: constant_time_eq_int
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_eq_w
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_eq_int(int a, int b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:953,1
    - Dst: static_assert
      Src: /src/boringssl/crypto/internal.h:955,1
    - Dst: static_assert
      Src: /src/boringssl/crypto/internal.h:958,1
    - Dst: CRYPTO_bswap8
      Src: /src/boringssl/crypto/internal.h:956,1
    - Dst: CRYPTO_bswap4
      Src: /src/boringssl/crypto/internal.h:959,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - in
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 961
      start: 951
    functionDepth: 0
    functionLinenumber: 951
    functionLinenumberEnd: 961
    functionName: CRYPTO_load_word_be
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - CRYPTO_bswap4
    - CRYPTO_bswap8
    - static_assert
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t CRYPTO_load_word_be(const void *in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1255,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1257
      start: 1251
    functionDepth: 0
    functionLinenumber: 1251
    functionLinenumberEnd: 1257
    functionName: CRYPTO_is_AVX512BW_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_AVX512BW_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1272,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1273
      start: 1271
    functionDepth: 0
    functionLinenumber: 1271
    functionLinenumberEnd: 1273
    functionName: CRYPTO_cpu_avoid_zmm_registers
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_cpu_avoid_zmm_registers(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1263,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1265
      start: 1259
    functionDepth: 0
    functionLinenumber: 1259
    functionLinenumberEnd: 1265
    functionName: CRYPTO_is_AVX512VL_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_AVX512VL_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1281
      start: 1275
    functionDepth: 0
    functionLinenumber: 1275
    functionLinenumberEnd: 1281
    functionName: CRYPTO_is_VAES_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_VAES_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1287,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1289
      start: 1283
    functionDepth: 0
    functionLinenumber: 1283
    functionLinenumberEnd: 1289
    functionName: CRYPTO_is_VPCLMULQDQ_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_VPCLMULQDQ_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_addc
      Src: /src/boringssl/crypto/internal.h:1451,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - carry
    - out_carry
    argTypes:
    - unsigned int
    - unsigned int
    - unsigned int
    - unsigned int*
    constantsTouched: []
    func_position:
      end: 1452
      start: 1448
    functionDepth: 0
    functionLinenumber: 1448
    functionLinenumberEnd: 1452
    functionName: CRYPTO_addc_impl
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_addc
    linkageType: ''
    returnType: unsigned int
    signature: 'inline unsigned int CRYPTO_addc_impl(unsigned int x, unsigned int
      y, unsigned int carry, unsigned int *out_carry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_addcl
      Src: /src/boringssl/crypto/internal.h:1457,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - carry
    - out_carry
    argTypes:
    - unsigned long
    - unsigned long
    - unsigned long
    - unsigned long*
    constantsTouched: []
    func_position:
      end: 1458
      start: 1454
    functionDepth: 0
    functionLinenumber: 1454
    functionLinenumberEnd: 1458
    functionName: CRYPTO_addc_impl
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_addcl
    linkageType: ''
    returnType: unsigned long
    signature: 'inline unsigned long CRYPTO_addc_impl(unsigned long x, unsigned long
      y, unsigned long carry, unsigned long *out_carry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_ge_w
      Src: /src/boringssl/crypto/internal.h:321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - crypto_word_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 322
    functionName: constant_time_ge_8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_ge_w
    linkageType: ''
    returnType: uint8_t
    signature: 'static inline uint8_t constant_time_ge_8(crypto_word_t a, crypto_word_t
      b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/boringssl/crypto/internal.h:1074,1
    - Dst: strcmp
      Src: /src/boringssl/crypto/internal.h:1075,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 1
    argNames:
    - test
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1076
      start: 1073
    functionDepth: 0
    functionLinenumber: 1073
    functionLinenumberEnd: 1076
    functionName: boringssl_fips_break_test
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - strcmp
    - getenv
    linkageType: ''
    returnType: int
    signature: 'inline int boringssl_fips_break_test(const char *test) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1138,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1140
      start: 1134
    functionDepth: 0
    functionLinenumber: 1134
    functionLinenumberEnd: 1140
    functionName: CRYPTO_is_SSSE3_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_SSSE3_capable(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memchr
      Src: /src/boringssl/crypto/internal.h:844,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 3
    argNames:
    - s
    - c
    - n
    argTypes:
    - void*
    - int
    - size_t
    constantsTouched: []
    func_position:
      end: 845
      start: 839
    functionDepth: 0
    functionLinenumber: 839
    functionLinenumberEnd: 845
    functionName: OPENSSL_memchr
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - memchr
    linkageType: ''
    returnType: void*
    signature: 'static inline void *OPENSSL_memchr(const void *s, int c, size_t n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_lt_w
      Src: /src/boringssl/crypto/internal.h:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - crypto_word_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 316
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 316
    functionName: constant_time_ge_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_lt_w
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_ge_w(crypto_word_t a, crypto_word_t
      b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:943,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - in
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 945
      start: 941
    functionDepth: 0
    functionLinenumber: 941
    functionLinenumberEnd: 945
    functionName: CRYPTO_load_word_le
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t CRYPTO_load_word_le(const void *in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_addcll
      Src: /src/boringssl/crypto/internal.h:1464,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - carry
    - out_carry
    argTypes:
    - unsigned long long
    - unsigned long long
    - unsigned long long
    - unsigned long long*
    constantsTouched: []
    func_position:
      end: 1465
      start: 1460
    functionDepth: 0
    functionLinenumber: 1460
    functionLinenumberEnd: 1465
    functionName: CRYPTO_addc_impl
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - __builtin_addcll
    linkageType: ''
    returnType: unsigned long long
    signature: 'inline unsigned long long CRYPTO_addc_impl(unsigned long long x, unsigned
      long long y, unsigned long long carry, unsigned long long *out_carry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/internal.h:948,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - out
    - v
    argTypes:
    - void*
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 949
      start: 947
    functionDepth: 0
    functionLinenumber: 947
    functionLinenumberEnd: 949
    functionName: CRYPTO_store_word_le
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    linkageType: ''
    returnType: void
    signature: 'static inline void CRYPTO_store_word_le(void *out, crypto_word_t v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_get_ia32cap
      Src: /src/boringssl/crypto/internal.h:1146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 1148
      start: 1142
    functionDepth: 0
    functionLinenumber: 1142
    functionLinenumberEnd: 1148
    functionName: CRYPTO_is_SSE4_1_capable
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_get_ia32cap
    linkageType: ''
    returnType: int
    signature: 'inline int CRYPTO_is_SSE4_1_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_barrier_w
      Src: /src/boringssl/crypto/internal.h:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - mask
    - a
    - b
    argTypes:
    - crypto_word_t
    - uint8_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 396
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 396
    functionName: constant_time_select_8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - value_barrier_w
    linkageType: ''
    returnType: uint8_t
    signature: 'static inline uint8_t constant_time_select_8(crypto_word_t mask, uint8_t
      a, uint8_t b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_addc_impl
      Src: /src/boringssl/crypto/internal.h:1469,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 4
    argNames:
    - x
    - y
    - carry
    - out_carry
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t*
    constantsTouched: []
    func_position:
      end: 1470
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1470
    functionName: CRYPTO_addc_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_addc_impl
    linkageType: ''
    returnType: uint32_t
    signature: 'inline uint32_t CRYPTO_addc_u32(uint32_t x, uint32_t y, uint32_t carry,
      uint32_t *out_carry) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_barrier_w
      Src: /src/boringssl/crypto/internal.h:380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - mask
    - a
    - b
    argTypes:
    - crypto_word_t
    - crypto_word_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 382
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 382
    functionName: constant_time_select_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - value_barrier_w
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_select_w(crypto_word_t mask,
      crypto_word_t a, crypto_word_t b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_lt_w
      Src: /src/boringssl/crypto/internal.h:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - crypto_word_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 310
      start: 308
    functionDepth: 0
    functionLinenumber: 308
    functionLinenumberEnd: 310
    functionName: constant_time_lt_8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_lt_w
    linkageType: ''
    returnType: uint8_t
    signature: 'static inline uint8_t constant_time_lt_8(crypto_word_t a, crypto_word_t
      b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_msb_w
      Src: /src/boringssl/crypto/internal.h:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - crypto_word_t
    - crypto_word_t
    constantsTouched: []
    func_position:
      end: 304
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 304
    functionName: constant_time_lt_w
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - constant_time_msb_w
    linkageType: ''
    returnType: crypto_word_t
    signature: 'static inline crypto_word_t constant_time_lt_w(crypto_word_t a, crypto_word_t
      b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: declassify_assert
      Src: /src/boringssl/crypto/internal.h:1545,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - x
    - y
    - borrow
    - out_borrow
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t*
    constantsTouched: []
    func_position:
      end: 1549
      start: 1543
    functionDepth: 0
    functionLinenumber: 1543
    functionLinenumberEnd: 1549
    functionName: CRYPTO_subc_u32
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - declassify_assert
    linkageType: ''
    returnType: uint32_t
    signature: 'static inline uint32_t CRYPTO_subc_u32(uint32_t x, uint32_t y, uint32_t
      borrow, uint32_t *out_borrow) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _byteswap_uint64
      Src: /src/boringssl/crypto/internal.h:787,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 787
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 787
    functionName: CRYPTO_bswap8
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - _byteswap_uint64
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_bswap8(uint64_t x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: declassify_assert
      Src: /src/boringssl/crypto/internal.h:1553,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - x
    - y
    - borrow
    - out_borrow
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t*
    constantsTouched: []
    func_position:
      end: 1557
      start: 1551
    functionDepth: 0
    functionLinenumber: 1551
    functionLinenumberEnd: 1557
    functionName: CRYPTO_subc_u64
    functionSourceFile: /src/boringssl/crypto/internal.h
    functionUses: []
    functionsReached:
    - declassify_assert
    linkageType: ''
    returnType: uint64_t
    signature: 'static inline uint64_t CRYPTO_subc_u64(uint64_t x, uint64_t y, uint64_t
      borrow, uint64_t *out_borrow) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 1
    argNames:
    - s
    argTypes:
    - STRING_PIECE*
    constantsTouched: []
    func_position:
      end: 97
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 97
    functionName: STRING_PIECE_trim
    functionSourceFile: /src/boringssl/crypto/cpu_arm_linux.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void STRING_PIECE_trim(STRING_PIECE *s) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memchr
      Src: /src/boringssl/crypto/cpu_arm_linux.h:57,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 4
    argNames:
    - out_left
    - out_right
    - in
    - sep
    argTypes:
    - STRING_PIECE*
    - STRING_PIECE*
    - STRING_PIECE*
    - char
    constantsTouched: []
    func_position:
      end: 68
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 68
    functionName: STRING_PIECE_split
    functionSourceFile: /src/boringssl/crypto/cpu_arm_linux.h
    functionUses: []
    functionsReached:
    - OPENSSL_memchr
    linkageType: ''
    returnType: int
    signature: 'static int STRING_PIECE_split(STRING_PIECE *out_left, STRING_PIECE
      *out_right, const STRING_PIECE *in, char sep) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: STRING_PIECE_get_delimited
      Src: /src/boringssl/crypto/cpu_arm_linux.h:106,1
    - Dst: STRING_PIECE_split
      Src: /src/boringssl/crypto/cpu_arm_linux.h:108,1
    - Dst: STRING_PIECE_trim
      Src: /src/boringssl/crypto/cpu_arm_linux.h:111,1
    - Dst: STRING_PIECE_trim
      Src: /src/boringssl/crypto/cpu_arm_linux.h:113,1
    - Dst: STRING_PIECE_equals
      Src: /src/boringssl/crypto/cpu_arm_linux.h:112,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 3
    argNames:
    - out
    - in
    - field
    argTypes:
    - STRING_PIECE*
    - STRING_PIECE*
    - char*
    constantsTouched: []
    func_position:
      end: 120
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 120
    functionName: extract_cpuinfo_field
    functionSourceFile: /src/boringssl/crypto/cpu_arm_linux.h
    functionUses: []
    functionsReached:
    - STRING_PIECE_split
    - STRING_PIECE_equals
    - STRING_PIECE_trim
    - STRING_PIECE_get_delimited
    linkageType: ''
    returnType: int
    signature: 'static int extract_cpuinfo_field(STRING_PIECE *out, const STRING_PIECE
      *in, const char *field) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/boringssl/crypto/cpu_arm_linux.h:48,1
    - Dst: OPENSSL_memcmp
      Src: /src/boringssl/crypto/cpu_arm_linux.h:49,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - STRING_PIECE*
    - char*
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: STRING_PIECE_equals
    functionSourceFile: /src/boringssl/crypto/cpu_arm_linux.h
    functionUses: []
    functionsReached:
    - strlen
    - OPENSSL_memcmp
    linkageType: ''
    returnType: int
    signature: 'static int STRING_PIECE_equals(const STRING_PIECE *a, const char *b) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: STRING_PIECE_split
      Src: /src/boringssl/crypto/cpu_arm_linux.h:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 3
    argNames:
    - s
    - out
    - sep
    argTypes:
    - STRING_PIECE*
    - STRING_PIECE*
    - char
    constantsTouched: []
    func_position:
      end: 85
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 85
    functionName: STRING_PIECE_get_delimited
    functionSourceFile: /src/boringssl/crypto/cpu_arm_linux.h
    functionUses: []
    functionsReached:
    - STRING_PIECE_split
    linkageType: ''
    returnType: int
    signature: 'static int STRING_PIECE_get_delimited(STRING_PIECE *s, STRING_PIECE
      *out, char sep) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: extract_cpuinfo_field
      Src: /src/boringssl/crypto/cpu_arm_linux.h:139,1
    - Dst: has_list_item
      Src: /src/boringssl/crypto/cpu_arm_linux.h:144,1
    - Dst: has_list_item
      Src: /src/boringssl/crypto/cpu_arm_linux.h:150,1
    - Dst: has_list_item
      Src: /src/boringssl/crypto/cpu_arm_linux.h:153,1
    - Dst: has_list_item
      Src: /src/boringssl/crypto/cpu_arm_linux.h:147,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 1
    argNames:
    - cpuinfo
    argTypes:
    - STRING_PIECE*
    constantsTouched: []
    func_position:
      end: 157
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 157
    functionName: crypto_get_arm_hwcap2_from_cpuinfo
    functionSourceFile: /src/boringssl/crypto/cpu_arm_linux.h
    functionUses: []
    functionsReached:
    - extract_cpuinfo_field
    - has_list_item
    linkageType: ''
    returnType: unsigned long
    signature: 'static unsigned long crypto_get_arm_hwcap2_from_cpuinfo( const STRING_PIECE
      *cpuinfo) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: STRING_PIECE_get_delimited
      Src: /src/boringssl/crypto/cpu_arm_linux.h:126,1
    - Dst: STRING_PIECE_equals
      Src: /src/boringssl/crypto/cpu_arm_linux.h:127,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 2
    argNames:
    - list
    - item
    argTypes:
    - STRING_PIECE*
    - char*
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: has_list_item
    functionSourceFile: /src/boringssl/crypto/cpu_arm_linux.h
    functionUses: []
    functionsReached:
    - STRING_PIECE_equals
    - STRING_PIECE_get_delimited
    linkageType: ''
    returnType: int
    signature: 'static int has_list_item(const STRING_PIECE *list, const char *item) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - status
    argTypes:
    - bcm_status
    constantsTouched: []
    func_position:
      end: 54
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 54
    functionName: bcm_success
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bcm_interface.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int bcm_success(bcm_status status) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - result
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 62
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 62
    functionName: bcm_as_not_approved_status
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bcm_interface.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bcm_status_t
    signature: 'inline bcm_status_t bcm_as_not_approved_status(int result) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - result
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: bcm_as_approved_status
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bcm_interface.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bcm_status_t
    signature: 'inline bcm_status_t bcm_as_approved_status(int result) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 70
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 70
    functionName: _bss_get
    functionSourceFile: /src/boringssl/crypto/fipsmodule/delocate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: type*
    signature: 'static type *name##_bss_get(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: FIPS_service_indicator_update_state
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void FIPS_service_indicator_update_state(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_AEAD_CTX*
    constantsTouched: []
    func_position:
      end: 79
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 79
    functionName: AEAD_GCM_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void AEAD_GCM_verify_service_indicator( [[maybe_unused]] const
      EVP_AEAD_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - eckey
    argTypes:
    - EC_KEY*
    constantsTouched: []
    func_position:
      end: 85
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 85
    functionName: EC_KEY_keygen_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void EC_KEY_keygen_verify_service_indicator( [[maybe_unused]]
      const EC_KEY *eckey) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_CIPHER_CTX*
    constantsTouched: []
    func_position:
      end: 91
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 91
    functionName: EVP_Cipher_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void EVP_Cipher_verify_service_indicator( [[maybe_unused]]
      const EVP_CIPHER_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_MD_CTX*
    constantsTouched: []
    func_position:
      end: 97
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 97
    functionName: EVP_DigestVerify_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void EVP_DigestVerify_verify_service_indicator( [[maybe_unused]]
      const EVP_MD_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 75
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 75
    functionName: FIPS_service_indicator_lock_state
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void FIPS_service_indicator_lock_state(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    functionName: FIPS_service_indicator_unlock_state
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void FIPS_service_indicator_unlock_state(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_AEAD_CTX*
    constantsTouched: []
    func_position:
      end: 82
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 82
    functionName: AEAD_CCM_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void AEAD_CCM_verify_service_indicator( [[maybe_unused]] const
      EVP_AEAD_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ec_key
    argTypes:
    - EC_KEY*
    constantsTouched: []
    func_position:
      end: 88
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 88
    functionName: ECDH_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void ECDH_verify_service_indicator( [[maybe_unused]] const
      EC_KEY *ec_key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - EVP_MD_CTX*
    constantsTouched: []
    func_position:
      end: 94
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 94
    functionName: EVP_DigestSign_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void EVP_DigestSign_verify_service_indicator( [[maybe_unused]]
      const EVP_MD_CTX *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - evp_md
    argTypes:
    - EVP_MD*
    constantsTouched: []
    func_position:
      end: 100
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 100
    functionName: HMAC_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void HMAC_verify_service_indicator( [[maybe_unused]] const
      EVP_MD *evp_md) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - dgst
    argTypes:
    - EVP_MD*
    constantsTouched: []
    func_position:
      end: 103
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 103
    functionName: TLSKDF_verify_service_indicator
    functionSourceFile: /src/boringssl/crypto/fipsmodule/service_indicator/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void TLSKDF_verify_service_indicator( [[maybe_unused]] const
      EVP_MD *dgst) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hwaes_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:118,1
    - Dst: CRYPTO_is_AVX_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:118,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: aes_hw_set_encrypt_key_alt_preferred
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX_capable
    - hwaes_capable
    linkageType: ''
    returnType: int
    signature: 'inline int aes_hw_set_encrypt_key_alt_preferred(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    functionName: vpaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int vpaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:237,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - userKey
    - bits
    - key
    argTypes:
    - uint8_t*
    - int
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 238
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 238
    functionName: vpaes_set_decrypt_key
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: int
    signature: 'inline int vpaes_set_decrypt_key(const uint8_t *userKey, int bits,
      AES_KEY *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:243,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - in
    - out
    - key
    argTypes:
    - uint8_t*
    - uint8_t*
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 244
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 244
    functionName: vpaes_decrypt
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void vpaes_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY
      *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_NEON_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 485
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 485
    functionName: gcm_neon_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_NEON_capable
    linkageType: ''
    returnType: int
    signature: 'inline int gcm_neon_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AESNI_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: hwaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AESNI_capable
    linkageType: ''
    returnType: int
    signature: 'inline int hwaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_NEON_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: vpaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_NEON_capable
    linkageType: ''
    returnType: int
    signature: 'inline int vpaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_NEON_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: bsaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_NEON_capable
    linkageType: ''
    returnType: int
    signature: 'inline int bsaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hwaes_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:115,1
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:115,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 116
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 116
    functionName: aes_hw_set_encrypt_key_alt_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    - hwaes_capable
    linkageType: ''
    returnType: int
    signature: 'inline int aes_hw_set_encrypt_key_alt_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:240,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - in
    - out
    - key
    argTypes:
    - uint8_t*
    - uint8_t*
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 241
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 241
    functionName: vpaes_encrypt
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void vpaes_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY
      *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:247,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 6
    argNames:
    - in
    - out
    - length
    - key
    - ivec
    - enc
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - AES_KEY*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 248
      start: 245
    functionDepth: 0
    functionLinenumber: 245
    functionLinenumberEnd: 248
    functionName: vpaes_cbc_encrypt
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void vpaes_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t
      length, const AES_KEY *key, uint8_t *ivec, int enc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 184
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 184
    functionName: bsaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int bsaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_assert
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:277,1
    - Dst: CRYPTO_load_word_le
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:281,1
    - Dst: CRYPTO_load_word_le
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:281,1
    - Dst: CRYPTO_store_word_le
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:280,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - out
    - a
    - b
    argTypes:
    - uint8_t
    - uint8_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 283
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 283
    functionName: CRYPTO_xor16
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_store_word_le
    - static_assert
    - CRYPTO_load_word_le
    linkageType: ''
    returnType: void
    signature: 'inline void CRYPTO_xor16(uint8_t out[16], const uint8_t a[16], const
      uint8_t b[16]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:159,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 5
    argNames:
    - in
    - out
    - len
    - key
    - ivec
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - AES_KEY*
    - uint8_t
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 160
    functionName: aes_hw_ctr32_encrypt_blocks
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void aes_hw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t
      *out, size_t len, const AES_KEY *key, const uint8_t ivec[16]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: vpaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int vpaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:233,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - userKey
    - bits
    - key
    argTypes:
    - uint8_t*
    - int
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 234
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 234
    functionName: vpaes_set_encrypt_key
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: int
    signature: 'inline int vpaes_set_encrypt_key(const uint8_t *userKey, int bits,
      AES_KEY *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:138,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - user_key
    - bits
    - key
    argTypes:
    - uint8_t*
    - int
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 139
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 139
    functionName: aes_hw_set_decrypt_key
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: int
    signature: 'inline int aes_hw_set_decrypt_key(const uint8_t *user_key, int bits,
      AES_KEY *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:148,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - in
    - out
    - key
    argTypes:
    - uint8_t*
    - uint8_t*
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 149
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 149
    functionName: aes_hw_decrypt
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void aes_hw_decrypt(const uint8_t *in, uint8_t *out, const
      AES_KEY *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:196,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 5
    argNames:
    - in
    - out
    - len
    - key
    - ivec
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - AES_KEY*
    - uint8_t
    constantsTouched: []
    func_position:
      end: 197
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 197
    functionName: bsaes_ctr32_encrypt_blocks
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void bsaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t
      *out, size_t len, const AES_KEY *key, const uint8_t ivec[16]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_ARMv8_PMULL_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:478,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 478
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 478
    functionName: gcm_pmull_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ARMv8_PMULL_capable
    linkageType: ''
    returnType: int
    signature: 'inline int gcm_pmull_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_NEON_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    functionName: vpaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_NEON_capable
    linkageType: ''
    returnType: int
    signature: 'inline int vpaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:143,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 3
    argNames:
    - in
    - out
    - key
    argTypes:
    - uint8_t*
    - uint8_t*
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: aes_hw_encrypt
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void aes_hw_encrypt(const uint8_t *in, uint8_t *out, const
      AES_KEY *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:153,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 6
    argNames:
    - in
    - out
    - length
    - key
    - ivec
    - enc
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - AES_KEY*
    - uint8_t*
    - int
    constantsTouched: []
    func_position:
      end: 154
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 154
    functionName: aes_hw_cbc_encrypt
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void aes_hw_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t
      length, const AES_KEY *key, uint8_t *ivec, int enc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:201,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - out_bsaes
    - vpaes
    argTypes:
    - AES_KEY*
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 202
      start: 199
    functionDepth: 0
    functionLinenumber: 199
    functionLinenumberEnd: 202
    functionName: vpaes_encrypt_key_to_bsaes
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void vpaes_encrypt_key_to_bsaes(AES_KEY *out_bsaes, const AES_KEY
      *vpaes) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:190,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 6
    argNames:
    - in
    - out
    - length
    - key
    - ivec
    - enc
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - AES_KEY*
    - uint8_t
    - int
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 191
    functionName: bsaes_cbc_encrypt
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void bsaes_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t
      length, const AES_KEY *key, uint8_t ivec[16], int enc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    functionName: hwaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int hwaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_ARMv8_AES_capable
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: hwaes_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ARMv8_AES_capable
    linkageType: ''
    returnType: int
    signature: 'inline int hwaes_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:133,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - user_key
    - bits
    - key
    argTypes:
    - uint8_t*
    - int
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 134
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 134
    functionName: aes_hw_set_encrypt_key
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: int
    signature: 'inline int aes_hw_set_encrypt_key(const uint8_t *user_key, int bits,
      AES_KEY *key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:206,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - out_bsaes
    - vpaes
    argTypes:
    - AES_KEY*
    - AES_KEY*
    constantsTouched: []
    func_position:
      end: 207
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 207
    functionName: vpaes_decrypt_key_to_bsaes
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void vpaes_decrypt_key_to_bsaes(AES_KEY *out_bsaes, const AES_KEY
      *vpaes) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/fipsmodule/aes/internal.h:252,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 5
    argNames:
    - in
    - out
    - len
    - key
    - ivec
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - AES_KEY*
    - uint8_t
    constantsTouched: []
    func_position:
      end: 253
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 253
    functionName: vpaes_ctr32_encrypt_blocks
    functionSourceFile: /src/boringssl/crypto/fipsmodule/aes/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t
      *out, size_t len, const AES_KEY *key, const uint8_t ivec[16]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/fipsmodule/slhdsa/address.h:71,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - out
    - in
    argTypes:
    - uint8_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 74
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 74
    functionName: slhdsa_copy_keypair_addr
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_copy_keypair_addr(uint8_t out[32], const uint8_t
      in[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - hash
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: slhdsa_set_hash_addr
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_hash_addr(uint8_t addr[32], uint32_t hash) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_store_u64_be
      Src: /src/boringssl/crypto/fipsmodule/slhdsa/address.h:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - tree
    argTypes:
    - uint8_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 82
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 82
    functionName: slhdsa_set_tree_addr
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached:
    - CRYPTO_store_u64_be
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_tree_addr(uint8_t addr[32], uint64_t tree) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memset
      Src: /src/boringssl/crypto/fipsmodule/slhdsa/address.h:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - addr
    - type
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 99
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 99
    functionName: slhdsa_set_type
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached:
    - OPENSSL_memset
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_type(uint8_t addr[32], uint32_t type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_store_u32_be
      Src: /src/boringssl/crypto/fipsmodule/slhdsa/address.h:106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - tree_index
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 107
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 107
    functionName: slhdsa_set_tree_index
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached:
    - CRYPTO_store_u32_be
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_tree_index(uint8_t addr[32], uint32_t tree_index) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - chain
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: slhdsa_set_chain_addr
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_chain_addr(uint8_t addr[32], uint32_t chain) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - layer
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 78
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 78
    functionName: slhdsa_set_layer_addr
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_layer_addr(uint8_t addr[32], uint32_t layer) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - addr
    - keypair
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: slhdsa_set_keypair_addr
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_keypair_addr(uint8_t addr[32], uint32_t keypair) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - addr
    - tree_height
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 103
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 103
    functionName: slhdsa_set_tree_height
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void slhdsa_set_tree_height(uint8_t addr[32], uint32_t tree_height) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_load_u32_be
      Src: /src/boringssl/crypto/fipsmodule/slhdsa/address.h:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - addr
    argTypes:
    - uint8_t
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: slhdsa_get_tree_index
    functionSourceFile: /src/boringssl/crypto/fipsmodule/slhdsa/address.h
    functionUses: []
    functionsReached:
    - CRYPTO_load_u32_be
    linkageType: ''
    returnType: uint32_t
    signature: 'inline uint32_t slhdsa_get_tree_index(uint8_t addr[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CONSTTIME_SECRET
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:167,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - bn
    argTypes:
    - BIGNUM*
    constantsTouched: []
    func_position:
      end: 168
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 168
    functionName: bn_secret
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached:
    - CONSTTIME_SECRET
    linkageType: ''
    returnType: void
    signature: 'inline void bn_secret(BIGNUM *bn) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:303,1
    - Dst: CRYPTO_is_ADX_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:303,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 304
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 304
    functionName: bn_mulx_adx_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_BMI2_capable
    - CRYPTO_is_ADX_capable
    linkageType: ''
    returnType: int
    signature: 'inline int bn_mulx_adx_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_NEON_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:324,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 325
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 325
    functionName: bn_mul8x_mont_neon_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_NEON_capable
    linkageType: ''
    returnType: int
    signature: 'inline int bn_mul8x_mont_neon_capable(size_t num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bn_mul4x_mont_gather5_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:345,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:346,1
    - Dst: CRYPTO_is_ADX_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:345,1
    - Dst: CRYPTO_is_BMI1_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:346,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 347
      start: 344
    functionDepth: 0
    functionLinenumber: 344
    functionLinenumberEnd: 347
    functionName: bn_mulx4x_mont_gather5_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_BMI2_capable
    - CRYPTO_is_BMI1_capable
    - bn_mul4x_mont_gather5_capable
    - CRYPTO_is_ADX_capable
    linkageType: ''
    returnType: int
    signature: 'inline int bn_mulx4x_mont_gather5_capable(int num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 372
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 372
    functionName: bn_power5_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int bn_power5_capable(int num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 309
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 309
    functionName: bn_mul4x_mont_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int bn_mul4x_mont_capable(size_t num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bn_mul4x_mont_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:313,1
    - Dst: bn_mulx_adx_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:313,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - num
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 314
      start: 312
    functionDepth: 0
    functionLinenumber: 312
    functionLinenumberEnd: 314
    functionName: bn_mulx4x_mont_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached:
    - bn_mul4x_mont_capable
    - bn_mulx_adx_capable
    linkageType: ''
    returnType: int
    signature: 'inline int bn_mulx4x_mont_capable(size_t num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 319
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 319
    functionName: bn_sqr8x_mont_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int bn_sqr8x_mont_capable(size_t num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bn_power5_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:375,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:376,1
    - Dst: CRYPTO_is_BMI1_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:376,1
    - Dst: CRYPTO_is_ADX_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:375,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 377
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 377
    functionName: bn_powerx5_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ADX_capable
    - CRYPTO_is_BMI2_capable
    - CRYPTO_is_BMI1_capable
    - bn_power5_capable
    linkageType: ''
    returnType: int
    signature: 'inline int bn_powerx5_capable(int num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 339
      start: 339
    functionDepth: 0
    functionLinenumber: 339
    functionLinenumberEnd: 339
    functionName: bn_mul4x_mont_gather5_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int bn_mul4x_mont_gather5_capable(int num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CONSTTIME_DECLASSIFY
      Src: /src/boringssl/crypto/fipsmodule/bn/internal.h:173,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - bn
    argTypes:
    - BIGNUM*
    constantsTouched: []
    func_position:
      end: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    functionName: bn_declassify
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/internal.h
    functionUses: []
    functionsReached:
    - CONSTTIME_DECLASSIFY
    linkageType: ''
    returnType: void
    signature: 'inline void bn_declassify(BIGNUM *bn) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX2_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/rsaz_exp.h:46,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: rsaz_avx2_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/rsaz_exp.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX2_capable
    linkageType: ''
    returnType: int
    signature: 'inline int rsaz_avx2_capable(void) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_BMI1_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/rsaz_exp.h:49,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/rsaz_exp.h:49,1
    - Dst: CRYPTO_is_ADX_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/rsaz_exp.h:50,1
    - Dst: CRYPTO_is_AVX2_capable
      Src: /src/boringssl/crypto/fipsmodule/bn/rsaz_exp.h:55,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 56
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 56
    functionName: rsaz_avx2_preferred
    functionSourceFile: /src/boringssl/crypto/fipsmodule/bn/rsaz_exp.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_BMI2_capable
    - CRYPTO_is_BMI1_capable
    - CRYPTO_is_AVX2_capable
    - CRYPTO_is_ADX_capable
    linkageType: ''
    returnType: int
    signature: 'inline int rsaz_avx2_preferred(void) '
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memset
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:101,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:117,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:96,1
    - Dst: HashBlocks
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:97,1
    - Dst: HashBlocks
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:111,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:103,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 65
    argCount: 2
    argNames:
    - ctx
    - uint8_t
    - '> in'
    argTypes:
    - typename*
    - Span
    constantsTouched: []
    func_position:
      end: 119
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 119
    functionName: crypto_md32_update
    functionSourceFile: /src/boringssl/crypto/fipsmodule/digest/md32_common.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - OPENSSL_memset
    - HashBlocks
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN // This is a generic 32-bit "collector" for message
      digest algorithms. It // collects input character stream into chunks of 32-bit
      values and invokes the // block function that performs the actual hash calculations.
      // // To make use of this mechanism, the hash context should be defined with
      the // following parameters. // // typedef struct <name>_state_st { // uint32_t
      h[<chaining length> / sizeof(uint32_t)]; // uint32_t Nl, Nh; // uint8_t data[<block
      size>]; // unsigned num; // ... // } <NAME>_CTX; // // <chaining length> is
      the output length of the hash in bytes, before // any truncation (e.g. 64 for
      SHA-224 and SHA-256, 128 for SHA-384 and // SHA-512). // // |h| is the hash
      state and is updated by a function of type // |crypto_md32_block_func|. |data|
      is the partial unprocessed block and has // |num| bytes. |Nl| and |Nh| maintain
      the number of bits processed so far. // // The template parameter is then a
      traits struct defined as follows: // // struct HashTraits { // // HashContext
      is the hash type defined above. // using HashContext = <NAME>_CTX; // // //
      kBlockSize is the block size of the hash function. // static constexpr size_t
      kBlockSize = <block size>; // // // kLengthIsBigEndian determines whether the
      final length is encoded in // // big or little endian. // static constexpr bool
      kLengthIsBigEndian = ...; // // // HashBlocks incorporates |num_blocks| blocks
      of input from |data| // // into |state|. It is assumed the caller has sized
      |state| and |data| // // for the hash function. // static void HashBlocks(uint32_t
      *state, const uint8_t *data, // size_t num_blocks) { // <name>_block_data_order(state,
      data, num_blocks); // } // }; // // The reason for this formulation is to encourage
      the compiler to specialize // all the code for the block size and block function.
      // crypto_md32_update hashes |in| to |ctx|. template <typename Traits>inline
      void crypto_md32_update(typename Traits::HashContext *ctx, Span<const uint8_t>
      in) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:137,1
    - Dst: HashBlocks
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:145,1
    - Dst: CRYPTO_store_u32_be
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:151,1
    - Dst: OPENSSL_memset
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:147,1
    - Dst: OPENSSL_memset
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:143,1
    - Dst: CRYPTO_store_u32_be
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:152,1
    - Dst: CRYPTO_store_u32_le
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:154,1
    - Dst: CRYPTO_store_u32_le
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:155,1
    - Dst: HashBlocks
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:157,1
    - Dst: OPENSSL_memset
      Src: /src/boringssl/crypto/fipsmodule/digest/md32_common.h:159,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 34
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - typename*
    constantsTouched: []
    func_position:
      end: 160
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 160
    functionName: crypto_md32_final
    functionSourceFile: /src/boringssl/crypto/fipsmodule/digest/md32_common.h
    functionUses: []
    functionsReached:
    - OPENSSL_memset
    - CRYPTO_store_u32_be
    - CRYPTO_store_u32_le
    - HashBlocks
    - assert
    linkageType: ''
    returnType: void
    signature: 'void crypto_md32_final(typename Traits::HashContext *ctx) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_ARMv8_SHA1_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 35
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 35
    functionName: sha1_hw_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ARMv8_SHA1_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_hw_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_ARMv8_SHA256_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: sha256_hw_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ARMv8_SHA256_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha256_hw_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_ARMv8_SHA1_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: sha1_hw_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ARMv8_SHA1_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_hw_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_ARMv8_SHA256_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: sha256_hw_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ARMv8_SHA256_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha256_hw_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:86,1
    - Dst: CRYPTO_is_intel_cpu
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: sha1_avx_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX_capable
    - CRYPTO_is_intel_cpu
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_avx_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:103,1
    - Dst: CRYPTO_is_intel_cpu
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:103,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 104
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 104
    functionName: sha256_avx_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX_capable
    - CRYPTO_is_intel_cpu
    linkageType: ''
    returnType: int
    signature: 'inline int sha256_avx_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_x86_SHA_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:123,1
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:123,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    functionName: sha1_hw_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    - CRYPTO_is_x86_SHA_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_hw_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX2_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:128,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:128,1
    - Dst: CRYPTO_is_BMI1_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:129,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 130
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 130
    functionName: sha1_avx2_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_BMI2_capable
    - CRYPTO_is_BMI1_capable
    - CRYPTO_is_AVX2_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_avx2_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_ARMv8_SHA512_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 66
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 66
    functionName: sha512_hw_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_ARMv8_SHA512_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha512_hw_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: sha1_ssse3_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_ssse3_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: sha256_ssse3_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha256_ssse3_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 111
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 111
    functionName: sha512_ssse3_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha512_ssse3_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:138,1
    - Dst: CRYPTO_is_intel_cpu
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 139
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 139
    functionName: sha1_avx_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX_capable
    - CRYPTO_is_intel_cpu
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_avx_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_x86_SHA_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:151,1
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:151,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 152
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 152
    functionName: sha256_hw_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    - CRYPTO_is_x86_SHA_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha256_hw_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:158,1
    - Dst: CRYPTO_is_intel_cpu
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 159
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 159
    functionName: sha256_avx_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX_capable
    - CRYPTO_is_intel_cpu
    linkageType: ''
    returnType: int
    signature: 'inline int sha256_avx_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 164
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 164
    functionName: sha256_ssse3_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha256_ssse3_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:174,1
    - Dst: CRYPTO_is_intel_cpu
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 175
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 175
    functionName: sha512_avx_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX_capable
    - CRYPTO_is_intel_cpu
    linkageType: ''
    returnType: int
    signature: 'inline int sha512_avx_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/fipsmodule/sha/internal.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: sha1_ssse3_capable
    functionSourceFile: /src/boringssl/crypto/fipsmodule/sha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int sha1_ssse3_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_RDRAND_capable
      Src: /src/boringssl/crypto/fipsmodule/rand/internal.h:52,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: have_rdrand
    functionSourceFile: /src/boringssl/crypto/fipsmodule/rand/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_RDRAND_capable
    linkageType: ''
    returnType: int
    signature: 'inline int have_rdrand(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: have_rdrand
    functionSourceFile: /src/boringssl/crypto/fipsmodule/rand/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int have_rdrand(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: have_fast_rdrand
    functionSourceFile: /src/boringssl/crypto/fipsmodule/rand/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int have_fast_rdrand(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_RDRAND_capable
      Src: /src/boringssl/crypto/fipsmodule/rand/internal.h:58,1
    - Dst: CRYPTO_is_intel_cpu
      Src: /src/boringssl/crypto/fipsmodule/rand/internal.h:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    functionName: have_fast_rdrand
    functionSourceFile: /src/boringssl/crypto/fipsmodule/rand/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_RDRAND_capable
    - CRYPTO_is_intel_cpu
    linkageType: ''
    returnType: int
    signature: 'inline int have_fast_rdrand(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 34
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 34
    functionName: crypto_buffer_st
    functionSourceFile: /src/boringssl/crypto/pool/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: DEFINE_LHASH_OF(CRYPTO_BUFFER)
    signature: 'DEFINE_LHASH_OF(CRYPTO_BUFFER) struct crypto_buffer_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: operator
    functionSourceFile: /src/boringssl/crypto/test/abi_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool operator ==(const Reg128 &x) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_assert
      Src: /src/boringssl/crypto/test/abi_test.h:217,1
    - Dst: static_assert
      Src: /src/boringssl/crypto/test/abi_test.h:231,1
    - Dst: OPENSSL_memset
      Src: /src/boringssl/crypto/test/abi_test.h:267,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/crypto/test/abi_test.h:268,1
    - Dst: static_assert
      Src: /src/boringssl/crypto/test/abi_test.h:263,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - t
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 273
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 273
    functionName: ToWord
    functionSourceFile: /src/boringssl/crypto/test/abi_test.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - OPENSSL_memset
    - static_assert
    linkageType: ''
    returnType: crypto_word_t
    signature: 'crypto_word_t ToWord(T t) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 37
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 37
    functionName: abi_test
    functionSourceFile: /src/boringssl/crypto/test/abi_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace abi_test '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: operator
    functionSourceFile: /src/boringssl/crypto/test/abi_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool operator !=(const Reg128 &x) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ToWord
      Src: /src/boringssl/crypto/test/abi_test.h:295,1
    - Dst: RunTrampoline
      Src: /src/boringssl/crypto/test/abi_test.h:297,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 4
    argNames:
    - out
    - unwind
    - (*func)
    - DeductionGuard
    - <Args>::Type... args
    argTypes:
    - Result*
    - bool
    - R
    - typename
    constantsTouched: []
    func_position:
      end: 299
      start: 285
    functionDepth: 0
    functionLinenumber: 285
    functionLinenumberEnd: 299
    functionName: CheckImpl
    functionSourceFile: /src/boringssl/crypto/test/abi_test.h
    functionUses: []
    functionsReached:
    - RunTrampoline
    - ToWord
    linkageType: ''
    returnType: crypto_word_t
    signature: 'crypto_word_t CheckImpl(Result *out, bool unwind, R (*func)(Args...),
      typename DeductionGuard<Args>::Type... args) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Result
      Src: /src/boringssl/crypto/test/abi_test.h:316,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 4
    argNames:
    - out
    - bool
    - /* unwind */
    - (*func)
    - DeductionGuard
    - <Args>::Type... args
    argTypes:
    - Result*
    - bool
    - void
    - typename
    constantsTouched: []
    func_position:
      end: 319
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 319
    functionName: CheckImpl
    functionSourceFile: /src/boringssl/crypto/test/abi_test.h
    functionUses: []
    functionsReached:
    - Result
    linkageType: ''
    returnType: crypto_word_t
    signature: 'crypto_word_t CheckImpl(Result *out, bool /* unwind */, void (*func)(Args...),
      typename DeductionGuard<Args>::Type... args) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 54
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 54
    functionName: (16) Reg128
    functionSourceFile: /src/boringssl/crypto/test/abi_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct alignas
    signature: 'struct alignas (16) Reg128 '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_reset_malloc_counter_for_testing
      Src: /src/boringssl/crypto/test/gtest_main.h:56,1
    - Dst: ERR_clear_error
      Src: /src/boringssl/crypto/test/gtest_main.h:48,1
    - Dst: ERR_print_errors_fp
      Src: /src/boringssl/crypto/test/gtest_main.h:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - testing
    constantsTouched: []
    func_position:
      end: 57
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 57
    functionName: OnTestEnd
    functionSourceFile: /src/boringssl/crypto/test/gtest_main.h
    functionUses: []
    functionsReached:
    - OPENSSL_reset_malloc_counter_for_testing
    - ERR_print_errors_fp
    - ERR_clear_error
    linkageType: ''
    returnType: void
    signature: 'void OnTestEnd(const testing::TestInfo &test_info) override '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: MAKEWORD
      Src: /src/boringssl/crypto/test/gtest_main.h:65,1
    - Dst: fprintf
      Src: /src/boringssl/crypto/test/gtest_main.h:69,1
    - Dst: fprintf
      Src: /src/boringssl/crypto/test/gtest_main.h:73,1
    - Dst: WSAStartup
      Src: /src/boringssl/crypto/test/gtest_main.h:67,1
    - Dst: exit
      Src: /src/boringssl/crypto/test/gtest_main.h:70,1
    - Dst: exit
      Src: /src/boringssl/crypto/test/gtest_main.h:74,1
    - Dst: signal
      Src: /src/boringssl/crypto/test/gtest_main.h:79,1
    - Dst: GetInstance
      Src: /src/boringssl/crypto/test/gtest_main.h:82,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 83
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 83
    functionName: SetupGoogleTest
    functionSourceFile: /src/boringssl/crypto/test/gtest_main.h
    functionUses: []
    functionsReached:
    - exit
    - signal
    - GetInstance
    - fprintf
    - MAKEWORD
    - WSAStartup
    linkageType: ''
    returnType: void
    signature: 'inline void SetupGoogleTest() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: copy
      Src: /src/boringssl/crypto/test/test_util.h:59,1
    - Dst: CONSTTIME_DECLASSIFY
      Src: /src/boringssl/crypto/test/test_util.h:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - bssl::Span<
    - in
    argTypes:
    - uint8_t
    constantsTouched: []
    func_position:
      end: 62
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 62
    functionName: Declassified
    functionSourceFile: /src/boringssl/crypto/test/test_util.h
    functionUses: []
    functionsReached:
    - CONSTTIME_DECLASSIFY
    - copy
    linkageType: ''
    returnType: std
    signature: 'inline std ::vector<uint8_t> Declassified(bssl::Span<const uint8_t>
      in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 96
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 96
    functionName: LineReader
    functionSourceFile: /src/boringssl/crypto/test/file_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class LineReader '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    functionName: start_line
    functionSourceFile: /src/boringssl/crypto/test/file_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: unsigned
    signature: 'unsigned start_line() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HasAttribute
      Src: /src/boringssl/crypto/test/file_test.h:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - key
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    functionName: IgnoreAttribute
    functionSourceFile: /src/boringssl/crypto/test/file_test.h
    functionUses: []
    functionsReached:
    - HasAttribute
    linkageType: ''
    returnType: void
    signature: 'void IgnoreAttribute(const std::string &key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HasInstruction
      Src: /src/boringssl/crypto/test/file_test.h:169,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 169
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 169
    functionName: IsAtNewInstructionBlock
    functionSourceFile: /src/boringssl/crypto/test/file_test.h
    functionUses: []
    functionsReached:
    - HasInstruction
    linkageType: ''
    returnType: bool
    signature: 'bool IsAtNewInstructionBlock() const; // HasInstruction returns true
      if the current test has an instruction. bool HasInstruction(const std::string
      &key); // IgnoreInstruction marks the instruction with key |key| as used. void
      IgnoreInstruction(const std::string &key) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: is_valid
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool is_valid() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/boringssl/crypto/test/file_util.h:50,1
    - Dst: ScopedFD
      Src: /src/boringssl/crypto/test/file_util.h:52,1
    - Dst: ScopedFD
      Src: /src/boringssl/crypto/test/file_util.h:50,1
    - Dst: move
      Src: /src/boringssl/crypto/test/file_util.h:52,1
    - Dst: fd_
      Src: /src/boringssl/crypto/test/file_util.h:49,1
    - Dst: ScopedFD
      Src: /src/boringssl/crypto/test/file_util.h:48,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 52
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 52
    functionName: ScopedFD
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - ScopedFD
    - move
    - fd_
    - reset
    linkageType: ''
    returnType: class
    signature: 'class ScopedFD '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: get
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int get() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/boringssl/crypto/test/file_util.h:61,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    functionName: release
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - exchange
    linkageType: ''
    returnType: int
    signature: 'int release() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TemporaryFile
      Src: /src/boringssl/crypto/test/file_util.h:84,1
    - Dst: move
      Src: /src/boringssl/crypto/test/file_util.h:87,1
    - Dst: TemporaryFile
      Src: /src/boringssl/crypto/test/file_util.h:85,1
    - Dst: TemporaryFile
      Src: /src/boringssl/crypto/test/file_util.h:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 87
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 87
    functionName: TemporaryFile
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - move
    - TemporaryFile
    linkageType: ''
    returnType: class
    signature: 'class TemporaryFile '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    functionName: path
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string & path() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TemporaryDirectory
      Src: /src/boringssl/crypto/test/file_util.h:118,1
    - Dst: TemporaryDirectory
      Src: /src/boringssl/crypto/test/file_util.h:119,1
    - Dst: move
      Src: /src/boringssl/crypto/test/file_util.h:121,1
    - Dst: TemporaryDirectory
      Src: /src/boringssl/crypto/test/file_util.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 121
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 121
    functionName: TemporaryDirectory
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - TemporaryDirectory
    - move
    linkageType: ''
    returnType: class
    signature: 'class TemporaryDirectory '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: path
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string & path() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/boringssl/crypto/test/file_util.h:39,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 42
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 42
    functionName: FileDeleter
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - fclose
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN struct FileDeleter '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fd_
      Src: /src/boringssl/crypto/test/file_util.h:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    functionName: ScopedFD
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - fd_
    linkageType: ''
    returnType: explicit
    signature: 'explicit ScopedFD(int fd) : fd_(fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/boringssl/crypto/test/file_util.h:99,1
    - Dst: StringAsBytes
      Src: /src/boringssl/crypto/test/file_util.h:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - content
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: Init
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - StringAsBytes
    - Init
    linkageType: ''
    returnType: bool
    signature: 'bool Init(std::string_view content) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddFile
      Src: /src/boringssl/crypto/test/file_util.h:142,1
    - Dst: StringAsBytes
      Src: /src/boringssl/crypto/test/file_util.h:142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - filename
    - content
    argTypes:
    - std
    - std
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: AddFile
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - StringAsBytes
    - AddFile
    linkageType: ''
    returnType: bool
    signature: 'bool AddFile(const std::string &filename, std::string_view content) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/boringssl/crypto/test/file_util.h:39,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 1
    argNames:
    - f
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: operator
    functionSourceFile: /src/boringssl/crypto/test/file_util.h
    functionUses: []
    functionsReached:
    - fclose
    linkageType: ''
    returnType: void
    signature: 'void operator()(FILE *f) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Register
      Src: /src/boringssl/crypto/spake2plus/internal.h:74,1
    - Dst: Verifier
      Src: /src/boringssl/crypto/spake2plus/internal.h:142,1
    - Dst: Prover
      Src: /src/boringssl/crypto/spake2plus/internal.h:83,1
    - Dst: Prover
      Src: /src/boringssl/crypto/spake2plus/internal.h:84,1
    - Dst: Verifier
      Src: /src/boringssl/crypto/spake2plus/internal.h:143,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 199
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 199
    functionName: spake2plus
    functionSourceFile: /src/boringssl/crypto/spake2plus/internal.h
    functionUses: []
    functionsReached:
    - Verifier
    - Register
    - Prover
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN // SPAKE2+. // // SPAKE2+ is an augmented password-authenticated
      key-exchange. It allows // two parties, a prover and verifier, to derive a strong
      shared key with no // risk of disclosing the password, known only to the prover,
      to the verifier. // (But note that the verifier can still attempt an offline,
      brute-force attack // to recover the password.) // // This is an implementation
      of SPAKE2+ using P-256 as the group, SHA-256 as // the hash function, HKDF-SHA256
      as the key derivation function, and // HMAC-SHA256 as the message authentication
      code. // // See https://www.rfc-editor.org/rfc/rfc9383.html namespace spake2plus '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Verifier
      Src: /src/boringssl/crypto/spake2plus/internal.h:142,1
    - Dst: Verifier
      Src: /src/boringssl/crypto/spake2plus/internal.h:143,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 197
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 197
    functionName: OPENSSL_EXPORT
    functionSourceFile: /src/boringssl/crypto/spake2plus/internal.h
    functionUses: []
    functionsReached:
    - Verifier
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT Verifier '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Prover
      Src: /src/boringssl/crypto/spake2plus/internal.h:83,1
    - Dst: Prover
      Src: /src/boringssl/crypto/spake2plus/internal.h:84,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 136
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 136
    functionName: OPENSSL_EXPORT
    functionSourceFile: /src/boringssl/crypto/spake2plus/internal.h
    functionUses: []
    functionsReached:
    - Prover
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT Prover '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:109,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 3
    argCount: 1
    argNames:
    - X509_EXTENSIONS
    argTypes:
    - X509_EXTENSIONS
    constantsTouched: []
    func_position:
      end: 111
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 111
    functionName: DECLARE_ASN1_ITEM
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached:
    - STACK_OF
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(X509_EXTENSION)
    signature: 'DECLARE_ASN1_ITEM(X509_EXTENSION) // X509_EXTENSIONS is an |ASN1_ITEM|
      whose ASN.1 type is SEQUENCE of Extension // (RFC 5280) and C type is |STACK_OF(X509_EXTENSION)*|.
      DECLARE_ASN1_ITEM(X509_EXTENSIONS)typedef struct '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:130,1
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:131,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 136
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 136
    functionName: x509_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached:
    - STACK_OF
    linkageType: ''
    returnType: DECLARE_ASN1_FUNCTIONS(X509_CINF)
    signature: 'DECLARE_ASN1_FUNCTIONS(X509_CINF) struct x509_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:148,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 149
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 149
    functionName: typedef
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached:
    - STACK_OF
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(X509)
    signature: 'DECLARE_ASN1_ITEM(X509) typedef struct '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 159
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 159
    functionName: X509_req_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
    signature: 'DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) struct X509_req_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 52
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 52
    functionName: X509_name_entry_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(X509_PUBKEY)
    signature: 'DECLARE_ASN1_ITEM(X509_PUBKEY) struct X509_name_entry_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:184,1
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:185,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 187
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 187
    functionName: typedef
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached:
    - STACK_OF
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(X509_REVOKED)
    signature: 'DECLARE_ASN1_ITEM(X509_REVOKED) typedef struct '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DECLARE_ASN1_ITEM
      Src: /src/boringssl/crypto/x509/internal.h:234,1
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:244,1
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:242,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - GENERAL_NAME
    argTypes:
    - GENERAL_NAME
    constantsTouched: []
    func_position:
      end: 251
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 251
    functionName: DECLARE_ASN1_ITEM
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached:
    - STACK_OF
    - DECLARE_ASN1_ITEM
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(X509_CRL)
    signature: 'DECLARE_ASN1_ITEM(X509_CRL) // GENERAL_NAME is an |ASN1_ITEM| whose
      ASN.1 type is GeneralName and C type is // |GENERAL_NAME*|. DECLARE_ASN1_ITEM(GENERAL_NAME)//
      GENERAL_NAMES is an |ASN1_ITEM| whose ASN.1 type is SEQUENCE OF GeneralName//
      and C type is |GENERAL_NAMES*|, aka |STACK_OF(GENERAL_NAME)*|.DECLARE_ASN1_ITEM(GENERAL_NAMES)struct
      X509_VERIFY_PARAM_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 42
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 42
    functionName: X509_pubkey_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: DECLARE_ASN1_FUNCTIONS_const(X509_VAL)
    signature: 'DECLARE_ASN1_FUNCTIONS_const(X509_VAL) struct X509_pubkey_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 89
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 89
    functionName: X509_extension_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: DECLARE_ASN1_FUNCTIONS_const(X509_CERT_AUX)
    signature: 'DECLARE_ASN1_FUNCTIONS_const(X509_CERT_AUX) struct X509_extension_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 171
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 171
    functionName: x509_revoked_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached:
    - STACK_OF
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(X509_REQ)
    signature: 'DECLARE_ASN1_ITEM(X509_REQ) struct x509_revoked_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 1
    argCount: 1
    argNames:
    - NETSCAPE_SPKAC
    argTypes:
    - NETSCAPE_SPKAC
    constantsTouched: []
    func_position:
      end: 280
      start: 266
    functionDepth: 0
    functionLinenumber: 266
    functionLinenumberEnd: 280
    functionName: DECLARE_ASN1_ITEM
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(NETSCAPE_SPKI)
    signature: 'DECLARE_ASN1_ITEM(NETSCAPE_SPKI) // NETSCAPE_SPKAC is an |ASN1_ITEM|
      whose ASN.1 type is PublicKeyAndChallenge // and C type is |NETSCAPE_SPKAC*|.
      DECLARE_ASN1_ITEM(NETSCAPE_SPKAC)// This is a static that defines the function
      interfacestruct x509_lookup_method_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: STACK_OF
      Src: /src/boringssl/crypto/x509/internal.h:293,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 301
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 301
    functionName: x509_store_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached:
    - STACK_OF
    linkageType: ''
    returnType: DEFINE_STACK_OF(X509_LOOKUP)
    signature: 'DEFINE_STACK_OF(X509_LOOKUP) // This is used to hold everything. It
      is used for all certificate // validation. Once we have a certificate chain,
      the ''verify'' // function is then called to actually check the cert chain.
      struct x509_store_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: X509_name_st
    functionSourceFile: /src/boringssl/crypto/x509/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(X509_NAME_ENTRY)
    signature: 'DECLARE_ASN1_ITEM(X509_NAME_ENTRY) // we always keep X509_NAMEs in
      2 forms. struct X509_name_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 215
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 215
    functionName: chacha20_poly1305_asm_capable
    functionSourceFile: /src/boringssl/crypto/cipher/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int chacha20_poly1305_asm_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/cipher/internal.h:222,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 6
    argNames:
    - out_plaintext
    - ciphertext
    - plaintext_len
    - ad
    - ad_len
    - data
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - union chacha20_poly1305_open_data*
    constantsTouched: []
    func_position:
      end: 223
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 223
    functionName: chacha20_poly1305_open
    functionSourceFile: /src/boringssl/crypto/cipher/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void chacha20_poly1305_open(uint8_t *out_plaintext, const uint8_t
      *ciphertext, size_t plaintext_len, const uint8_t *ad, size_t ad_len, union chacha20_poly1305_open_data
      *data) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX2_capable
      Src: /src/boringssl/crypto/cipher/internal.h:164,1
    - Dst: chacha20_poly1305_open_sse41
      Src: /src/boringssl/crypto/cipher/internal.h:168,1
    - Dst: chacha20_poly1305_open_avx2
      Src: /src/boringssl/crypto/cipher/internal.h:165,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/crypto/cipher/internal.h:164,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 6
    argNames:
    - out_plaintext
    - ciphertext
    - plaintext_len
    - ad
    - ad_len
    - data
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - union chacha20_poly1305_open_data*
    constantsTouched: []
    func_position:
      end: 171
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 171
    functionName: chacha20_poly1305_open
    functionSourceFile: /src/boringssl/crypto/cipher/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_BMI2_capable
    - chacha20_poly1305_open_avx2
    - CRYPTO_is_AVX2_capable
    - chacha20_poly1305_open_sse41
    linkageType: ''
    returnType: void
    signature: 'inline void chacha20_poly1305_open(uint8_t *out_plaintext, const uint8_t
      *ciphertext, size_t plaintext_len, const uint8_t *ad, size_t ad_len, union chacha20_poly1305_open_data
      *data) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX2_capable
      Src: /src/boringssl/crypto/cipher/internal.h:197,1
    - Dst: chacha20_poly1305_seal_avx2
      Src: /src/boringssl/crypto/cipher/internal.h:198,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/crypto/cipher/internal.h:197,1
    - Dst: chacha20_poly1305_seal_sse41
      Src: /src/boringssl/crypto/cipher/internal.h:201,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 8
    argCount: 6
    argNames:
    - out_ciphertext
    - plaintext
    - plaintext_len
    - ad
    - ad_len
    - data
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - union chacha20_poly1305_seal_data*
    constantsTouched: []
    func_position:
      end: 204
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 204
    functionName: chacha20_poly1305_seal
    functionSourceFile: /src/boringssl/crypto/cipher/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_BMI2_capable
    - chacha20_poly1305_seal_avx2
    - CRYPTO_is_AVX2_capable
    - chacha20_poly1305_seal_sse41
    linkageType: ''
    returnType: void
    signature: 'inline void chacha20_poly1305_seal(uint8_t *out_ciphertext, const
      uint8_t *plaintext, size_t plaintext_len, const uint8_t *ad, size_t ad_len,
      union chacha20_poly1305_seal_data *data) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/crypto/cipher/internal.h:230,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 6
    argNames:
    - out_ciphertext
    - plaintext
    - plaintext_len
    - ad
    - ad_len
    - data
    argTypes:
    - uint8_t*
    - uint8_t*
    - size_t
    - uint8_t*
    - size_t
    - union chacha20_poly1305_seal_data*
    constantsTouched: []
    func_position:
      end: 231
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 231
    functionName: chacha20_poly1305_seal
    functionSourceFile: /src/boringssl/crypto/cipher/internal.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: 'inline void chacha20_poly1305_seal(uint8_t *out_ciphertext, const
      uint8_t *plaintext, size_t plaintext_len, const uint8_t *ad, size_t ad_len,
      union chacha20_poly1305_seal_data *data) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSE4_1_capable
      Src: /src/boringssl/crypto/cipher/internal.h:141,1
    - Dst: CRYPTO_is_NEON_capable
      Src: /src/boringssl/crypto/cipher/internal.h:143,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 145
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 145
    functionName: chacha20_poly1305_asm_capable
    functionSourceFile: /src/boringssl/crypto/cipher/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_NEON_capable
    - CRYPTO_is_SSE4_1_capable
    linkageType: ''
    returnType: int
    signature: 'inline int chacha20_poly1305_asm_capable(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/chacha/internal.h:67,1
    - Dst: CRYPTO_cpu_perf_is_like_silvermont
      Src: /src/boringssl/crypto/chacha/internal.h:68,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: ChaCha20_ctr32_ssse3_4x_capable
    functionSourceFile: /src/boringssl/crypto/chacha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_cpu_perf_is_like_silvermont
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int ChaCha20_ctr32_ssse3_4x_capable(size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/chacha/internal.h:39,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: ChaCha20_ctr32_ssse3_capable
    functionSourceFile: /src/boringssl/crypto/chacha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int ChaCha20_ctr32_ssse3_capable(size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_SSSE3_capable
      Src: /src/boringssl/crypto/chacha/internal.h:76,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: ChaCha20_ctr32_ssse3_capable
    functionSourceFile: /src/boringssl/crypto/chacha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_SSSE3_capable
    linkageType: ''
    returnType: int
    signature: 'inline int ChaCha20_ctr32_ssse3_capable(size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_AVX2_capable
      Src: /src/boringssl/crypto/chacha/internal.h:60,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: ChaCha20_ctr32_avx2_capable
    functionSourceFile: /src/boringssl/crypto/chacha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_AVX2_capable
    linkageType: ''
    returnType: int
    signature: 'inline int ChaCha20_ctr32_avx2_capable(size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_is_NEON_capable
      Src: /src/boringssl/crypto/chacha/internal.h:51,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: ChaCha20_ctr32_neon_capable
    functionSourceFile: /src/boringssl/crypto/chacha/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_is_NEON_capable
    linkageType: ''
    returnType: int
    signature: 'inline int ChaCha20_ctr32_neon_capable(size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LHASH_OF
      Src: /src/boringssl/crypto/conf/internal.h:33,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - CONF_VALUE
    argTypes:
    - CONF_VALUE
    constantsTouched: []
    func_position:
      end: 34
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 34
    functionName: DEFINE_LHASH_OF
    functionSourceFile: /src/boringssl/crypto/conf/internal.h
    functionUses: []
    functionsReached:
    - LHASH_OF
    linkageType: ''
    returnType: DEFINE_LHASH_OF(CONF_SECTION)
    signature: 'DEFINE_LHASH_OF(CONF_SECTION) DEFINE_LHASH_OF(CONF_VALUE)struct conf_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ScopedFD
      Src: /src/boringssl/tool/internal.h:41,1
    - Dst: ScopedFD
      Src: /src/boringssl/tool/internal.h:43,1
    - Dst: move
      Src: /src/boringssl/tool/internal.h:43,1
    - Dst: fd_
      Src: /src/boringssl/tool/internal.h:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: ScopedFD
    functionSourceFile: /src/boringssl/tool/internal.h
    functionUses: []
    functionsReached:
    - ScopedFD
    - move
    - fd_
    linkageType: ''
    returnType: class
    signature: 'class ScopedFD '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CloseFD
      Src: /src/boringssl/tool/internal.h:61,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 64
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 64
    functionName: reset
    functionSourceFile: /src/boringssl/tool/internal.h
    functionUses: []
    functionsReached:
    - CloseFD
    linkageType: ''
    returnType: void
    signature: 'void reset() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: get
    functionSourceFile: /src/boringssl/tool/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int get() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 55
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 55
    functionName: bool
    functionSourceFile: /src/boringssl/tool/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: explicit
    signature: 'explicit operator bool() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: release
    functionSourceFile: /src/boringssl/tool/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int release() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fd_
      Src: /src/boringssl/tool/internal.h:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ScopedFD
    functionSourceFile: /src/boringssl/tool/internal.h
    functionUses: []
    functionsReached:
    - fd_
    linkageType: ''
    returnType: explicit
    signature: 'explicit ScopedFD(int fd) : fd_(fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Listener
      Src: /src/boringssl/tool/transport_common.h:32,1
    - Dst: Listener
      Src: /src/boringssl/tool/transport_common.h:33,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 47
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 47
    functionName: Listener
    functionSourceFile: /src/boringssl/tool/transport_common.h
    functionUses: []
    functionsReached:
    - Listener
    linkageType: ''
    returnType: class
    signature: 'class Listener '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 161
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 161
    functionName: extended_key_usage
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<der::Input> & extended_key_usage() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    functionName: has_policy_oids
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_policy_oids() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: has_policy_constraints
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_policy_constraints() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: subject_alt_names
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: GeneralNames*
    signature: 'const GeneralNames *subject_alt_names() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrivateConstructor
      Src: /src/boringssl/pki/parsed_certificate.h:54,1
    - Dst: signature_algorithm
      Src: /src/boringssl/pki/parsed_certificate.h:108,1
    - Dst: StringAsBytes
      Src: /src/boringssl/pki/parsed_certificate.h:120,1
    - Dst: ParsedCertificate
      Src: /src/boringssl/pki/parsed_certificate.h:58,1
    - Dst: StringAsBytes
      Src: /src/boringssl/pki/parsed_certificate.h:130,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:139,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:149,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:159,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:211,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:231,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:185,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:221,1
    - Dst: has_policy_oids
      Src: /src/boringssl/pki/parsed_certificate.h:211,1
    CyclomaticComplexity: 45
    EdgeCount: 45
    ICount: 86
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 334
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 334
    functionName: ParsedCertificate
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - signature_algorithm
    - PrivateConstructor
    - BSSL_CHECK
    - has_policy_oids
    - ParsedCertificate
    - StringAsBytes
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT ParsedCertificate '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: tbs
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ParsedTbsCertificate
    signature: 'const ParsedTbsCertificate & tbs() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:139,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 141
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 141
    functionName: basic_constraints
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: ParsedBasicConstraints
    signature: 'const ParsedBasicConstraints & basic_constraints() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 144
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 144
    functionName: has_key_usage
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_key_usage() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 164
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 164
    functionName: has_subject_alt_names
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_subject_alt_names() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 180
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 180
    functionName: has_name_constraints
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_name_constraints() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 190
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 190
    functionName: has_authority_info_access
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_authority_info_access() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 238
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 238
    functionName: inhibit_any_policy
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::optional<uint8_t> & inhibit_any_policy() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 245
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 245
    functionName: authority_key_identifier
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::optional<ParsedAuthorityKeyIdentifier> & authority_key_identifier()
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 251
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 251
    functionName: subject_key_identifier
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::optional<der::Input> & subject_key_identifier() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: cert_buffer
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: CRYPTO_BUFFER*
    signature: 'CRYPTO_BUFFER *cert_buffer() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 154
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 154
    functionName: has_extended_key_usage
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_extended_key_usage() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 195
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 195
    functionName: authority_info_access_extension
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ParsedExtension
    signature: 'const ParsedExtension & authority_info_access_extension() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    functionName: ocsp_uris
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<std::string_view> & ocsp_uris() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 200
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 200
    functionName: ca_issuers_uris
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<std::string_view> & ca_issuers_uris() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:211,1
    - Dst: has_policy_oids
      Src: /src/boringssl/pki/parsed_certificate.h:211,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 213
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 213
    functionName: policy_oids
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - has_policy_oids
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<der::Input> & policy_oids() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:221,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 223
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 223
    functionName: policy_constraints
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: ParsedPolicyConstraints
    signature: 'const ParsedPolicyConstraints & policy_constraints() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: policy_mappings
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<ParsedPolicyMapping> & policy_mappings() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 254
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 254
    functionName: extensions
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ExtensionsMap
    signature: 'const ExtensionsMap & extensions() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: has_basic_constraints
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_basic_constraints() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: signature_value
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: der
    signature: 'const der ::BitString & signature_value() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 151
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 151
    functionName: key_usage
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: der
    signature: 'const der ::BitString & key_usage() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BSSL_CHECK
      Src: /src/boringssl/pki/parsed_certificate.h:185,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 187
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 187
    functionName: name_constraints
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    linkageType: ''
    returnType: NameConstraints
    signature: 'const NameConstraints & name_constraints() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: subject_alt_names_extension
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ParsedExtension
    signature: 'const ParsedExtension & subject_alt_names_extension() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 226
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 226
    functionName: has_policy_mappings
    functionSourceFile: /src/boringssl/pki/parsed_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_policy_mappings() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: der
    functionSourceFile: /src/boringssl/pki/verify_name_match.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NameConstraints
      Src: /src/boringssl/pki/name_constraints.h:35,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 111
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 111
    functionName: NameConstraints
    functionSourceFile: /src/boringssl/pki/name_constraints.h
    functionUses: []
    functionsReached:
    - NameConstraints
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT NameConstraints '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: constrained_name_types
    functionSourceFile: /src/boringssl/pki/name_constraints.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int constrained_name_types() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: permitted_subtrees
    functionSourceFile: /src/boringssl/pki/name_constraints.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: GeneralNames
    signature: 'const GeneralNames & permitted_subtrees() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: excluded_subtrees
    functionSourceFile: /src/boringssl/pki/name_constraints.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: GeneralNames
    signature: 'const GeneralNames & excluded_subtrees() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 29
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 29
    functionName: der
    functionSourceFile: /src/boringssl/pki/name_constraints.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 181
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 181
    functionName: cert_errors
    functionSourceFile: /src/boringssl/pki/common_cert_errors.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace cert_errors '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PEMTokenizer
      Src: /src/boringssl/pki/pem.h:42,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 86
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 86
    functionName: PEMTokenizer
    functionSourceFile: /src/boringssl/pki/pem.h
    functionUses: []
    functionsReached:
    - PEMTokenizer
    linkageType: ''
    returnType: OPENSSL_EXPORT
    signature: 'OPENSSL_EXPORT PEMTokenizer '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 52
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 52
    functionName: block_type
    functionSourceFile: /src/boringssl/pki/pem.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string & block_type() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 57
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 57
    functionName: data
    functionSourceFile: /src/boringssl/pki/pem.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string & data() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Parser
      Src: /src/boringssl/pki/parser.h:100,1
    - Dst: ReadBitString
      Src: /src/boringssl/pki/parser.h:191,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 220
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 220
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/parser.h
    functionUses: []
    functionsReached:
    - ReadBitString
    - Parser
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Parser
      Src: /src/boringssl/pki/parser.h:100,1
    - Dst: ReadBitString
      Src: /src/boringssl/pki/parser.h:191,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 218
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 218
    functionName: OPENSSL_EXPORT
    functionSourceFile: /src/boringssl/pki/parser.h
    functionUses: []
    functionsReached:
    - ReadBitString
    - Parser
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT Parser '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 34
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 34
    functionName: der
    functionSourceFile: /src/boringssl/pki/general_names.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneralNames
      Src: /src/boringssl/pki/general_names.h:67,1
    - Dst: GeneralNames
      Src: /src/boringssl/pki/general_names.h:68,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 126
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 126
    functionName: GeneralNames
    functionSourceFile: /src/boringssl/pki/general_names.h
    functionUses: []
    functionsReached:
    - GeneralNames
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT GeneralNames '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 53
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 53
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/encode_values.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 28
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 28
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/signature_algorithm.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParsedCrlTbsCertList
      Src: /src/boringssl/pki/crl.h:101,1
    - Dst: ParsedCrlTbsCertList
      Src: /src/boringssl/pki/crl.h:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 154
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 154
    functionName: ParsedCrlTbsCertList
    functionSourceFile: /src/boringssl/pki/crl.h
    functionUses: []
    functionsReached:
    - ParsedCrlTbsCertList
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT ParsedCrlTbsCertList '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Request
      Src: /src/boringssl/pki/cert_issuer_source.h:37,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 73
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 73
    functionName: CertIssuerSource
    functionSourceFile: /src/boringssl/pki/cert_issuer_source.h
    functionUses: []
    functionsReached:
    - Request
    linkageType: ''
    returnType: OPENSSL_EXPORT
    signature: 'OPENSSL_EXPORT CertIssuerSource '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 38
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 38
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/test_helpers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReadTestDataFromPemFile
      Src: /src/boringssl/pki/test_helpers.h:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - file_path_ascii
    - '[N]'
    argTypes:
    - std
    - PemBlockMapping (&mappings)
    constantsTouched: []
    func_position:
      end: 87
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 87
    functionName: ReadTestDataFromPemFile
    functionSourceFile: /src/boringssl/pki/test_helpers.h
    functionUses: []
    functionsReached:
    - ReadTestDataFromPemFile
    linkageType: ''
    returnType: AssertionResult
    signature: 'AssertionResult ReadTestDataFromPemFile( const std::string &file_path_ascii,
      const PemBlockMapping (&mappings)[N]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OCSPCertID
      Src: /src/boringssl/pki/ocsp.h:43,1
    - Dst: OCSPCertID
      Src: /src/boringssl/pki/ocsp.h:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 50
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 50
    functionName: OCSPCertID
    functionSourceFile: /src/boringssl/pki/ocsp.h
    functionUses: []
    functionsReached:
    - OCSPCertID
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT OCSPCertID '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OCSPSingleResponse
      Src: /src/boringssl/pki/ocsp.h:123,1
    - Dst: OCSPSingleResponse
      Src: /src/boringssl/pki/ocsp.h:124,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 133
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 133
    functionName: OCSPSingleResponse
    functionSourceFile: /src/boringssl/pki/ocsp.h
    functionUses: []
    functionsReached:
    - OCSPSingleResponse
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT OCSPSingleResponse '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OCSPResponseData
      Src: /src/boringssl/pki/ocsp.h:157,1
    - Dst: OCSPResponseData
      Src: /src/boringssl/pki/ocsp.h:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: ResponderType
    functionSourceFile: /src/boringssl/pki/ocsp.h
    functionUses: []
    functionsReached:
    - OCSPResponseData
    linkageType: ''
    returnType: enum class
    signature: 'enum class ResponderType '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OCSPResponse
      Src: /src/boringssl/pki/ocsp.h:216,1
    - Dst: OCSPResponse
      Src: /src/boringssl/pki/ocsp.h:217,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 225
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 225
    functionName: ResponseStatus
    functionSourceFile: /src/boringssl/pki/ocsp.h
    functionUses: []
    functionsReached:
    - OCSPResponse
    linkageType: ''
    returnType: enum class
    signature: 'enum class ResponseStatus '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: CacheHits
    functionSourceFile: /src/boringssl/pki/mock_signature_verify_cache.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t CacheHits() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 43
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 43
    functionName: CacheMisses
    functionSourceFile: /src/boringssl/pki/mock_signature_verify_cache.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t CacheMisses() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: CacheStores
    functionSourceFile: /src/boringssl/pki/mock_signature_verify_cache.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t CacheStores() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 46
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 46
    functionName: size
    functionSourceFile: /src/boringssl/pki/cert_issuer_source_static.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 28
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 28
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/verify_signed_data.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CertError
      Src: /src/boringssl/pki/cert_errors.h:78,1
    - Dst: CertError
      Src: /src/boringssl/pki/cert_errors.h:81,1
    - Dst: CertError
      Src: /src/boringssl/pki/cert_errors.h:83,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 91
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 91
    functionName: CertError
    functionSourceFile: /src/boringssl/pki/cert_errors.h
    functionUses: []
    functionsReached:
    - CertError
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT CertError '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CertPathErrors
      Src: /src/boringssl/pki/cert_errors.h:139,1
    - Dst: CertPathErrors
      Src: /src/boringssl/pki/cert_errors.h:142,1
    - Dst: CertPathErrors
      Src: /src/boringssl/pki/cert_errors.h:140,1
    - Dst: FindSingleHighSeverityError
      Src: /src/boringssl/pki/cert_errors.h:171,1
    - Dst: ContainsAnyErrorWithSeverity
      Src: /src/boringssl/pki/cert_errors.h:176,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 186
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 186
    functionName: CertPathErrors
    functionSourceFile: /src/boringssl/pki/cert_errors.h
    functionUses: []
    functionsReached:
    - CertPathErrors
    - ContainsAnyErrorWithSeverity
    - FindSingleHighSeverityError
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT CertPathErrors '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ContainsAnyErrorWithSeverity
      Src: /src/boringssl/pki/cert_errors.h:176,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    functionName: ContainsHighSeverityErrors
    functionSourceFile: /src/boringssl/pki/cert_errors.h
    functionUses: []
    functionsReached:
    - ContainsAnyErrorWithSeverity
    linkageType: ''
    returnType: bool
    signature: 'bool ContainsHighSeverityErrors() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CertErrors
      Src: /src/boringssl/pki/cert_errors.h:97,1
    - Dst: CertErrors
      Src: /src/boringssl/pki/cert_errors.h:98,1
    - Dst: CertErrors
      Src: /src/boringssl/pki/cert_errors.h:100,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 132
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 132
    functionName: OPENSSL_EXPORT
    functionSourceFile: /src/boringssl/pki/cert_errors.h
    functionUses: []
    functionsReached:
    - CertErrors
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT CertErrors '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/path_builder.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: CertPathBuilderDelegateData
    functionSourceFile: /src/boringssl/pki/path_builder.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT CertPathBuilderDelegateData '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 26
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 26
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/cert_error_params.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CertErrorParams
      Src: /src/boringssl/pki/cert_error_params.h:36,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 46
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 46
    functionName: CertErrorParams
    functionSourceFile: /src/boringssl/pki/cert_error_params.h
    functionUses: []
    functionsReached:
    - CertErrorParams
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT CertErrorParams '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 89
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 89
    functionName: CertificateTrustType
    functionSourceFile: /src/boringssl/pki/trust_store.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class CertificateTrustType '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 65
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 65
    functionName: ForTrustedLeaf
    functionSourceFile: /src/boringssl/pki/trust_store.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: CertificateTrust
    signature: 'static constexpr CertificateTrust ForTrustedLeaf() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 59
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 59
    functionName: ForTrustAnchorOrLeaf
    functionSourceFile: /src/boringssl/pki/trust_store.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: CertificateTrust
    signature: 'static constexpr CertificateTrust ForTrustAnchorOrLeaf() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 82
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 82
    functionName: CertificateTrust
    functionSourceFile: /src/boringssl/pki/trust_store.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT CertificateTrust '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 53
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 53
    functionName: ForTrustAnchor
    functionSourceFile: /src/boringssl/pki/trust_store.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: CertificateTrust
    signature: 'static constexpr CertificateTrust ForTrustAnchor() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: ForUnspecified
    functionSourceFile: /src/boringssl/pki/trust_store.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: CertificateTrust
    signature: 'static constexpr CertificateTrust ForUnspecified() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 76
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 76
    functionName: ForDistrusted
    functionSourceFile: /src/boringssl/pki/trust_store.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: CertificateTrust
    signature: 'static constexpr CertificateTrust ForDistrusted() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 83
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 83
    functionName: string_util
    functionSourceFile: /src/boringssl/pki/string_util.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace string_util '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReadTestPem
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:44,1
    - Dst: CRYPTO_BUFFER_new
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:51,1
    - Dst: ReadTestDataFromPemFile
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:36,1
    - Dst: AssertionFailure
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:55,1
    - Dst: AssertionSuccess
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:59,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 60
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 60
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/cert_issuer_source_sync_unittest.h
    functionUses: []
    functionsReached:
    - AssertionSuccess
    - ReadTestPem
    - AssertionFailure
    - ReadTestDataFromPemFile
    - CRYPTO_BUFFER_new
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - cert
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 83
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 83
    functionName: AddCert
    functionSourceFile: /src/boringssl/pki/cert_issuer_source_sync_unittest.h
    functionUses: []
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: 'void AddCert(std::shared_ptr<const ParsedCertificate> cert) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:86,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:88,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:90,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:89,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:87,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:91,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:92,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:93,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:94,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:95,1
    - Dst: AddCert
      Src: /src/boringssl/pki/cert_issuer_source_sync_unittest.h:96,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 97
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 97
    functionName: AddAllCerts
    functionSourceFile: /src/boringssl/pki/cert_issuer_source_sync_unittest.h
    functionUses: []
    functionsReached:
    - AddCert
    linkageType: ''
    returnType: void
    signature: 'void AddAllCerts() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 31
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 31
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/verify_certificate_chain.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetVerifyCache
      Src: /src/boringssl/pki/verify_certificate_chain.h:93,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 103
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 103
    functionName: VerifyCertificateChainDelegate
    functionSourceFile: /src/boringssl/pki/verify_certificate_chain.h
    functionUses: []
    functionsReached:
    - GetVerifyCache
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT VerifyCertificateChainDelegate '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: bytes
    functionSourceFile: /src/boringssl/pki/parse_values.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Input
    signature: 'Input bytes() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BitString
      Src: /src/boringssl/pki/parse_values.h:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 89
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 89
    functionName: OPENSSL_EXPORT
    functionSourceFile: /src/boringssl/pki/parse_values.h
    functionUses: []
    functionsReached:
    - BitString
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT BitString '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: unused_bits
    functionSourceFile: /src/boringssl/pki/parse_values.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: 'uint8_t unused_bits() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BitString
      Src: /src/boringssl/pki/parse_values.h:66,1
    CyclomaticComplexity: 32
    EdgeCount: 32
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 162
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 162
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/parse_values.h
    functionUses: []
    functionsReached:
    - BitString
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 107
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 107
    functionName: GeneralizedTime
    functionSourceFile: /src/boringssl/pki/parse_values.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT GeneralizedTime '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 319
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 319
    functionName: ParsedExtension
    functionSourceFile: /src/boringssl/pki/parse_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT ParsedExtension '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParsedDistributionPoint
      Src: /src/boringssl/pki/parse_certificate.h:593,1
    - Dst: ParsedDistributionPoint
      Src: /src/boringssl/pki/parse_certificate.h:594,1
    - Dst: ParsedDistributionPoint
      Src: /src/boringssl/pki/parse_certificate.h:595,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 612
      start: 592
    functionDepth: 0
    functionLinenumber: 592
    functionLinenumberEnd: 612
    functionName: ParsedDistributionPoint
    functionSourceFile: /src/boringssl/pki/parse_certificate.h
    functionUses: []
    functionsReached:
    - ParsedDistributionPoint
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT ParsedDistributionPoint '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 34
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 34
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/parse_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 102
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 102
    functionName: ParseCertificateOptions
    functionSourceFile: /src/boringssl/pki/parse_certificate.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT ParseCertificateOptions '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParsedAuthorityKeyIdentifier
      Src: /src/boringssl/pki/parse_certificate.h:631,1
    - Dst: ParsedAuthorityKeyIdentifier
      Src: /src/boringssl/pki/parse_certificate.h:632,1
    - Dst: ParsedAuthorityKeyIdentifier
      Src: /src/boringssl/pki/parse_certificate.h:633,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 647
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 647
    functionName: ParsedAuthorityKeyIdentifier
    functionSourceFile: /src/boringssl/pki/parse_certificate.h
    functionUses: []
    functionsReached:
    - ParsedAuthorityKeyIdentifier
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT ParsedAuthorityKeyIdentifier '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParsedTbsCertificate
      Src: /src/boringssl/pki/parse_certificate.h:197,1
    - Dst: ParsedTbsCertificate
      Src: /src/boringssl/pki/parse_certificate.h:200,1
    - Dst: ParsedTbsCertificate
      Src: /src/boringssl/pki/parse_certificate.h:198,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 300
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 300
    functionName: ParsedTbsCertificate
    functionSourceFile: /src/boringssl/pki/parse_certificate.h
    functionUses: []
    functionsReached:
    - ParsedTbsCertificate
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT ParsedTbsCertificate '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Input
      Src: /src/boringssl/pki/input.h:99,1
    - Dst: data_
      Src: /src/boringssl/pki/input.h:77,1
    - Dst: Span
      Src: /src/boringssl/pki/input.h:77,1
    - Dst: StringAsBytes
      Src: /src/boringssl/pki/input.h:84,1
    - Dst: data_
      Src: /src/boringssl/pki/input.h:84,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 100
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 100
    functionName: OPENSSL_EXPORT
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - data_
    - Input
    - Span
    - StringAsBytes
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT Input '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: data
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint8_t*
    signature: 'constexpr const uint8_t *data() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Input
      Src: /src/boringssl/pki/input.h:102,1
    - Dst: data_
      Src: /src/boringssl/pki/input.h:77,1
    - Dst: Span
      Src: /src/boringssl/pki/input.h:77,1
    - Dst: AsSpan
      Src: /src/boringssl/pki/input.h:120,1
    - Dst: size
      Src: /src/boringssl/pki/input.h:123,1
    - Dst: Input
      Src: /src/boringssl/pki/input.h:99,1
    - Dst: Input
      Src: /src/boringssl/pki/input.h:101,1
    - Dst: BytesAsStringView
      Src: /src/boringssl/pki/input.h:114,1
    - Dst: data
      Src: /src/boringssl/pki/input.h:126,1
    - Dst: StringAsBytes
      Src: /src/boringssl/pki/input.h:84,1
    - Dst: data_
      Src: /src/boringssl/pki/input.h:84,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 47
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 131
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 131
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - BytesAsStringView
    - Input
    - size
    - data
    - Span
    - data_
    - AsSpan
    - StringAsBytes
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - idx
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 94
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 94
    functionName: operator
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: 'constexpr uint8_t operator[](size_t idx) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Input
      Src: /src/boringssl/pki/input.h:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: first
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - Input
    linkageType: ''
    returnType: Input
    signature: 'constexpr Input first(size_t len) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/boringssl/pki/input.h:126,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: UnsafeData
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - data
    linkageType: ''
    returnType: uint8_t*
    signature: 'constexpr const uint8_t *UnsafeData() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames:
    - data
    argTypes: []
    constantsTouched: []
    func_position:
      end: 73
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 73
    functionName: data_
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Input(bssl::Span<const uint8_t> data)
    signature: 'constexpr Input(bssl::Span<const uint8_t> data) : data_(data) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data_
      Src: /src/boringssl/pki/input.h:84,1
    - Dst: StringAsBytes
      Src: /src/boringssl/pki/input.h:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - str
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: Input
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - data_
    - StringAsBytes
    linkageType: ''
    returnType: explicit
    signature: 'explicit Input(std::string_view str) : data_(StringAsBytes(str)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Input
      Src: /src/boringssl/pki/input.h:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: last
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - Input
    linkageType: ''
    returnType: Input
    signature: 'constexpr Input last(size_t len) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 199
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 199
    functionName: OPENSSL_EXPORT
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT ByteReader '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 89
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 89
    functionName: begin
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: 'constexpr Span < const uint8_t>::iterator begin() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: end
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Span
    signature: 'constexpr Span < const uint8_t>::iterator end() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: size
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'constexpr size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    functionName: empty
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'constexpr bool empty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 96
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 96
    functionName: back
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: 'constexpr uint8_t back() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/boringssl/pki/input.h:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: Length
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: 'constexpr size_t Length() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: front
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: 'constexpr uint8_t front() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 190
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 190
    functionName: BytesLeft
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t BytesLeft() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 35
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 35
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data_
      Src: /src/boringssl/pki/input.h:77,1
    - Dst: Span
      Src: /src/boringssl/pki/input.h:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 77
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 77
    functionName: Input
    functionSourceFile: /src/boringssl/pki/input.h
    functionUses: []
    functionsReached:
    - data_
    - Span
    linkageType: ''
    returnType: explicit
    signature: 'constexpr explicit Input(const uint8_t *data, size_t len) : data_(Span(data,
      len)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PkitsTestInfo
      Src: /src/boringssl/pki/nist_pkits_unittest.h:29,1
    - Dst: PkitsTestInfo
      Src: /src/boringssl/pki/nist_pkits_unittest.h:31,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 87
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 87
    functionName: PkitsTestInfo
    functionSourceFile: /src/boringssl/pki/nist_pkits_unittest.h
    functionUses: []
    functionsReached:
    - PkitsTestInfo
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN // Describes the inputs and outputs (other than
      the certificates) for // the PKITS tests. struct PkitsTestInfo '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 120
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 120
    functionName: PrintableStringHandling
    functionSourceFile: /src/boringssl/pki/parse_name.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: enum class
    signature: 'enum class PrintableStringHandling '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PolicyInformation
      Src: /src/boringssl/pki/certificate_policies.h:67,1
    - Dst: PolicyInformation
      Src: /src/boringssl/pki/certificate_policies.h:68,1
    - Dst: PolicyInformation
      Src: /src/boringssl/pki/certificate_policies.h:70,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 74
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 74
    functionName: PolicyInformation
    functionSourceFile: /src/boringssl/pki/certificate_policies.h
    functionUses: []
    functionsReached:
    - PolicyInformation
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT PolicyInformation '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 26
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 26
    functionName: namespace
    functionSourceFile: /src/boringssl/pki/revocation_util.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace der '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BORINGSSL_MAKE_DELETER
      Src: /src/boringssl/include/openssl/bn.h:949,1
    - Dst: BN_CTXScope
      Src: /src/boringssl/include/openssl/bn.h:954,1
    - Dst: BN_CTX_start
      Src: /src/boringssl/include/openssl/bn.h:954,1
    - Dst: BN_CTXScope
      Src: /src/boringssl/include/openssl/bn.h:955,1
    - Dst: BN_CTX_end
      Src: /src/boringssl/include/openssl/bn.h:955,1
    - Dst: BN_CTXScope
      Src: /src/boringssl/include/openssl/bn.h:960,1
    - Dst: BORINGSSL_MAKE_DELETER
      Src: /src/boringssl/include/openssl/bn.h:950,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - BIGNUM
    - BN_free
    argTypes:
    - BIGNUM
    - BN_free
    constantsTouched: []
    func_position:
      end: 962
      start: 946
    functionDepth: 0
    functionLinenumber: 946
    functionLinenumberEnd: 962
    functionName: BORINGSSL_MAKE_DELETER
    functionSourceFile: /src/boringssl/include/openssl/bn.h
    functionUses: []
    functionsReached:
    - BN_CTX_end
    - BN_CTXScope
    - BORINGSSL_MAKE_DELETER
    - BN_CTX_start
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN BORINGSSL_MAKE_DELETER(BIGNUM, BN_free)BORINGSSL_MAKE_DELETER(BN_CTX,
      BN_CTX_free)BORINGSSL_MAKE_DELETER(BN_MONT_CTX, BN_MONT_CTX_free)class BN_CTXScope '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/boringssl/include/openssl/base.h:465,1
    - Dst: init
      Src: /src/boringssl/include/openssl/base.h:479,1
    - Dst: CleanupRet
      Src: /src/boringssl/include/openssl/base.h:487,1
    - Dst: cleanup
      Src: /src/boringssl/include/openssl/base.h:478,1
    - Dst: move
      Src: /src/boringssl/include/openssl/base.h:495,1
    - Dst: void
      Src: /src/boringssl/include/openssl/base.h:461,1
    - Dst: CleanupRet
      Src: /src/boringssl/include/openssl/base.h:462,1
    - Dst: StackAllocatedMovable
      Src: /src/boringssl/include/openssl/base.h:491,1
    - Dst: cleanup
      Src: /src/boringssl/include/openssl/base.h:491,1
    - Dst: cleanup
      Src: /src/boringssl/include/openssl/base.h:509,1
    - Dst: init
      Src: /src/boringssl/include/openssl/base.h:510,1
    - Dst: Free
      Src: /src/boringssl/include/openssl/base.h:457,1
    - Dst: cleanup
      Src: /src/boringssl/include/openssl/base.h:466,1
    - Dst: StackAllocatedMovable
      Src: /src/boringssl/include/openssl/base.h:490,1
    - Dst: void
      Src: /src/boringssl/include/openssl/base.h:486,1
    - Dst: init
      Src: /src/boringssl/include/openssl/base.h:490,1
    - Dst: StackAllocatedMovable
      Src: /src/boringssl/include/openssl/base.h:493,1
    - Dst: StackAllocated
      Src: /src/boringssl/include/openssl/base.h:465,1
    - Dst: StackAllocated
      Src: /src/boringssl/include/openssl/base.h:466,1
    - Dst: void
      Src: /src/boringssl/include/openssl/base.h:487,1
    - Dst: move
      Src: /src/boringssl/include/openssl/base.h:498,1
    - Dst: init
      Src: /src/boringssl/include/openssl/base.h:494,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 72
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 517
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 517
    functionName: namespace
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached:
    - StackAllocated
    - void
    - StackAllocatedMovable
    - Free
    - init
    - move
    - cleanup
    - CleanupRet
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cleanup
      Src: /src/boringssl/include/openssl/base.h:478,1
    - Dst: init
      Src: /src/boringssl/include/openssl/base.h:479,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 480
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 480
    functionName: Reset
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached:
    - cleanup
    - init
    linkageType: ''
    returnType: void
    signature: 'void Reset() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 475
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 475
    functionName: operator
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *operator ->() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 471
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 471
    functionName: get
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 502
      start: 502
    functionDepth: 0
    functionLinenumber: 502
    functionLinenumberEnd: 502
    functionName: get
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T *get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 506
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 506
    functionName: operator
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *operator ->() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cleanup
      Src: /src/boringssl/include/openssl/base.h:509,1
    - Dst: init
      Src: /src/boringssl/include/openssl/base.h:510,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 511
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 511
    functionName: Reset
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached:
    - cleanup
    - init
    linkageType: ''
    returnType: void
    signature: 'void Reset() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 472
      start: 472
    functionDepth: 0
    functionLinenumber: 472
    functionLinenumberEnd: 472
    functionName: get
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *get() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 503
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 503
    functionName: get
    functionSourceFile: /src/boringssl/include/openssl/base.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T *get() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 145
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 145
    functionName: begin
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: iterator
    signature: 'constexpr iterator begin() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: size
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'constexpr size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 146
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 146
    functionName: cbegin
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: const_iterator
    signature: 'constexpr const_iterator cbegin() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 143
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 143
    functionName: empty
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'constexpr bool empty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 147
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 147
    functionName: end
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: iterator
    signature: 'constexpr iterator end() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: end
      Src: /src/boringssl/include/openssl/span.h:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 148
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 148
    functionName: cend
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - end
    linkageType: ''
    returnType: const_iterator
    signature: 'constexpr const_iterator cend() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/include/openssl/span.h:152,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 155
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 155
    functionName: front
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: T
    signature: 'constexpr T & front() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/include/openssl/span.h:158,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 161
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 161
    functionName: back
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: T
    signature: 'constexpr T & back() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: equal
      Src: /src/boringssl/include/openssl/span.h:63,1
    - Dst: decltype
      Src: /src/boringssl/include/openssl/span.h:73,1
    - Dst: decltype
      Src: /src/boringssl/include/openssl/span.h:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 76
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 76
    functionName: internal
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - equal
    - decltype
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/include/openssl/span.h:185,1
    - Dst: Span
      Src: /src/boringssl/include/openssl/span.h:187,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 188
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 188
    functionName: first
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - abort
    - Span
    linkageType: ''
    returnType: Span
    signature: 'constexpr Span first(size_t len) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/include/openssl/span.h:192,1
    - Dst: Span
      Src: /src/boringssl/include/openssl/span.h:194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - len
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 195
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 195
    functionName: last
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - abort
    - Span
    linkageType: ''
    returnType: Span
    signature: 'constexpr Span last(size_t len) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeConstSpan
      Src: /src/boringssl/include/openssl/span.h:247,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - s
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    functionName: StringAsBytes
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - MakeConstSpan
    linkageType: ''
    returnType: Span
    signature: 'inline Span < const uint8_t> StringAsBytes(std::string_view s) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string_view
      Src: /src/boringssl/include/openssl/span.h:251,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - bssl::Span<
    - b
    argTypes:
    - uint8_t
    constantsTouched: []
    func_position:
      end: 252
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 252
    functionName: BytesAsStringView
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - string_view
    linkageType: ''
    returnType: std
    signature: 'inline std ::string_view BytesAsStringView(bssl::Span<const uint8_t>
      b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeConstSpan
      Src: /src/boringssl/include/openssl/span.h:238,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - MakeConstSpan(c.data()
    - size
    argTypes:
    - MakeConstSpan(c.data()
    - c
    constantsTouched: []
    func_position:
      end: 239
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 239
    functionName: decltype
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - MakeConstSpan
    linkageType: ''
    returnType: MakeConstSpan(const C &c)
    signature: 'auto MakeConstSpan(const C &c) -> decltype(MakeConstSpan(c.data(),
      c.size()) ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/include/openssl/span.h:165,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 168
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 168
    functionName: operator
    functionSourceFile: /src/boringssl/include/openssl/span.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: T
    signature: 'constexpr T & operator[](size_t i) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DECLARE_ASN1_ITEM
      Src: /src/boringssl/include/openssl/asn1.h:412,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ASN1_TBOOLEAN
    argTypes:
    - ASN1_TBOOLEAN
    constantsTouched: []
    func_position:
      end: 490
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 490
    functionName: DECLARE_ASN1_ITEM
    functionSourceFile: /src/boringssl/include/openssl/asn1.h
    functionUses: []
    functionsReached:
    - DECLARE_ASN1_ITEM
    linkageType: ''
    returnType: DECLARE_ASN1_ITEM(ASN1_BOOLEAN)
    signature: 'DECLARE_ASN1_ITEM(ASN1_BOOLEAN) DECLARE_ASN1_ITEM(ASN1_TBOOLEAN)DECLARE_ASN1_ITEM(ASN1_FBOOLEAN)//
      Strings.//// ASN.1 contains a myriad of string types, as well as types that
      contain data// that may be encoded into a string. This library uses a single
      type,// |ASN1_STRING|, to represent most values.// An asn1_string_st (aka |ASN1_STRING|)
      represents a value of a string-like// ASN.1 type. It contains a |type| field,
      and a byte string |data| field with a// type-specific representation. This type-specific
      representation does not// always correspond to the DER encoding of the type.////
      If |type| is one of |V_ASN1_OCTET_STRING|, |V_ASN1_UTF8STRING|,// |V_ASN1_NUMERICSTRING|,
      |V_ASN1_PRINTABLESTRING|, |V_ASN1_T61STRING|,// |V_ASN1_VIDEOTEXSTRING|, |V_ASN1_IA5STRING|,
      |V_ASN1_GRAPHICSTRING|,// |V_ASN1_ISO64STRING|, |V_ASN1_VISIBLESTRING|, |V_ASN1_GENERALSTRING|,//
      |V_ASN1_UNIVERSALSTRING|, or |V_ASN1_BMPSTRING|, the object represents an//
      ASN.1 string type. The data contains the byte representation of the// string.////
      If |type| is |V_ASN1_BIT_STRING|, the object represents a BIT STRING value.//
      See bit string documentation below for the data and flags.//// If |type| is
      one of |V_ASN1_INTEGER|, |V_ASN1_NEG_INTEGER|,// |V_ASN1_ENUMERATED|, or |V_ASN1_NEG_ENUMERATED|,
      the object represents an// INTEGER or ENUMERATED value. See integer documentation
      below for details.//// If |type| is |V_ASN1_GENERALIZEDTIME| or |V_ASN1_UTCTIME|,
      the object// represents a GeneralizedTime or UTCTime value, respectively. The
      data// contains the DER encoding of the value. For example, the UNIX epoch would
      be// "19700101000000Z" for a GeneralizedTime and "700101000000Z" for a UTCTime.////
      If |type| is |V_ASN1_SEQUENCE|, |V_ASN1_SET|, or |V_ASN1_OTHER|, the object//
      represents a SEQUENCE, SET, or arbitrary ASN.1 value, respectively. Unlike//
      the above cases, the data contains the DER encoding of the entire structure,//
      including the header. If the value is explicitly or implicitly tagged, this//
      too will be reflected in the data field. As this case handles unknown types,//
      the contents are not checked when parsing or serializing.//// Other values of
      |type| do not represent a valid ASN.1 value, though// default-constructed objects
      may set |type| to -1. Such objects cannot be// serialized.//// |ASN1_STRING|
      additionally has the following typedefs: |ASN1_BIT_STRING|,// |ASN1_BMPSTRING|,
      |ASN1_ENUMERATED|, |ASN1_GENERALIZEDTIME|,// |ASN1_GENERALSTRING|, |ASN1_IA5STRING|,
      |ASN1_INTEGER|, |ASN1_OCTET_STRING|,// |ASN1_PRINTABLESTRING|, |ASN1_T61STRING|,
      |ASN1_TIME|,// |ASN1_UNIVERSALSTRING|, |ASN1_UTCTIME|, |ASN1_UTF8STRING|, and//
      |ASN1_VISIBLESTRING|. Other than |ASN1_TIME|, these correspond to universal//
      ASN.1 types. |ASN1_TIME| represents a CHOICE of UTCTime and GeneralizedTime,//
      with a cutoff of 2049, as used in Section 4.1.2.5 of RFC 5280.//// For clarity,
      callers are encouraged to use the appropriate typedef when// available. They
      are the same type as |ASN1_STRING|, so a caller may freely// pass them into
      functions expecting |ASN1_STRING|, such as// |ASN1_STRING_length|.//// If a
      function returns an |ASN1_STRING| where the typedef or ASN.1 structure// implies
      constraints on |type|, callers may assume that |type| is correct.// However,
      if a function takes an |ASN1_STRING| as input, callers must ensure// |type|
      matches. These invariants are not captured by the C type system and// may not
      be checked at runtime. For example, callers may assume the output of// |X509_get0_serialNumber|
      has type |V_ASN1_INTEGER| or |V_ASN1_NEG_INTEGER|.// Callers must not pass a
      string of type |V_ASN1_OCTET_STRING| to// |X509_set_serialNumber|. Doing so
      may break invariants on the |X509| object// and break the |X509_get0_serialNumber|
      invariant.//// TODO(https://crbug.com/boringssl/445): This is very unfriendly.
      Getting the// type field wrong should not cause memory errors, but it may do
      strange// things. We should add runtime checks to anything that consumes |ASN1_STRING|s//
      from the caller.struct asn1_string_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 330
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 330
    functionName: namespace
    functionSourceFile: /src/boringssl/include/openssl/stack.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_BEGIN
    signature: 'BSSL_NAMESPACE_BEGIN namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 569
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 569
    functionName: StackIteratorImpl
    functionSourceFile: /src/boringssl/include/openssl/stack.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool operator!=( StackIteratorImpl other) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_sk_pop_free_ex
      Src: /src/boringssl/include/openssl/stack.h:547,1
    - Dst: Free
      Src: /src/boringssl/include/openssl/stack.h:550,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - sk
    argTypes:
    - Stack*
    constantsTouched: []
    func_position:
      end: 553
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 553
    functionName: Free
    functionSourceFile: /src/boringssl/include/openssl/stack.h
    functionUses: []
    functionsReached:
    - Free
    - OPENSSL_sk_pop_free_ex
    linkageType: ''
    returnType: void
    signature: 'static void Free(Stack *sk) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_sk_free
      Src: /src/boringssl/include/openssl/stack.h:535,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - sk
    argTypes:
    - Stack*
    constantsTouched: []
    func_position:
      end: 536
      start: 534
    functionDepth: 0
    functionLinenumber: 534
    functionLinenumberEnd: 536
    functionName: Free
    functionSourceFile: /src/boringssl/include/openssl/stack.h
    functionUses: []
    functionsReached:
    - OPENSSL_sk_free
    linkageType: ''
    returnType: void
    signature: 'static void Free(Stack *sk) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CB_WRITE_ALERT
      Src: /src/boringssl/include/openssl/ssl.h:5025,1
    - Dst: OpenSSL_add_ssl_algorithms
      Src: /src/boringssl/include/openssl/ssl.h:5473,1
    - Dst: SSL_set_time
      Src: /src/boringssl/include/openssl/ssl.h:5484,1
    - Dst: SSL_set_timeout
      Src: /src/boringssl/include/openssl/ssl.h:5486,1
    - Dst: SSL_CTX_set_info_callback
      Src: /src/boringssl/include/openssl/ssl.h:5064,1
    - Dst: SSL_library_init
      Src: /src/boringssl/include/openssl/ssl.h:5473,1
    - Dst: SSL_get_current_cipher
      Src: /src/boringssl/include/openssl/ssl.h:5476,1
    - Dst: SSL_get_current_cipher
      Src: /src/boringssl/include/openssl/ssl.h:5480,1
    - Dst: SSL_ST_RENEGOTIATE
      Src: /src/boringssl/include/openssl/ssl.h:5010,1
    - Dst: SSL_CB_READ_ALERT
      Src: /src/boringssl/include/openssl/ssl.h:5024,1
    - Dst: SSL_get_cipher_bits
      Src: /src/boringssl/include/openssl/ssl.h:5477,1
    - Dst: SSL_get_cipher_name
      Src: /src/boringssl/include/openssl/ssl.h:5481,1
    - Dst: SSL_SESSION_get_time
      Src: /src/boringssl/include/openssl/ssl.h:5483,1
    - Dst: SSL_SESSION_get_timeout
      Src: /src/boringssl/include/openssl/ssl.h:5485,1
    - Dst: SSL_CTX_get_app_data
      Src: /src/boringssl/include/openssl/ssl.h:5469,1
    - Dst: SSL_ST_BEFORE
      Src: /src/boringssl/include/openssl/ssl.h:5011,1
    - Dst: SSL_CB_ACCEPT_EXIT
      Src: /src/boringssl/include/openssl/ssl.h:5027,1
    - Dst: SSL_library_init
      Src: /src/boringssl/include/openssl/ssl.h:5474,1
    - Dst: SSL_CIPHER_get_bits
      Src: /src/boringssl/include/openssl/ssl.h:5478,1
    - Dst: SSL_CIPHER_get_name
      Src: /src/boringssl/include/openssl/ssl.h:5482,1
    - Dst: SSL_SESSION_set_time
      Src: /src/boringssl/include/openssl/ssl.h:5484,1
    - Dst: SSL_SESSION_set_app_data
      Src: /src/boringssl/include/openssl/ssl.h:5466,1
    - Dst: SSL_CTX_set_app_data
      Src: /src/boringssl/include/openssl/ssl.h:5470,1
    - Dst: SSL_CB_ACCEPT_LOOP
      Src: /src/boringssl/include/openssl/ssl.h:5026,1
    - Dst: SSL_CB_CONNECT_EXIT
      Src: /src/boringssl/include/openssl/ssl.h:5029,1
    - Dst: SSL_SESSION_set_timeout
      Src: /src/boringssl/include/openssl/ssl.h:5487,1
    - Dst: SSL_CTX_set_srtp_profiles
      Src: /src/boringssl/include/openssl/ssl.h:3542,1
    - Dst: SSL_SESSION_get_app_data
      Src: /src/boringssl/include/openssl/ssl.h:5468,1
    - Dst: SSL_get_current_cipher
      Src: /src/boringssl/include/openssl/ssl.h:5478,1
    - Dst: SSL_get_current_cipher
      Src: /src/boringssl/include/openssl/ssl.h:5482,1
    - Dst: SSL_SESS_CACHE_NO_INTERNAL
      Src: /src/boringssl/include/openssl/ssl.h:2140,1
    - Dst: SSL_CB_CONNECT_LOOP
      Src: /src/boringssl/include/openssl/ssl.h:5028,1
    - Dst: SSL_get_cipher
      Src: /src/boringssl/include/openssl/ssl.h:5476,1
    - Dst: SSL_get_cipher_version
      Src: /src/boringssl/include/openssl/ssl.h:5479,1
    - Dst: SSL_get_time
      Src: /src/boringssl/include/openssl/ssl.h:5483,1
    - Dst: SSL_get_timeout
      Src: /src/boringssl/include/openssl/ssl.h:5485,1
    - Dst: SSL_CIPHER_get_name
      Src: /src/boringssl/include/openssl/ssl.h:5476,1
    - Dst: SSL_CIPHER_get_version
      Src: /src/boringssl/include/openssl/ssl.h:5480,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/boringssl/include/openssl/ssl.h:2145,1
    - Dst: SSLeay_add_ssl_algorithms
      Src: /src/boringssl/include/openssl/ssl.h:5474,1
    CyclomaticComplexity: 1419
    EdgeCount: 1419
    ICount: 55
    argCount: 0
    argNames:
    - CRYPTO_BUFFER
    argTypes: []
    constantsTouched: []
    func_position:
      end: 5493
      start: 1241
    functionDepth: 0
    functionLinenumber: 1241
    functionLinenumberEnd: 5493
    functionName: STACK_OF
    functionSourceFile: /src/boringssl/include/openssl/ssl.h
    functionUses: []
    functionsReached:
    - SSL_SESSION_set_time
    - SSL_get_timeout
    - SSL_SESSION_get_time
    - SSL_CB_ACCEPT_EXIT
    - SSL_library_init
    - SSL_SESSION_get_app_data
    - SSL_CB_CONNECT_EXIT
    - SSL_SESSION_get_timeout
    - SSL_CB_WRITE_ALERT
    - SSL_SESSION_set_timeout
    - SSL_ST_BEFORE
    - SSL_get_cipher
    - SSL_CB_ACCEPT_LOOP
    - SSL_get_cipher_bits
    - SSLeay_add_ssl_algorithms
    - SSL_CIPHER_get_name
    - SSL_get_time
    - SSL_SESS_CACHE_NO_INTERNAL
    - SSL_CTX_set_info_callback
    - SSL_CB_CONNECT_LOOP
    - SSL_get_cipher_name
    - SSL_get_cipher_version
    - SSL_get_current_cipher
    - SSL_CIPHER_get_bits
    - SSL_set_time
    - SSL_CTX_set_app_data
    - SSL_CTX_set_srtp_profiles
    - SSL_SESSION_set_app_data
    - SSL_CIPHER_get_version
    - SSL_set_timeout
    - OpenSSL_add_ssl_algorithms
    - SSL_CTX_get_app_data
    - SSL_CTX_set_session_cache_mode
    - SSL_ST_RENEGOTIATE
    - SSL_CB_READ_ALERT
    linkageType: ''
    returnType: OPENSSL_EXPORT
    signature: "OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER) *SSL_CTX_get0_chain(
      const SSL_CTX *ctx); // SSL_get0_chain returns the list of |CRYPTO_BUFFER|s
      that were set by // |SSL_set_chain_and_key|, unless they have been discarded.
      Reference counts // are not incremented by this call. The return value may be
      |NULL| if no chain // has been set. // // (Note: if a chain was configured by
      non-|CRYPTO_BUFFER|-based functions then // the return value is undefined and,
      even if not NULL, the stack itself may // contain nullptrs. Thus you shouldn't
      mix this function with // non-|CRYPTO_BUFFER| functions for manipulating the
      chain.) // // This function may return nullptr if a handshake has completed
      even if // |SSL_set_chain_and_key| was previously called, since the configuration
      // containing the certificates is typically cleared after handshake completion.
      OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER) *SSL_get0_chain(const SSL *ssl);
      // SSL_CTX_use_RSAPrivateKey sets |ctx|'s private key to |rsa|. It returns one
      // on success and zero on failure. OPENSSL_EXPORT int SSL_CTX_use_RSAPrivateKey(SSL_CTX
      *ctx, RSA *rsa); // SSL_use_RSAPrivateKey sets |ctx|'s private key to |rsa|.
      It returns one on // success and zero on failure. OPENSSL_EXPORT int SSL_use_RSAPrivateKey(SSL
      *ssl, RSA *rsa); // The following functions configure certificates or private
      keys but take as // input DER-encoded structures. They return one on success
      and zero on // failure. OPENSSL_EXPORT int SSL_CTX_use_certificate_ASN1(SSL_CTX
      *ctx, size_t der_len, const uint8_t *der); OPENSSL_EXPORT int SSL_use_certificate_ASN1(SSL
      *ssl, const uint8_t *der, size_t der_len); OPENSSL_EXPORT int SSL_CTX_use_PrivateKey_ASN1(int
      pk, SSL_CTX *ctx, const uint8_t *der, size_t der_len); OPENSSL_EXPORT int SSL_use_PrivateKey_ASN1(int
      type, SSL *ssl, const uint8_t *der, size_t der_len); OPENSSL_EXPORT int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX
      *ctx, const uint8_t *der, size_t der_len); OPENSSL_EXPORT int SSL_use_RSAPrivateKey_ASN1(SSL
      *ssl, const uint8_t *der, size_t der_len); // The following functions configure
      certificates or private keys but take as // input files to read from. They return
      one on success and zero on failure. The // |type| parameter is one of the |SSL_FILETYPE_*|
      values and determines whether // the file's contents are read as PEM or DER.
      #define SSL_FILETYPE_PEM 1#define SSL_FILETYPE_ASN1 2OPENSSL_EXPORT int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX
      *ctx, const char *file, int type); OPENSSL_EXPORT int SSL_use_RSAPrivateKey_file(SSL
      *ssl, const char *file, int type); OPENSSL_EXPORT int SSL_CTX_use_certificate_file(SSL_CTX
      *ctx, const char *file, int type); OPENSSL_EXPORT int SSL_use_certificate_file(SSL
      *ssl, const char *file, int type); OPENSSL_EXPORT int SSL_CTX_use_PrivateKey_file(SSL_CTX
      *ctx, const char *file, int type); OPENSSL_EXPORT int SSL_use_PrivateKey_file(SSL
      *ssl, const char *file, int type); // SSL_CTX_use_certificate_chain_file configures
      certificates for |ctx|. It // reads the contents of |file| as a PEM-encoded
      leaf certificate followed // optionally by the certificate chain to send to
      the peer. It returns one on // success and zero on failure. // // WARNING: If
      the input contains \"TRUSTED CERTIFICATE\" PEM blocks, this // function parses
      auxiliary properties as in |d2i_X509_AUX|. Passing untrusted // input to this
      function allows an attacker to influence those properties. See // |d2i_X509_AUX|
      for details. OPENSSL_EXPORT int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx,
      const char *file); // SSL_CTX_set_default_passwd_cb sets the password callback
      for PEM-based // convenience functions called on |ctx|. OPENSSL_EXPORT void
      SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); // SSL_CTX_get_default_passwd_cb
      returns the callback set by // |SSL_CTX_set_default_passwd_cb|. OPENSSL_EXPORT
      pem_password_cb *SSL_CTX_get_default_passwd_cb( const SSL_CTX *ctx); // SSL_CTX_set_default_passwd_cb_userdata
      sets the userdata parameter for // |ctx|'s password callback. OPENSSL_EXPORT
      void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *data); // SSL_CTX_get_default_passwd_cb_userdata
      returns the userdata parameter set by // |SSL_CTX_set_default_passwd_cb_userdata|.
      OPENSSL_EXPORT void *SSL_CTX_get_default_passwd_cb_userdata(const SSL_CTX *ctx);
      // Custom private keys. enum ssl_private_key_result_t BORINGSSL_ENUM_INT { ssl_private_key_success,
      ssl_private_key_retry, ssl_private_key_failure,}; // ssl_private_key_method_st
      (aka |SSL_PRIVATE_KEY_METHOD|) describes private // key hooks. This is used
      to off-load signing operations to a custom, // potentially asynchronous, backend.
      Metadata about the key such as the type // and size are parsed out of the certificate.
      struct ssl_private_key_method_st { // sign signs the message |in| in using the
      specified signature algorithm. On // success, it returns |ssl_private_key_success|
      and writes at most |max_out| // bytes of signature data to |out| and sets |*out_len|
      to the number of bytes // written. On failure, it returns |ssl_private_key_failure|.
      If the operation // has not completed, it returns |ssl_private_key_retry|. |sign|
      should // arrange for the high-level operation on |ssl| to be retried when the
      // operation is completed. This will result in a call to |complete|. // // |signature_algorithm|
      is one of the |SSL_SIGN_*| values, as defined in TLS // 1.3. Note that, in TLS
      1.2, ECDSA algorithms do not require that curve // sizes match hash sizes, so
      the curve portion of |SSL_SIGN_ECDSA_*| values // must be ignored. BoringSSL
      will internally handle the curve matching logic // where appropriate. // //
      It is an error to call |sign| while another private key operation is in // progress
      on |ssl|. enum ssl_private_key_result_t (*sign)(SSL *ssl, uint8_t *out, size_t
      *out_len, size_t max_out, uint16_t signature_algorithm, const uint8_t *in, size_t
      in_len); // decrypt decrypts |in_len| bytes of encrypted data from |in|. On
      success it // returns |ssl_private_key_success|, writes at most |max_out| bytes
      of // decrypted data to |out| and sets |*out_len| to the actual number of bytes
      // written. On failure it returns |ssl_private_key_failure|. If the operation
      // has not completed, it returns |ssl_private_key_retry|. The caller should
      // arrange for the high-level operation on |ssl| to be retried when the // operation
      is completed, which will result in a call to |complete|. This // function only
      works with RSA keys and should perform a raw RSA decryption // operation with
      no padding. // // It is an error to call |decrypt| while another private key
      operation is in // progress on |ssl|. enum ssl_private_key_result_t (*decrypt)(SSL
      *ssl, uint8_t *out, size_t *out_len, size_t max_out, const uint8_t *in, size_t
      in_len); // complete completes a pending operation. If the operation has completed,
      it // returns |ssl_private_key_success| and writes the result to |out| as in
      // |sign|. Otherwise, it returns |ssl_private_key_failure| on failure and //
      |ssl_private_key_retry| if the operation is still in progress. // // |complete|
      may be called arbitrarily many times before completion, but it // is an error
      to call |complete| if there is no pending operation in progress // on |ssl|.
      enum ssl_private_key_result_t (*complete)(SSL *ssl, uint8_t *out, size_t *out_len,
      size_t max_out);}; // SSL_set_private_key_method configures a custom private
      key on |ssl|. // |key_method| must remain valid for the lifetime of |ssl|. //
      // If using an RSA or ECDSA key, callers should configure signing capabilities
      // with |SSL_set_signing_algorithm_prefs|. Otherwise, BoringSSL may select a
      // signature algorithm that |key_method| does not support. OPENSSL_EXPORT void
      SSL_set_private_key_method( SSL *ssl, const SSL_PRIVATE_KEY_METHOD *key_method);
      // SSL_CTX_set_private_key_method configures a custom private key on |ctx|.
      // |key_method| must remain valid for the lifetime of |ctx|. // // If using
      an RSA or ECDSA key, callers should configure signing capabilities // with |SSL_CTX_set_signing_algorithm_prefs|.
      Otherwise, BoringSSL may select a // signature algorithm that |key_method| does
      not support. OPENSSL_EXPORT void SSL_CTX_set_private_key_method( SSL_CTX *ctx,
      const SSL_PRIVATE_KEY_METHOD *key_method); // SSL_CREDENTIAL_set_private_key_method
      configures a custom private key on // |cred|. |key_method| must remain valid
      for the lifetime of |cred|. It returns // one on success and zero if |cred|
      does not use private keys. // // If using an RSA or ECDSA key, callers should
      configure signing capabilities // with |SSL_CREDENTIAL_set1_signing_algorithm_prefs|.
      Otherwise, BoringSSL may // select a signature algorithm that |key_method| does
      not support. This is not // necessary for delegated credentials (see |SSL_CREDENTIAL_new_delegated|)
      // because delegated credentials only support a single signature algorithm.
      // // Functions in |key_method| will be passed an |SSL| object, but not |cred|
      // directly. Use |SSL_get0_selected_credential| to determine the selected //
      credential. From there, |SSL_CREDENTIAL_get_ex_data| can be used to look up
      // credential-specific state, such as a handle to the private key. OPENSSL_EXPORT
      int SSL_CREDENTIAL_set_private_key_method( SSL_CREDENTIAL *cred, const SSL_PRIVATE_KEY_METHOD
      *key_method); // SSL_can_release_private_key returns one if |ssl| will no longer
      call into the // private key and zero otherwise. If the function returns one,
      the caller can // release state associated with the private key. // // NOTE:
      This function assumes the caller does not use |SSL_clear| to reuse // |ssl|
      for a second connection. If |SSL_clear| is used, BoringSSL may still // use
      the private key on the second connection. OPENSSL_EXPORT int SSL_can_release_private_key(const
      SSL *ssl); // Cipher suites. // // |SSL_CIPHER| objects represent cipher suites.
      DEFINE_CONST_STACK_OF(SSL_CIPHER)// SSL_get_cipher_by_value returns the structure
      representing a TLS cipher// suite based on its assigned number, or NULL if unknown.
      See// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4.OPENSSL_EXPORT
      const SSL_CIPHER *SSL_get_cipher_by_value(uint16_t value); // SSL_CIPHER_get_id
      returns |cipher|'s non-IANA id. This is not its // IANA-assigned number, which
      is called the \"value\" here, although it may be // cast to a |uint16_t| to
      get it. OPENSSL_EXPORT uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *cipher);
      // SSL_CIPHER_get_protocol_id returns |cipher|'s IANA-assigned number. OPENSSL_EXPORT
      uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *cipher); // SSL_CIPHER_is_aead
      returns one if |cipher| uses an AEAD cipher. OPENSSL_EXPORT int SSL_CIPHER_is_aead(const
      SSL_CIPHER *cipher); // SSL_CIPHER_is_block_cipher returns one if |cipher| is
      a block cipher. OPENSSL_EXPORT int SSL_CIPHER_is_block_cipher(const SSL_CIPHER
      *cipher); // SSL_CIPHER_get_cipher_nid returns the NID for |cipher|'s bulk //
      cipher. Possible values are |NID_aes_128_gcm|, |NID_aes_256_gcm|, // |NID_chacha20_poly1305|,
      |NID_aes_128_cbc|, |NID_aes_256_cbc|, and // |NID_des_ede3_cbc|. OPENSSL_EXPORT
      int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *cipher); // SSL_CIPHER_get_digest_nid
      returns the NID for |cipher|'s HMAC if it is a // legacy cipher suite. For modern
      AEAD-based ciphers (see // |SSL_CIPHER_is_aead|), it returns |NID_undef|. //
      // Note this function only returns the legacy HMAC digest, not the PRF hash.
      OPENSSL_EXPORT int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *cipher); // SSL_CIPHER_get_kx_nid
      returns the NID for |cipher|'s key exchange. This may // be |NID_kx_rsa|, |NID_kx_ecdhe|,
      or |NID_kx_psk| for TLS 1.2. In TLS 1.3, // cipher suites do not specify the
      key exchange, so this function returns // |NID_kx_any|. OPENSSL_EXPORT int SSL_CIPHER_get_kx_nid(const
      SSL_CIPHER *cipher); // SSL_CIPHER_get_auth_nid returns the NID for |cipher|'s
      authentication // type. This may be |NID_auth_rsa|, |NID_auth_ecdsa|, or |NID_auth_psk|
      for TLS // 1.2. In TLS 1.3, cipher suites do not specify authentication, so
      this // function returns |NID_auth_any|. OPENSSL_EXPORT int SSL_CIPHER_get_auth_nid(const
      SSL_CIPHER *cipher); // SSL_CIPHER_get_handshake_digest returns |cipher|'s PRF
      hash. If |cipher| // is a pre-TLS-1.2 cipher, it returns |EVP_md5_sha1| but
      note these ciphers use // SHA-256 in TLS 1.2. Other return values may be treated
      uniformly in all // applicable versions. OPENSSL_EXPORT const EVP_MD *SSL_CIPHER_get_handshake_digest(
      const SSL_CIPHER *cipher); // SSL_CIPHER_get_prf_nid behaves like |SSL_CIPHER_get_handshake_digest|
      but // returns the NID constant. Use |SSL_CIPHER_get_handshake_digest| instead.
      OPENSSL_EXPORT int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *cipher); // SSL_CIPHER_get_min_version
      returns the minimum protocol version required // for |cipher|. OPENSSL_EXPORT
      uint16_t SSL_CIPHER_get_min_version(const SSL_CIPHER *cipher); // SSL_CIPHER_get_max_version
      returns the maximum protocol version that // supports |cipher|. OPENSSL_EXPORT
      uint16_t SSL_CIPHER_get_max_version(const SSL_CIPHER *cipher); // SSL_CIPHER_standard_name
      returns the standard IETF name for |cipher|. For // example, \"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\".
      OPENSSL_EXPORT const char *SSL_CIPHER_standard_name(const SSL_CIPHER *cipher);
      // SSL_CIPHER_get_name returns the OpenSSL name of |cipher|. For example, //
      \"ECDHE-RSA-AES128-GCM-SHA256\". Callers are recommended to use // |SSL_CIPHER_standard_name|
      instead. OPENSSL_EXPORT const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher);
      // SSL_CIPHER_get_kx_name returns a string that describes the key-exchange //
      method used by |cipher|. For example, \"ECDHE_ECDSA\". TLS 1.3 AEAD-only //
      ciphers return the string \"GENERIC\". OPENSSL_EXPORT const char *SSL_CIPHER_get_kx_name(const
      SSL_CIPHER *cipher); // SSL_CIPHER_get_bits returns the strength, in bits, of
      |cipher|. If // |out_alg_bits| is not NULL, it writes the number of bits consumed
      by the // symmetric algorithm to |*out_alg_bits|. OPENSSL_EXPORT int SSL_CIPHER_get_bits(const
      SSL_CIPHER *cipher, int *out_alg_bits); // SSL_get_all_cipher_names outputs
      a list of possible strings // |SSL_CIPHER_get_name| may return in this version
      of BoringSSL. It writes at // most |max_out| entries to |out| and returns the
      total number it would have // written, if |max_out| had been large enough. |max_out|
      may be initially set // to zero to size the output. // // This function is only
      intended to help initialize tables in callers that want // possible strings
      pre-declared. This list would not be suitable to set a list // of supported
      features. It is in no particular order, and may contain // placeholder, experimental,
      or deprecated values that do not apply to every // caller. Future versions of
      BoringSSL may also return strings not in this // list, so this does not apply
      if, say, sending strings across services. OPENSSL_EXPORT size_t SSL_get_all_cipher_names(const
      char **out, size_t max_out); // SSL_get_all_standard_cipher_names outputs a
      list of possible strings // |SSL_CIPHER_standard_name| may return in this version
      of BoringSSL. It writes // at most |max_out| entries to |out| and returns the
      total number it would have // written, if |max_out| had been large enough. |max_out|
      may be initially set // to zero to size the output. // // This function is only
      intended to help initialize tables in callers that want // possible strings
      pre-declared. This list would not be suitable to set a list // of supported
      features. It is in no particular order, and may contain // placeholder, experimental,
      or deprecated values that do not apply to every // caller. Future versions of
      BoringSSL may also return strings not in this // list, so this does not apply
      if, say, sending strings across services. OPENSSL_EXPORT size_t SSL_get_all_standard_cipher_names(const
      char **out, size_t max_out); // Cipher suite configuration. // // OpenSSL uses
      a mini-language to configure cipher suites. The language // maintains an ordered
      list of enabled ciphers, along with an ordered list of // disabled but available
      ciphers. Initially, all ciphers are disabled with a // default ordering. The
      cipher string is then interpreted as a sequence of // directives, separated
      by colons, each of which modifies this state. // // Most directives consist
      of a one character or empty opcode followed by a // selector which matches a
      subset of available ciphers. // // Available opcodes are: // // - The empty
      opcode enables and appends all matching disabled ciphers to the // end of the
      enabled list. The newly appended ciphers are ordered relative to // each other
      matching their order in the disabled list. // // - |-| disables all matching
      enabled ciphers and prepends them to the disabled // list, with relative order
      from the enabled list preserved. This means the // most recently disabled ciphers
      get highest preference relative to other // disabled ciphers if re-enabled.
      // // - |+| moves all matching enabled ciphers to the end of the enabled list,
      with // relative order preserved. // // - |!| deletes all matching ciphers,
      enabled or not, from either list. Deleted // ciphers will not matched by future
      operations. // // A selector may be a specific cipher (using either the standard
      or OpenSSL // name for the cipher) or one or more rules separated by |+|. The
      final // selector matches the intersection of each rule. For instance, |AESGCM+aECDSA|
      // matches ECDSA-authenticated AES-GCM ciphers. // // Available cipher rules
      are: // // - |ALL| matches all ciphers, except for deprecated ciphers which
      must be // named explicitly. // // - |kRSA|, |kDHE|, |kECDHE|, and |kPSK| match
      ciphers using plain RSA, DHE, // ECDHE, and plain PSK key exchanges, respectively.
      Note that ECDHE_PSK is // matched by |kECDHE| and not |kPSK|. // // - |aRSA|,
      |aECDSA|, and |aPSK| match ciphers authenticated by RSA, ECDSA, and // a pre-shared
      key, respectively. // // - |RSA|, |DHE|, |ECDHE|, |PSK|, |ECDSA|, and |PSK|
      are aliases for the // corresponding |k*| or |a*| cipher rule. |RSA| is an alias
      for |kRSA|, not // |aRSA|. // // - |3DES|, |AES128|, |AES256|, |AES|, |AESGCM|,
      |CHACHA20| match ciphers // whose bulk cipher use the corresponding encryption
      scheme. Note that // |AES|, |AES128|, and |AES256| match both CBC and GCM ciphers.
      // // - |SHA1|, and its alias |SHA|, match legacy cipher suites using HMAC-SHA1.
      // // Deprecated cipher rules: // // - |kEDH|, |EDH|, |kEECDH|, and |EECDH|
      are legacy aliases for |kDHE|, |DHE|, // |kECDHE|, and |ECDHE|, respectively.
      // // - |HIGH| is an alias for |ALL|. // // - |FIPS| is an alias for |HIGH|.
      // // - |SSLv3| and |TLSv1| match ciphers available in TLS 1.1 or earlier. //
      |TLSv1_2| matches ciphers new in TLS 1.2. This is confusing and should not //
      be used. // // Unknown rules are silently ignored by legacy APIs, and rejected
      by APIs with // \"strict\" in the name, which should be preferred. Cipher lists
      can be long // and it's easy to commit typos. Strict functions will also reject
      the use of // spaces, semi-colons and commas as alternative separators. // //
      The special |@STRENGTH| directive will sort all enabled ciphers by strength.
      // // The |DEFAULT| directive, when appearing at the front of the string, expands
      // to the default ordering of available ciphers. // // If configuring a server,
      one may also configure equal-preference groups to // partially respect the client's
      preferences when // |SSL_OP_CIPHER_SERVER_PREFERENCE| is enabled. Ciphers in
      an equal-preference // group have equal priority and use the client order. This
      may be used to // enforce that AEADs are preferred but select AES-GCM vs. ChaCha20-Poly1305
      // based on client preferences. An equal-preference is specified with square
      // brackets, combining multiple selectors separated by |. For example: // //
      [TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256]
      // // Once an equal-preference group is used, future directives must be // opcode-less.
      Inside an equal-preference group, spaces are not allowed. // // TLS 1.3 ciphers
      do not participate in this mechanism and instead have a // built-in preference
      order. Functions to set cipher lists do not affect TLS // 1.3, and functions
      to query the cipher list do not include TLS 1.3 ciphers. // SSL_DEFAULT_CIPHER_LIST
      is the default cipher suite configuration. It is // substituted when a cipher
      string starts with 'DEFAULT'. #define SSL_DEFAULT_CIPHER_LIST \"ALL\"// SSL_CTX_set_strict_cipher_list
      configures the cipher list for |ctx|,// evaluating |str| as a cipher string
      and returning error if |str| contains// anything meaningless. It returns one
      on success and zero on failure.OPENSSL_EXPORT int SSL_CTX_set_strict_cipher_list(SSL_CTX
      *ctx, const char *str); // SSL_CTX_set_cipher_list configures the cipher list
      for |ctx|, evaluating // |str| as a cipher string. It returns one on success
      and zero on failure. // // Prefer to use |SSL_CTX_set_strict_cipher_list|. This
      function tolerates // garbage inputs, unless an empty cipher list results. OPENSSL_EXPORT
      int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str); // SSL_set_strict_cipher_list
      configures the cipher list for |ssl|, evaluating // |str| as a cipher string
      and returning error if |str| contains anything // meaningless. It returns one
      on success and zero on failure. OPENSSL_EXPORT int SSL_set_strict_cipher_list(SSL
      *ssl, const char *str); // SSL_set_cipher_list configures the cipher list for
      |ssl|, evaluating |str| as // a cipher string. It returns one on success and
      zero on failure. // // Prefer to use |SSL_set_strict_cipher_list|. This function
      tolerates garbage // inputs, unless an empty cipher list results. OPENSSL_EXPORT
      int SSL_set_cipher_list(SSL *ssl, const char *str); // SSL_CTX_get_ciphers returns
      the cipher list for |ctx|, in order of // preference. OPENSSL_EXPORT STACK_OF(SSL_CIPHER)
      *SSL_CTX_get_ciphers(const SSL_CTX *ctx); // SSL_CTX_cipher_in_group returns
      one if the |i|th cipher (see // |SSL_CTX_get_ciphers|) is in the same equipreference
      group as the one // following it and zero otherwise. OPENSSL_EXPORT int SSL_CTX_cipher_in_group(const
      SSL_CTX *ctx, size_t i); // SSL_get_ciphers returns the cipher list for |ssl|,
      in order of preference. OPENSSL_EXPORT STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const
      SSL *ssl); // Connection information. // SSL_is_init_finished returns one if
      |ssl| has completed its initial handshake // and has no pending handshake. It
      returns zero otherwise. OPENSSL_EXPORT int SSL_is_init_finished(const SSL *ssl);
      // SSL_in_init returns one if |ssl| has a pending handshake and zero // otherwise.
      OPENSSL_EXPORT int SSL_in_init(const SSL *ssl); // SSL_in_false_start returns
      one if |ssl| has a pending handshake that is in // False Start. |SSL_write|
      may be called at this point without waiting for the // peer, but |SSL_read|
      will complete the handshake before accepting application // data. // // See
      also |SSL_MODE_ENABLE_FALSE_START|. OPENSSL_EXPORT int SSL_in_false_start(const
      SSL *ssl); // SSL_get_peer_certificate returns the peer's leaf certificate or
      NULL if the // peer did not use certificates. The caller must call |X509_free|
      on the // result to release it. OPENSSL_EXPORT X509 *SSL_get_peer_certificate(const
      SSL *ssl); // SSL_get_peer_cert_chain returns the peer's certificate chain or
      NULL if // unavailable or the peer did not use certificates. This is the unverified
      list // of certificates as sent by the peer, not the final chain built during
      // verification. The caller does not take ownership of the result. // // WARNING:
      This function behaves differently between client and server. If // |ssl| is
      a server, the returned chain does not include the leaf certificate. // If a
      client, it does. OPENSSL_EXPORT STACK_OF(X509) *SSL_get_peer_cert_chain(const
      SSL *ssl); // SSL_get_peer_full_cert_chain returns the peer's certificate chain,
      or NULL if // unavailable or the peer did not use certificates. This is the
      unverified list // of certificates as sent by the peer, not the final chain
      built during // verification. The caller does not take ownership of the result.
      // // This is the same as |SSL_get_peer_cert_chain| except that this function
      // always returns the full chain, i.e. the first element of the return value
      // (if any) will be the leaf certificate. In constrast, // |SSL_get_peer_cert_chain|
      returns only the intermediate certificates if the // |ssl| is a server. OPENSSL_EXPORT
      STACK_OF(X509) *SSL_get_peer_full_cert_chain(const SSL *ssl); // SSL_get0_peer_certificates
      returns the peer's certificate chain, or NULL if // unavailable or the peer
      did not use certificates. This is the unverified list // of certificates as
      sent by the peer, not the final chain built during // verification. The caller
      does not take ownership of the result. // // This is the |CRYPTO_BUFFER| variant
      of |SSL_get_peer_full_cert_chain|. OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER)
      *SSL_get0_peer_certificates( const SSL *ssl); // SSL_get0_signed_cert_timestamp_list
      sets |*out| and |*out_len| to point to // |*out_len| bytes of SCT information
      from the server. This is only valid if // |ssl| is a client. The SCT information
      is a SignedCertificateTimestampList // (including the two leading length bytes).
      // See https://tools.ietf.org/html/rfc6962#section-3.3 // If no SCT was received
      then |*out_len| will be zero on return. // // WARNING: the returned data is
      not guaranteed to be well formed. OPENSSL_EXPORT void SSL_get0_signed_cert_timestamp_list(const
      SSL *ssl, const uint8_t **out, size_t *out_len); // SSL_get0_ocsp_response sets
      |*out| and |*out_len| to point to |*out_len| // bytes of an OCSP response from
      the server. This is the DER encoding of an // OCSPResponse type as defined in
      RFC 2560. // // WARNING: the returned data is not guaranteed to be well formed.
      OPENSSL_EXPORT void SSL_get0_ocsp_response(const SSL *ssl, const uint8_t **out,
      size_t *out_len); // SSL_get_tls_unique writes at most |max_out| bytes of the
      tls-unique value // for |ssl| to |out| and sets |*out_len| to the number of
      bytes written. It // returns one on success or zero on error. In general |max_out|
      should be at // least 12. // // This function will always fail if the initial
      handshake has not completed. // The tls-unique value will change after a renegotiation
      but, since // renegotiations can be initiated by the server at any point, the
      higher-level // protocol must either leave them disabled or define states in
      which the // tls-unique value can be read. // // The tls-unique value is defined
      by // https://tools.ietf.org/html/rfc5929#section-3.1. Due to a weakness in
      the // TLS protocol, tls-unique is broken for resumed connections unless the
      // Extended Master Secret extension is negotiated. Thus this function will //
      return zero if |ssl| performed session resumption unless EMS was used when //
      negotiating the original session. OPENSSL_EXPORT int SSL_get_tls_unique(const
      SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out); // SSL_get_extms_support
      returns one if the Extended Master Secret extension or // TLS 1.3 was negotiated.
      Otherwise, it returns zero. OPENSSL_EXPORT int SSL_get_extms_support(const SSL
      *ssl); // SSL_get_current_cipher returns cipher suite used by |ssl|, or NULL
      if it has // not been negotiated yet. OPENSSL_EXPORT const SSL_CIPHER *SSL_get_current_cipher(const
      SSL *ssl); // SSL_session_reused returns one if |ssl| performed an abbreviated
      handshake // and zero otherwise. // // TODO(davidben): Hammer down the semantics
      of this API while a handshake, // initial or renego, is in progress. OPENSSL_EXPORT
      int SSL_session_reused(const SSL *ssl); // SSL_get_secure_renegotiation_support
      returns one if the peer supports secure // renegotiation (RFC 5746) or TLS 1.3.
      Otherwise, it returns zero. OPENSSL_EXPORT int SSL_get_secure_renegotiation_support(const
      SSL *ssl); // SSL_export_keying_material exports a connection-specific secret
      from |ssl|, // as specified in RFC 5705. It writes |out_len| bytes to |out|
      given a label // and optional context. If |use_context| is zero, the |context|
      parameter is // ignored. // // To derive the same value, both sides of a connection
      must use the same output // length, label, and context. In TLS 1.2 and earlier,
      using a zero-length // context and using no context would give different output.
      In TLS 1.3 and // later, the output length impacts the derivation, so a truncated
      longer export // will not match a shorter export. // // It returns one on success
      and zero otherwise. OPENSSL_EXPORT int SSL_export_keying_material(const SSL
      *ssl, uint8_t *out, size_t out_len, const char *label, size_t label_len, const
      uint8_t *context, size_t context_len, int use_context); // Sessions. // // An
      |SSL_SESSION| represents an SSL session that may be resumed in an // abbreviated
      handshake. It is reference-counted and immutable. Once // established, an |SSL_SESSION|
      may be shared by multiple |SSL| objects on // different threads and must not
      be modified. // // Note the TLS notion of \"session\" is not suitable for application-level
      // session state. It is an optional caching mechanism for the handshake. Not
      all // connections within an application-level session will reuse TLS sessions.
      TLS // sessions may be dropped by the client or ignored by the server at any
      time. DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)// SSL_SESSION_new returns a newly-allocated
      blank |SSL_SESSION| or NULL on// error. This may be useful when writing tests
      but should otherwise not be// used.OPENSSL_EXPORT SSL_SESSION *SSL_SESSION_new(const
      SSL_CTX *ctx); // SSL_SESSION_up_ref increments the reference count of |session|
      and returns // one. OPENSSL_EXPORT int SSL_SESSION_up_ref(SSL_SESSION *session);
      // SSL_SESSION_free decrements the reference count of |session|. If it reaches
      // zero, all data referenced by |session| and |session| itself are released.
      OPENSSL_EXPORT void SSL_SESSION_free(SSL_SESSION *session); // SSL_SESSION_to_bytes
      serializes |in| into a newly allocated buffer and sets // |*out_data| to that
      buffer and |*out_len| to its length. The caller takes // ownership of the buffer
      and must call |OPENSSL_free| when done. It returns // one on success and zero
      on error. OPENSSL_EXPORT int SSL_SESSION_to_bytes(const SSL_SESSION *in, uint8_t
      **out_data, size_t *out_len); // SSL_SESSION_to_bytes_for_ticket serializes
      |in|, but excludes the session // identification information, namely the session
      ID and ticket. OPENSSL_EXPORT int SSL_SESSION_to_bytes_for_ticket(const SSL_SESSION
      *in, uint8_t **out_data, size_t *out_len); // SSL_SESSION_from_bytes parses
      |in_len| bytes from |in| as an SSL_SESSION. It // returns a newly-allocated
      |SSL_SESSION| on success or NULL on error. OPENSSL_EXPORT SSL_SESSION *SSL_SESSION_from_bytes(const
      uint8_t *in, size_t in_len, const SSL_CTX *ctx); // SSL_SESSION_get_version
      returns a string describing the TLS or DTLS version // |session| was established
      at. For example, \"TLSv1.2\" or \"DTLSv1\". OPENSSL_EXPORT const char *SSL_SESSION_get_version(const
      SSL_SESSION *session); // SSL_SESSION_get_protocol_version returns the TLS or
      DTLS version |session| // was established at. OPENSSL_EXPORT uint16_tSSL_SESSION_get_protocol_version(const
      SSL_SESSION *session); // SSL_SESSION_set_protocol_version sets |session|'s
      TLS or DTLS version to // |version|. This may be useful when writing tests but
      should otherwise not be // used. It returns one on success and zero on error.
      OPENSSL_EXPORT int SSL_SESSION_set_protocol_version(SSL_SESSION *session, uint16_t
      version); // SSL_MAX_SSL_SESSION_ID_LENGTH is the maximum length of an SSL session
      ID. #define SSL_MAX_SSL_SESSION_ID_LENGTH 32// SSL_SESSION_get_id returns a
      pointer to a buffer containing |session|'s// session ID and sets |*out_len|
      to its length.//// This function should only be used for implementing a TLS
      session cache. TLS// sessions are not suitable for application-level session
      state, and a session// ID is an implementation detail of the TLS resumption
      handshake mechanism. Not// all resumption flows use session IDs, and not all
      connections within an// application-level session will reuse TLS sessions.////
      To determine if resumption occurred, use |SSL_session_reused| instead.// Comparing
      session IDs will not give the right result in all cases.//// As a workaround
      for some broken applications, BoringSSL sometimes synthesizes// arbitrary session
      IDs for non-ID-based sessions. This behavior may be// removed in the future.OPENSSL_EXPORT
      const uint8_t *SSL_SESSION_get_id(const SSL_SESSION *session, unsigned *out_len);
      // SSL_SESSION_set1_id sets |session|'s session ID to |sid|, It returns one
      on // success and zero on error. This function may be useful in writing tests
      but // otherwise should not be used. OPENSSL_EXPORT int SSL_SESSION_set1_id(SSL_SESSION
      *session, const uint8_t *sid, size_t sid_len); // SSL_SESSION_get_time returns
      the time at which |session| was established in // seconds since the UNIX epoch.
      OPENSSL_EXPORT uint64_t SSL_SESSION_get_time(const SSL_SESSION *session); //
      SSL_SESSION_get_timeout returns the lifetime of |session| in seconds. OPENSSL_EXPORT
      uint32_t SSL_SESSION_get_timeout(const SSL_SESSION *session); // SSL_SESSION_get0_peer
      returns the peer leaf certificate stored in // |session|. // // TODO(davidben):
      This should return a const X509 *. OPENSSL_EXPORT X509 *SSL_SESSION_get0_peer(const
      SSL_SESSION *session); // SSL_SESSION_get0_peer_certificates returns the peer
      certificate chain stored // in |session|, or NULL if the peer did not use certificates.
      This is the // unverified list of certificates as sent by the peer, not the
      final chain // built during verification. The caller does not take ownership
      of the result. OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER) *SSL_SESSION_get0_peer_certificates(const
      SSL_SESSION *session); // SSL_SESSION_get0_signed_cert_timestamp_list sets |*out|
      and |*out_len| to // point to |*out_len| bytes of SCT information stored in
      |session|. This is // only valid for client sessions. The SCT information is
      a // SignedCertificateTimestampList (including the two leading length bytes).
      See // https://tools.ietf.org/html/rfc6962#section-3.3 If no SCT was received
      then // |*out_len| will be zero on return. // // WARNING: the returned data
      is not guaranteed to be well formed. OPENSSL_EXPORT void SSL_SESSION_get0_signed_cert_timestamp_list(
      const SSL_SESSION *session, const uint8_t **out, size_t *out_len); // SSL_SESSION_get0_ocsp_response
      sets |*out| and |*out_len| to point to // |*out_len| bytes of an OCSP response
      from the server. This is the DER // encoding of an OCSPResponse type as defined
      in RFC 2560. // // WARNING: the returned data is not guaranteed to be well formed.
      OPENSSL_EXPORT void SSL_SESSION_get0_ocsp_response(const SSL_SESSION *session,
      const uint8_t **out, size_t *out_len); // SSL_MAX_MASTER_KEY_LENGTH is the maximum
      length of a master secret. #define SSL_MAX_MASTER_KEY_LENGTH 48// SSL_SESSION_get_master_key
      writes up to |max_out| bytes of |session|'s secret// to |out| and returns the
      number of bytes written. If |max_out| is zero, it// returns the size of the
      secret.OPENSSL_EXPORT size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
      uint8_t *out, size_t max_out); // SSL_SESSION_set_time sets |session|'s creation
      time to |time| and returns // |time|. This function may be useful in writing
      tests but otherwise should not // be used. OPENSSL_EXPORT uint64_t SSL_SESSION_set_time(SSL_SESSION
      *session, uint64_t time); // SSL_SESSION_set_timeout sets |session|'s timeout
      to |timeout| and returns // one. This function may be useful in writing tests
      but otherwise should not // be used. OPENSSL_EXPORT uint32_t SSL_SESSION_set_timeout(SSL_SESSION
      *session, uint32_t timeout); // SSL_SESSION_get0_id_context returns a pointer
      to a buffer containing // |session|'s session ID context (see |SSL_CTX_set_session_id_context|)
      and // sets |*out_len| to its length. OPENSSL_EXPORT const uint8_t *SSL_SESSION_get0_id_context(
      const SSL_SESSION *session, unsigned *out_len); // SSL_SESSION_set1_id_context
      sets |session|'s session ID context (see // |SSL_CTX_set_session_id_context|)
      to |sid_ctx|. It returns one on success and // zero on error. This function
      may be useful in writing tests but otherwise // should not be used. OPENSSL_EXPORT
      int SSL_SESSION_set1_id_context(SSL_SESSION *session, const uint8_t *sid_ctx,
      size_t sid_ctx_len); // SSL_SESSION_should_be_single_use returns one if |session|
      should be // single-use (TLS 1.3 and later) and zero otherwise. // // If this
      function returns one, clients retain multiple sessions and use each // only
      once. This prevents passive observers from correlating connections with // tickets.
      See RFC 8446, appendix C.4. If it returns zero, |session| cannot be // used
      without leaking a correlator. OPENSSL_EXPORT int SSL_SESSION_should_be_single_use(const
      SSL_SESSION *session); // SSL_SESSION_is_resumable returns one if |session|
      is complete and contains a // session ID or ticket. It returns zero otherwise.
      Note this function does not // ensure |session| will be resumed. It may be expired,
      dropped by the server, // or associated with incompatible parameters. OPENSSL_EXPORT
      int SSL_SESSION_is_resumable(const SSL_SESSION *session); // SSL_SESSION_has_ticket
      returns one if |session| has a ticket and zero // otherwise. OPENSSL_EXPORT
      int SSL_SESSION_has_ticket(const SSL_SESSION *session); // SSL_SESSION_get0_ticket
      sets |*out_ticket| and |*out_len| to |session|'s // ticket, or NULL and zero
      if it does not have one. |out_ticket| may be NULL // if only the ticket length
      is needed. OPENSSL_EXPORT void SSL_SESSION_get0_ticket(const SSL_SESSION *session,
      const uint8_t **out_ticket, size_t *out_len); // SSL_SESSION_set_ticket sets
      |session|'s ticket to |ticket|. It returns one on // success and zero on error.
      This function may be useful in writing tests but // otherwise should not be
      used. OPENSSL_EXPORT int SSL_SESSION_set_ticket(SSL_SESSION *session, const
      uint8_t *ticket, size_t ticket_len); // SSL_SESSION_get_ticket_lifetime_hint
      returns ticket lifetime hint of // |session| in seconds or zero if none was
      set. OPENSSL_EXPORT uint32_tSSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION
      *session); // SSL_SESSION_get0_cipher returns the cipher negotiated by the connection
      which // established |session|. // // Note that, in TLS 1.3, there is no guarantee
      that resumptions with |session| // will use that cipher. Prefer calling |SSL_get_current_cipher|
      on the |SSL| // instead. OPENSSL_EXPORT const SSL_CIPHER *SSL_SESSION_get0_cipher(
      const SSL_SESSION *session); // SSL_SESSION_has_peer_sha256 returns one if |session|
      has a SHA-256 hash of // the peer's certificate retained and zero if the peer
      did not present a // certificate or if this was not enabled when |session| was
      created. See also // |SSL_CTX_set_retain_only_sha256_of_client_certs|. OPENSSL_EXPORT
      int SSL_SESSION_has_peer_sha256(const SSL_SESSION *session); // SSL_SESSION_get0_peer_sha256
      sets |*out_ptr| and |*out_len| to the SHA-256 // hash of the peer certificate
      retained in |session|, or NULL and zero if it // does not have one. See also
      |SSL_CTX_set_retain_only_sha256_of_client_certs|. OPENSSL_EXPORT void SSL_SESSION_get0_peer_sha256(const
      SSL_SESSION *session, const uint8_t **out_ptr, size_t *out_len); // SSL_SESSION_is_resumable_across_names
      returns one if |session| may be resumed // with any identity in the server certificate
      and zero otherwise. See // draft-ietf-tls-cross-sni-resumption. OPENSSL_EXPORT
      int SSL_SESSION_is_resumable_across_names( const SSL_SESSION *session); // Session
      caching. // // Session caching allows connections to be established more efficiently
      based // on saved parameters from a previous connection, called a session (see
      // |SSL_SESSION|). The client offers a saved session, using an opaque identifier
      // from a previous connection. The server may accept the session, if it has
      the // parameters available. Otherwise, it will decline and continue with a
      full // handshake. // // This requires both the client and the server to retain
      session state. A // client does so with a stateful session cache. A server may
      do the same or, if // supported by both sides, statelessly using session tickets.
      For more // information on the latter, see the next section. // // For a server,
      the library implements a built-in internal session cache as an // in-memory
      hash table. Servers may also use |SSL_CTX_sess_set_get_cb| and // |SSL_CTX_sess_set_new_cb|
      to implement a custom external session cache. In // particular, this may be
      used to share a session cache between multiple // servers in a large deployment.
      An external cache may be used in addition to // or instead of the internal one.
      Use |SSL_CTX_set_session_cache_mode| to // toggle the internal cache. // //
      For a client, the only option is an external session cache. Clients may use
      // |SSL_CTX_sess_set_new_cb| to register a callback for when new sessions are
      // available. These may be cached and, in subsequent compatible connections,
      // configured with |SSL_set_session|. // // Note that offering or accepting
      a session short-circuits certificate // verification and most parameter negotiation.
      Resuming sessions across // different contexts may result in security failures
      and surprising // behavior. For a typical client, this means sessions for different
      hosts must // be cached under different keys. A client that connects to the
      same host with, // e.g., different cipher suite settings or client certificates
      should also use // separate session caches between those contexts. Servers should
      also partition // session caches between SNI hosts with |SSL_CTX_set_session_id_context|.
      // // Note also, in TLS 1.2 and earlier, offering sessions allows passive observers
      // to correlate different client connections. TLS 1.3 and later fix this, //
      provided clients use sessions at most once. Session caches are managed by the
      // caller in BoringSSL, so this must be implemented externally. See // |SSL_SESSION_should_be_single_use|
      for details. // SSL_SESS_CACHE_OFF disables all session caching. #define SSL_SESS_CACHE_OFF
      0x0000// SSL_SESS_CACHE_CLIENT enables session caching for a client. The internal//
      cache is never used on a client, so this only enables the callbacks.#define
      SSL_SESS_CACHE_CLIENT 0x0001// SSL_SESS_CACHE_SERVER enables session caching
      for a server.#define SSL_SESS_CACHE_SERVER 0x0002// SSL_SESS_CACHE_BOTH enables
      session caching for both client and server.#define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT
      | SSL_SESS_CACHE_SERVER)// SSL_SESS_CACHE_NO_AUTO_CLEAR disables automatically
      calling// |SSL_CTX_flush_sessions| every 255 connections.#define SSL_SESS_CACHE_NO_AUTO_CLEAR
      0x0080// SSL_SESS_CACHE_NO_INTERNAL_LOOKUP, on a server, disables looking up
      a session// from the internal session cache.#define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP
      0x0100// SSL_SESS_CACHE_NO_INTERNAL_STORE, on a server, disables storing sessions
      in// the internal session cache.#define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200//
      SSL_SESS_CACHE_NO_INTERNAL, on a server, disables the internal session// cache.#define
      SSL_SESS_CACHE_NO_INTERNAL \\ (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP | SSL_SESS_CACHE_NO_INTERNAL_STORE)//
      SSL_CTX_set_session_cache_mode sets the session cache mode bits for |ctx| to//
      |mode|. It returns the previous value.OPENSSL_EXPORT int SSL_CTX_set_session_cache_mode(SSL_CTX
      *ctx, int mode);// SSL_CTX_get_session_cache_mode returns the session cache
      mode bits for// |ctx|OPENSSL_EXPORT int SSL_CTX_get_session_cache_mode(const
      SSL_CTX *ctx); // SSL_set_session, for a client, configures |ssl| to offer to
      resume |session| // in the initial handshake and returns one. The caller retains
      ownership of // |session|. Note that configuring a session assumes the authentication
      in the // session is valid. For callers that wish to revalidate the session
      before // offering, see |SSL_SESSION_get0_peer_certificates|, // |SSL_SESSION_get0_signed_cert_timestamp_list|,
      and // |SSL_SESSION_get0_ocsp_response|. // // It is an error to call this function
      after the handshake has begun. OPENSSL_EXPORT int SSL_set_session(SSL *ssl,
      SSL_SESSION *session); // SSL_DEFAULT_SESSION_TIMEOUT is the default lifetime,
      in seconds, of a // session in TLS 1.2 or earlier. This is how long we are willing
      to use the // secret to encrypt traffic without fresh key material. #define
      SSL_DEFAULT_SESSION_TIMEOUT (2 * 60 * 60)// SSL_DEFAULT_SESSION_PSK_DHE_TIMEOUT
      is the default lifetime, in seconds, of a// session for TLS 1.3 psk_dhe_ke.
      This is how long we are willing to use the// secret as an authenticator.#define
      SSL_DEFAULT_SESSION_PSK_DHE_TIMEOUT (2 * 24 * 60 * 60)// SSL_DEFAULT_SESSION_AUTH_TIMEOUT
      is the default non-renewable lifetime, in// seconds, of a TLS 1.3 session. This
      is how long we are willing to trust the// signature in the initial handshake.#define
      SSL_DEFAULT_SESSION_AUTH_TIMEOUT (7 * 24 * 60 * 60)// SSL_CTX_set_timeout sets
      the lifetime, in seconds, of TLS 1.2 (or earlier)// sessions created in |ctx|
      to |timeout|.OPENSSL_EXPORT uint32_t SSL_CTX_set_timeout(SSL_CTX *ctx, uint32_t
      timeout); // SSL_CTX_set_session_psk_dhe_timeout sets the lifetime, in seconds,
      of TLS 1.3 // sessions created in |ctx| to |timeout|. OPENSSL_EXPORT void SSL_CTX_set_session_psk_dhe_timeout(SSL_CTX
      *ctx, uint32_t timeout); // SSL_CTX_get_timeout returns the lifetime, in seconds,
      of TLS 1.2 (or earlier) // sessions created in |ctx|. OPENSSL_EXPORT uint32_t
      SSL_CTX_get_timeout(const SSL_CTX *ctx); // SSL_MAX_SID_CTX_LENGTH is the maximum
      length of a session ID context. #define SSL_MAX_SID_CTX_LENGTH 32// SSL_CTX_set_session_id_context
      sets |ctx|'s session ID context to |sid_ctx|.// It returns one on success and
      zero on error. The session ID context is an// application-defined opaque byte
      string. A session will not be used in a// connection without a matching session
      ID context.//// For a server, if |SSL_VERIFY_PEER| is enabled, it is an error
      to not set a// session ID context.OPENSSL_EXPORT int SSL_CTX_set_session_id_context(SSL_CTX
      *ctx, const uint8_t *sid_ctx, size_t sid_ctx_len); // SSL_set_session_id_context
      sets |ssl|'s session ID context to |sid_ctx|. It // returns one on success and
      zero on error. See also // |SSL_CTX_set_session_id_context|. OPENSSL_EXPORT
      int SSL_set_session_id_context(SSL *ssl, const uint8_t *sid_ctx, size_t sid_ctx_len);
      // SSL_get0_session_id_context returns a pointer to |ssl|'s session ID context
      // and sets |*out_len| to its length. It returns NULL on error. OPENSSL_EXPORT
      const uint8_t *SSL_get0_session_id_context(const SSL *ssl, size_t *out_len);
      // SSL_SESSION_CACHE_MAX_SIZE_DEFAULT is the default maximum size of a session
      // cache. #define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024 * 20)// SSL_CTX_sess_set_cache_size
      sets the maximum size of |ctx|'s internal session// cache to |size|. It returns
      the previous value.OPENSSL_EXPORT unsigned long SSL_CTX_sess_set_cache_size(SSL_CTX
      *ctx, unsigned long size); // SSL_CTX_sess_get_cache_size returns the maximum
      size of |ctx|'s internal // session cache. OPENSSL_EXPORT unsigned long SSL_CTX_sess_get_cache_size(const
      SSL_CTX *ctx); // SSL_CTX_sess_number returns the number of sessions in |ctx|'s
      internal // session cache. OPENSSL_EXPORT size_t SSL_CTX_sess_number(const SSL_CTX
      *ctx); // SSL_CTX_add_session inserts |session| into |ctx|'s internal session
      cache. It // returns one on success and zero on error or if |session| is already
      in the // cache. The caller retains its reference to |session|. OPENSSL_EXPORT
      int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); // SSL_CTX_remove_session
      removes |session| from |ctx|'s internal session cache. // It returns one on
      success and zero if |session| was not in the cache. OPENSSL_EXPORT int SSL_CTX_remove_session(SSL_CTX
      *ctx, SSL_SESSION *session); // SSL_CTX_flush_sessions removes all sessions
      from |ctx| which have expired as // of time |time|. If |time| is zero, all sessions
      are removed. OPENSSL_EXPORT void SSL_CTX_flush_sessions(SSL_CTX *ctx, uint64_t
      time); // SSL_CTX_sess_set_new_cb sets the callback to be called when a new
      session is // established and ready to be cached. If the session cache is disabled
      (the // appropriate one of |SSL_SESS_CACHE_CLIENT| or |SSL_SESS_CACHE_SERVER|
      is // unset), the callback is not called. // // The callback is passed a reference
      to |session|. It returns one if it takes // ownership (and then calls |SSL_SESSION_free|
      when done) and zero otherwise. A // consumer which places |session| into an
      in-memory cache will likely return // one, with the cache calling |SSL_SESSION_free|.
      A consumer which serializes // |session| with |SSL_SESSION_to_bytes| may not
      need to retain |session| and // will likely return zero. Returning one is equivalent
      to calling // |SSL_SESSION_up_ref| and then returning zero. // // Note: For
      a client, the callback may be called on abbreviated handshakes if a // ticket
      is renewed. Further, it may not be called until some time after // |SSL_do_handshake|
      or |SSL_connect| completes if False Start is enabled. Thus // it's recommended
      to use this callback over calling |SSL_get_session| on // handshake completion.
      OPENSSL_EXPORT void SSL_CTX_sess_set_new_cb( SSL_CTX *ctx, int (*new_session_cb)(SSL
      *ssl, SSL_SESSION *session)); // SSL_CTX_sess_get_new_cb returns the callback
      set by // |SSL_CTX_sess_set_new_cb|. OPENSSL_EXPORT int (*SSL_CTX_sess_get_new_cb(SSL_CTX
      *ctx))( SSL *ssl, SSL_SESSION *session); // SSL_CTX_sess_set_remove_cb sets
      a callback which is called when a session is // removed from the internal session
      cache. // // TODO(davidben): What is the point of this callback? It seems useless
      since it // only fires on sessions in the internal cache. OPENSSL_EXPORT void
      SSL_CTX_sess_set_remove_cb( SSL_CTX *ctx, void (*remove_session_cb)(SSL_CTX
      *ctx, SSL_SESSION *session)); // SSL_CTX_sess_get_remove_cb returns the callback
      set by // |SSL_CTX_sess_set_remove_cb|. OPENSSL_EXPORT void (*SSL_CTX_sess_get_remove_cb(SSL_CTX
      *ctx))( SSL_CTX *ctx, SSL_SESSION *session); // SSL_CTX_sess_set_get_cb sets
      a callback to look up a session by ID for a // server. The callback is passed
      the session ID and should return a matching // |SSL_SESSION| or NULL if not
      found. It should set |*out_copy| to zero and // return a new reference to the
      session. This callback is not used for a // client. // // For historical reasons,
      if |*out_copy| is set to one (default), the SSL // library will take a new reference
      to the returned |SSL_SESSION|, expecting // the callback to return a non-owning
      pointer. This is not recommended. If // |ctx| and thus the callback is used
      on multiple threads, the session may be // removed and invalidated before the
      SSL library calls |SSL_SESSION_up_ref|, // whereas the callback may synchronize
      internally. // // To look up a session asynchronously, the callback may return
      // |SSL_magic_pending_session_ptr|. See the documentation for that function
      and // |SSL_ERROR_PENDING_SESSION|. // // If the internal session cache is enabled,
      the callback is only consulted if // the internal cache does not return a match.
      OPENSSL_EXPORT void SSL_CTX_sess_set_get_cb( SSL_CTX *ctx, SSL_SESSION *(*get_session_cb)(SSL
      *ssl, const uint8_t *id, int id_len, int *out_copy)); // SSL_CTX_sess_get_get_cb
      returns the callback set by // |SSL_CTX_sess_set_get_cb|. OPENSSL_EXPORT SSL_SESSION
      *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))( SSL *ssl, const uint8_t *id, int
      id_len, int *out_copy); // SSL_magic_pending_session_ptr returns a magic |SSL_SESSION|*
      which indicates // that the session isn't currently unavailable. |SSL_get_error|
      will then // return |SSL_ERROR_PENDING_SESSION| and the handshake can be retried
      later // when the lookup has completed. OPENSSL_EXPORT SSL_SESSION *SSL_magic_pending_session_ptr(void);
      // SSL_CTX_set_resumption_across_names_enabled configures whether |ctx|, as
      a // TLS 1.3 server, signals its sessions are compatible with any identity in
      the // server certificate, e.g. all DNS names in the subjectAlternateNames list.
      // This does not change BoringSSL's resumption behavior, only whether it signals
      // this to the client. See draft-ietf-tls-cross-sni-resumption. // // When this
      is enabled, all identities in the server certificate should by // hosted by
      servers that accept TLS 1.3 tickets issued by |ctx|. The connection // will
      otherwise function, but performance may suffer from clients wasting // single-use
      tickets. OPENSSL_EXPORT void SSL_CTX_set_resumption_across_names_enabled(SSL_CTX
      *ctx, int enabled); // SSL_set_resumption_across_names_enabled configures whether
      |ssl|, as a // TLS 1.3 server, signals its sessions are compatible with any
      identity in the // server certificate, e.g. all DNS names in the subjectAlternateNames
      list. // This does not change BoringSSL's resumption behavior, only whether
      it signals // this to the client. See draft-ietf-tls-cross-sni-resumption. //
      // When this is enabled, all identities in the server certificate should by
      // hosted by servers that accept TLS 1.3 tickets issued by |ssl|. The connection
      // will otherwise function, but performance may suffer from clients wasting
      // single-use tickets. OPENSSL_EXPORT void SSL_set_resumption_across_names_enabled(SSL
      *ssl, int enabled); // Session tickets. // // Session tickets, from RFC 5077,
      allow session resumption without server-side // state. The server maintains
      a secret ticket key and sends the client opaque // encrypted session parameters,
      called a ticket. When offering the session, the // client sends the ticket which
      the server decrypts to recover session state. // Session tickets are enabled
      by default but may be disabled with // |SSL_OP_NO_TICKET|. // // On the client,
      ticket-based sessions use the same APIs as ID-based tickets. // Callers do not
      need to handle them differently. // // On the server, tickets are encrypted
      and authenticated with a secret key. // By default, an |SSL_CTX| will manage
      session ticket encryption keys by // generating them internally and rotating
      every 48 hours. Tickets are minted // and processed transparently. The following
      functions may be used to configure // a persistent key or implement more custom
      behavior, including key rotation // and sharing keys between multiple servers
      in a large deployment. There are // three levels of customisation possible:
      // // 1) One can simply set the keys with |SSL_CTX_set_tlsext_ticket_keys|.
      // 2) One can configure an |EVP_CIPHER_CTX| and |HMAC_CTX| directly for // encryption
      and authentication. // 3) One can configure an |SSL_TICKET_AEAD_METHOD| to have
      more control // and the option of asynchronous decryption. // // An attacker
      that compromises a server's session ticket key can impersonate // the server
      and, prior to TLS 1.3, retroactively decrypt all application // traffic from
      sessions using that ticket key. Thus ticket keys must be // regularly rotated
      for forward secrecy. Note the default key is rotated // automatically once every
      48 hours but manually configured keys are not. // SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL
      is the interval with which the // default session ticket encryption key is rotated,
      if in use. If any // non-default ticket encryption mechanism is configured,
      automatic rotation is // disabled. #define SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL
      (2 * 24 * 60 * 60)// SSL_CTX_get_tlsext_ticket_keys writes |ctx|'s session ticket
      key material to// |len| bytes of |out|. It returns one on success and zero if
      |len| is not// 48. If |out| is NULL, it returns 48 instead.OPENSSL_EXPORT int
      SSL_CTX_get_tlsext_ticket_keys(SSL_CTX *ctx, void *out, size_t len); // SSL_CTX_set_tlsext_ticket_keys
      sets |ctx|'s session ticket key material to // |len| bytes of |in|. It returns
      one on success and zero if |len| is not // 48. If |in| is NULL, it returns 48
      instead. OPENSSL_EXPORT int SSL_CTX_set_tlsext_ticket_keys(SSL_CTX *ctx, const
      void *in, size_t len); // SSL_TICKET_KEY_NAME_LEN is the length of the key name
      prefix of a session // ticket. #define SSL_TICKET_KEY_NAME_LEN 16// SSL_CTX_set_tlsext_ticket_key_cb
      sets the ticket callback to |callback| and// returns one. |callback| will be
      called when encrypting a new ticket and when// decrypting a ticket from the
      client.//// In both modes, |ctx| and |hmac_ctx| will already have been initialized
      with// |EVP_CIPHER_CTX_init| and |HMAC_CTX_init|, respectively. |callback|//
      configures |hmac_ctx| with an HMAC digest and key, and configures |ctx|// for
      encryption or decryption, based on the mode.//// When encrypting a new ticket,
      |encrypt| will be one. It writes a public// 16-byte key name to |key_name| and
      a fresh IV to |iv|. The output IV length// must match |EVP_CIPHER_CTX_iv_length|
      of the cipher selected. In this mode,// |callback| returns 1 on success, 0 to
      decline sending a ticket, and -1 on// error.//// When decrypting a ticket, |encrypt|
      will be zero. |key_name| will point to a// 16-byte key name and |iv| points
      to an IV. The length of the IV consumed must// match |EVP_CIPHER_CTX_iv_length|
      of the cipher selected. In this mode,// |callback| returns -1 to abort the handshake,
      0 if the ticket key was// unrecognized, and 1 or 2 on success. If it returns
      2, the ticket will be// renewed. This may be used to re-key the ticket.////
      WARNING: |callback| wildly breaks the usual return value convention and is//
      called in two different modes.OPENSSL_EXPORT int SSL_CTX_set_tlsext_ticket_key_cb(
      SSL_CTX *ctx, int (*callback)(SSL *ssl, uint8_t *key_name, uint8_t *iv, EVP_CIPHER_CTX
      *ctx, HMAC_CTX *hmac_ctx, int encrypt)); // ssl_ticket_aead_result_t enumerates
      the possible results from decrypting a // ticket with an |SSL_TICKET_AEAD_METHOD|.
      enum ssl_ticket_aead_result_t BORINGSSL_ENUM_INT { // ssl_ticket_aead_success
      indicates that the ticket was successfully // decrypted. ssl_ticket_aead_success,
      // ssl_ticket_aead_retry indicates that the operation could not be // immediately
      completed and must be reattempted, via |open|, at a later // point. ssl_ticket_aead_retry,
      // ssl_ticket_aead_ignore_ticket indicates that the ticket should be ignored
      // (i.e. is corrupt or otherwise undecryptable). ssl_ticket_aead_ignore_ticket,
      // ssl_ticket_aead_error indicates that a fatal error occured and the // handshake
      should be terminated. ssl_ticket_aead_error,}; // ssl_ticket_aead_method_st
      (aka |SSL_TICKET_AEAD_METHOD|) contains methods // for encrypting and decrypting
      session tickets. struct ssl_ticket_aead_method_st { // max_overhead returns
      the maximum number of bytes of overhead that |seal| // may add. size_t (*max_overhead)(SSL
      *ssl); // seal encrypts and authenticates |in_len| bytes from |in|, writes,
      at most, // |max_out_len| bytes to |out|, and puts the number of bytes written
      in // |*out_len|. The |in| and |out| buffers may be equal but will not otherwise
      // alias. It returns one on success or zero on error. If the function returns
      // but |*out_len| is zero, BoringSSL will skip sending a ticket. int (*seal)(SSL
      *ssl, uint8_t *out, size_t *out_len, size_t max_out_len, const uint8_t *in,
      size_t in_len); // open authenticates and decrypts |in_len| bytes from |in|,
      writes, at most, // |max_out_len| bytes of plaintext to |out|, and puts the
      number of bytes // written in |*out_len|. The |in| and |out| buffers may be
      equal but will // not otherwise alias. See |ssl_ticket_aead_result_t| for details
      of the // return values. In the case that a retry is indicated, the caller should
      // arrange for the high-level operation on |ssl| to be retried when the // operation
      is completed, which will result in another call to |open|. enum ssl_ticket_aead_result_t
      (*open)(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out_len, const uint8_t
      *in, size_t in_len);}; // SSL_CTX_set_ticket_aead_method configures a custom
      ticket AEAD method table // on |ctx|. |aead_method| must remain valid for the
      lifetime of |ctx|. OPENSSL_EXPORT void SSL_CTX_set_ticket_aead_method( SSL_CTX
      *ctx, const SSL_TICKET_AEAD_METHOD *aead_method); // SSL_process_tls13_new_session_ticket
      processes an unencrypted TLS 1.3 // NewSessionTicket message from |buf| and
      returns a resumable |SSL_SESSION|, // or NULL on error. The caller takes ownership
      of the returned session and // must call |SSL_SESSION_free| to free it. // //
      |buf| contains |buf_len| bytes that represents a complete NewSessionTicket //
      message including its header, i.e., one byte for the type (0x04) and three //
      bytes for the length. |buf| must contain only one such message. // // This function
      may be used to process NewSessionTicket messages in TLS 1.3 // clients that
      are handling the record layer externally. OPENSSL_EXPORT SSL_SESSION *SSL_process_tls13_new_session_ticket(
      SSL *ssl, const uint8_t *buf, size_t buf_len); // SSL_CTX_set_num_tickets configures
      |ctx| to send |num_tickets| immediately // after a successful TLS 1.3 handshake
      as a server. It returns one. Large // values of |num_tickets| will be capped
      within the library. // // By default, BoringSSL sends two tickets. OPENSSL_EXPORT
      int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); // SSL_CTX_get_num_tickets
      returns the number of tickets |ctx| will send // immediately after a successful
      TLS 1.3 handshake as a server. OPENSSL_EXPORT size_t SSL_CTX_get_num_tickets(const
      SSL_CTX *ctx); // Diffie-Hellman groups and ephemeral key exchanges. // // Most
      TLS handshakes (ECDHE cipher suites in TLS 1.2, and all supported TLS // 1.3
      modes) incorporate an ephemeral key exchange, most commonly using // Elliptic
      Curve Diffie-Hellman (ECDH), as described in RFC 8422. The key // exchange algorithm
      is negotiated separately from the cipher suite, using // NamedGroup values,
      which define Diffie-Hellman groups. // // Historically, these values were known
      as \"curves\", in reference to ECDH, and // some APIs refer to the original
      name. RFC 7919 renamed them to \"groups\" in // reference to Diffie-Hellman
      in general. These values are also used to select // experimental post-quantum
      KEMs. Though not Diffie-Hellman groups, KEMs can // fill a similar role in TLS,
      so they use the same codepoints. // // In TLS 1.2, the ECDH values also negotiate
      elliptic curves used in ECDSA. In // TLS 1.3 and later, ECDSA curves are part
      of the signature algorithm. See // |SSL_SIGN_*|. // SSL_GROUP_* define TLS group
      IDs. #define SSL_GROUP_SECP256R1 23#define SSL_GROUP_SECP384R1 24#define SSL_GROUP_SECP521R1
      25#define SSL_GROUP_X25519 29#define SSL_GROUP_X25519_MLKEM768 0x11ec#define
      SSL_GROUP_X25519_KYBER768_DRAFT00 0x6399// SSL_CTX_set1_group_ids sets the preferred
      groups for |ctx| to |group_ids|.// Each element of |group_ids| should be one
      of the |SSL_GROUP_*| constants. It// returns one on success and zero on failure.OPENSSL_EXPORT
      int SSL_CTX_set1_group_ids(SSL_CTX *ctx, const uint16_t *group_ids, size_t num_group_ids);
      // SSL_set1_group_ids sets the preferred groups for |ssl| to |group_ids|. Each
      // element of |group_ids| should be one of the |SSL_GROUP_*| constants. It //
      returns one on success and zero on failure. OPENSSL_EXPORT int SSL_set1_group_ids(SSL
      *ssl, const uint16_t *group_ids, size_t num_group_ids); // SSL_get_group_id
      returns the ID of the group used by |ssl|'s most recently // completed handshake,
      or 0 if not applicable. OPENSSL_EXPORT uint16_t SSL_get_group_id(const SSL *ssl);
      // SSL_get_group_name returns a human-readable name for the group specified
      by // the given TLS group ID, or NULL if the group is unknown. OPENSSL_EXPORT
      const char *SSL_get_group_name(uint16_t group_id); // SSL_get_all_group_names
      outputs a list of possible strings // |SSL_get_group_name| may return in this
      version of BoringSSL. It writes at // most |max_out| entries to |out| and returns
      the total number it would have // written, if |max_out| had been large enough.
      |max_out| may be initially set // to zero to size the output. // // This function
      is only intended to help initialize tables in callers that want // possible
      strings pre-declared. This list would not be suitable to set a list // of supported
      features. It is in no particular order, and may contain // placeholder, experimental,
      or deprecated values that do not apply to every // caller. Future versions of
      BoringSSL may also return strings not in this // list, so this does not apply
      if, say, sending strings across services. OPENSSL_EXPORT size_t SSL_get_all_group_names(const
      char **out, size_t max_out); // The following APIs also configure Diffie-Hellman
      groups, but use |NID_*| // constants instead of |SSL_GROUP_*| constants. These
      are provided for OpenSSL // compatibility. Where NIDs are unstable constants
      specific to OpenSSL and // BoringSSL, group IDs are defined by the TLS protocol.
      Prefer the group ID // representation if storing persistently, or exporting
      to another process or // library. // SSL_CTX_set1_groups sets the preferred
      groups for |ctx| to be |groups|. Each // element of |groups| should be a |NID_*|
      constant from nid.h. It returns one // on success and zero on failure. OPENSSL_EXPORT
      int SSL_CTX_set1_groups(SSL_CTX *ctx, const int *groups, size_t num_groups);
      // SSL_set1_groups sets the preferred groups for |ssl| to be |groups|. Each
      // element of |groups| should be a |NID_*| constant from nid.h. It returns one
      // on success and zero on failure. OPENSSL_EXPORT int SSL_set1_groups(SSL *ssl,
      const int *groups, size_t num_groups); // SSL_CTX_set1_groups_list decodes |groups|
      as a colon-separated list of group // names (e.g. \"X25519\" or \"P-256\") and
      sets |ctx|'s preferred groups to the // result. It returns one on success and
      zero on failure. OPENSSL_EXPORT int SSL_CTX_set1_groups_list(SSL_CTX *ctx, const
      char *groups); // SSL_set1_groups_list decodes |groups| as a colon-separated
      list of group // names (e.g. \"X25519\" or \"P-256\") and sets |ssl|'s preferred
      groups to the // result. It returns one on success and zero on failure. OPENSSL_EXPORT
      int SSL_set1_groups_list(SSL *ssl, const char *groups); // SSL_get_negotiated_group
      returns the NID of the group used by |ssl|'s most // recently completed handshake,
      or |NID_undef| if not applicable. OPENSSL_EXPORT int SSL_get_negotiated_group(const
      SSL *ssl); // Certificate verification. // // SSL may authenticate either endpoint
      with an X.509 certificate. Typically // this is used to authenticate the server
      to the client. These functions // configure certificate verification. // //
      WARNING: By default, certificate verification errors on a client are not //
      fatal. See |SSL_VERIFY_NONE| This may be configured with // |SSL_CTX_set_verify|.
      // // By default clients are anonymous but a server may request a certificate
      from // the client by setting |SSL_VERIFY_PEER|. // // Many of these functions
      use OpenSSL's legacy X.509 stack which is // underdocumented and deprecated,
      but the replacement isn't ready yet. For // now, consumers may use the existing
      stack or bypass it by performing // certificate verification externally. This
      may be done with // |SSL_CTX_set_cert_verify_callback| or by extracting the
      chain with // |SSL_get_peer_cert_chain| after the handshake. In the future,
      functions will // be added to use the SSL stack without dependency on any part
      of the legacy // X.509 and ASN.1 stack. // // To augment certificate verification,
      a client may also enable OCSP stapling // (RFC 6066) and Certificate Transparency
      (RFC 6962) extensions. // SSL_VERIFY_NONE, on a client, verifies the server
      certificate but does not // make errors fatal. The result may be checked with
      |SSL_get_verify_result|. On // a server it does not request a client certificate.
      This is the default. #define SSL_VERIFY_NONE 0x00// SSL_VERIFY_PEER, on a client,
      makes server certificate errors fatal. On a// server it requests a client certificate
      and makes errors fatal. However,// anonymous clients are still allowed. See//
      |SSL_VERIFY_FAIL_IF_NO_PEER_CERT|.#define SSL_VERIFY_PEER 0x01// SSL_VERIFY_FAIL_IF_NO_PEER_CERT
      configures a server to reject connections if// the client declines to send a
      certificate. This flag must be used together// with |SSL_VERIFY_PEER|, otherwise
      it won't work.#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02// SSL_CTX_set_verify
      configures certificate verification behavior. |mode| is// one of the |SSL_VERIFY_*|
      values defined above. |callback| should be NULL.//// If |callback| is non-NULL,
      it is called as in |X509_STORE_CTX_set_verify_cb|,// which is a deprecated and
      fragile mechanism to run the default certificate// verification process, but
      suppress individual errors in it. See// |X509_STORE_CTX_set_verify_cb| for details,
      If set, the callback may use// |SSL_get_ex_data_X509_STORE_CTX_idx| with |X509_STORE_CTX_get_ex_data|
      to// look up the |SSL| from |store_ctx|.//// WARNING: |callback| is not suitable
      for implementing custom certificate// check, accepting all certificates, or
      extracting the certificate after// verification. It does not replace the default
      process and is called multiple// times throughout that process. It is also very
      difficult to implement this// callback safely, without inadvertently relying
      on implementation details or// making incorrect assumptions about when the callback
      is called.//// Instead, use |SSL_CTX_set_custom_verify| or// |SSL_CTX_set_cert_verify_callback|
      to customize certificate verification.// Those callbacks can inspect the peer-sent
      chain, call |X509_verify_cert| and// inspect the result, or perform other operations
      more straightforwardly.OPENSSL_EXPORT void SSL_CTX_set_verify( SSL_CTX *ctx,
      int mode, int (*callback)(int ok, X509_STORE_CTX *store_ctx)); // SSL_set_verify
      configures certificate verification behavior. |mode| is one of // the |SSL_VERIFY_*|
      values defined above. |callback| should be NULL. // // If |callback| is non-NULL,
      it is called as in |X509_STORE_CTX_set_verify_cb|, // which is a deprecated
      and fragile mechanism to run the default certificate // verification process,
      but suppress individual errors in it. See // |X509_STORE_CTX_set_verify_cb|
      for details, If set, the callback may use // |SSL_get_ex_data_X509_STORE_CTX_idx|
      with |X509_STORE_CTX_get_ex_data| to // look up the |SSL| from |store_ctx|.
      // // WARNING: |callback| is not suitable for implementing custom certificate
      // check, accepting all certificates, or extracting the certificate after //
      verification. It does not replace the default process and is called multiple
      // times throughout that process. It is also very difficult to implement this
      // callback safely, without inadvertently relying on implementation details
      or // making incorrect assumptions about when the callback is called. // //
      Instead, use |SSL_set_custom_verify| or |SSL_set_cert_verify_callback| to //
      customize certificate verification. Those callbacks can inspect the peer-sent
      // chain, call |X509_verify_cert| and inspect the result, or perform other //
      operations more straightforwardly. OPENSSL_EXPORT void SSL_set_verify(SSL *ssl,
      int mode, int (*callback)(int ok, X509_STORE_CTX *store_ctx)); enum ssl_verify_result_t
      BORINGSSL_ENUM_INT { ssl_verify_ok, ssl_verify_invalid, ssl_verify_retry,};
      // SSL_CTX_set_custom_verify configures certificate verification. |mode| is
      one // of the |SSL_VERIFY_*| values defined above. |callback| performs the //
      certificate verification. // // The callback may call |SSL_get0_peer_certificates|
      for the certificate chain // to validate. The callback should return |ssl_verify_ok|
      if the certificate is // valid. If the certificate is invalid, the callback
      should return // |ssl_verify_invalid| and optionally set |*out_alert| to an
      alert to send to // the peer. Some useful alerts include |SSL_AD_CERTIFICATE_EXPIRED|,
      // |SSL_AD_CERTIFICATE_REVOKED|, |SSL_AD_UNKNOWN_CA|, |SSL_AD_BAD_CERTIFICATE|,
      // |SSL_AD_CERTIFICATE_UNKNOWN|, and |SSL_AD_INTERNAL_ERROR|. See RFC 5246 //
      section 7.2.2 for their precise meanings. If unspecified, // |SSL_AD_CERTIFICATE_UNKNOWN|
      will be sent by default. // // To verify a certificate asynchronously, the callback
      may return // |ssl_verify_retry|. The handshake will then pause with |SSL_get_error|
      // returning |SSL_ERROR_WANT_CERTIFICATE_VERIFY|. OPENSSL_EXPORT void SSL_CTX_set_custom_verify(
      SSL_CTX *ctx, int mode, enum ssl_verify_result_t (*callback)(SSL *ssl, uint8_t
      *out_alert)); // SSL_set_custom_verify behaves like |SSL_CTX_set_custom_verify|
      but configures // an individual |SSL|. OPENSSL_EXPORT void SSL_set_custom_verify(
      SSL *ssl, int mode, enum ssl_verify_result_t (*callback)(SSL *ssl, uint8_t *out_alert));
      // SSL_CTX_get_verify_mode returns |ctx|'s verify mode, set by // |SSL_CTX_set_verify|.
      OPENSSL_EXPORT int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); // SSL_get_verify_mode
      returns |ssl|'s verify mode, set by |SSL_CTX_set_verify| // or |SSL_set_verify|.
      It returns -1 on error. OPENSSL_EXPORT int SSL_get_verify_mode(const SSL *ssl);
      // SSL_CTX_get_verify_callback returns the callback set by // |SSL_CTX_set_verify|.
      OPENSSL_EXPORT int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))( int ok,
      X509_STORE_CTX *store_ctx); // SSL_get_verify_callback returns the callback
      set by |SSL_CTX_set_verify| or // |SSL_set_verify|. OPENSSL_EXPORT int (*SSL_get_verify_callback(const
      SSL *ssl))( int ok, X509_STORE_CTX *store_ctx); // SSL_set1_host sets a DNS
      name that will be required to be present in the // verified leaf certificate.
      It returns one on success and zero on error. // // Note: unless _some_ name
      checking is performed, certificate validation is // ineffective. Simply checking
      that a host has some certificate from a CA is // rarely meaningful\u2014you
      have to check that the CA believed that the host was // who you expect to be
      talking to. // // By default, both subject alternative names and the subject's
      common name // attribute are checked. The latter has long been deprecated, so
      callers should // call |SSL_set_hostflags| with |X509_CHECK_FLAG_NEVER_CHECK_SUBJECT|
      to use // the standard behavior. https://crbug.com/boringssl/464 tracks fixing
      the // default. OPENSSL_EXPORT int SSL_set1_host(SSL *ssl, const char *hostname);
      // SSL_set_hostflags calls |X509_VERIFY_PARAM_set_hostflags| on the // |X509_VERIFY_PARAM|
      associated with this |SSL*|. |flags| should be some // combination of the |X509_CHECK_*|
      constants. OPENSSL_EXPORT void SSL_set_hostflags(SSL *ssl, unsigned flags);
      // SSL_CTX_set_verify_depth sets the maximum depth of a certificate chain //
      accepted in verification. This count excludes both the target certificate and
      // the trust anchor (root certificate). OPENSSL_EXPORT void SSL_CTX_set_verify_depth(SSL_CTX
      *ctx, int depth); // SSL_set_verify_depth sets the maximum depth of a certificate
      chain accepted // in verification. This count excludes both the target certificate
      and the // trust anchor (root certificate). OPENSSL_EXPORT void SSL_set_verify_depth(SSL
      *ssl, int depth); // SSL_CTX_get_verify_depth returns the maximum depth of a
      certificate accepted // in verification. OPENSSL_EXPORT int SSL_CTX_get_verify_depth(const
      SSL_CTX *ctx); // SSL_get_verify_depth returns the maximum depth of a certificate
      accepted in // verification. OPENSSL_EXPORT int SSL_get_verify_depth(const SSL
      *ssl); // SSL_CTX_set1_param sets verification parameters from |param|. It returns
      one // on success and zero on failure. The caller retains ownership of |param|.
      OPENSSL_EXPORT int SSL_CTX_set1_param(SSL_CTX *ctx, const X509_VERIFY_PARAM
      *param); // SSL_set1_param sets verification parameters from |param|. It returns
      one on // success and zero on failure. The caller retains ownership of |param|.
      OPENSSL_EXPORT int SSL_set1_param(SSL *ssl, const X509_VERIFY_PARAM *param);
      // SSL_CTX_get0_param returns |ctx|'s |X509_VERIFY_PARAM| for certificate //
      verification. The caller must not release the returned pointer but may call
      // functions on it to configure it. OPENSSL_EXPORT X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX
      *ctx); // SSL_get0_param returns |ssl|'s |X509_VERIFY_PARAM| for certificate
      // verification. The caller must not release the returned pointer but may call
      // functions on it to configure it. OPENSSL_EXPORT X509_VERIFY_PARAM *SSL_get0_param(SSL
      *ssl); // SSL_CTX_set_purpose sets |ctx|'s |X509_VERIFY_PARAM|'s 'purpose' parameter
      to // |purpose|. It returns one on success and zero on error. OPENSSL_EXPORT
      int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); // SSL_set_purpose sets
      |ssl|'s |X509_VERIFY_PARAM|'s 'purpose' parameter to // |purpose|. It returns
      one on success and zero on error. OPENSSL_EXPORT int SSL_set_purpose(SSL *ssl,
      int purpose); // SSL_CTX_set_trust sets |ctx|'s |X509_VERIFY_PARAM|'s 'trust'
      parameter to // |trust|. It returns one on success and zero on error. OPENSSL_EXPORT
      int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); // SSL_set_trust sets |ssl|'s
      |X509_VERIFY_PARAM|'s 'trust' parameter to // |trust|. It returns one on success
      and zero on error. OPENSSL_EXPORT int SSL_set_trust(SSL *ssl, int trust); //
      SSL_CTX_set_cert_store sets |ctx|'s certificate store to |store|. It takes //
      ownership of |store|. The store is used for certificate verification. // //
      The store is also used for the auto-chaining feature, but this is deprecated.
      // See also |SSL_MODE_NO_AUTO_CHAIN|. OPENSSL_EXPORT void SSL_CTX_set_cert_store(SSL_CTX
      *ctx, X509_STORE *store); // SSL_CTX_get_cert_store returns |ctx|'s certificate
      store. OPENSSL_EXPORT X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx);
      // SSL_CTX_set_default_verify_paths calls |X509_STORE_set_default_paths| on
      // |ctx|'s store. See that function for details. // // Using this function is
      not recommended. In OpenSSL, these defaults are // determined by OpenSSL's install
      prefix. There is no corresponding concept for // BoringSSL. Future versions
      of BoringSSL may change or remove this // functionality. OPENSSL_EXPORT int
      SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); // SSL_CTX_load_verify_locations
      calls |X509_STORE_load_locations| on |ctx|'s // store. See that function for
      details. OPENSSL_EXPORT int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const
      char *ca_file, const char *ca_dir); // SSL_get_verify_result returns the result
      of certificate verification. It is // either |X509_V_OK| or a |X509_V_ERR_*|
      value. OPENSSL_EXPORT long SSL_get_verify_result(const SSL *ssl); // SSL_alert_from_verify_result
      returns the SSL alert code, such as // |SSL_AD_CERTIFICATE_EXPIRED|, that corresponds
      to an |X509_V_ERR_*| value. // The return value is always an alert, even when
      |result| is |X509_V_OK|. OPENSSL_EXPORT int SSL_alert_from_verify_result(long
      result); // SSL_get_ex_data_X509_STORE_CTX_idx returns the ex_data index used
      to look up // the |SSL| associated with an |X509_STORE_CTX| in the verify callback.
      OPENSSL_EXPORT int SSL_get_ex_data_X509_STORE_CTX_idx(void); // SSL_CTX_set_cert_verify_callback
      sets a custom callback to be called on // certificate verification rather than
      |X509_verify_cert|. |store_ctx| contains // the verification parameters. The
      callback should return one on success and // zero on fatal error. It may use
      |X509_STORE_CTX_set_error| to set a // verification result. // // The callback
      may use |SSL_get_ex_data_X509_STORE_CTX_idx| to recover the // |SSL| object
      from |store_ctx|. OPENSSL_EXPORT void SSL_CTX_set_cert_verify_callback( SSL_CTX
      *ctx, int (*callback)(X509_STORE_CTX *store_ctx, void *arg), void *arg); //
      SSL_enable_signed_cert_timestamps causes |ssl| (which must be the client end
      // of a connection) to request SCTs from the server. See // https://tools.ietf.org/html/rfc6962.
      // // Call |SSL_get0_signed_cert_timestamp_list| to recover the SCT after the
      // handshake. OPENSSL_EXPORT void SSL_enable_signed_cert_timestamps(SSL *ssl);
      // SSL_CTX_enable_signed_cert_timestamps enables SCT requests on all client
      SSL // objects created from |ctx|. // // Call |SSL_get0_signed_cert_timestamp_list|
      to recover the SCT after the // handshake. OPENSSL_EXPORT void SSL_CTX_enable_signed_cert_timestamps(SSL_CTX
      *ctx); // SSL_enable_ocsp_stapling causes |ssl| (which must be the client end
      of a // connection) to request a stapled OCSP response from the server. // //
      Call |SSL_get0_ocsp_response| to recover the OCSP response after the // handshake.
      OPENSSL_EXPORT void SSL_enable_ocsp_stapling(SSL *ssl); // SSL_CTX_enable_ocsp_stapling
      enables OCSP stapling on all client SSL objects // created from |ctx|. // //
      Call |SSL_get0_ocsp_response| to recover the OCSP response after the // handshake.
      OPENSSL_EXPORT void SSL_CTX_enable_ocsp_stapling(SSL_CTX *ctx); // SSL_CTX_set0_verify_cert_store
      sets an |X509_STORE| that will be used // exclusively for certificate verification
      and returns one. Ownership of // |store| is transferred to the |SSL_CTX|. OPENSSL_EXPORT
      int SSL_CTX_set0_verify_cert_store(SSL_CTX *ctx, X509_STORE *store); // SSL_CTX_set1_verify_cert_store
      sets an |X509_STORE| that will be used // exclusively for certificate verification
      and returns one. An additional // reference to |store| will be taken. OPENSSL_EXPORT
      int SSL_CTX_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *store); // SSL_set0_verify_cert_store
      sets an |X509_STORE| that will be used // exclusively for certificate verification
      and returns one. Ownership of // |store| is transferred to the |SSL|. OPENSSL_EXPORT
      int SSL_set0_verify_cert_store(SSL *ssl, X509_STORE *store); // SSL_set1_verify_cert_store
      sets an |X509_STORE| that will be used // exclusively for certificate verification
      and returns one. An additional // reference to |store| will be taken. OPENSSL_EXPORT
      int SSL_set1_verify_cert_store(SSL *ssl, X509_STORE *store); // SSL_CTX_set_verify_algorithm_prefs
      configures |ctx| to use |prefs| as the // preference list when verifying signatures
      from the peer's long-term key in // TLS 1.2 and up. It returns one on zero on
      error. |prefs| should not include // the internal-only TLS 1.0 value |SSL_SIGN_RSA_PKCS1_MD5_SHA1|.
      // // This setting is not used in TLS 1.0 and 1.1. Those protocols always sign
      a // hardcoded algorithm (an MD5/SHA-1 concatenation for RSA, and SHA-1 for
      // ECDSA). BoringSSL will accept those algorithms if and only if those versions
      // are used. To disable them, set the minimum version to TLS 1.2 (default) or
      // higher. OPENSSL_EXPORT int SSL_CTX_set_verify_algorithm_prefs(SSL_CTX *ctx,
      const uint16_t *prefs, size_t num_prefs); // SSL_set_verify_algorithm_prefs
      configures |ssl| to use |prefs| as the // preference list when verifying signatures
      from the peer's long-term key in // TLS 1.2 and up. It returns one on zero on
      error. |prefs| should not include // the internal-only TLS 1.0 value |SSL_SIGN_RSA_PKCS1_MD5_SHA1|.
      // // This setting is not used in TLS 1.0 and 1.1. Those protocols always sign
      a // hardcoded algorithm (an MD5/SHA-1 concatenation for RSA, and SHA-1 for
      // ECDSA). BoringSSL will accept those algorithms if and only if those versions
      // are used. To disable them, set the minimum version to TLS 1.2 (default) or
      // higher. OPENSSL_EXPORT int SSL_set_verify_algorithm_prefs(SSL *ssl, const
      uint16_t *prefs, size_t num_prefs); // Certificate authorities. // // TLS implementations
      can send a list of supported certificate authorities to // guide the peer in
      selecting a certificate. This was originally defined for // servers requesting
      client certificates, but TLS 1.3 generalized it to server // certificates with
      the certificate_authorities extension. // // The following functions can be
      used to configure and query this list. They do // not directly impact certificate
      verification, only the list of certificate // authorities sent to the peer.
      // SSL_set_client_CA_list sets |ssl|'s client certificate CA list to // |name_list|.
      It takes ownership of |name_list|. OPENSSL_EXPORT void SSL_set_client_CA_list(SSL
      *ssl, STACK_OF(X509_NAME) *name_list); // SSL_CTX_set_client_CA_list sets |ctx|'s
      client certificate CA list to // |name_list|. It takes ownership of |name_list|.
      OPENSSL_EXPORT void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME)
      *name_list); // SSL_set0_client_CAs sets |ssl|'s client certificate CA list
      to |name_list|, // which should contain DER-encoded distinguished names (RFC
      5280). It takes // ownership of |name_list|. OPENSSL_EXPORT void SSL_set0_client_CAs(SSL
      *ssl, STACK_OF(CRYPTO_BUFFER) *name_list); // SSL_set0_CA_names sets |ssl|'s
      CA name list for the certificate authorities // extension to |name_list|, which
      should contain DER-encoded distinguished // names (RFC 5280). It takes ownership
      of |name_list|. OPENSSL_EXPORT void SSL_set0_CA_names(SSL *ssl, STACK_OF(CRYPTO_BUFFER)
      *name_list); // SSL_CTX_set0_client_CAs sets |ctx|'s client certificate CA list
      to // |name_list|, which should contain DER-encoded distinguished names (RFC
      5280). // It takes ownership of |name_list|. OPENSSL_EXPORT void SSL_CTX_set0_client_CAs(SSL_CTX
      *ctx, STACK_OF(CRYPTO_BUFFER) *name_list); // SSL_get_client_CA_list returns
      |ssl|'s client certificate CA list. If |ssl| // has not been configured as a
      client, this is the list configured by // |SSL_CTX_set_client_CA_list|. // //
      If configured as a client, it returns the client certificate CA list sent by
      // the server. In this mode, the behavior is undefined except during the //
      callbacks set by |SSL_CTX_set_cert_cb| and |SSL_CTX_set_client_cert_cb| or //
      when the handshake is paused because of them. OPENSSL_EXPORT STACK_OF(X509_NAME)
      *SSL_get_client_CA_list(const SSL *ssl); // SSL_get0_server_requested_CAs returns
      the CAs sent by a server to guide a // client in certificate selection. They
      are a series of DER-encoded X.509 // names. This function may only be called
      during a callback set by // |SSL_CTX_set_cert_cb| or when the handshake is paused
      because of it. // // The returned stack is owned by |ssl|, as are its contents.
      It should not be // used past the point where the handshake is restarted after
      the callback. OPENSSL_EXPORT const STACK_OF(CRYPTO_BUFFER) *SSL_get0_server_requested_CAs(
      const SSL *ssl); // SSL_CTX_get_client_CA_list returns |ctx|'s client certificate
      CA list. OPENSSL_EXPORT STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list( const
      SSL_CTX *ctx); // SSL_add_client_CA appends |x509|'s subject to the client certificate
      CA list. // It returns one on success or zero on error. The caller retains ownership
      of // |x509|. OPENSSL_EXPORT int SSL_add_client_CA(SSL *ssl, X509 *x509); //
      SSL_CTX_add_client_CA appends |x509|'s subject to the client certificate CA
      // list. It returns one on success or zero on error. The caller retains // ownership
      of |x509|. OPENSSL_EXPORT int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x509);
      // SSL_load_client_CA_file opens |file| and reads PEM-encoded certificates from
      // it. It returns a newly-allocated stack of the certificate subjects or NULL
      // on error. Duplicates in |file| are ignored. OPENSSL_EXPORT STACK_OF(X509_NAME)
      *SSL_load_client_CA_file(const char *file); // SSL_dup_CA_list makes a deep
      copy of |list|. It returns the new list on // success or NULL on allocation
      error. OPENSSL_EXPORT STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME)
      *list); // SSL_add_file_cert_subjects_to_stack behaves like |SSL_load_client_CA_file|
      // but appends the result to |out|. It returns one on success or zero on //
      error. OPENSSL_EXPORT int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME)
      *out, const char *file); // SSL_add_bio_cert_subjects_to_stack behaves like
      // |SSL_add_file_cert_subjects_to_stack| but reads from |bio|. OPENSSL_EXPORT
      int SSL_add_bio_cert_subjects_to_stack(STACK_OF(X509_NAME) *out, BIO *bio);
      // Trust Anchor Identifiers. // // The trust_anchors extension, like certificate_authorities,
      allows clients to // communicate supported CAs to guide server certificate selection,
      or vice // versa. It better supports larger PKIs by referring to CAs by short
      \"trust // anchor IDs\" and, in the server certificate direction, allowing a
      client to // advertise only a subset of its full list, with DNS hinting and
      a retry // mechanism to manage the subset. // // See https://datatracker.ietf.org/doc/draft-ietf-tls-trust-anchor-ids/
      // // BoringSSL currently only implements this for server certificates, and
      not yet // client certificates. // SSL_CREDENTIAL_set1_trust_anchor_id sets
      |cred|'s trust anchor ID to |id|, or // clears it if |id_len| is zero. It returns
      one on success and zero on // error. If not clearing, |id| must be in binary
      format (Section 3 of // draft-ietf-tls-trust-anchor-ids-00) of length |id_len|,
      and describe the // issuer of the final certificate in |cred|'s certificate
      chain. // // Additionally, |cred| must enable issuer matching (see // SSL_CREDENTIAL_set_must_match_issuer|)
      for this value to take effect. // // For better extensibility, callers are recommended
      to configure this // information with a CertificatePropertyList instead. See
      // |SSL_CREDENTIAL_set1_certificate_properties|. OPENSSL_EXPORT int SSL_CREDENTIAL_set1_trust_anchor_id(SSL_CREDENTIAL
      *cred, const uint8_t *id, size_t id_len); // SSL_CTX_set1_requested_trust_anchors
      configures |ctx| to request a // certificate issued by one of the trust anchors
      in |ids|. It returns one on // success and zero on error. |ids| must be a list
      of trust anchor IDs in // wire-format (a series of non-empty, 8-bit length-prefixed
      strings). // // The list may describe application's full list of supported trust
      anchors, or // a, possibly empty, subset. Applications can select this subset
      using // out-of-band information, such as the DNS hint in Section 5 of // draft-ietf-tls-trust-anchor-ids-00.
      Client applications sending a subset // should use |SSL_get0_peer_available_trust_anchors|
      to implement the retry // flow from Section 4.3 of draft-ietf-tls-trust-anchor-ids-00.
      // // If empty (|ids_len| is zero), the trust_anchors extension will still be
      sent // in ClientHello. This may be used by a client application to signal support
      // for the retry flow without requesting specific trust anchors. // // This
      function does not directly impact certificate verification, only the // list
      of trust anchors sent to the peer. OPENSSL_EXPORT int SSL_CTX_set1_requested_trust_anchors(SSL_CTX
      *ctx, const uint8_t *ids, size_t ids_len); // SSL_set1_requested_trust_anchors
      behaves like // |SSL_CTX_set1_requested_trust_anchors| but configures the value
      on |ssl|. OPENSSL_EXPORT int SSL_set1_requested_trust_anchors(SSL *ssl, const
      uint8_t *ids, size_t ids_len); // SSL_peer_matched_trust_anchor returns one
      if the peer reported that its // certificate chain matched one of the trust
      anchor IDs requested by |ssl|, and // zero otherwise. // // This value is only
      available during the handshake and is expected to be // called during certificate
      verification, e.g. during |SSL_set_custom_verify| // or |SSL_CTX_set_cert_verify_callback|
      callbacks. If the value is one, callers // can safely treat the peer's certificate
      chain as a pre-built path and skip // path-building in certificate verification.
      OPENSSL_EXPORT int SSL_peer_matched_trust_anchor(const SSL *ssl); // SSL_get0_peer_available_trust_anchors
      gets the peer's available trust anchor // IDs. It sets |*out| and |*out_len|
      so that |*out| points to |*out_len| bytes // containing the list in wire format
      (i.e. a series of non-empty // 8-bit-length-prefixed strings). If the peer did
      not provide a list, the // function will output zero bytes. Only servers can
      provide available trust // anchor IDs, so this API will only output a list when
      |ssl| is a client. // // This value is only available during the handshake and
      is expected to be // called in the event of certificate verification failure.
      Client applications // can use it to retry the connection, requesting different
      trust anchors. See // Section 4.3 of draft-ietf-tls-trust-anchor-ids-00 for
      details. // |CBS_get_u8_length_prefixed| may be used to iterate over the format.
      // // If needed in other contexts, callers may save the value during certificate
      // verification, or at |SSL_CB_HANDSHAKE_DONE| with |SSL_CTX_set_info_callback|.
      OPENSSL_EXPORT void SSL_get0_peer_available_trust_anchors(const SSL *ssl, const
      uint8_t **out, size_t *out_len); // Server name indication. // // The server_name
      extension (RFC 3546) allows the client to advertise the name // of the server
      it is connecting to. This is used in virtual hosting // deployments to select
      one of a several certificates on a single IP. Only the // host_name name type
      is supported. #define TLSEXT_NAMETYPE_host_name 0// SSL_set_tlsext_host_name,
      for a client, configures |ssl| to advertise |name|// in the server_name extension.
      It returns one on success and zero on error.OPENSSL_EXPORT int SSL_set_tlsext_host_name(SSL
      *ssl, const char *name); // SSL_get_servername, for a server, returns the hostname
      supplied by the // client or NULL if there was none. The |type| argument must
      be // |TLSEXT_NAMETYPE_host_name|. OPENSSL_EXPORT const char *SSL_get_servername(const
      SSL *ssl, const int type); // SSL_get_servername_type, for a server, returns
      |TLSEXT_NAMETYPE_host_name| // if the client sent a hostname and -1 otherwise.
      OPENSSL_EXPORT int SSL_get_servername_type(const SSL *ssl); // SSL_CTX_set_tlsext_servername_callback
      configures |callback| to be called on // the server after ClientHello extensions
      have been parsed and returns one. // The callback may use |SSL_get_servername|
      to examine the server_name // extension and returns a |SSL_TLSEXT_ERR_*| value.
      The value of |arg| may be // set by calling |SSL_CTX_set_tlsext_servername_arg|.
      // // If the callback returns |SSL_TLSEXT_ERR_NOACK|, the server_name extension
      is // not acknowledged in the ServerHello. If the return value is // |SSL_TLSEXT_ERR_ALERT_FATAL|,
      then |*out_alert| is the alert to send, // defaulting to |SSL_AD_UNRECOGNIZED_NAME|.
      |SSL_TLSEXT_ERR_ALERT_WARNING| is // ignored and treated as |SSL_TLSEXT_ERR_OK|.
      OPENSSL_EXPORT int SSL_CTX_set_tlsext_servername_callback( SSL_CTX *ctx, int
      (*callback)(SSL *ssl, int *out_alert, void *arg)); // SSL_CTX_set_tlsext_servername_arg
      sets the argument to the servername // callback and returns one. See |SSL_CTX_set_tlsext_servername_callback|.
      OPENSSL_EXPORT int SSL_CTX_set_tlsext_servername_arg(SSL_CTX *ctx, void *arg);
      // SSL_TLSEXT_ERR_* are values returned by some extension-related callbacks.
      #define SSL_TLSEXT_ERR_OK 0#define SSL_TLSEXT_ERR_ALERT_WARNING 1#define SSL_TLSEXT_ERR_ALERT_FATAL
      2#define SSL_TLSEXT_ERR_NOACK 3// SSL_set_SSL_CTX changes |ssl|'s |SSL_CTX|.
      |ssl| will use the// certificate-related settings from |ctx|, and |SSL_get_SSL_CTX|
      will report// |ctx|. This function may be used during the callbacks registered
      by// |SSL_CTX_set_select_certificate_cb|,// |SSL_CTX_set_tlsext_servername_callback|,
      and |SSL_CTX_set_cert_cb| or when// the handshake is paused from them. It is
      typically used to switch// certificates based on SNI.//// Note the session cache
      and related settings will continue to use the initial// |SSL_CTX|. Callers should
      use |SSL_CTX_set_session_id_context| to partition// the session cache between
      different domains.//// TODO(davidben): Should other settings change after this
      call?OPENSSL_EXPORT SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); // Application-layer
      protocol negotiation. // // The ALPN extension (RFC 7301) allows negotiating
      different application-layer // protocols over a single port. This is used, for
      example, to negotiate // HTTP/2. // SSL_CTX_set_alpn_protos sets the client
      ALPN protocol list on |ctx| to // |protos|. |protos| must be in wire-format
      (i.e. a series of non-empty, 8-bit // length-prefixed strings), or the empty
      string to disable ALPN. It returns // zero on success and one on failure. Configuring
      a non-empty string enables // ALPN on a client. // // WARNING: this function
      is dangerous because it breaks the usual return value // convention. OPENSSL_EXPORT
      int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const uint8_t *protos, size_t protos_len);
      // SSL_set_alpn_protos sets the client ALPN protocol list on |ssl| to |protos|.
      // |protos| must be in wire-format (i.e. a series of non-empty, 8-bit // length-prefixed
      strings), or the empty string to disable ALPN. It returns // zero on success
      and one on failure. Configuring a non-empty string enables // ALPN on a client.
      // // WARNING: this function is dangerous because it breaks the usual return
      value // convention. OPENSSL_EXPORT int SSL_set_alpn_protos(SSL *ssl, const
      uint8_t *protos, size_t protos_len); // SSL_CTX_set_alpn_select_cb sets a callback
      function on |ctx| that is called // during ClientHello processing in order to
      select an ALPN protocol from the // client's list of offered protocols. |SSL_select_next_proto|
      is an optional // utility function which may be useful in implementing this
      callback. // // The callback is passed a wire-format (i.e. a series of non-empty,
      8-bit // length-prefixed strings) ALPN protocol list in |in|. To select a protocol,
      // the callback should set |*out| and |*out_len| to the selected protocol and
      // return |SSL_TLSEXT_ERR_OK| on success. It does not pass ownership of the
      // buffer, so |*out| should point to a static string, a buffer that outlives
      the // callback call, or the corresponding entry in |in|. // // If the server
      supports ALPN, but there are no protocols in common, the // callback should
      return |SSL_TLSEXT_ERR_ALERT_FATAL| to abort the connection // with a no_application_protocol
      alert. // // If the server does not support ALPN, it can return |SSL_TLSEXT_ERR_NOACK|
      to // continue the handshake without negotiating a protocol. This may be useful
      if // multiple server configurations share an |SSL_CTX|, only some of which
      have // ALPN protocols configured. // // |SSL_TLSEXT_ERR_ALERT_WARNING| is ignored
      and will be treated as // |SSL_TLSEXT_ERR_NOACK|. // // The callback will only
      be called if the client supports ALPN. Callers that // wish to require ALPN
      for all clients must check |SSL_get0_alpn_selected| // after the handshake.
      In QUIC connections, this is done automatically. // // The cipher suite is selected
      before negotiating ALPN. The callback may use // |SSL_get_pending_cipher| to
      query the cipher suite. This may be used to // implement HTTP/2's cipher suite
      constraints. OPENSSL_EXPORT void SSL_CTX_set_alpn_select_cb( SSL_CTX *ctx, int
      (*cb)(SSL *ssl, const uint8_t **out, uint8_t *out_len, const uint8_t *in, unsigned
      in_len, void *arg), void *arg); // SSL_get0_alpn_selected gets the selected
      ALPN protocol (if any) from |ssl|. // On return it sets |*out_data| to point
      to |*out_len| bytes of protocol name // (not including the leading length-prefix
      byte). If the server didn't respond // with a negotiated protocol then |*out_len|
      will be zero. OPENSSL_EXPORT void SSL_get0_alpn_selected(const SSL *ssl, const
      uint8_t **out_data, unsigned *out_len); // SSL_CTX_set_allow_unknown_alpn_protos
      configures client connections on |ctx| // to allow unknown ALPN protocols from
      the server. Otherwise, by default, the // client will require that the protocol
      be advertised in // |SSL_CTX_set_alpn_protos|. OPENSSL_EXPORT void SSL_CTX_set_allow_unknown_alpn_protos(SSL_CTX
      *ctx, int enabled); // Application-layer protocol settings // // The ALPS extension
      (draft-vvv-tls-alps) allows exchanging application-layer // settings in the
      TLS handshake for applications negotiated with ALPN. Note // that, when ALPS
      is negotiated, the client and server each advertise their own // settings, so
      there are functions to both configure setting to send and query // received
      settings. // SSL_add_application_settings configures |ssl| to enable ALPS with
      ALPN // protocol |proto|, sending an ALPS value of |settings|. It returns one
      on // success and zero on error. If |proto| is negotiated via ALPN and the peer
      // supports ALPS, |settings| will be sent to the peer. The peer's ALPS value
      can // be retrieved with |SSL_get0_peer_application_settings|. // // On the
      client, this function should be called before the handshake, once for // each
      supported ALPN protocol which uses ALPS. |proto| must be included in the //
      client's ALPN configuration (see |SSL_CTX_set_alpn_protos| and // |SSL_set_alpn_protos|).
      On the server, ALPS can be preconfigured for each // protocol as in the client,
      or configuration can be deferred to the ALPN // callback (see |SSL_CTX_set_alpn_select_cb|),
      in which case only the selected // protocol needs to be configured. // // ALPS
      can be independently configured from 0-RTT, however changes in protocol // settings
      will fallback to 1-RTT to negotiate the new value, so it is // recommended for
      |settings| to be relatively stable. OPENSSL_EXPORT int SSL_add_application_settings(SSL
      *ssl, const uint8_t *proto, size_t proto_len, const uint8_t *settings, size_t
      settings_len); // SSL_get0_peer_application_settings sets |*out_data| and |*out_len|
      to a // buffer containing the peer's ALPS value, or the empty string if ALPS
      was not // negotiated. Note an empty string could also indicate the peer sent
      an empty // settings value. Use |SSL_has_application_settings| to check if ALPS
      was // negotiated. The output buffer is owned by |ssl| and is valid until the
      next // time |ssl| is modified. OPENSSL_EXPORT void SSL_get0_peer_application_settings(const
      SSL *ssl, const uint8_t **out_data, size_t *out_len); // SSL_has_application_settings
      returns one if ALPS was negotiated on this // connection and zero otherwise.
      OPENSSL_EXPORT int SSL_has_application_settings(const SSL *ssl); // SSL_set_alps_use_new_codepoint
      configures whether to use the new ALPS // codepoint. By default, the old codepoint
      is used. OPENSSL_EXPORT void SSL_set_alps_use_new_codepoint(SSL *ssl, int use_new);
      // Certificate compression. // // Certificates in TLS 1.3 can be compressed
      (RFC 8879). BoringSSL supports this // as both a client and a server, but does
      not link against any specific // compression libraries in order to keep dependencies
      to a minimum. Instead, // hooks for compression and decompression can be installed
      in an |SSL_CTX| to // enable support. // ssl_cert_compression_func_t is a pointer
      to a function that performs // compression. It must write the compressed representation
      of |in| to |out|, // returning one on success and zero on error. The results
      of compressing // certificates are not cached internally. Implementations may
      wish to implement // their own cache if they expect it to be useful given the
      certificates that // they serve. typedef int (*ssl_cert_compression_func_t)(SSL
      *ssl, CBB *out, const uint8_t *in, size_t in_len); // ssl_cert_decompression_func_t
      is a pointer to a function that performs // decompression. The compressed data
      from the peer is passed as |in| and the // decompressed result must be exactly
      |uncompressed_len| bytes long. It returns // one on success, in which case |*out|
      must be set to the result of // decompressing |in|, or zero on error. Setting
      |*out| transfers ownership, // i.e. |CRYPTO_BUFFER_free| will be called on |*out|
      at some point in the // future. The results of decompressions are not cached
      internally. // Implementations may wish to implement their own cache if they
      expect it to be // useful. typedef int (*ssl_cert_decompression_func_t)(SSL
      *ssl, CRYPTO_BUFFER **out, size_t uncompressed_len, const uint8_t *in, size_t
      in_len); // SSL_CTX_add_cert_compression_alg registers a certificate compression
      // algorithm on |ctx| with ID |alg_id|. (The value of |alg_id| should be an
      IANA // assigned value and each can only be registered once.) // // One of the
      function pointers may be NULL to avoid having to implement both // sides of
      a compression algorithm if you're only going to use it in one // direction.
      In this case, the unimplemented direction acts like it was never // configured.
      // // For a server, algorithms are registered in preference order with the most
      // preferable first. It returns one on success or zero on error. OPENSSL_EXPORT
      int SSL_CTX_add_cert_compression_alg( SSL_CTX *ctx, uint16_t alg_id, ssl_cert_compression_func_t
      compress, ssl_cert_decompression_func_t decompress); // Next protocol negotiation.
      // // The NPN extension (draft-agl-tls-nextprotoneg-03) is the predecessor to
      ALPN // and deprecated in favor of it. // SSL_CTX_set_next_protos_advertised_cb
      sets a callback that is called when a // TLS server needs a list of supported
      protocols for Next Protocol Negotiation. // // If the callback wishes to advertise
      NPN to the client, it should return // |SSL_TLSEXT_ERR_OK| and then set |*out|
      and |*out_len| to describe to a // buffer containing a (possibly empty) list
      of supported protocols in wire // format. That is, each protocol is prefixed
      with a 1-byte length, then // concatenated. From there, the client will select
      a protocol, possibly one not // on the server's list. The caller can use |SSL_get0_next_proto_negotiated|
      // after the handshake completes to query the final protocol. // // The returned
      buffer must remain valid and unmodified for at least the // duration of the
      |SSL| operation (e.g. |SSL_do_handshake|) that triggered the // callback. //
      // If the caller wishes not to advertise NPN, it should return // |SSL_TLSEXT_ERR_NOACK|.
      No NPN extension will be included in the ServerHello, // and the TLS server
      will behave as if it does not implement NPN. OPENSSL_EXPORT void SSL_CTX_set_next_protos_advertised_cb(
      SSL_CTX *ctx, int (*cb)(SSL *ssl, const uint8_t **out, unsigned *out_len, void
      *arg), void *arg); // SSL_CTX_set_next_proto_select_cb sets a callback that
      is called when a client // needs to select a protocol from the server's provided
      list, passed in wire // format in |in_len| bytes from |in|. The callback can
      assume that |in| is // syntactically valid. |SSL_select_next_proto| is an optional
      utility function // which may be useful in implementing this callback. // //
      On success, the callback should return |SSL_TLSEXT_ERR_OK| and set |*out| and
      // |*out_len| to describe a buffer containing the selected protocol, or an //
      empty buffer to select no protocol. The returned buffer may point within //
      |in|, or it may point to some other buffer that remains valid and unmodified
      // for at least the duration of the |SSL| operation (e.g. |SSL_do_handshake|)
      // that triggered the callback. // // Returning any other value indicates a
      fatal error and will terminate the TLS // connection. To proceed without selecting
      a protocol, the callback must return // |SSL_TLSEXT_ERR_OK| and set |*out| and
      |*out_len| to an empty buffer. (E.g. // NULL and zero, respectively.) // //
      Configuring this callback enables NPN on a client. Although the callback can
      // then decline to negotiate a protocol, merely configuring the callback causes
      // the client to offer NPN in the ClientHello. Callers thus should not configure
      // this callback in TLS client contexts that are not intended to use NPN. OPENSSL_EXPORT
      void SSL_CTX_set_next_proto_select_cb( SSL_CTX *ctx, int (*cb)(SSL *ssl, uint8_t
      **out, uint8_t *out_len, const uint8_t *in, unsigned in_len, void *arg), void
      *arg); // SSL_get0_next_proto_negotiated sets |*out_data| and |*out_len| to
      point to // the client's requested protocol for this connection. If the client
      didn't // request any protocol, then |*out_len| is set to zero. // // Note that
      the client can request any protocol it chooses. The value returned // from this
      function need not be a member of the list of supported protocols // provided
      by the server. OPENSSL_EXPORT void SSL_get0_next_proto_negotiated(const SSL
      *ssl, const uint8_t **out_data, unsigned *out_len); // SSL_select_next_proto
      implements the standard protocol selection for either // ALPN servers or NPN
      clients. It is expected that this function is called from // the callback set
      by |SSL_CTX_set_alpn_select_cb| or // |SSL_CTX_set_next_proto_select_cb|. //
      // |peer| and |supported| contain the peer and locally-configured protocols,
      // respectively. This function finds the first protocol in |peer| which is also
      // in |supported|. If one was found, it sets |*out| and |*out_len| to point
      to // it and returns |OPENSSL_NPN_NEGOTIATED|. Otherwise, it returns // |OPENSSL_NPN_NO_OVERLAP|
      and sets |*out| and |*out_len| to the first // supported protocol. // // In
      ALPN, the server should only select protocols among those that the client //
      offered. Thus, if this function returns |OPENSSL_NPN_NO_OVERLAP|, the caller
      // should ignore |*out| and return |SSL_TLSEXT_ERR_ALERT_FATAL| from // |SSL_CTX_set_alpn_select_cb|'s
      callback to indicate there was no match. // // In NPN, the client may either
      select one of the server's protocols, or an // \"opportunistic\" protocol as
      described in Section 6 of // draft-agl-tls-nextprotoneg-03. When this function
      returns // |OPENSSL_NPN_NO_OVERLAP|, |*out| implicitly selects the first supported
      // protocol for use as the opportunistic protocol. The caller may use it, //
      ignore it and select a different opportunistic protocol, or ignore it and //
      select no protocol (empty string). // // |peer| and |supported| must be vectors
      of 8-bit, length-prefixed byte // strings. The length byte itself is not included
      in the length. A byte string // of length 0 is invalid. No byte string may be
      truncated. |supported| must be // non-empty; a caller that supports no ALPN/NPN
      protocols should skip // negotiating the extension, rather than calling this
      function. If any of these // preconditions do not hold, this function will return
      |OPENSSL_NPN_NO_OVERLAP| // and set |*out| and |*out_len| to an empty buffer
      for robustness, but callers // are not recommended to rely on this. An empty
      buffer is not a valid output // for |SSL_CTX_set_alpn_select_cb|'s callback.
      // // WARNING: |*out| and |*out_len| may alias either |peer| or |supported|
      and may // not be used after one of those buffers is modified or released. Additionally,
      // this function is not const-correct for compatibility reasons. Although |*out|
      // is a non-const pointer, callers may not modify the buffer though |*out|.
      OPENSSL_EXPORT int SSL_select_next_proto(uint8_t **out, uint8_t *out_len, const
      uint8_t *peer, unsigned peer_len, const uint8_t *supported, unsigned supported_len);
      #define OPENSSL_NPN_UNSUPPORTED 0#define OPENSSL_NPN_NEGOTIATED 1#define OPENSSL_NPN_NO_OVERLAP
      2// Channel ID.//// See draft-balfanz-tls-channelid-01. This is an old, experimental
      mechanism// and should not be used in new code.// SSL_CTX_set_tls_channel_id_enabled
      configures whether connections associated// with |ctx| should enable Channel
      ID as a server.OPENSSL_EXPORT void SSL_CTX_set_tls_channel_id_enabled(SSL_CTX
      *ctx, int enabled); // SSL_set_tls_channel_id_enabled configures whether |ssl|
      should enable Channel // ID as a server. OPENSSL_EXPORT void SSL_set_tls_channel_id_enabled(SSL
      *ssl, int enabled); // SSL_CTX_set1_tls_channel_id configures a TLS client to
      send a TLS Channel ID // to compatible servers. |private_key| must be a P-256
      EC key. It returns one // on success and zero on error. OPENSSL_EXPORT int SSL_CTX_set1_tls_channel_id(SSL_CTX
      *ctx, EVP_PKEY *private_key); // SSL_set1_tls_channel_id configures a TLS client
      to send a TLS Channel ID to // compatible servers. |private_key| must be a P-256
      EC key. It returns one on // success and zero on error. OPENSSL_EXPORT int SSL_set1_tls_channel_id(SSL
      *ssl, EVP_PKEY *private_key); // SSL_get_tls_channel_id gets the client's TLS
      Channel ID from a server |SSL| // and copies up to the first |max_out| bytes
      into |out|. The Channel ID // consists of the client's P-256 public key as an
      (x,y) pair where each is a // 32-byte, big-endian field element. It returns
      0 if the client didn't offer a // Channel ID and the length of the complete
      Channel ID otherwise. This function // always returns zero if |ssl| is a client.
      OPENSSL_EXPORT size_t SSL_get_tls_channel_id(SSL *ssl, uint8_t *out, size_t
      max_out); // DTLS-SRTP. // // See RFC 5764. // srtp_protection_profile_st (aka
      |SRTP_PROTECTION_PROFILE|) is an SRTP // profile for use with the use_srtp extension.
      struct srtp_protection_profile_st { const char *name; unsigned long id;} /*
      SRTP_PROTECTION_PROFILE */;DEFINE_CONST_STACK_OF(SRTP_PROTECTION_PROFILE)//
      SRTP_* define constants for SRTP profiles.#define SRTP_AES128_CM_SHA1_80 0x0001#define
      SRTP_AES128_CM_SHA1_32 0x0002#define SRTP_AES128_F8_SHA1_80 0x0003#define SRTP_AES128_F8_SHA1_32
      0x0004#define SRTP_NULL_SHA1_80 0x0005#define SRTP_NULL_SHA1_32 0x0006#define
      SRTP_AEAD_AES_128_GCM 0x0007#define SRTP_AEAD_AES_256_GCM 0x0008// SSL_CTX_set_srtp_profiles
      enables SRTP for all SSL objects created from// |ctx|. |profile| contains a
      colon-separated list of profile names. It returns// one on success and zero
      on failure.OPENSSL_EXPORT int SSL_CTX_set_srtp_profiles(SSL_CTX *ctx, const
      char *profiles);// SSL_set_srtp_profiles enables SRTP for |ssl|. |profile| contains
      a// colon-separated list of profile names. It returns one on success and zero
      on// failure.OPENSSL_EXPORT int SSL_set_srtp_profiles(SSL *ssl, const char *profiles);
      // SSL_get_srtp_profiles returns the SRTP profiles supported by |ssl|. OPENSSL_EXPORT
      const STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles( const SSL *ssl);
      // SSL_get_selected_srtp_profile returns the selected SRTP profile, or NULL
      if // SRTP was not negotiated. OPENSSL_EXPORT const SRTP_PROTECTION_PROFILE
      *SSL_get_selected_srtp_profile( SSL *ssl); // Pre-shared keys. // // Connections
      may be configured with PSK (Pre-Shared Key) cipher suites. These // authenticate
      using out-of-band pre-shared keys rather than certificates. See // RFC 4279.
      // // This implementation uses NUL-terminated C strings for identities and identity
      // hints, so values with a NUL character are not supported. (RFC 4279 does not
      // specify the format of an identity.) // PSK_MAX_IDENTITY_LEN is the maximum
      supported length of a PSK identity, // excluding the NUL terminator. #define
      PSK_MAX_IDENTITY_LEN 128// PSK_MAX_PSK_LEN is the maximum supported length of
      a pre-shared key.#define PSK_MAX_PSK_LEN 256// SSL_CTX_set_psk_client_callback
      sets the callback to be called when PSK is// negotiated on the client. This
      callback must be set to enable PSK cipher// suites on the client.//// The callback
      is passed the identity hint in |hint| or NULL if none was// provided. It should
      select a PSK identity and write the identity and the// corresponding PSK to
      |identity| and |psk|, respectively. The identity is// written as a NUL-terminated
      C string of length (excluding the NUL terminator)// at most |max_identity_len|.
      The PSK's length must be at most |max_psk_len|.// The callback returns the length
      of the PSK or 0 if no suitable identity was// found.OPENSSL_EXPORT void SSL_CTX_set_psk_client_callback(
      SSL_CTX *ctx, unsigned (*cb)(SSL *ssl, const char *hint, char *identity, unsigned
      max_identity_len, uint8_t *psk, unsigned max_psk_len)); // SSL_set_psk_client_callback
      sets the callback to be called when PSK is // negotiated on the client. This
      callback must be set to enable PSK cipher // suites on the client. See also
      |SSL_CTX_set_psk_client_callback|. OPENSSL_EXPORT void SSL_set_psk_client_callback(
      SSL *ssl, unsigned (*cb)(SSL *ssl, const char *hint, char *identity, unsigned
      max_identity_len, uint8_t *psk, unsigned max_psk_len)); // SSL_CTX_set_psk_server_callback
      sets the callback to be called when PSK is // negotiated on the server. This
      callback must be set to enable PSK cipher // suites on the server. // // The
      callback is passed the identity in |identity|. It should write a PSK of // length
      at most |max_psk_len| to |psk| and return the number of bytes written // or
      zero if the PSK identity is unknown. OPENSSL_EXPORT void SSL_CTX_set_psk_server_callback(
      SSL_CTX *ctx, unsigned (*cb)(SSL *ssl, const char *identity, uint8_t *psk, unsigned
      max_psk_len)); // SSL_set_psk_server_callback sets the callback to be called
      when PSK is // negotiated on the server. This callback must be set to enable
      PSK cipher // suites on the server. See also |SSL_CTX_set_psk_server_callback|.
      OPENSSL_EXPORT void SSL_set_psk_server_callback( SSL *ssl, unsigned (*cb)(SSL
      *ssl, const char *identity, uint8_t *psk, unsigned max_psk_len)); // SSL_CTX_use_psk_identity_hint
      configures server connections to advertise an // identity hint of |identity_hint|.
      It returns one on success and zero on // error. OPENSSL_EXPORT int SSL_CTX_use_psk_identity_hint(SSL_CTX
      *ctx, const char *identity_hint); // SSL_use_psk_identity_hint configures server
      connections to advertise an // identity hint of |identity_hint|. It returns
      one on success and zero on // error. OPENSSL_EXPORT int SSL_use_psk_identity_hint(SSL
      *ssl, const char *identity_hint); // SSL_get_psk_identity_hint returns the PSK
      identity hint advertised for |ssl| // or NULL if there is none. OPENSSL_EXPORT
      const char *SSL_get_psk_identity_hint(const SSL *ssl); // SSL_get_psk_identity,
      after the handshake completes, returns the PSK identity // that was negotiated
      by |ssl| or NULL if PSK was not used. OPENSSL_EXPORT const char *SSL_get_psk_identity(const
      SSL *ssl); // Delegated credentials. // // Delegated credentials (RFC 9345)
      allow a TLS 1.3 endpoint to use its // certificate to issue new credentials
      for authentication. Once issued, // credentials can't be revoked. In order to
      mitigate the damage in case the // credential secret key is compromised, the
      credential is only valid for a // short time (days, hours, or even minutes).
      // // Currently only the authenticating side, as a server, is implemented. To
      // authenticate with delegated credentials, construct an |SSL_CREDENTIAL| with
      // |SSL_CREDENTIAL_new_delegated| and add it to the credential list. See also
      // |SSL_CTX_add1_credential|. Callers may configure a mix of delegated // credentials
      and X.509 credentials on the same |SSL| or |SSL_CTX| to support a // range of
      clients. // SSL_CREDENTIAL_new_delegated returns a new, empty delegated credential,
      or // NULL on error. Callers should release the result with |SSL_CREDENTIAL_free|
      // when done. // // Callers should configure a delegated credential, certificate
      chain and // private key on the credential, along with other properties, then
      add it with // |SSL_CTX_add1_credential|. OPENSSL_EXPORT SSL_CREDENTIAL *SSL_CREDENTIAL_new_delegated(void);
      // SSL_CREDENTIAL_set1_delegated_credential sets |cred|'s delegated credentials
      // structure to |dc|. It returns one on success and zero on error, including
      if // |dc| is malformed. This should be a DelegatedCredential structure, signed
      by // the end-entity certificate, as described in RFC 9345. OPENSSL_EXPORT int
      SSL_CREDENTIAL_set1_delegated_credential( SSL_CREDENTIAL *cred, CRYPTO_BUFFER
      *dc); // Password Authenticated Key Exchange (PAKE). // // Password Authenticated
      Key Exchange protocols allow client and server to // mutually authenticate one
      another using knowledge of a password or other // low-entropy secret. While
      the TLS 1.3 pre-shared key (PSK) mechanism can // authenticate a high-entropy
      secret, it cannot be used with low-entropy // secrets as the PSK binder values
      can be used to mount a dictionary attack on // a low-entropy PSK. Using TLS
      1.3 with a PAKE limits an attacker to confirming // one password guess per handshake
      attempt. // // WARNING: The PAKE mode in TLS is not a general-purpose authentication
      scheme. // As the underlying secret is still low-entropy, callers must limit
      brute force // attacks across multiple connections, especially in multi-connection
      protocols // such as HTTP. The |error_limit| and |rate_limit| parameters in
      the functions // below may be used to implement this, provided the same |SSL_CREDENTIAL|
      // object is used across connections. Applications using multiple connections
      // should use the PAKE credential only once to authenticate a high-entropy //
      secret, e.g. exporting a PSK from |SSL_export_keying_material|, and use the
      // high-entropy secret for subsequent connections. // // TODO(crbug.com/369963041):
      Implement RFC 9258 so one can actually do that. // // WARNING: PAKE support
      in TLS is still experimental and may change as the // standard evolves. See
      // https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html
      // // Currently, only the SPAKE2PLUS_V1 named PAKE algorithm is implemented;
      see // https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html#section-8.1.
      // SSL_PAKE_SPAKE2PLUSV1 is the codepoint for SPAKE2PLUS_V1. See // https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html#name-named-pake-registry.
      #define SSL_PAKE_SPAKE2PLUSV1 0x7d96// SSL_spake2plusv1_register computes the
      values that the client (w0,// w1) and server (w0, registration_record) require
      to run SPAKE2+. These values// can be used when calling |SSL_CREDENTIAL_new_spake2plusv1_client|
      and// |SSL_CREDENTIAL_new_spake2plusv1_server|. The client and server identities//
      must match the values passed to those functions.//// Returns one on success
      and zero on error.OPENSSL_EXPORT int SSL_spake2plusv1_register( uint8_t out_w0[32],
      uint8_t out_w1[32], uint8_t out_registration_record[65], const uint8_t *password,
      size_t password_len, const uint8_t *client_identity, size_t client_identity_len,
      const uint8_t *server_identity, size_t server_identity_len); // SSL_CREDENTIAL_new_spake2plusv1_client
      creates a new |SSL_CREDENTIAL| that // authenticates using SPAKE2+. It is to
      be used with a TLS client. // // The |context|, |client_identity|, and |server_identity|
      fields serve to // identity the SPAKE2+ settings and both sides of a connection
      must agree on // these values. If |context| is |NULL|, a default value will
      be used. // // |error_limit| is the number of failed handshakes allowed on the
      credential. // After the limit is reached, using the credential will fail. Ideally
      this // value is set to 1. Setting it to a higher value allows an attacker to
      have // that many attempts at guessing the password using this |SSL_CREDENTIAL|.
      // (Assuming that multiple TLS connections are allowed.) // // |w0| and |w1|
      come from calling |SSL_spake2plusv1_register|. // // Unlike most |SSL_CREDENTIAL|s,
      PAKE client credentials must be the only // credential configured on the connection.
      BoringSSL does not currently support // configuring multiple PAKE credentials
      as a client, or configuring a mix of // PAKE and non-PAKE credentials. Once
      a PAKE credential is configured, the // connection will require the server to
      authenticate with the same secret, so a // successful connection then implies
      that the server supported the PAKE and // knew the password. OPENSSL_EXPORT
      SSL_CREDENTIAL *SSL_CREDENTIAL_new_spake2plusv1_client( const uint8_t *context,
      size_t context_len, const uint8_t *client_identity, size_t client_identity_len,
      const uint8_t *server_identity, size_t server_identity_len, uint32_t error_limit,
      const uint8_t *w0, size_t w0_len, const uint8_t *w1, size_t w1_len); // SSL_CREDENTIAL_new_spake2plusv1_server
      creates a new |SSL_CREDENTIAL| that // authenticates using SPAKE2+. It is to
      be used with a TLS server. // // The |context|, |client_identity|, and |server_identity|
      fields serve to // identity the SPAKE2+ settings and both sides of a connection
      must agree on // these values. If |context| is |NULL|, a default value will
      be used. // // |rate_limit| is the number of failed or unfinished handshakes
      allowed on the // credential. After the limit is reached, using the credential
      will fail. // Ideally this value is set to 1. Setting it to a higher value allows
      an // attacker to have that many attempts at guessing the password using this
      // |SSL_CREDENTIAL|. (Assuming that multiple TLS connections are allowed.) //
      // WARNING: |rate_limit| differs from the client's |error_limit| parameter.
      // Server PAKE credentials must temporarily deduct incomplete handshakes from
      // the limit, until the peer completes the handshake correctly. Thus // applications
      that use multiple connections in parallel may need a higher // limit, and thus
      higher attacker exposure, to avoid failures. Such // applications should instead
      use one PAKE-based connection to established a // high-entropy secret (e.g.
      with |SSL_export_keying_material|) instead of // repeating the PAKE exchange
      for each connection. // // |w0| and |registration_record| come from calling
      |SSL_spake2plusv1_register|, // which may be computed externally so that the
      server does not know the // password, or a password-equivalent secret. // //
      A server wishing to support a PAKE should install one of these credentials.
      // It is also possible to install certificate-based credentials, in which case
      // both PAKE and non-PAKE clients can be supported. However, if only a PAKE
      // credential is installed then the server knows that any successfully-connected
      // clients also knows the password. Otherwise, the server must be careful to
      // inspect the credential used for a connection before assuming that. OPENSSL_EXPORT
      SSL_CREDENTIAL *SSL_CREDENTIAL_new_spake2plusv1_server( const uint8_t *context,
      size_t context_len, const uint8_t *client_identity, size_t client_identity_len,
      const uint8_t *server_identity, size_t server_identity_len, uint32_t rate_limit,
      const uint8_t *w0, size_t w0_len, const uint8_t *registration_record, size_t
      registration_record_len); // QUIC integration. // // QUIC acts as an underlying
      transport for the TLS 1.3 handshake. The following // functions allow a QUIC
      implementation to serve as the underlying transport as // described in RFC 9001.
      // // When configured for QUIC, |SSL_do_handshake| will drive the handshake
      as // before, but it will not use the configured |BIO|. It will call functions
      on // |SSL_QUIC_METHOD| to configure secrets and send data. If data is needed
      from // the peer, it will return |SSL_ERROR_WANT_READ|. As the caller receives
      data // it can decrypt, it calls |SSL_provide_quic_data|. Subsequent // |SSL_do_handshake|
      calls will then consume that data and progress the // handshake. After the handshake
      is complete, the caller should continue to // call |SSL_provide_quic_data| for
      any post-handshake data, followed by // |SSL_process_quic_post_handshake| to
      process it. It is an error to call // |SSL_read| and |SSL_write| in QUIC. //
      // 0-RTT behaves similarly to |TLS_method|'s usual behavior. |SSL_do_handshake|
      // returns early as soon as the client (respectively, server) is allowed to
      send // 0-RTT (respectively, half-RTT) data. The caller should then call //
      |SSL_do_handshake| again to consume the remaining handshake messages and //
      confirm the handshake. As a client, |SSL_ERROR_EARLY_DATA_REJECTED| and // |SSL_reset_early_data_reject|
      behave as usual. // // See https://www.rfc-editor.org/rfc/rfc9001.html#section-4.1
      for more details. // // To avoid DoS attacks, the QUIC implementation must limit
      the amount of data // being queued up. The implementation can call // |SSL_quic_max_handshake_flight_len|
      to get the maximum buffer length at each // encryption level. // // QUIC implementations
      must additionally configure transport parameters with // |SSL_set_quic_transport_params|.
      |SSL_get_peer_quic_transport_params| may be // used to query the value received
      from the peer. BoringSSL handles this // extension as an opaque byte string.
      The caller is responsible for serializing // and parsing them. See https://www.rfc-editor.org/rfc/rfc9000#section-7.4
      for // details. // // QUIC additionally imposes restrictions on 0-RTT. In particular,
      the QUIC // transport layer requires that if a server accepts 0-RTT data, then
      the // transport parameters sent on the resumed connection must not lower any
      limits // compared to the transport parameters that the server sent on the connection
      // where the ticket for 0-RTT was issued. In effect, the server must remember
      // the transport parameters with the ticket. Application protocols running on
      // QUIC may impose similar restrictions, for example HTTP/3's restrictions on
      // SETTINGS frames. // // BoringSSL implements this check by doing a byte-for-byte
      comparison of an // opaque context passed in by the server. This context must
      be the same on the // connection where the ticket was issued and the connection
      where that ticket // is used for 0-RTT. If there is a mismatch, or the context
      was not set, // BoringSSL will reject early data (but not reject the resumption
      attempt). // This context is set via |SSL_set_quic_early_data_context| and should
      cover // both transport parameters and any application state. // |SSL_set_quic_early_data_context|
      must be called on the server with a // non-empty context if the server is to
      support 0-RTT in QUIC. // // BoringSSL does not perform any client-side checks
      on the transport // parameters received from a server that also accepted early
      data. It is up to // the caller to verify that the received transport parameters
      do not lower any // limits, and to close the QUIC connection if that is not
      the case. The same // holds for any application protocol state remembered for
      0-RTT, e.g. HTTP/3 // SETTINGS. // ssl_encryption_level_t represents an encryption
      level in TLS 1.3. Values in // this enum match the first 4 epochs used in DTLS
      1.3 (section 6.1). enum ssl_encryption_level_t BORINGSSL_ENUM_INT { ssl_encryption_initial
      = 0, ssl_encryption_early_data = 1, ssl_encryption_handshake = 2, ssl_encryption_application
      = 3,}; // ssl_quic_method_st (aka |SSL_QUIC_METHOD|) describes custom QUIC hooks.
      struct ssl_quic_method_st { // set_read_secret configures the read secret and
      cipher suite for the given // encryption level. It returns one on success and
      zero to terminate the // handshake with an error. It will be called at most
      once per encryption // level. // // BoringSSL will not release read keys before
      QUIC may use them. Once a level // has been initialized, QUIC may begin processing
      data from it. Handshake // data should be passed to |SSL_provide_quic_data|
      and application data (if // |level| is |ssl_encryption_early_data| or |ssl_encryption_application|)
      may // be processed according to the rules of the QUIC protocol. // // QUIC
      ACKs packets at the same encryption level they were received at, // except that
      client |ssl_encryption_early_data| (0-RTT) packets trigger // server |ssl_encryption_application|
      (1-RTT) ACKs. BoringSSL will always // install ACK-writing keys with |set_write_secret|
      before the packet-reading // keys with |set_read_secret|. This ensures the caller
      can always ACK any // packet it decrypts. Note this means the server installs
      1-RTT write keys // before 0-RTT read keys. // // The converse is not true.
      An encryption level may be configured with write // secrets a roundtrip before
      the corresponding secrets for reading ACKs is // available. int (*set_read_secret)(SSL
      *ssl, enum ssl_encryption_level_t level, const SSL_CIPHER *cipher, const uint8_t
      *secret, size_t secret_len); // set_write_secret behaves like |set_read_secret|
      but configures the write // secret and cipher suite for the given encryption
      level. It will be called // at most once per encryption level. // // BoringSSL
      will not release write keys before QUIC may use them. If |level| // is |ssl_encryption_early_data|
      or |ssl_encryption_application|, QUIC may // begin sending application data
      at |level|. However, note that BoringSSL // configures server |ssl_encryption_application|
      write keys before the client // Finished. This allows QUIC to send half-RTT
      data, but the handshake is not // confirmed at this point and, if requesting
      client certificates, the client // is not yet authenticated. // // See |set_read_secret|
      for additional invariants between packets and their // ACKs. // // Note that,
      on 0-RTT reject, the |ssl_encryption_early_data| write secret // may use a different
      cipher suite from the other keys. int (*set_write_secret)(SSL *ssl, enum ssl_encryption_level_t
      level, const SSL_CIPHER *cipher, const uint8_t *secret, size_t secret_len);
      // add_handshake_data adds handshake data to the current flight at the given
      // encryption level. It returns one on success and zero on error. // // BoringSSL
      will pack data from a single encryption level together, but a // single handshake
      flight may include multiple encryption levels. Callers // should defer writing
      data to the network until |flush_flight| to better // pack QUIC packets into
      transport datagrams. // // If |level| is not |ssl_encryption_initial|, this
      function will not be // called before |level| is initialized with |set_write_secret|.
      int (*add_handshake_data)(SSL *ssl, enum ssl_encryption_level_t level, const
      uint8_t *data, size_t len); // flush_flight is called when the current flight
      is complete and should be // written to the transport. Note a flight may contain
      data at several // encryption levels. It returns one on success and zero on
      error. int (*flush_flight)(SSL *ssl); // send_alert sends a fatal alert at the
      specified encryption level. It // returns one on success and zero on error.
      // // If |level| is not |ssl_encryption_initial|, this function will not be
      // called before |level| is initialized with |set_write_secret|. int (*send_alert)(SSL
      *ssl, enum ssl_encryption_level_t level, uint8_t alert);}; // SSL_quic_max_handshake_flight_len
      returns returns the maximum number of bytes // that may be received at the given
      encryption level. This function should be // used to limit buffering in the
      QUIC implementation. // // See https://www.rfc-editor.org/rfc/rfc9000#section-7.5
      OPENSSL_EXPORT size_t SSL_quic_max_handshake_flight_len( const SSL *ssl, enum
      ssl_encryption_level_t level); // SSL_quic_read_level returns the current read
      encryption level. // // TODO(davidben): Is it still necessary to expose this
      function to callers? // QUICHE does not use it. OPENSSL_EXPORT enum ssl_encryption_level_t
      SSL_quic_read_level(const SSL *ssl); // SSL_quic_write_level returns the current
      write encryption level. // // TODO(davidben): Is it still necessary to expose
      this function to callers? // QUICHE does not use it. OPENSSL_EXPORT enum ssl_encryption_level_t
      SSL_quic_write_level(const SSL *ssl); // SSL_provide_quic_data provides data
      from QUIC at a particular encryption // level |level|. It returns one on success
      and zero on error. Note this // function will return zero if the handshake is
      not expecting data from |level| // at this time. The QUIC implementation should
      then close the connection with // an error. OPENSSL_EXPORT int SSL_provide_quic_data(SSL
      *ssl, enum ssl_encryption_level_t level, const uint8_t *data, size_t len); //
      SSL_process_quic_post_handshake processes any data that QUIC has provided //
      after the handshake has completed. This includes NewSessionTicket messages //
      sent by the server. It returns one on success and zero on error. OPENSSL_EXPORT
      int SSL_process_quic_post_handshake(SSL *ssl); // SSL_CTX_set_quic_method configures
      the QUIC hooks. This should only be // configured with a minimum version of
      TLS 1.3. |quic_method| must remain valid // for the lifetime of |ctx|. It returns
      one on success and zero on error. OPENSSL_EXPORT int SSL_CTX_set_quic_method(SSL_CTX
      *ctx, const SSL_QUIC_METHOD *quic_method); // SSL_set_quic_method configures
      the QUIC hooks. This should only be // configured with a minimum version of
      TLS 1.3. |quic_method| must remain valid // for the lifetime of |ssl|. It returns
      one on success and zero on error. OPENSSL_EXPORT int SSL_set_quic_method(SSL
      *ssl, const SSL_QUIC_METHOD *quic_method); // SSL_set_quic_transport_params
      configures |ssl| to send |params| (of length // |params_len|) in the quic_transport_parameters
      extension in either the // ClientHello or EncryptedExtensions handshake message.
      It is an error to set // transport parameters if |ssl| is not configured for
      QUIC. The buffer pointed // to by |params| only need be valid for the duration
      of the call to this // function. This function returns 1 on success and 0 on
      failure. OPENSSL_EXPORT int SSL_set_quic_transport_params(SSL *ssl, const uint8_t
      *params, size_t params_len); // SSL_get_peer_quic_transport_params provides
      the caller with the value of the // quic_transport_parameters extension sent
      by the peer. A pointer to the buffer // containing the TransportParameters will
      be put in |*out_params|, and its // length in |*params_len|. This buffer will
      be valid for the lifetime of the // |SSL|. If no params were received from the
      peer, |*out_params_len| will be 0. OPENSSL_EXPORT void SSL_get_peer_quic_transport_params(
      const SSL *ssl, const uint8_t **out_params, size_t *out_params_len); // SSL_set_quic_use_legacy_codepoint
      configures whether to use the legacy QUIC // extension codepoint 0xffa5 as opposed
      to the official value 57. Call with // |use_legacy| set to 1 to use 0xffa5 and
      call with 0 to use 57. By default, // the standard code point is used. OPENSSL_EXPORT
      void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy); // SSL_set_quic_early_data_context
      configures a context string in QUIC servers // for accepting early data. If
      a resumption connection offers early data, the // server will check if the value
      matches that of the connection which minted // the ticket. If not, resumption
      still succeeds but early data is rejected. // This should include all QUIC Transport
      Parameters except ones specified that // the client MUST NOT remember. This
      should also include any application // protocol-specific state. For HTTP/3,
      this should be the serialized server // SETTINGS frame and the QUIC Transport
      Parameters (except the stateless reset // token). // // This function may be
      called before |SSL_do_handshake| or during server // certificate selection.
      It returns 1 on success and 0 on failure. OPENSSL_EXPORT int SSL_set_quic_early_data_context(SSL
      *ssl, const uint8_t *context, size_t context_len); // Early data. // // WARNING:
      0-RTT support in BoringSSL is currently experimental and not fully // implemented.
      It may cause interoperability or security failures when used. // // Early data,
      or 0-RTT, is a feature in TLS 1.3 which allows clients to send // data on the
      first flight during a resumption handshake. This can save a // round-trip in
      some application protocols. // // WARNING: A 0-RTT handshake has different security
      properties from normal // handshake, so it is off by default unless opted in.
      In particular, early data // is replayable by a network attacker. Callers must
      account for this when // sending or processing data before the handshake is
      confirmed. See RFC 8446 // for more information. // // As a server, if early
      data is accepted, |SSL_do_handshake| will complete as // soon as the ClientHello
      is processed and server flight sent. |SSL_write| may // be used to send half-RTT
      data. |SSL_read| will consume early data and // transition to 1-RTT data as
      appropriate. Prior to the transition, // |SSL_in_init| will report the handshake
      is still in progress. Callers may use // it or |SSL_in_early_data| to defer
      or reject requests as needed. // // Early data as a client is more complex.
      If the offered session (see // |SSL_set_session|) is 0-RTT-capable, the handshake
      will return after sending // the ClientHello. The predicted peer certificates
      and ALPN protocol will be // available via the usual APIs. |SSL_write| will
      write early data, up to the // session's limit. Writes past this limit and |SSL_read|
      will complete the // handshake before continuing. Callers may also call |SSL_do_handshake|
      again // to complete the handshake sooner. // // If the server accepts early
      data, the handshake will succeed. |SSL_read| and // |SSL_write| will then act
      as in a 1-RTT handshake. The peer certificates and // ALPN protocol will be
      as predicted and need not be re-queried. // // If the server rejects early data,
      |SSL_do_handshake| (and thus |SSL_read| and // |SSL_write|) will then fail with
      |SSL_get_error| returning // |SSL_ERROR_EARLY_DATA_REJECTED|. The caller should
      treat this as a connection // error and most likely perform a high-level retry.
      Note the server may still // have processed the early data due to attacker replays.
      // // To then continue the handshake on the original connection, use // |SSL_reset_early_data_reject|.
      The connection will then behave as one which // had not yet completed the handshake.
      This allows a faster retry than making a // fresh connection. |SSL_do_handshake|
      will complete the full handshake, // possibly resulting in different peer certificates,
      ALPN protocol, and other // properties. The caller must disregard any values
      from before the reset and // query again. // // Finally, to implement the fallback
      described in RFC 8446 appendix D.3, retry // on a fresh connection without 0-RTT
      if the handshake fails with // |SSL_R_WRONG_VERSION_ON_EARLY_DATA|. // SSL_CTX_set_early_data_enabled
      sets whether early data is allowed to be used // with resumptions using |ctx|.
      OPENSSL_EXPORT void SSL_CTX_set_early_data_enabled(SSL_CTX *ctx, int enabled);
      // SSL_set_early_data_enabled sets whether early data is allowed to be used
      // with resumptions using |ssl|. See |SSL_CTX_set_early_data_enabled| for more
      // information. OPENSSL_EXPORT void SSL_set_early_data_enabled(SSL *ssl, int
      enabled); // SSL_in_early_data returns one if |ssl| has a pending handshake
      that has // progressed enough to send or receive early data. Clients may call
      |SSL_write| // to send early data, but |SSL_read| will complete the handshake
      before // accepting application data. Servers may call |SSL_read| to read early
      data // and |SSL_write| to send half-RTT data. OPENSSL_EXPORT int SSL_in_early_data(const
      SSL *ssl); // SSL_SESSION_early_data_capable returns whether early data would
      have been // attempted with |session| if enabled. OPENSSL_EXPORT int SSL_SESSION_early_data_capable(const
      SSL_SESSION *session); // SSL_SESSION_copy_without_early_data returns a copy
      of |session| with early // data disabled. If |session| already does not support
      early data, it returns // |session| with the reference count increased. The
      caller takes ownership of // the result and must release it with |SSL_SESSION_free|.
      // // This function may be used on the client to clear early data support from
      // existing sessions when the server rejects early data. In particular, // |SSL_R_WRONG_VERSION_ON_EARLY_DATA|
      requires a fresh connection to retry, and // the client would not want 0-RTT
      enabled for the next connection attempt. OPENSSL_EXPORT SSL_SESSION *SSL_SESSION_copy_without_early_data(
      SSL_SESSION *session); // SSL_early_data_accepted returns whether early data
      was accepted on the // handshake performed by |ssl|. OPENSSL_EXPORT int SSL_early_data_accepted(const
      SSL *ssl); // SSL_reset_early_data_reject resets |ssl| after an early data reject.
      All // 0-RTT state is discarded, including any pending |SSL_write| calls. The
      caller // should treat |ssl| as a logically fresh connection, usually by driving
      the // handshake to completion using |SSL_do_handshake|. // // It is an error
      to call this function on an |SSL| object that is not signaling // |SSL_ERROR_EARLY_DATA_REJECTED|.
      OPENSSL_EXPORT void SSL_reset_early_data_reject(SSL *ssl); // SSL_get_ticket_age_skew
      returns the difference, in seconds, between the // client-sent ticket age and
      the server-computed value in TLS 1.3 server // connections which resumed a session.
      OPENSSL_EXPORT int32_t SSL_get_ticket_age_skew(const SSL *ssl); // An ssl_early_data_reason_t
      describes why 0-RTT was accepted or rejected. // These values are persisted
      to logs. Entries should not be renumbered and // numeric values should never
      be reused. enum ssl_early_data_reason_t BORINGSSL_ENUM_INT { // The handshake
      has not progressed far enough for the 0-RTT status to be // known. ssl_early_data_unknown
      = 0, // 0-RTT is disabled for this connection. ssl_early_data_disabled = 1,
      // 0-RTT was accepted. ssl_early_data_accepted = 2, // The negotiated protocol
      version does not support 0-RTT. ssl_early_data_protocol_version = 3, // The
      peer declined to offer or accept 0-RTT for an unknown reason. ssl_early_data_peer_declined
      = 4, // The client did not offer a session. ssl_early_data_no_session_offered
      = 5, // The server declined to resume the session. ssl_early_data_session_not_resumed
      = 6, // The session does not support 0-RTT. ssl_early_data_unsupported_for_session
      = 7, // The server sent a HelloRetryRequest. ssl_early_data_hello_retry_request
      = 8, // The negotiated ALPN protocol did not match the session. ssl_early_data_alpn_mismatch
      = 9, // The connection negotiated Channel ID, which is incompatible with 0-RTT.
      ssl_early_data_channel_id = 10, // Value 11 is reserved. (It has historically
      |ssl_early_data_token_binding|.) // The client and server ticket age were too
      far apart. ssl_early_data_ticket_age_skew = 12, // QUIC parameters differ between
      this connection and the original. ssl_early_data_quic_parameter_mismatch = 13,
      // The application settings did not match the session. ssl_early_data_alps_mismatch
      = 14, // The value of the largest entry. ssl_early_data_reason_max_value = ssl_early_data_alps_mismatch,};
      // SSL_get_early_data_reason returns details why 0-RTT was accepted or rejected
      // on |ssl|. This is primarily useful on the server. OPENSSL_EXPORT enum ssl_early_data_reason_t
      SSL_get_early_data_reason( const SSL *ssl); // SSL_early_data_reason_string
      returns a string representation for |reason|, or // NULL if |reason| is unknown.
      This function may be used for logging. OPENSSL_EXPORT const char *SSL_early_data_reason_string(
      enum ssl_early_data_reason_t reason); // Encrypted ClientHello. // // ECH is
      a mechanism for encrypting the entire ClientHello message in TLS 1.3. // This
      can prevent observers from seeing cleartext information about the // connection,
      such as the server_name extension. // // By default, BoringSSL will treat the
      server name, session ticket, and client // certificate as secret, but most other
      parameters, such as the ALPN protocol // list will be treated as public and
      sent in the cleartext ClientHello. Other // APIs may be added for applications
      with different secrecy requirements. // // ECH support in BoringSSL is still
      experimental and under development. // // See https://tools.ietf.org/html/draft-ietf-tls-esni-13.
      // SSL_set_enable_ech_grease configures whether the client will send a GREASE
      // ECH extension when no supported ECHConfig is available. OPENSSL_EXPORT void
      SSL_set_enable_ech_grease(SSL *ssl, int enable); // SSL_set1_ech_config_list
      configures |ssl| to, as a client, offer ECH with the // specified configuration.
      |ech_config_list| should contain a serialized // ECHConfigList structure. It
      returns one on success and zero on error. // // This function returns an error
      if the input is malformed. If the input is // valid but none of the ECHConfigs
      implement supported parameters, it will // return success and proceed without
      ECH. // // If a supported ECHConfig is found, |ssl| will encrypt the true ClientHello
      // parameters. If the server cannot decrypt it, e.g. due to a key mismatch,
      ECH // has a recovery flow. |ssl| will handshake using the cleartext parameters,
      // including a public name in the ECHConfig. If using // |SSL_CTX_set_custom_verify|,
      callers should use |SSL_get0_ech_name_override| // to verify the certificate
      with the public name. If using the built-in // verifier, the |X509_STORE_CTX|
      will be configured automatically. // // If no other errors are found in this
      handshake, it will fail with // |SSL_R_ECH_REJECTED|. Since it didn't use the
      true parameters, the connection // cannot be used for application data. Instead,
      callers should handle this // error by calling |SSL_get0_ech_retry_configs|
      and retrying the connection // with updated ECH parameters. If the retry also
      fails with // |SSL_R_ECH_REJECTED|, the caller should report a connection failure.
      OPENSSL_EXPORT int SSL_set1_ech_config_list(SSL *ssl, const uint8_t *ech_config_list,
      size_t ech_config_list_len); // SSL_get0_ech_name_override, if |ssl| is a client
      and the server rejected ECH, // sets |*out_name| and |*out_name_len| to point
      to a buffer containing the ECH // public name. Otherwise, the buffer will be
      empty. // // When offering ECH as a client, this function should be called during
      the // certificate verification callback (see |SSL_CTX_set_custom_verify|).
      If // |*out_name_len| is non-zero, the caller should verify the certificate
      against // the result, interpreted as a DNS name, rather than the true server
      name. In // this case, the handshake will never succeed and is only used to
      authenticate // retry configs. See also |SSL_get0_ech_retry_configs|. OPENSSL_EXPORT
      void SSL_get0_ech_name_override(const SSL *ssl, const char **out_name, size_t
      *out_name_len); // SSL_get0_ech_retry_configs sets |*out_retry_configs| and
      // |*out_retry_configs_len| to a buffer containing a serialized ECHConfigList.
      // If the server did not provide an ECHConfigList, |*out_retry_configs_len|
      will // be zero. // // When handling an |SSL_R_ECH_REJECTED| error code as a
      client, callers should // use this function to recover from potential key mismatches.
      If the result is // non-empty, the caller should retry the connection, passing
      this buffer to // |SSL_set1_ech_config_list|. If the result is empty, the server
      has rolled // back ECH support, and the caller should retry without ECH. //
      // This function must only be called in response to an |SSL_R_ECH_REJECTED|
      // error code. Calling this function on |ssl|s that have not authenticated the
      // rejection handshake will assert in debug builds and otherwise return an //
      unparsable list. OPENSSL_EXPORT void SSL_get0_ech_retry_configs( const SSL *ssl,
      const uint8_t **out_retry_configs, size_t *out_retry_configs_len); // SSL_marshal_ech_config
      constructs a new serialized ECHConfig. On success, it // sets |*out| to a newly-allocated
      buffer containing the result and |*out_len| // to the size of the buffer. The
      caller must call |OPENSSL_free| on |*out| to // release the memory. On failure,
      it returns zero. // // The |config_id| field is a single byte identifier for
      the ECHConfig. Reusing // config IDs is allowed, but if multiple ECHConfigs
      with the same config ID are // active at a time, server load may increase. See
      // |SSL_ECH_KEYS_has_duplicate_config_id|. // // The public key and KEM algorithm
      are taken from |key|. |public_name| is the // DNS name used to authenticate
      the recovery flow. |max_name_len| should be the // length of the longest name
      in the ECHConfig's anonymity set and influences // client padding decisions.
      OPENSSL_EXPORT int SSL_marshal_ech_config(uint8_t **out, size_t *out_len, uint8_t
      config_id, const EVP_HPKE_KEY *key, const char *public_name, size_t max_name_len);
      // SSL_ECH_KEYS_new returns a newly-allocated |SSL_ECH_KEYS| or NULL on error.
      OPENSSL_EXPORT SSL_ECH_KEYS *SSL_ECH_KEYS_new(void); // SSL_ECH_KEYS_up_ref
      increments the reference count of |keys|. OPENSSL_EXPORT void SSL_ECH_KEYS_up_ref(SSL_ECH_KEYS
      *keys); // SSL_ECH_KEYS_free releases memory associated with |keys|. OPENSSL_EXPORT
      void SSL_ECH_KEYS_free(SSL_ECH_KEYS *keys); // SSL_ECH_KEYS_add decodes |ech_config|
      as an ECHConfig and appends it with // |key| to |keys|. If |is_retry_config|
      is non-zero, this config will be // returned to the client on configuration
      mismatch. It returns one on success // and zero on error. // // This function
      should be called successively to register each ECHConfig in // decreasing order
      of preference. This configuration must be completed before // setting |keys|
      on an |SSL_CTX| with |SSL_CTX_set1_ech_keys|. After that // point, |keys| is
      immutable; no more ECHConfig values may be added. // // See also |SSL_CTX_set1_ech_keys|.
      OPENSSL_EXPORT int SSL_ECH_KEYS_add(SSL_ECH_KEYS *keys, int is_retry_config,
      const uint8_t *ech_config, size_t ech_config_len, const EVP_HPKE_KEY *key);
      // SSL_ECH_KEYS_has_duplicate_config_id returns one if |keys| has duplicate
      // config IDs or zero otherwise. Duplicate config IDs still work, but may //
      increase server load due to trial decryption. OPENSSL_EXPORT int SSL_ECH_KEYS_has_duplicate_config_id(
      const SSL_ECH_KEYS *keys); // SSL_ECH_KEYS_marshal_retry_configs serializes
      the retry configs in |keys| as // an ECHConfigList. On success, it sets |*out|
      to a newly-allocated buffer // containing the result and |*out_len| to the size
      of the buffer. The caller // must call |OPENSSL_free| on |*out| to release the
      memory. On failure, it // returns zero. // // This output may be advertised
      to clients in DNS. OPENSSL_EXPORT int SSL_ECH_KEYS_marshal_retry_configs(const
      SSL_ECH_KEYS *keys, uint8_t **out, size_t *out_len); // SSL_CTX_set1_ech_keys
      configures |ctx| to use |keys| to decrypt encrypted // ClientHellos. It returns
      one on success, and zero on failure. If |keys| does // not contain any retry
      configs, this function will fail. Retry configs are // marked as such when they
      are added to |keys| with |SSL_ECH_KEYS_add|. // // Once |keys| has been passed
      to this function, it is immutable. Unlike most // |SSL_CTX| configuration functions,
      this function may be called even if |ctx| // already has associated connections
      on multiple threads. This may be used to // rotate keys in a long-lived server
      process. // // The configured ECHConfig values should also be advertised out-of-band
      via DNS // (see draft-ietf-dnsop-svcb-https). Before advertising an ECHConfig
      in DNS, // deployments should ensure all instances of the service are configured
      with // the ECHConfig and corresponding private key. // // Only the most recent
      fully-deployed ECHConfigs should be advertised in DNS. // |keys| may contain
      a newer set if those ECHConfigs are mid-deployment. It // should also contain
      older sets, until the DNS change has rolled out and the // old records have
      expired from caches. // // If there is a mismatch, |SSL| objects associated
      with |ctx| will complete the // handshake using the cleartext ClientHello and
      send updated ECHConfig values // to the client. The client will then retry to
      recover, but with a latency // penalty. This recovery flow depends on the public
      name in the ECHConfig. // Before advertising an ECHConfig in DNS, deployments
      must ensure all instances // of the service can present a valid certificate
      for the public name. // // BoringSSL negotiates ECH before certificate selection
      callbacks are called, // including |SSL_CTX_set_select_certificate_cb|. If ECH
      is negotiated, the // reported |SSL_CLIENT_HELLO| structure and |SSL_get_servername|
      function will // transparently reflect the inner ClientHello. Callers should
      select parameters // based on these values to correctly handle ECH as well as
      the recovery flow. OPENSSL_EXPORT int SSL_CTX_set1_ech_keys(SSL_CTX *ctx, SSL_ECH_KEYS
      *keys); // SSL_ech_accepted returns one if |ssl| negotiated ECH and zero otherwise.
      OPENSSL_EXPORT int SSL_ech_accepted(const SSL *ssl); // Alerts. // // TLS uses
      alerts to signal error conditions. Alerts have a type (warning or // fatal)
      and description. OpenSSL internally handles fatal alerts with // dedicated error
      codes (see |SSL_AD_REASON_OFFSET|). Except for close_notify, // warning alerts
      are silently ignored and may only be surfaced with // |SSL_CTX_set_info_callback|.
      // SSL_AD_REASON_OFFSET is the offset between error reasons and |SSL_AD_*| //
      values. Any error code under |ERR_LIB_SSL| with an error reason above this //
      value corresponds to an alert description. Consumers may add or subtract //
      |SSL_AD_REASON_OFFSET| to convert between them. // // make_errors.go reserves
      error codes above 1000 for manually-assigned errors. // This value must be kept
      in sync with reservedReasonCode in make_errors.h #define SSL_AD_REASON_OFFSET
      1000// SSL_AD_* are alert descriptions.#define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY#define
      SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE#define SSL_AD_BAD_RECORD_MAC
      SSL3_AD_BAD_RECORD_MAC#define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED#define
      SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW#define SSL_AD_DECOMPRESSION_FAILURE
      SSL3_AD_DECOMPRESSION_FAILURE#define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE#define
      SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE // Legacy SSL 3.0 value#define
      SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE#define SSL_AD_UNSUPPORTED_CERTIFICATE
      SSL3_AD_UNSUPPORTED_CERTIFICATE#define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED#define
      SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED#define SSL_AD_CERTIFICATE_UNKNOWN
      SSL3_AD_CERTIFICATE_UNKNOWN#define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER#define
      SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA#define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED#define
      SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR#define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR#define
      SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION#define SSL_AD_PROTOCOL_VERSION
      TLS1_AD_PROTOCOL_VERSION#define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY#define
      SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR#define SSL_AD_INAPPROPRIATE_FALLBACK
      SSL3_AD_INAPPROPRIATE_FALLBACK#define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED#define
      SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION#define SSL_AD_MISSING_EXTENSION
      TLS1_AD_MISSING_EXTENSION#define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION#define
      SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE#define SSL_AD_UNRECOGNIZED_NAME
      TLS1_AD_UNRECOGNIZED_NAME#define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE \\ TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE#define
      SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE#define
      SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY#define SSL_AD_CERTIFICATE_REQUIRED
      TLS1_AD_CERTIFICATE_REQUIRED#define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL#define
      SSL_AD_ECH_REQUIRED TLS1_AD_ECH_REQUIRED// SSL_alert_type_string_long returns
      a string description of |value| as an// alert type (warning or fatal). OPENSSL_EXPORT
      const char *SSL_alert_type_string_long(int value); // SSL_alert_desc_string_long
      returns a string description of |value| as an // alert description or \"unknown\"
      if unknown. OPENSSL_EXPORT const char *SSL_alert_desc_string_long(int value);
      // SSL_send_fatal_alert sends a fatal alert over |ssl| of the specified type,
      // which should be one of the |SSL_AD_*| constants. It returns one on success
      // and <= 0 on error. The caller should pass the return value into // |SSL_get_error|
      to determine how to proceed. Once this function has been // called, future calls
      to |SSL_write| will fail. // // If retrying a failed operation due to |SSL_ERROR_WANT_WRITE|,
      subsequent // calls must use the same |alert| parameter. OPENSSL_EXPORT int
      SSL_send_fatal_alert(SSL *ssl, uint8_t alert); // ex_data functions. // // See
      |ex_data.h| for details. OPENSSL_EXPORT int SSL_set_ex_data(SSL *ssl, int idx,
      void *data); OPENSSL_EXPORT void *SSL_get_ex_data(const SSL *ssl, int idx);
      OPENSSL_EXPORT int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_unused
      *unused, CRYPTO_EX_dup *dup_unused, CRYPTO_EX_free *free_func); OPENSSL_EXPORT
      int SSL_SESSION_set_ex_data(SSL_SESSION *session, int idx, void *data); OPENSSL_EXPORT
      void *SSL_SESSION_get_ex_data(const SSL_SESSION *session, int idx); OPENSSL_EXPORT
      int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_unused *unused,
      CRYPTO_EX_dup *dup_unused, CRYPTO_EX_free *free_func); OPENSSL_EXPORT int SSL_CTX_set_ex_data(SSL_CTX
      *ctx, int idx, void *data); OPENSSL_EXPORT void *SSL_CTX_get_ex_data(const SSL_CTX
      *ctx, int idx); OPENSSL_EXPORT int SSL_CTX_get_ex_new_index(long argl, void
      *argp, CRYPTO_EX_unused *unused, CRYPTO_EX_dup *dup_unused, CRYPTO_EX_free *free_func);
      OPENSSL_EXPORT int SSL_CREDENTIAL_set_ex_data(SSL_CREDENTIAL *cred, int idx,
      void *data); OPENSSL_EXPORT void *SSL_CREDENTIAL_get_ex_data(const SSL_CREDENTIAL
      *cred, int idx); OPENSSL_EXPORT int SSL_CREDENTIAL_get_ex_new_index(long argl,
      void *argp, CRYPTO_EX_unused *unused, CRYPTO_EX_dup *dup_unused, CRYPTO_EX_free
      *free_func); // Low-level record-layer state. // SSL_get_ivs sets |*out_iv_len|
      to the length of the IVs for the ciphers // underlying |ssl| and sets |*out_read_iv|
      and |*out_write_iv| to point to the // current IVs for the read and write directions.
      This is only meaningful for // connections with implicit IVs (i.e. CBC mode
      with TLS 1.0). // // It returns one on success or zero on error. OPENSSL_EXPORT
      int SSL_get_ivs(const SSL *ssl, const uint8_t **out_read_iv, const uint8_t **out_write_iv,
      size_t *out_iv_len); // SSL_get_key_block_len returns the length of |ssl|'s
      key block, for TLS 1.2 // and below. It is an error to call this function during
      a handshake, or if // |ssl| negotiated TLS 1.3. OPENSSL_EXPORT size_t SSL_get_key_block_len(const
      SSL *ssl); // SSL_generate_key_block generates |out_len| bytes of key material
      for |ssl|'s // current connection state, for TLS 1.2 and below. It is an error
      to call this // function during a handshake, or if |ssl| negotiated TLS 1.3.
      OPENSSL_EXPORT int SSL_generate_key_block(const SSL *ssl, uint8_t *out, size_t
      out_len); // SSL_get_read_sequence returns, in TLS, the expected sequence number
      of the // next incoming record in the current epoch. // // TODO(crbug.com/42290608):
      In DTLS, it returns the maximum sequence number // received in the current epoch
      (for some notion of \"current\" specific to // BoringSSL) and includes the epoch
      number in the two most significant bytes, // but this is deprecated. Use |SSL_get_dtls_read_sequence|
      instead. OPENSSL_EXPORT uint64_t SSL_get_read_sequence(const SSL *ssl); // SSL_get_write_sequence
      returns the sequence number of the next outgoing // record in the current epoch.
      // // TODO(crbug.com/42290608): In DTLS, it includes the epoch number in the
      two // most significant bytes, but this is deprecated. Use // |SSL_get_dtls_write_sequence|
      instead. OPENSSL_EXPORT uint64_t SSL_get_write_sequence(const SSL *ssl); //
      SSL_CTX_set_record_protocol_version returns whether |version| is zero. OPENSSL_EXPORT
      int SSL_CTX_set_record_protocol_version(SSL_CTX *ctx, int version); // SSL_is_dtls_handshake_idle
      returns one |ssl|'s handshake is idle and zero if // it is busy. The handshake
      is considered idle if all of the following are // true: // // - |ssl| is not
      mid handshake or post-handshake transaction. // - In DTLS 1.3, all sent handshake
      messages have been acknowledged. That is, // |ssl| does not have data to retransmit.
      // - All received handshake data has been processed. That is, |ssl| has no //
      buffered partial or out-of-order messages. // // If any condition is false,
      the handshake is considered busy. If this function // reports the handshake
      is busy, it is expected that the handshake will become // idle after short timers
      and a few roundtrips of successful communication. // However, this is not guaranteed
      if, e.g., the peer misbehaves or sends many // KeyUpdates. // // WARNING: In
      DTLS 1.3, this function may return one while multiple active read // epochs
      exist in |ssl|. // // WARNING: In DTLS 1.2 (or earlier), if |ssl| is the role
      that speaks last, it // retains its final flight for retransmission in case
      of loss. There is no // explicit protocol signal for when this completes, though
      after receiving // application data and/or a timeout it is likely that this
      is no longer needed. // BoringSSL does not currently evaluate either condition
      and leaves it it to // the caller to determine whether this is now unnecessary.
      This applies when // |ssl| is a server for full handshakes and when |ssl| is
      a client for full // handshakes. OPENSSL_EXPORT int SSL_is_dtls_handshake_idle(const
      SSL *ssl); // SSL_get_dtls_handshake_read_seq returns the 16-bit sequence number
      of the // next DTLS handshake message to be read, or 0x10000 if handshake message
      // 0xffff (the maximum) has already been read. OPENSSL_EXPORT uint32_t SSL_get_dtls_handshake_read_seq(const
      SSL *ssl); // SSL_get_dtls_handshake_write_seq returns the 16-bit sequence number
      of the // next DTLS handshake message to be written or 0x10000 if handshake
      message // 0xffff (the maximum) has already been written. OPENSSL_EXPORT uint32_t
      SSL_get_dtls_handshake_write_seq(const SSL *ssl); // SSL_get_dtls_read_epoch
      returns the highest available DTLS read epoch in // |ssl|. In DTLS 1.3, |ssl|
      may have earlier epochs also active, sometimes to // optionally improve handling
      of reordered packets and sometimes as an // important part of the protocol correctness
      in the face of packet loss. // // The failure conditions of |SSL_get_dtls_read_traffic_secret|
      and // |SSL_get_dtls_read_sequence| can be used to determine if past epochs
      are // active. OPENSSL_EXPORT uint16_t SSL_get_dtls_read_epoch(const SSL *ssl);
      // SSL_get_dtls_write_epoch returns the current DTLS write epoch. If the //
      handshake is idle (see |SSL_is_dtls_handshake_idle|), no other write epochs
      // will be active. OPENSSL_EXPORT uint16_t SSL_get_dtls_write_epoch(const SSL
      *ssl); // SSL_get_dtls_read_sequence returns one more than the sequence number
      of the // highest record received in |epoch|. If no records have been received
      in // |epoch|. If the epoch does not exist, it returns |UINT64_MAX|. // // It
      is safe to discard all sequence numbers less than the return value of this //
      function. The sequence numbers returned by this function do not include the
      // epoch number in the upper 16 bits. OPENSSL_EXPORT uint64_t SSL_get_dtls_read_sequence(const
      SSL *ssl, uint16_t epoch); // SSL_get_dtls_write_sequence returns the sequence
      number of the next record to // be sent in |epoch|. If the epoch does not exist,
      it returns |UINT64_MAX|. // // The sequence numbers returned by this function
      do not include the epoch // number in the upper 16 bits. OPENSSL_EXPORT uint64_t
      SSL_get_dtls_write_sequence(const SSL *ssl, uint16_t epoch); // SSL_get_dtls_read_traffic_secret
      looks up the traffic secret for read epoch // |epoch|. If the epoch exists and
      is an encrypted (not epoch zero) DTLS 1.3 // epoch, it sets |*out_data| and
      |*out_len| to a buffer containing the secrets // and returns one. Otherwise,
      it returns zero. The buffer is valid until the // next operation on |ssl|. OPENSSL_EXPORT
      int SSL_get_dtls_read_traffic_secret(const SSL *ssl, const uint8_t **out_data,
      size_t *out_len, uint16_t epoch); // SSL_get_dtls_write_traffic_secret looks
      up the traffic secret for write epoch // |epoch|. If the epoch exists and is
      an encrypted (not epoch zero) DTLS 1.3 // epoch, it sets |*out_data| and |*out_len|
      to a buffer containing the secrets // and returns one. Otherwise, it returns
      zero. The buffer is valid until the // next operation on |ssl|. OPENSSL_EXPORT
      int SSL_get_dtls_write_traffic_secret(const SSL *ssl, const uint8_t **out_data,
      size_t *out_len, uint16_t epoch); // Handshake hints. // // WARNING: Contact
      the BoringSSL team before using this API. While this // mechanism was designed
      to gracefully recover from version skew and // configuration mismatch, splitting
      a single TLS server into multiple services // is complex. // // Some server
      deployments make asynchronous RPC calls in both ClientHello // dispatch and
      private key operations. In TLS handshakes where the private key // operation
      occurs in the first round-trip, this results in two consecutive RPC // round-trips.
      Handshake hints allow the RPC service to predict a signature. // If correctly
      predicted, this can skip the second RPC call. // // First, the server installs
      a certificate selection callback (see // |SSL_CTX_set_select_certificate_cb|).
      When that is called, it performs the // RPC as before, but includes the ClientHello
      and a capabilities string from // |SSL_serialize_capabilities|. // // Next,
      the RPC service creates its own |SSL| object, applies the results of // certificate
      selection, calls |SSL_request_handshake_hints|, and runs the // handshake. If
      this successfully computes handshake hints (see // |SSL_serialize_handshake_hints|),
      the RPC server should send the hints // alongside any certificate selection
      results. // // Finally, the server calls |SSL_set_handshake_hints| and applies
      any // configuration from the RPC server. It then completes the handshake as
      before. // If the hints apply, BoringSSL will use the predicted signature and
      skip the // private key callbacks. Otherwise, BoringSSL will call private key
      callbacks // to generate a signature as before. // // Callers should synchronize
      configuration across the two services. // Configuration mismatches and some
      cases of version skew are not fatal, but // may result in the hints not applying.
      Additionally, some handshake flows use // the private key in later round-trips,
      such as TLS 1.3 HelloRetryRequest. In // those cases, BoringSSL will not predict
      a signature as there is no benefit. // Callers must allow for handshakes to
      complete without a predicted signature. // SSL_serialize_capabilities writes
      an opaque byte string to |out| describing // some of |ssl|'s capabilities. It
      returns one on success and zero on error. // // This string is used by BoringSSL
      internally to reduce the impact of version // skew. OPENSSL_EXPORT int SSL_serialize_capabilities(const
      SSL *ssl, CBB *out); // SSL_request_handshake_hints configures |ssl| to generate
      a handshake hint for // |client_hello|. It returns one on success and zero on
      error. |client_hello| // should contain a serialized ClientHello structure,
      from the |client_hello| // and |client_hello_len| fields of the |SSL_CLIENT_HELLO|
      structure. // |capabilities| should contain the output of |SSL_serialize_capabilities|.
      // // When configured, |ssl| will perform no I/O (so there is no need to configure
      // |BIO|s). For QUIC, the caller should still configure an |SSL_QUIC_METHOD|,
      // but the callbacks themselves will never be called and may be left NULL or
      // report failure. |SSL_provide_quic_data| also should not be called. // //
      If hint generation is successful, |SSL_do_handshake| will stop the handshake
      // early with |SSL_get_error| returning |SSL_ERROR_HANDSHAKE_HINTS_READY|. At
      // this point, the caller should run |SSL_serialize_handshake_hints| to extract
      // the resulting hints. // // Hint generation may fail if, e.g., |ssl| was unable
      to process the // ClientHello. Callers should then complete the certificate
      selection RPC and // continue the original handshake with no hint. It will likely
      fail, but this // reports the correct alert to the client and is more robust
      in case of // mismatch. OPENSSL_EXPORT int SSL_request_handshake_hints(SSL *ssl,
      const uint8_t *client_hello, size_t client_hello_len, const uint8_t *capabilities,
      size_t capabilities_len); // SSL_serialize_handshake_hints writes an opaque
      byte string to |out| // containing the handshake hints computed by |out|. It
      returns one on success // and zero on error. This function should only be called
      if // |SSL_request_handshake_hints| was configured and the handshake terminated
      // with |SSL_ERROR_HANDSHAKE_HINTS_READY|. // // This string may be passed to
      |SSL_set_handshake_hints| on another |SSL| to // avoid an extra signature call.
      OPENSSL_EXPORT int SSL_serialize_handshake_hints(const SSL *ssl, CBB *out);
      // SSL_set_handshake_hints configures |ssl| to use |hints| as handshake hints.
      // It returns one on success and zero on error. The handshake will then continue
      // as before, but apply predicted values from |hints| where applicable. // //
      Hints may contain connection and session secrets, so they must not leak and
      // must come from a source trusted to terminate the connection. However, they
      // will not change |ssl|'s configuration. The caller is responsible for // serializing
      and applying options from the RPC server as needed. This ensures // |ssl|'s
      behavior is self-consistent and consistent with the caller's local // decisions.
      OPENSSL_EXPORT int SSL_set_handshake_hints(SSL *ssl, const uint8_t *hints, size_t
      hints_len); // Obscure functions. // SSL_CTX_set_msg_callback installs |cb|
      as the message callback for |ctx|. // This callback will be called when sending
      or receiving low-level record // headers, complete handshake messages, ChangeCipherSpec,
      alerts, and DTLS // ACKs. |write_p| is one for outgoing messages and zero for
      incoming messages. // // For each record header, |cb| is called with |version|
      = 0 and |content_type| // = |SSL3_RT_HEADER|. The |len| bytes from |buf| contain
      the header. Note that // this does not include the record body. If the record
      is sealed, the length // in the header is the length of the ciphertext. // //
      For each handshake message, ChangeCipherSpec, alert, and DTLS ACK, |version|
      // is the protocol version and |content_type| is the corresponding record type.
      // The |len| bytes from |buf| contain the handshake message, one-byte // ChangeCipherSpec
      body, two-byte alert, and ACK respectively. // // In connections that enable
      ECH, |cb| is additionally called with // |content_type| = |SSL3_RT_CLIENT_HELLO_INNER|
      for each ClientHelloInner that // is encrypted or decrypted. The |len| bytes
      from |buf| contain the // ClientHelloInner, including the reconstructed outer
      extensions and handshake // header. // // For a V2ClientHello, |version| is
      |SSL2_VERSION|, |content_type| is zero, and // the |len| bytes from |buf| contain
      the V2ClientHello structure. OPENSSL_EXPORT void SSL_CTX_set_msg_callback( SSL_CTX
      *ctx, void (*cb)(int is_write, int version, int content_type, const void *buf,
      size_t len, SSL *ssl, void *arg)); // SSL_CTX_set_msg_callback_arg sets the
      |arg| parameter of the message // callback. OPENSSL_EXPORT void SSL_CTX_set_msg_callback_arg(SSL_CTX
      *ctx, void *arg); // SSL_set_msg_callback installs |cb| as the message callback
      of |ssl|. See // |SSL_CTX_set_msg_callback| for when this callback is called.
      OPENSSL_EXPORT void SSL_set_msg_callback( SSL *ssl, void (*cb)(int write_p,
      int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));
      // SSL_set_msg_callback_arg sets the |arg| parameter of the message callback.
      OPENSSL_EXPORT void SSL_set_msg_callback_arg(SSL *ssl, void *arg); // SSL_CTX_set_keylog_callback
      configures a callback to log key material. This // is intended for debugging
      use with tools like Wireshark. The |cb| function // should log |line| followed
      by a newline, synchronizing with any concurrent // access to the log. // //
      The format is described in // https://www.ietf.org/archive/id/draft-ietf-tls-keylogfile-01.html
      // // WARNING: The data in |line| allows an attacker to break security properties
      // of the TLS protocol, including confidentiality, integrity, and forward //
      secrecy. This impacts both the current connection, and, in TLS 1.2, future //
      connections that resume a session from it. Both direct access to the data and
      // side channel leaks from application code are possible attack vectors. This
      // callback is intended for debugging and should not be used in production //
      connections. OPENSSL_EXPORT void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, void
      (*cb)(const SSL *ssl, const char *line)); // SSL_CTX_get_keylog_callback returns
      the callback configured by // |SSL_CTX_set_keylog_callback|. OPENSSL_EXPORT
      void (*SSL_CTX_get_keylog_callback(const SSL_CTX *ctx))( const SSL *ssl, const
      char *line); // SSL_CTX_set_current_time_cb configures a callback to retrieve
      the current // time, which should be set in |*out_clock|. This can be used for
      testing // purposes; for example, a callback can be configured that returns
      a time // set explicitly by the test. The |ssl| pointer passed to |cb| is always
      null. OPENSSL_EXPORT void SSL_CTX_set_current_time_cb( SSL_CTX *ctx, void (*cb)(const
      SSL *ssl, struct timeval *out_clock)); // SSL_set_shed_handshake_config allows
      some of the configuration of |ssl| to be // freed after its handshake completes.
      Once configuration has been shed, APIs // that query it may fail. \"Configuration\"
      in this context means anything that // was set by the caller, as distinct from
      information derived from the // handshake. For example, |SSL_get_ciphers| queries
      how the |SSL| was // configured by the caller, and fails after configuration
      has been shed, // whereas |SSL_get_cipher| queries the result of the handshake,
      and is // unaffected by configuration shedding. // // If configuration shedding
      is enabled, it is an error to call |SSL_clear|. // // Note that configuration
      shedding as a client additionally depends on // renegotiation being disabled
      (see |SSL_set_renegotiate_mode|). If // renegotiation is possible, the configuration
      will be retained. If // configuration shedding is enabled and renegotiation
      later disabled after the // handshake, |SSL_set_renegotiate_mode| will shed
      configuration then. This may // be useful for clients which support renegotiation
      with some ALPN protocols, // such as HTTP/1.1, and not others, such as HTTP/2.
      OPENSSL_EXPORT void SSL_set_shed_handshake_config(SSL *ssl, int enable); enum
      ssl_renegotiate_mode_t BORINGSSL_ENUM_INT { ssl_renegotiate_never = 0, ssl_renegotiate_once,
      ssl_renegotiate_freely, ssl_renegotiate_ignore, ssl_renegotiate_explicit,};
      // SSL_set_renegotiate_mode configures how |ssl|, a client, reacts to // renegotiation
      attempts by a server. If |ssl| is a server, peer-initiated // renegotiations
      are *always* rejected and this function does nothing. // // WARNING: Renegotiation
      is error-prone, complicates TLS's security properties, // and increases its
      attack surface. When enabled, many common assumptions about // BoringSSL's behavior
      no longer hold, and the calling application must handle // more cases. Renegotiation
      is also incompatible with many application // protocols, e.g. section 9.2.1
      of RFC 7540. Many functions behave in ambiguous // or undefined ways during
      a renegotiation. // // The renegotiation mode defaults to |ssl_renegotiate_never|,
      but may be set // at any point in a connection's lifetime. Set it to |ssl_renegotiate_once|
      to // allow one renegotiation, |ssl_renegotiate_freely| to allow all // renegotiations
      or |ssl_renegotiate_ignore| to ignore HelloRequest messages. // Note that ignoring
      HelloRequest messages may cause the connection to stall // if the server waits
      for the renegotiation to complete. // // If set to |ssl_renegotiate_explicit|,
      |SSL_read| and |SSL_peek| calls which // encounter a HelloRequest will pause
      with |SSL_ERROR_WANT_RENEGOTIATE|. // |SSL_write| will continue to work while
      paused. The caller may call // |SSL_renegotiate| to begin the renegotiation
      at a later point. This mode may // be used if callers wish to eagerly call |SSL_peek|
      without triggering a // renegotiation. // // If configuration shedding is enabled
      (see |SSL_set_shed_handshake_config|), // configuration is released if, at any
      point after the handshake, renegotiation // is disabled. It is not possible
      to switch from disabling renegotiation to // enabling it on a given connection.
      Callers that condition renegotiation on, // e.g., ALPN must enable renegotiation
      before the handshake and conditionally // disable it afterwards. // // When
      enabled, renegotiation can cause properties of |ssl|, such as the cipher //
      suite, to change during the lifetime of the connection. More over, during a
      // renegotiation, not all properties of the new handshake are available or fully
      // established. In BoringSSL, most functions, such as |SSL_get_current_cipher|,
      // report information from the most recently completed handshake, not the //
      pending one. However, renegotiation may rerun handshake callbacks, such as //
      |SSL_CTX_set_cert_cb|. Such callbacks must ensure they are acting on the //
      desired versions of each property. // // BoringSSL does not reverify peer certificates
      on renegotiation and instead // requires they match between handshakes, so certificate
      verification callbacks // (see |SSL_CTX_set_custom_verify|) may assume |ssl|
      is in the initial // handshake and use |SSL_get0_peer_certificates|, etc. //
      // There is no support in BoringSSL for initiating renegotiations as a client
      // or server. OPENSSL_EXPORT void SSL_set_renegotiate_mode(SSL *ssl, enum ssl_renegotiate_mode_t
      mode); // SSL_renegotiate starts a deferred renegotiation on |ssl| if it was
      configured // with |ssl_renegotiate_explicit| and has a pending HelloRequest.
      It returns // one on success and zero on error. // // This function does not
      do perform any I/O. On success, a subsequent // |SSL_do_handshake| call will
      run the handshake. |SSL_write| and // |SSL_read| will also complete the handshake
      before sending or receiving // application data. OPENSSL_EXPORT int SSL_renegotiate(SSL
      *ssl); // SSL_renegotiate_pending returns one if |ssl| is in the middle of a
      // renegotiation. OPENSSL_EXPORT int SSL_renegotiate_pending(SSL *ssl); // SSL_total_renegotiations
      returns the total number of renegotiation handshakes // performed by |ssl|.
      This includes the pending renegotiation, if any. OPENSSL_EXPORT int SSL_total_renegotiations(const
      SSL *ssl); // SSL_MAX_CERT_LIST_DEFAULT is the default maximum length, in bytes,
      of a peer // certificate chain. #define SSL_MAX_CERT_LIST_DEFAULT (1024 * 100)//
      SSL_CTX_get_max_cert_list returns the maximum length, in bytes, of a peer//
      certificate chain accepted by |ctx|.OPENSSL_EXPORT size_t SSL_CTX_get_max_cert_list(const
      SSL_CTX *ctx); // SSL_CTX_set_max_cert_list sets the maximum length, in bytes,
      of a peer // certificate chain to |max_cert_list|. This affects how much memory
      may be // consumed during the handshake. OPENSSL_EXPORT void SSL_CTX_set_max_cert_list(SSL_CTX
      *ctx, size_t max_cert_list); // SSL_get_max_cert_list returns the maximum length,
      in bytes, of a peer // certificate chain accepted by |ssl|. OPENSSL_EXPORT size_t
      SSL_get_max_cert_list(const SSL *ssl); // SSL_set_max_cert_list sets the maximum
      length, in bytes, of a peer // certificate chain to |max_cert_list|. This affects
      how much memory may be // consumed during the handshake. OPENSSL_EXPORT void
      SSL_set_max_cert_list(SSL *ssl, size_t max_cert_list); // SSL_CTX_set_max_send_fragment
      sets the maximum length, in bytes, of records // sent by |ctx|. Beyond this
      length, handshake messages and application data // will be split into multiple
      records. It returns one on success or zero on // error. OPENSSL_EXPORT int SSL_CTX_set_max_send_fragment(SSL_CTX
      *ctx, size_t max_send_fragment); // SSL_set_max_send_fragment sets the maximum
      length, in bytes, of records sent // by |ssl|. Beyond this length, handshake
      messages and application data will // be split into multiple records. It returns
      one on success or zero on // error. OPENSSL_EXPORT int SSL_set_max_send_fragment(SSL
      *ssl, size_t max_send_fragment); // ssl_early_callback_ctx (aka |SSL_CLIENT_HELLO|)
      is passed to certain // callbacks that are called very early on during the server
      handshake. At this // point, much of the SSL* hasn't been filled out and only
      the ClientHello can // be depended on. struct ssl_early_callback_ctx { SSL *ssl;
      const uint8_t *client_hello; size_t client_hello_len; uint16_t version; const
      uint8_t *random; size_t random_len; const uint8_t *session_id; size_t session_id_len;
      const uint8_t *dtls_cookie; size_t dtls_cookie_len; const uint8_t *cipher_suites;
      size_t cipher_suites_len; const uint8_t *compression_methods; size_t compression_methods_len;
      const uint8_t *extensions; size_t extensions_len;} /* SSL_CLIENT_HELLO */; //
      ssl_select_cert_result_t enumerates the possible results from selecting a //
      certificate with |select_certificate_cb|. enum ssl_select_cert_result_t BORINGSSL_ENUM_INT
      { // ssl_select_cert_success indicates that the certificate selection was //
      successful. ssl_select_cert_success = 1, // ssl_select_cert_retry indicates
      that the operation could not be // immediately completed and must be reattempted
      at a later point. ssl_select_cert_retry = 0, // ssl_select_cert_error indicates
      that a fatal error occured and the // handshake should be terminated. ssl_select_cert_error
      = -1, // ssl_select_cert_disable_ech indicates that, although an encrypted //
      ClientHelloInner was decrypted, it should be discarded. The certificate // selection
      callback will then be called again, passing in the // ClientHelloOuter instead.
      From there, the handshake will proceed // without retry_configs, to signal to
      the client to disable ECH. // // This value may only be returned when |SSL_ech_accepted|
      returnes one. It // may be useful if the ClientHelloInner indicated a service
      which does not // support ECH, e.g. if it is a TLS-1.2 only service. ssl_select_cert_disable_ech
      = -2,}; // SSL_early_callback_ctx_extension_get searches the extensions in //
      |client_hello| for an extension of the given type. If not found, it returns
      // zero. Otherwise it sets |out_data| to point to the extension contents (not
      // including the type and length bytes), sets |out_len| to the length of the
      // extension contents and returns one. OPENSSL_EXPORT int SSL_early_callback_ctx_extension_get(
      const SSL_CLIENT_HELLO *client_hello, uint16_t extension_type, const uint8_t
      **out_data, size_t *out_len); // SSL_CTX_set_select_certificate_cb sets a callback
      that is called before most // ClientHello processing and before the decision
      whether to resume a session // is made. The callback may inspect the ClientHello
      and configure the // connection. See |ssl_select_cert_result_t| for details
      of the return values. // // In the case that a retry is indicated, |SSL_get_error|
      will return // |SSL_ERROR_PENDING_CERTIFICATE| and the caller should arrange
      for the // high-level operation on |ssl| to be retried at a later time, which
      will // result in another call to |cb|. // // |SSL_get_servername| may be used
      during this callback. // // Note: The |SSL_CLIENT_HELLO| is only valid for the
      duration of the callback // and is not valid while the handshake is paused.
      OPENSSL_EXPORT void SSL_CTX_set_select_certificate_cb( SSL_CTX *ctx, enum ssl_select_cert_result_t
      (*cb)(const SSL_CLIENT_HELLO *)); // SSL_CTX_set_dos_protection_cb sets a callback
      that is called once the // resumption decision for a ClientHello has been made.
      It can return one to // allow the handshake to continue or zero to cause the
      handshake to abort. OPENSSL_EXPORT void SSL_CTX_set_dos_protection_cb( SSL_CTX
      *ctx, int (*cb)(const SSL_CLIENT_HELLO *)); // SSL_CTX_set_reverify_on_resume
      configures whether the certificate // verification callback will be used to
      reverify stored certificates // when resuming a session. This only works with
      |SSL_CTX_set_custom_verify|. // For now, this is incompatible with |SSL_VERIFY_NONE|
      mode, and is only // respected on clients. OPENSSL_EXPORT void SSL_CTX_set_reverify_on_resume(SSL_CTX
      *ctx, int enabled); // SSL_set_enforce_rsa_key_usage configures whether, when
      |ssl| is a client // negotiating TLS 1.2 or below, the keyUsage extension of
      RSA leaf server // certificates will be checked for consistency with the TLS
      usage. In all other // cases, this check is always enabled. // // This parameter
      may be set late; it will not be read until after the // certificate verification
      callback. OPENSSL_EXPORT void SSL_set_enforce_rsa_key_usage(SSL *ssl, int enabled);
      // SSL_was_key_usage_invalid returns one if |ssl|'s handshake succeeded despite
      // using TLS parameters which were incompatible with the leaf certificate's
      // keyUsage extension. Otherwise, it returns zero. // // If |SSL_set_enforce_rsa_key_usage|
      is enabled or not applicable, this // function will always return zero because
      key usages will be consistently // checked. OPENSSL_EXPORT int SSL_was_key_usage_invalid(const
      SSL *ssl); // SSL_ST_* are possible values for |SSL_state|, the bitmasks that
      make them up, // and some historical values for compatibility. Only |SSL_ST_INIT|
      and // |SSL_ST_OK| are ever returned. #define SSL_ST_CONNECT 0x1000#define SSL_ST_ACCEPT
      0x2000#define SSL_ST_MASK 0x0FFF#define SSL_ST_INIT (SSL_ST_CONNECT | SSL_ST_ACCEPT)#define
      SSL_ST_OK 0x03#define SSL_ST_RENEGOTIATE (0x04 | SSL_ST_INIT)#define SSL_ST_BEFORE
      (0x05 | SSL_ST_INIT)// TLS_ST_* are aliases for |SSL_ST_*| for OpenSSL 1.1.0
      compatibility.#define TLS_ST_OK SSL_ST_OK#define TLS_ST_BEFORE SSL_ST_BEFORE//
      SSL_CB_* are possible values for the |type| parameter in the info// callback
      and the bitmasks that make them up.#define SSL_CB_LOOP 0x01#define SSL_CB_EXIT
      0x02#define SSL_CB_READ 0x04#define SSL_CB_WRITE 0x08#define SSL_CB_ALERT 0x4000#define
      SSL_CB_READ_ALERT (SSL_CB_ALERT | SSL_CB_READ)#define SSL_CB_WRITE_ALERT (SSL_CB_ALERT
      | SSL_CB_WRITE)#define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT | SSL_CB_LOOP)#define
      SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT | SSL_CB_EXIT)#define SSL_CB_CONNECT_LOOP
      (SSL_ST_CONNECT | SSL_CB_LOOP)#define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT |
      SSL_CB_EXIT)#define SSL_CB_HANDSHAKE_START 0x10#define SSL_CB_HANDSHAKE_DONE
      0x20// SSL_CTX_set_info_callback configures a callback to be run when various//
      events occur during a connection's lifetime. The |type| argument determines//
      the type of event and the meaning of the |value| argument. Callbacks must//
      ignore unexpected |type| values.//// |SSL_CB_READ_ALERT| is signaled for each
      alert received, warning or fatal.// The |value| argument is a 16-bit value where
      the alert level (either// |SSL3_AL_WARNING| or |SSL3_AL_FATAL|) is in the most-significant
      eight bits// and the alert type (one of |SSL_AD_*|) is in the least-significant
      eight.//// |SSL_CB_WRITE_ALERT| is signaled for each alert sent. The |value|
      argument// is constructed as with |SSL_CB_READ_ALERT|.//// |SSL_CB_HANDSHAKE_START|
      is signaled when a handshake begins. The |value|// argument is always one.////
      |SSL_CB_HANDSHAKE_DONE| is signaled when a handshake completes successfully.//
      The |value| argument is always one. If a handshake False Starts, this event//
      may be used to determine when the Finished message is received.//// The following
      event types expose implementation details of the handshake// state machine.
      Consuming them is deprecated.//// |SSL_CB_ACCEPT_LOOP| (respectively, |SSL_CB_CONNECT_LOOP|)
      is signaled when// a server (respectively, client) handshake progresses. The
      |value| argument// is always one.//// |SSL_CB_ACCEPT_EXIT| (respectively, |SSL_CB_CONNECT_EXIT|)
      is signaled when// a server (respectively, client) handshake completes, fails,
      or is paused.// The |value| argument is one if the handshake succeeded and <=
      0// otherwise.OPENSSL_EXPORT void SSL_CTX_set_info_callback(SSL_CTX *ctx, void
      (*cb)(const SSL *ssl, int type, int value)); // SSL_CTX_get_info_callback returns
      the callback set by // |SSL_CTX_set_info_callback|. OPENSSL_EXPORT void (*SSL_CTX_get_info_callback(SSL_CTX
      *ctx))(const SSL *ssl, int type, int value); // SSL_set_info_callback configures
      a callback to be run at various events // during a connection's lifetime. See
      |SSL_CTX_set_info_callback|. OPENSSL_EXPORT void SSL_set_info_callback(SSL *ssl,
      void (*cb)(const SSL *ssl, int type, int value)); // SSL_get_info_callback returns
      the callback set by |SSL_set_info_callback|. OPENSSL_EXPORT void (*SSL_get_info_callback(const
      SSL *ssl))(const SSL *ssl, int type, int value); // SSL_state_string_long returns
      the current state of the handshake state // machine as a string. This may be
      useful for debugging and logging. OPENSSL_EXPORT const char *SSL_state_string_long(const
      SSL *ssl); #define SSL_SENT_SHUTDOWN 1#define SSL_RECEIVED_SHUTDOWN 2// SSL_get_shutdown
      returns a bitmask with a subset of |SSL_SENT_SHUTDOWN| and// |SSL_RECEIVED_SHUTDOWN|
      to query whether close_notify was sent or received,// respectively.OPENSSL_EXPORT
      int SSL_get_shutdown(const SSL *ssl); // SSL_get_peer_signature_algorithm returns
      the signature algorithm used by the // peer. If not applicable, it returns zero.
      OPENSSL_EXPORT uint16_t SSL_get_peer_signature_algorithm(const SSL *ssl); //
      SSL_get_client_random writes up to |max_out| bytes of the most recent // handshake's
      client_random to |out| and returns the number of bytes written. // If |max_out|
      is zero, it returns the size of the client_random. OPENSSL_EXPORT size_t SSL_get_client_random(const
      SSL *ssl, uint8_t *out, size_t max_out); // SSL_get_server_random writes up
      to |max_out| bytes of the most recent // handshake's server_random to |out|
      and returns the number of bytes written. // If |max_out| is zero, it returns
      the size of the server_random. OPENSSL_EXPORT size_t SSL_get_server_random(const
      SSL *ssl, uint8_t *out, size_t max_out); // SSL_get_pending_cipher returns the
      cipher suite for the current handshake or // NULL if one has not been negotiated
      yet or there is no pending handshake. OPENSSL_EXPORT const SSL_CIPHER *SSL_get_pending_cipher(const
      SSL *ssl); // SSL_set_retain_only_sha256_of_client_certs, on a server, sets
      whether only // the SHA-256 hash of peer's certificate should be saved in memory
      and in the // session. This can save memory, ticket size and session cache space.
      If // enabled, |SSL_get_peer_certificate| will return NULL after the handshake
      // completes. See |SSL_SESSION_has_peer_sha256| and // |SSL_SESSION_get0_peer_sha256|
      to query the hash. OPENSSL_EXPORT void SSL_set_retain_only_sha256_of_client_certs(SSL
      *ssl, int enable); // SSL_CTX_set_retain_only_sha256_of_client_certs, on a server,
      sets whether // only the SHA-256 hash of peer's certificate should be saved
      in memory and in // the session. This can save memory, ticket size and session
      cache space. If // enabled, |SSL_get_peer_certificate| will return NULL after
      the handshake // completes. See |SSL_SESSION_has_peer_sha256| and // |SSL_SESSION_get0_peer_sha256|
      to query the hash. OPENSSL_EXPORT void SSL_CTX_set_retain_only_sha256_of_client_certs(SSL_CTX
      *ctx, int enable); // SSL_CTX_set_grease_enabled configures whether sockets
      on |ctx| should enable // GREASE. See RFC 8701. OPENSSL_EXPORT void SSL_CTX_set_grease_enabled(SSL_CTX
      *ctx, int enabled); // SSL_CTX_set_permute_extensions configures whether sockets
      on |ctx| should // permute extensions. For now, this is only implemented for
      the ClientHello. OPENSSL_EXPORT void SSL_CTX_set_permute_extensions(SSL_CTX
      *ctx, int enabled); // SSL_set_permute_extensions configures whether sockets
      on |ssl| should // permute extensions. For now, this is only implemented for
      the ClientHello. OPENSSL_EXPORT void SSL_set_permute_extensions(SSL *ssl, int
      enabled); // SSL_max_seal_overhead returns the maximum overhead, in bytes, of
      sealing a // record with |ssl|. OPENSSL_EXPORT size_t SSL_max_seal_overhead(const
      SSL *ssl); // SSL_CTX_set_false_start_allowed_without_alpn configures whether
      connections // on |ctx| may use False Start (if |SSL_MODE_ENABLE_FALSE_START|
      is enabled) // without negotiating ALPN. OPENSSL_EXPORT void SSL_CTX_set_false_start_allowed_without_alpn(SSL_CTX
      *ctx, int allowed); // SSL_used_hello_retry_request returns one if the TLS 1.3
      HelloRetryRequest // message has been either sent by the server or received
      by the client. It // returns zero otherwise. OPENSSL_EXPORT int SSL_used_hello_retry_request(const
      SSL *ssl); // SSL_set_jdk11_workaround configures whether to workaround various
      bugs in // JDK 11's TLS 1.3 implementation by disabling TLS 1.3 for such clients.
      // // https://bugs.openjdk.java.net/browse/JDK-8211806 // https://bugs.openjdk.java.net/browse/JDK-8212885
      // https://bugs.openjdk.java.net/browse/JDK-8213202 OPENSSL_EXPORT void SSL_set_jdk11_workaround(SSL
      *ssl, int enable); // SSL_parse_client_hello decodes a ClientHello structure
      from |len| bytes in // |in|. On success, it returns one and writes the result
      to |*out|. Otherwise, // it returns zero. |ssl| will be saved into |*out| and
      determines how the // ClientHello is parsed, notably TLS vs DTLS. The fields
      in |*out| will alias // |in| and are only valid as long as |in| is valid and
      unchanged. // // |in| should contain just the ClientHello structure (RFC 8446
      and RFC 9147), // excluding the handshake header and already reassembled from
      record layer. // That is, |in| should begin with the legacy_version field, not
      the // client_hello HandshakeType constant or the handshake ContentType constant.
      OPENSSL_EXPORT int SSL_parse_client_hello(const SSL *ssl, SSL_CLIENT_HELLO *out,
      const uint8_t *in, size_t len); // Deprecated functions. // SSL_library_init
      returns one. OPENSSL_EXPORT int SSL_library_init(void); // SSL_CIPHER_description
      writes a description of |cipher| into |buf| and // returns |buf|. If |buf| is
      NULL, it returns a newly allocated string, to be // freed with |OPENSSL_free|,
      or NULL on error. // // The description includes a trailing newline and has
      the form: // AES128-SHA Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 // // Consider |SSL_CIPHER_standard_name|
      or |SSL_CIPHER_get_name| instead. OPENSSL_EXPORT const char *SSL_CIPHER_description(const
      SSL_CIPHER *cipher, char *buf, int len); // SSL_CIPHER_get_version returns the
      string \"TLSv1/SSLv3\". OPENSSL_EXPORT const char *SSL_CIPHER_get_version(const
      SSL_CIPHER *cipher); typedef void COMP_METHOD; typedef struct ssl_comp_st SSL_COMP;
      // SSL_COMP_get_compression_methods returns NULL. OPENSSL_EXPORT STACK_OF(SSL_COMP)
      *SSL_COMP_get_compression_methods(void); // SSL_COMP_add_compression_method
      returns one. OPENSSL_EXPORT int SSL_COMP_add_compression_method(int id, COMP_METHOD
      *cm); // SSL_COMP_get_name returns NULL. OPENSSL_EXPORT const char *SSL_COMP_get_name(const
      COMP_METHOD *comp); // SSL_COMP_get0_name returns the |name| member of |comp|.
      OPENSSL_EXPORT const char *SSL_COMP_get0_name(const SSL_COMP *comp); // SSL_COMP_get_id
      returns the |id| member of |comp|. OPENSSL_EXPORT int SSL_COMP_get_id(const
      SSL_COMP *comp); // SSL_COMP_free_compression_methods does nothing. OPENSSL_EXPORT
      void SSL_COMP_free_compression_methods(void); // SSLv23_method calls |TLS_method|.
      OPENSSL_EXPORT const SSL_METHOD *SSLv23_method(void); // These version-specific
      methods behave exactly like |TLS_method| and // |DTLS_method| except they also
      call |SSL_CTX_set_min_proto_version| and // |SSL_CTX_set_max_proto_version|
      to lock connections to that protocol // version. OPENSSL_EXPORT const SSL_METHOD
      *TLSv1_method(void); OPENSSL_EXPORT const SSL_METHOD *TLSv1_1_method(void);
      OPENSSL_EXPORT const SSL_METHOD *TLSv1_2_method(void); OPENSSL_EXPORT const
      SSL_METHOD *DTLSv1_method(void); OPENSSL_EXPORT const SSL_METHOD *DTLSv1_2_method(void);
      // These client- and server-specific methods call their corresponding generic
      // methods. OPENSSL_EXPORT const SSL_METHOD *TLS_server_method(void); OPENSSL_EXPORT
      const SSL_METHOD *TLS_client_method(void); OPENSSL_EXPORT const SSL_METHOD *SSLv23_server_method(void);
      OPENSSL_EXPORT const SSL_METHOD *SSLv23_client_method(void); OPENSSL_EXPORT
      const SSL_METHOD *TLSv1_server_method(void); OPENSSL_EXPORT const SSL_METHOD
      *TLSv1_client_method(void); OPENSSL_EXPORT const SSL_METHOD *TLSv1_1_server_method(void);
      OPENSSL_EXPORT const SSL_METHOD *TLSv1_1_client_method(void); OPENSSL_EXPORT
      const SSL_METHOD *TLSv1_2_server_method(void); OPENSSL_EXPORT const SSL_METHOD
      *TLSv1_2_client_method(void); OPENSSL_EXPORT const SSL_METHOD *DTLS_server_method(void);
      OPENSSL_EXPORT const SSL_METHOD *DTLS_client_method(void); OPENSSL_EXPORT const
      SSL_METHOD *DTLSv1_server_method(void); OPENSSL_EXPORT const SSL_METHOD *DTLSv1_client_method(void);
      OPENSSL_EXPORT const SSL_METHOD *DTLSv1_2_server_method(void); OPENSSL_EXPORT
      const SSL_METHOD *DTLSv1_2_client_method(void); // SSL_clear resets |ssl| to
      allow another connection and returns one on success // or zero on failure. It
      returns most configuration state but releases memory // associated with the
      current connection. // // Free |ssl| and create a new one instead. OPENSSL_EXPORT
      int SSL_clear(SSL *ssl); // SSL_CTX_set_tmp_rsa_callback does nothing. OPENSSL_EXPORT
      void SSL_CTX_set_tmp_rsa_callback( SSL_CTX *ctx, RSA *(*cb)(SSL *ssl, int is_export,
      int keylength)); // SSL_set_tmp_rsa_callback does nothing. OPENSSL_EXPORT void
      SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb)(SSL *ssl, int is_export, int keylength));
      // SSL_CTX_sess_connect returns zero. OPENSSL_EXPORT int SSL_CTX_sess_connect(const
      SSL_CTX *ctx); // SSL_CTX_sess_connect_good returns zero. OPENSSL_EXPORT int
      SSL_CTX_sess_connect_good(const SSL_CTX *ctx); // SSL_CTX_sess_connect_renegotiate
      returns zero. OPENSSL_EXPORT int SSL_CTX_sess_connect_renegotiate(const SSL_CTX
      *ctx); // SSL_CTX_sess_accept returns zero. OPENSSL_EXPORT int SSL_CTX_sess_accept(const
      SSL_CTX *ctx); // SSL_CTX_sess_accept_renegotiate returns zero. OPENSSL_EXPORT
      int SSL_CTX_sess_accept_renegotiate(const SSL_CTX *ctx); // SSL_CTX_sess_accept_good
      returns zero. OPENSSL_EXPORT int SSL_CTX_sess_accept_good(const SSL_CTX *ctx);
      // SSL_CTX_sess_hits returns zero. OPENSSL_EXPORT int SSL_CTX_sess_hits(const
      SSL_CTX *ctx); // SSL_CTX_sess_cb_hits returns zero. OPENSSL_EXPORT int SSL_CTX_sess_cb_hits(const
      SSL_CTX *ctx); // SSL_CTX_sess_misses returns zero. OPENSSL_EXPORT int SSL_CTX_sess_misses(const
      SSL_CTX *ctx); // SSL_CTX_sess_timeouts returns zero. OPENSSL_EXPORT int SSL_CTX_sess_timeouts(const
      SSL_CTX *ctx); // SSL_CTX_sess_cache_full returns zero. OPENSSL_EXPORT int SSL_CTX_sess_cache_full(const
      SSL_CTX *ctx); // SSL_cutthrough_complete calls |SSL_in_false_start|. OPENSSL_EXPORT
      int SSL_cutthrough_complete(const SSL *ssl); // SSL_num_renegotiations calls
      |SSL_total_renegotiations|. OPENSSL_EXPORT int SSL_num_renegotiations(const
      SSL *ssl); // SSL_CTX_need_tmp_RSA returns zero. OPENSSL_EXPORT int SSL_CTX_need_tmp_RSA(const
      SSL_CTX *ctx); // SSL_need_tmp_RSA returns zero. OPENSSL_EXPORT int SSL_need_tmp_RSA(const
      SSL *ssl); // SSL_CTX_set_tmp_rsa returns one. OPENSSL_EXPORT int SSL_CTX_set_tmp_rsa(SSL_CTX
      *ctx, const RSA *rsa); // SSL_set_tmp_rsa returns one. OPENSSL_EXPORT int SSL_set_tmp_rsa(SSL
      *ssl, const RSA *rsa); // SSL_CTX_get_read_ahead returns zero. OPENSSL_EXPORT
      int SSL_CTX_get_read_ahead(const SSL_CTX *ctx); // SSL_CTX_set_read_ahead returns
      one. OPENSSL_EXPORT int SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes); // SSL_get_read_ahead
      returns zero. OPENSSL_EXPORT int SSL_get_read_ahead(const SSL *ssl); // SSL_set_read_ahead
      returns one. OPENSSL_EXPORT int SSL_set_read_ahead(SSL *ssl, int yes); // SSL_set_state
      does nothing. OPENSSL_EXPORT void SSL_set_state(SSL *ssl, int state); // SSL_get_shared_ciphers
      writes an empty string to |buf| and returns a // pointer to |buf|, or NULL if
      |len| is less than or equal to zero. OPENSSL_EXPORT char *SSL_get_shared_ciphers(const
      SSL *ssl, char *buf, int len); // SSL_get_shared_sigalgs returns zero. OPENSSL_EXPORT
      int SSL_get_shared_sigalgs(SSL *ssl, int idx, int *psign, int *phash, int *psignandhash,
      uint8_t *rsig, uint8_t *rhash); // SSL_MODE_HANDSHAKE_CUTTHROUGH is the same
      as SSL_MODE_ENABLE_FALSE_START. #define SSL_MODE_HANDSHAKE_CUTTHROUGH SSL_MODE_ENABLE_FALSE_START//
      i2d_SSL_SESSION serializes |in|, as described in |i2d_SAMPLE|.//// Use |SSL_SESSION_to_bytes|
      instead.OPENSSL_EXPORT int i2d_SSL_SESSION(SSL_SESSION *in, uint8_t **pp); //
      d2i_SSL_SESSION parses a serialized session from the |length| bytes pointed
      // to by |*pp|, as described in |d2i_SAMPLE|. // // Use |SSL_SESSION_from_bytes|
      instead. OPENSSL_EXPORT SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const
      uint8_t **pp, long length); // i2d_SSL_SESSION_bio serializes |session| and
      writes the result to |bio|. It // returns the number of bytes written on success
      and <= 0 on error. OPENSSL_EXPORT int i2d_SSL_SESSION_bio(BIO *bio, const SSL_SESSION
      *session); // d2i_SSL_SESSION_bio reads a serialized |SSL_SESSION| from |bio|
      and returns a // newly-allocated |SSL_SESSION| or NULL on error. If |out| is
      not NULL, it also // frees |*out| and sets |*out| to the new |SSL_SESSION|.
      OPENSSL_EXPORT SSL_SESSION *d2i_SSL_SESSION_bio(BIO *bio, SSL_SESSION **out);
      // ERR_load_SSL_strings does nothing. OPENSSL_EXPORT void ERR_load_SSL_strings(void);
      // SSL_load_error_strings does nothing. OPENSSL_EXPORT void SSL_load_error_strings(void);
      // SSL_CTX_set_tlsext_use_srtp calls |SSL_CTX_set_srtp_profiles|. It returns
      // zero on success and one on failure. // // WARNING: this function is dangerous
      because it breaks the usual return value // convention. Use |SSL_CTX_set_srtp_profiles|
      instead. OPENSSL_EXPORT int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const
      char *profiles); // SSL_set_tlsext_use_srtp calls |SSL_set_srtp_profiles|. It
      returns zero on // success and one on failure. // // WARNING: this function
      is dangerous because it breaks the usual return value // convention. Use |SSL_set_srtp_profiles|
      instead. OPENSSL_EXPORT int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles);
      // SSL_get_current_compression returns NULL. OPENSSL_EXPORT const COMP_METHOD
      *SSL_get_current_compression(SSL *ssl); // SSL_get_current_expansion returns
      NULL. OPENSSL_EXPORT const COMP_METHOD *SSL_get_current_expansion(SSL *ssl);
      // SSL_get_server_tmp_key returns zero. OPENSSL_EXPORT int SSL_get_server_tmp_key(SSL
      *ssl, EVP_PKEY **out_key); // SSL_CTX_set_tmp_dh returns 1. OPENSSL_EXPORT int
      SSL_CTX_set_tmp_dh(SSL_CTX *ctx, const DH *dh); // SSL_set_tmp_dh returns 1.
      OPENSSL_EXPORT int SSL_set_tmp_dh(SSL *ssl, const DH *dh); // SSL_CTX_set_tmp_dh_callback
      does nothing. OPENSSL_EXPORT void SSL_CTX_set_tmp_dh_callback( SSL_CTX *ctx,
      DH *(*cb)(SSL *ssl, int is_export, int keylength)); // SSL_set_tmp_dh_callback
      does nothing. OPENSSL_EXPORT void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*cb)(SSL
      *ssl, int is_export, int keylength)); // SSL_CTX_set1_sigalgs takes |num_values|
      ints and interprets them as pairs // where the first is the nid of a hash function
      and the second is an // |EVP_PKEY_*| value. It configures the signature algorithm
      preferences for // |ctx| based on them and returns one on success or zero on
      error. // // This API is compatible with OpenSSL. However, BoringSSL-specific
      code should // prefer |SSL_CTX_set_signing_algorithm_prefs| because it's clearer
      and it's // more convenient to codesearch for specific algorithm values. OPENSSL_EXPORT
      int SSL_CTX_set1_sigalgs(SSL_CTX *ctx, const int *values, size_t num_values);
      // SSL_set1_sigalgs takes |num_values| ints and interprets them as pairs where
      // the first is the nid of a hash function and the second is an |EVP_PKEY_*|
      // value. It configures the signature algorithm preferences for |ssl| based
      on // them and returns one on success or zero on error. // // This API is compatible
      with OpenSSL. However, BoringSSL-specific code should // prefer |SSL_CTX_set_signing_algorithm_prefs|
      because it's clearer and it's // more convenient to codesearch for specific
      algorithm values. OPENSSL_EXPORT int SSL_set1_sigalgs(SSL *ssl, const int *values,
      size_t num_values); // SSL_CTX_set1_sigalgs_list takes a textual specification
      of a set of signature // algorithms and configures them on |ctx|. It returns
      one on success and zero // on error. See // https://www.openssl.org/docs/man1.1.0/man3/SSL_CTX_set1_sigalgs_list.html
      for // a description of the text format. Also note that TLS 1.3 names (e.g.
      // \"rsa_pkcs1_md5_sha1\") can also be used (as in OpenSSL, although OpenSSL
      // doesn't document that). // // This API is compatible with OpenSSL. However,
      BoringSSL-specific code should // prefer |SSL_CTX_set_signing_algorithm_prefs|
      because it's clearer and it's // more convenient to codesearch for specific
      algorithm values. OPENSSL_EXPORT int SSL_CTX_set1_sigalgs_list(SSL_CTX *ctx,
      const char *str); // SSL_set1_sigalgs_list takes a textual specification of
      a set of signature // algorithms and configures them on |ssl|. It returns one
      on success and zero // on error. See // https://www.openssl.org/docs/man1.1.0/man3/SSL_CTX_set1_sigalgs_list.html
      for // a description of the text format. Also note that TLS 1.3 names (e.g.
      // \"rsa_pkcs1_md5_sha1\") can also be used (as in OpenSSL, although OpenSSL
      // doesn't document that). // // This API is compatible with OpenSSL. However,
      BoringSSL-specific code should // prefer |SSL_CTX_set_signing_algorithm_prefs|
      because it's clearer and it's // more convenient to codesearch for specific
      algorithm values. OPENSSL_EXPORT int SSL_set1_sigalgs_list(SSL *ssl, const char
      *str); #define SSL_set_app_data(s, arg) (SSL_set_ex_data(s, 0, (char *)(arg)))#define
      SSL_get_app_data(s) (SSL_get_ex_data(s, 0))#define SSL_SESSION_set_app_data(s,
      a) \\ (SSL_SESSION_set_ex_data(s, 0, (char *)(a)))#define SSL_SESSION_get_app_data(s)
      (SSL_SESSION_get_ex_data(s, 0))#define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,
      0))#define SSL_CTX_set_app_data(ctx, arg) \\ (SSL_CTX_set_ex_data(ctx, 0, (char
      *)(arg)))#define OpenSSL_add_ssl_algorithms() SSL_library_init()#define SSLeay_add_ssl_algorithms()
      SSL_library_init()#define SSL_get_cipher(ssl) SSL_CIPHER_get_name(SSL_get_current_cipher(ssl))#define
      SSL_get_cipher_bits(ssl, out_alg_bits) \\ SSL_CIPHER_get_bits(SSL_get_current_cipher(ssl),
      out_alg_bits)#define SSL_get_cipher_version(ssl) \\ SSL_CIPHER_get_version(SSL_get_current_cipher(ssl))#define
      SSL_get_cipher_name(ssl) \\ SSL_CIPHER_get_name(SSL_get_current_cipher(ssl))#define
      SSL_get_time(session) SSL_SESSION_get_time(session)#define SSL_set_time(session,
      time) SSL_SESSION_set_time((session), (time))#define SSL_get_timeout(session)
      SSL_SESSION_get_timeout(session)#define SSL_set_timeout(session, timeout) \\
      SSL_SESSION_set_timeout((session), (timeout))struct ssl_comp_st "
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - packed_error
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 73
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 73
    functionName: ERR_GET_LIB
    functionSourceFile: /src/boringssl/include/openssl/err.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENSSL_INLINE
    signature: 'OPENSSL_INLINE int ERR_GET_LIB(uint32_t packed_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - packed_error
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 344
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 344
    functionName: ERR_GET_FUNC
    functionSourceFile: /src/boringssl/include/openssl/err.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENSSL_INLINE
    signature: 'OPENSSL_INLINE int ERR_GET_FUNC(uint32_t packed_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - packed_error
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: ERR_GET_REASON
    functionSourceFile: /src/boringssl/include/openssl/err.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENSSL_INLINE
    signature: 'OPENSSL_INLINE int ERR_GET_REASON(uint32_t packed_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 3
    argNames:
    - cbs
    - data
    - len
    argTypes:
    - CBS*
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 61
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 61
    functionName: CBS_init
    functionSourceFile: /src/boringssl/include/openssl/bytestring.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENSSL_INLINE
    signature: 'OPENSSL_INLINE void CBS_init(CBS *cbs, const uint8_t *data, size_t
      len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - cbs
    argTypes:
    - CBS*
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: CBS_len
    functionSourceFile: /src/boringssl/include/openssl/bytestring.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENSSL_INLINE
    signature: 'OPENSSL_INLINE size_t CBS_len(const CBS *cbs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - cbs
    argTypes:
    - CBS*
    constantsTouched: []
    func_position:
      end: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    functionName: CBS_data
    functionSourceFile: /src/boringssl/include/openssl/bytestring.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENSSL_INLINE*
    signature: 'OPENSSL_INLINE const uint8_t *CBS_data(const CBS *cbs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: X509_CRL_up_ref
      Src: /src/boringssl/include/openssl/x509.h:671,1
    - Dst: X509_NAME_new
      Src: /src/boringssl/include/openssl/x509.h:1341,1
    - Dst: DECLARE_ASN1_ITEM
      Src: /src/boringssl/include/openssl/x509.h:1338,1
    - Dst: EXTENDED_KEY_USAGE_new
      Src: /src/boringssl/include/openssl/x509.h:2002,1
    CyclomaticComplexity: 770
    EdgeCount: 770
    ICount: 6
    argCount: 0
    argNames:
    - X509
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2033
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 2033
    functionName: STACK_OF
    functionSourceFile: /src/boringssl/include/openssl/x509.h
    functionUses: []
    functionsReached:
    - X509_CRL_up_ref
    - X509_NAME_new
    - DECLARE_ASN1_ITEM
    - EXTENDED_KEY_USAGE_new
    linkageType: ''
    returnType: OPENSSL_EXPORT
    signature: 'OPENSSL_EXPORT STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);
      // X509_dup returns a newly-allocated copy of |x509|, or NULL on error. This
      // function works by serializing the structure, so auxiliary properties (see
      // |i2d_X509_AUX|) are not preserved. Additionally, if |x509| is incomplete,
      // this function may fail. // // TODO(https://crbug.com/boringssl/407): This
      function should be const and // thread-safe but is currently neither in some
      cases, notably if |crl| was // mutated. OPENSSL_EXPORT X509 *X509_dup(X509 *x509);
      // X509_free decrements |x509|''s reference count and, if zero, releases memory
      // associated with |x509|. OPENSSL_EXPORT void X509_free(X509 *x509); // d2i_X509
      parses up to |len| bytes from |*inp| as a DER-encoded X.509 // Certificate (RFC
      5280), as described in |d2i_SAMPLE|. OPENSSL_EXPORT X509 *d2i_X509(X509 **out,
      const uint8_t **inp, long len); // X509_parse_from_buffer parses an X.509 structure
      from |buf| and returns a // fresh X509 or NULL on error. There must not be any
      trailing data in |buf|. // The returned structure (if any) holds a reference
      to |buf| rather than // copying parts of it as a normal |d2i_X509| call would
      do. OPENSSL_EXPORT X509 *X509_parse_from_buffer(CRYPTO_BUFFER *buf); // i2d_X509
      marshals |x509| as a DER-encoded X.509 Certificate (RFC 5280), as // described
      in |i2d_SAMPLE|. // // TODO(https://crbug.com/boringssl/407): This function
      should be const and // thread-safe but is currently neither in some cases, notably
      if |x509| was // mutated. OPENSSL_EXPORT int i2d_X509(X509 *x509, uint8_t **outp);
      // X509_VERSION_* are X.509 version numbers. Note the numerical values of all
      // defined X.509 versions are one less than the named version. #define X509_VERSION_1
      0#define X509_VERSION_2 1#define X509_VERSION_3 2// X509_get_version returns
      the numerical value of |x509|''s version, which will// be one of the |X509_VERSION_*|
      constants.OPENSSL_EXPORT long X509_get_version(const X509 *x509); // X509_get0_serialNumber
      returns |x509|''s serial number. OPENSSL_EXPORT const ASN1_INTEGER *X509_get0_serialNumber(const
      X509 *x509); // X509_get0_notBefore returns |x509|''s notBefore time. OPENSSL_EXPORT
      const ASN1_TIME *X509_get0_notBefore(const X509 *x509); // X509_get0_notAfter
      returns |x509|''s notAfter time. OPENSSL_EXPORT const ASN1_TIME *X509_get0_notAfter(const
      X509 *x509); // X509_get_issuer_name returns |x509|''s issuer. OPENSSL_EXPORT
      X509_NAME *X509_get_issuer_name(const X509 *x509); // X509_get_subject_name
      returns |x509|''s subject. OPENSSL_EXPORT X509_NAME *X509_get_subject_name(const
      X509 *x509); // X509_get_X509_PUBKEY returns the public key of |x509|. Note
      this function is // not const-correct for legacy reasons. Callers should not
      modify the returned // object. OPENSSL_EXPORT X509_PUBKEY *X509_get_X509_PUBKEY(const
      X509 *x509); // X509_get0_pubkey returns |x509|''s public key as an |EVP_PKEY|,
      or NULL if the // public key was unsupported or could not be decoded. The |EVP_PKEY|
      is cached // in |x509|, so callers must not mutate the result. OPENSSL_EXPORT
      EVP_PKEY *X509_get0_pubkey(const X509 *x509); // X509_get_pubkey behaves like
      |X509_get0_pubkey| but increments the reference // count on the |EVP_PKEY|.
      The caller must release the result with // |EVP_PKEY_free| when done. The |EVP_PKEY|
      is cached in |x509|, so callers // must not mutate the result. OPENSSL_EXPORT
      EVP_PKEY *X509_get_pubkey(const X509 *x509); // X509_get0_pubkey_bitstr returns
      the BIT STRING portion of |x509|''s public // key. Note this does not contain
      the AlgorithmIdentifier portion. // // WARNING: This function returns a non-const
      pointer for OpenSSL compatibility, // but the caller must not modify the resulting
      object. Doing so will break // internal invariants in |x509|. OPENSSL_EXPORT
      ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x509); // X509_check_private_key
      returns one if |x509|''s public key matches |pkey| and // zero otherwise. OPENSSL_EXPORT
      int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); // X509_get0_uids
      sets |*out_issuer_uid| to a non-owning pointer to the // issuerUID field of
      |x509|, or NULL if |x509| has no issuerUID. It similarly // outputs |x509|''s
      subjectUID field to |*out_subject_uid|. // // Callers may pass NULL to either
      |out_issuer_uid| or |out_subject_uid| to // ignore the corresponding field.
      OPENSSL_EXPORT void X509_get0_uids(const X509 *x509, const ASN1_BIT_STRING **out_issuer_uid,
      const ASN1_BIT_STRING **out_subject_uid); // The following bits are returned
      from |X509_get_extension_flags|. // EXFLAG_BCONS indicates the certificate has
      a basic constraints extension. #define EXFLAG_BCONS 0x1// EXFLAG_KUSAGE indicates
      the certifcate has a key usage extension.#define EXFLAG_KUSAGE 0x2// EXFLAG_XKUSAGE
      indicates the certifcate has an extended key usage extension.#define EXFLAG_XKUSAGE
      0x4// EXFLAG_CA indicates the certificate has a basic constraints extension
      with// the CA bit set.#define EXFLAG_CA 0x10// EXFLAG_SI indicates the certificate
      is self-issued, i.e. its subject and// issuer names match.#define EXFLAG_SI
      0x20// EXFLAG_V1 indicates an X.509v1 certificate.#define EXFLAG_V1 0x40// EXFLAG_INVALID
      indicates an error processing some extension. The certificate// should not be
      accepted. Note the lack of this bit does not imply all// extensions are valid,
      only those used to compute extension flags.#define EXFLAG_INVALID 0x80// EXFLAG_SET
      is an internal bit that indicates extension flags were computed.#define EXFLAG_SET
      0x100// EXFLAG_CRITICAL indicates an unsupported critical extension. The certificate//
      should not be accepted.#define EXFLAG_CRITICAL 0x200// EXFLAG_SS indicates the
      certificate is likely self-signed. That is, if it is// self-issued, its authority
      key identifier (if any) matches itself, and its// key usage extension (if any)
      allows certificate signatures. The signature// itself is not checked in computing
      this bit.#define EXFLAG_SS 0x2000// X509_get_extension_flags decodes a set of
      extensions from |x509| and returns// a collection of |EXFLAG_*| bits which reflect
      |x509|. If there was an error// in computing this bitmask, the result will include
      the |EXFLAG_INVALID| bit.OPENSSL_EXPORT uint32_t X509_get_extension_flags(X509
      *x509); // X509_get_pathlen returns path length constraint from the basic constraints
      // extension in |x509|. (See RFC 5280, section 4.2.1.9.) It returns -1 if the
      // constraint is not present, or if some extension in |x509| was invalid. //
      // TODO(crbug.com/boringssl/381): Decoding an |X509| object will not check for
      // invalid extensions. To detect the error case, call // |X509_get_extension_flags|
      and check the |EXFLAG_INVALID| bit. OPENSSL_EXPORT long X509_get_pathlen(X509
      *x509); // X509v3_KU_* are key usage bits returned from |X509_get_key_usage|.
      #define X509v3_KU_DIGITAL_SIGNATURE 0x0080#define X509v3_KU_NON_REPUDIATION
      0x0040#define X509v3_KU_KEY_ENCIPHERMENT 0x0020#define X509v3_KU_DATA_ENCIPHERMENT
      0x0010#define X509v3_KU_KEY_AGREEMENT 0x0008#define X509v3_KU_KEY_CERT_SIGN
      0x0004#define X509v3_KU_CRL_SIGN 0x0002#define X509v3_KU_ENCIPHER_ONLY 0x0001#define
      X509v3_KU_DECIPHER_ONLY 0x8000// X509_get_key_usage returns a bitmask of key
      usages (see Section 4.2.1.3 of// RFC 5280) which |x509| is valid for. This function
      only reports the first 16// bits, in a little-endian byte order, but big-endian
      bit order. That is, bits// 0 though 7 are reported at 1<<7 through 1<<0, and
      bits 8 through 15 are// reported at 1<<15 through 1<<8.//// Instead of depending
      on this bit order, callers should compare against the// |X509v3_KU_*| constants.////
      If |x509| has no key usage extension, all key usages are valid and this// function
      returns |UINT32_MAX|. If there was an error processing |x509|''s// extensions,
      or if the first 16 bits in the key usage extension were all zero,// this function
      returns zero.OPENSSL_EXPORT uint32_t X509_get_key_usage(X509 *x509); // XKU_*
      are extended key usage bits returned from // |X509_get_extended_key_usage|.
      #define XKU_SSL_SERVER 0x1#define XKU_SSL_CLIENT 0x2#define XKU_SMIME 0x4#define
      XKU_CODE_SIGN 0x8#define XKU_SGC 0x10#define XKU_OCSP_SIGN 0x20#define XKU_TIMESTAMP
      0x40#define XKU_DVCS 0x80#define XKU_ANYEKU 0x100// X509_get_extended_key_usage
      returns a bitmask of extended key usages (see// Section 4.2.1.12 of RFC 5280)
      which |x509| is valid for. The result will be// a combination of |XKU_*| constants.
      If checking an extended key usage not// defined above, callers should extract
      the extended key usage extension// separately, e.g. via |X509_get_ext_d2i|.////
      If |x509| has no extended key usage extension, all extended key usages are//
      valid and this function returns |UINT32_MAX|. If there was an error// processing
      |x509|''s extensions, or if |x509|''s extended key usage extension// contained
      no recognized usages, this function returns zero.OPENSSL_EXPORT uint32_t X509_get_extended_key_usage(X509
      *x509); // X509_get0_subject_key_id returns |x509|''s subject key identifier,
      if present. // (See RFC 5280, section 4.2.1.2.) It returns NULL if the extension
      is not // present or if some extension in |x509| was invalid. // // TODO(crbug.com/boringssl/381):
      Decoding an |X509| object will not check for // invalid extensions. To detect
      the error case, call // |X509_get_extension_flags| and check the |EXFLAG_INVALID|
      bit. OPENSSL_EXPORT const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x509);
      // X509_get0_authority_key_id returns keyIdentifier of |x509|''s authority key
      // identifier, if the extension and field are present. (See RFC 5280, // section
      4.2.1.1.) It returns NULL if the extension is not present, if it is // present
      but lacks a keyIdentifier field, or if some extension in |x509| was // invalid.
      // // TODO(crbug.com/boringssl/381): Decoding an |X509| object will not check
      for // invalid extensions. To detect the error case, call // |X509_get_extension_flags|
      and check the |EXFLAG_INVALID| bit. OPENSSL_EXPORT const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509
      *x509); DEFINE_STACK_OF(GENERAL_NAME)typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;
      // X509_get0_authority_issuer returns the authorityCertIssuer of |x509|''s //
      authority key identifier, if the extension and field are present. (See // RFC
      5280, section 4.2.1.1.) It returns NULL if the extension is not present, //
      if it is present but lacks a authorityCertIssuer field, or if some extension
      // in |x509| was invalid. // // TODO(crbug.com/boringssl/381): Decoding an |X509|
      object will not check for // invalid extensions. To detect the error case, call
      // |X509_get_extension_flags| and check the |EXFLAG_INVALID| bit. OPENSSL_EXPORT
      const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x509); // X509_get0_authority_serial
      returns the authorityCertSerialNumber of |x509|''s // authority key identifier,
      if the extension and field are present. (See // RFC 5280, section 4.2.1.1.)
      It returns NULL if the extension is not present, // if it is present but lacks
      a authorityCertSerialNumber field, or if some // extension in |x509| was invalid.
      // // TODO(crbug.com/boringssl/381): Decoding an |X509| object will not check
      for // invalid extensions. To detect the error case, call // |X509_get_extension_flags|
      and check the |EXFLAG_INVALID| bit. OPENSSL_EXPORT const ASN1_INTEGER *X509_get0_authority_serial(X509
      *x509); // X509_get0_extensions returns |x509|''s extension list, or NULL if
      |x509| omits // it. OPENSSL_EXPORT const STACK_OF(X509_EXTENSION) *X509_get0_extensions(
      const X509 *x509); // X509_get_ext_count returns the number of extensions in
      |x|. OPENSSL_EXPORT int X509_get_ext_count(const X509 *x); // X509_get_ext_by_NID
      behaves like |X509v3_get_ext_by_NID| but searches for // extensions in |x|.
      OPENSSL_EXPORT int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
      // X509_get_ext_by_OBJ behaves like |X509v3_get_ext_by_OBJ| but searches for
      // extensions in |x|. OPENSSL_EXPORT int X509_get_ext_by_OBJ(const X509 *x,
      const ASN1_OBJECT *obj, int lastpos); // X509_get_ext_by_critical behaves like
      |X509v3_get_ext_by_critical| but // searches for extensions in |x|. OPENSSL_EXPORT
      int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); // X509_get_ext
      returns the extension in |x| at index |loc|, or NULL if |loc| is // out of bounds.
      This function returns a non-const pointer for OpenSSL // compatibility, but
      callers should not mutate the result. OPENSSL_EXPORT X509_EXTENSION *X509_get_ext(const
      X509 *x, int loc); // X509_get_ext_d2i behaves like |X509V3_get_d2i| but looks
      for the extension in // |x509|''s extension list. // // WARNING: This function
      is difficult to use correctly. See the documentation // for |X509V3_get_d2i|
      for details. OPENSSL_EXPORT void *X509_get_ext_d2i(const X509 *x509, int nid,
      int *out_critical, int *out_idx); // X509_get0_tbs_sigalg returns the signature
      algorithm in |x509|''s // TBSCertificate. For the outer signature algorithm,
      see |X509_get0_signature|. // // Certificates with mismatched signature algorithms
      will successfully parse, // but they will be rejected when verifying. OPENSSL_EXPORT
      const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x509); // X509_get0_signature
      sets |*out_sig| and |*out_alg| to the signature and // signature algorithm of
      |x509|, respectively. Either output pointer may be // NULL to ignore the value.
      // // This function outputs the outer signature algorithm. For the one in the
      // TBSCertificate, see |X509_get0_tbs_sigalg|. Certificates with mismatched
      // signature algorithms will successfully parse, but they will be rejected when
      // verifying. OPENSSL_EXPORT void X509_get0_signature(const ASN1_BIT_STRING
      **out_sig, const X509_ALGOR **out_alg, const X509 *x509); // X509_get_signature_nid
      returns the NID corresponding to |x509|''s signature // algorithm, or |NID_undef|
      if the signature algorithm does not correspond to // a known NID. OPENSSL_EXPORT
      int X509_get_signature_nid(const X509 *x509); // i2d_X509_tbs serializes the
      TBSCertificate portion of |x509|, as described in // |i2d_SAMPLE|. // // This
      function preserves the original encoding of the TBSCertificate and may // not
      reflect modifications made to |x509|. It may be used to manually verify // the
      signature of an existing certificate. To generate certificates, use // |i2d_re_X509_tbs|
      instead. OPENSSL_EXPORT int i2d_X509_tbs(X509 *x509, unsigned char **outp);
      // X509_verify checks that |x509| has a valid signature by |pkey|. It returns
      // one if the signature is valid and zero otherwise. Note this function only
      // checks the signature itself and does not perform a full certificate // validation.
      OPENSSL_EXPORT int X509_verify(X509 *x509, EVP_PKEY *pkey); // X509_get1_email
      returns a newly-allocated list of NUL-terminated strings // containing all email
      addresses in |x509|''s subject and all rfc822name names // in |x509|''s subject
      alternative names. Email addresses which contain embedded // NUL bytes are skipped.
      // // On error, or if there are no such email addresses, it returns NULL. When
      // done, the caller must release the result with |X509_email_free|. OPENSSL_EXPORT
      STACK_OF(OPENSSL_STRING) *X509_get1_email(const X509 *x509); // X509_get1_ocsp
      returns a newly-allocated list of NUL-terminated strings // containing all OCSP
      URIs in |x509|. That is, it collects all URI // AccessDescriptions with an accessMethod
      of id-ad-ocsp in |x509|''s authority // information access extension. URIs which
      contain embedded NUL bytes are // skipped. // // On error, or if there are no
      such URIs, it returns NULL. When done, the // caller must release the result
      with |X509_email_free|. OPENSSL_EXPORT STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(const
      X509 *x509); // X509_email_free releases memory associated with |sk|, including
      |sk| itself. // Each |OPENSSL_STRING| in |sk| must be a NUL-terminated string
      allocated with // |OPENSSL_malloc|. If |sk| is NULL, no action is taken. OPENSSL_EXPORT
      void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); // X509_cmp compares |a|
      and |b| and returns zero if they are equal, a negative // number if |b| sorts
      after |a| and a negative number if |a| sorts after |b|. // The sort order implemented
      by this function is arbitrary and does not // reflect properties of the certificate
      such as expiry. Applications should not // rely on the order itself. // // TODO(https://crbug.com/boringssl/355):
      This function works by comparing a // cached hash of the encoded certificate.
      If |a| or |b| could not be // serialized, the current behavior is to compare
      all unencodable certificates // as equal. This function should only be used
      with |X509| objects that were // parsed from bytes and never mutated. // //
      TODO(https://crbug.com/boringssl/407): This function is const, but it is not
      // always thread-safe, notably if |a| and |b| were mutated. OPENSSL_EXPORT int
      X509_cmp(const X509 *a, const X509 *b); // Issuing certificates. // // An |X509|
      object may also represent an incomplete certificate. Callers may // construct
      empty |X509| objects, fill in fields individually, and finally sign // the result.
      The following functions may be used for this purpose. // X509_new returns a
      newly-allocated, empty |X509| object, or NULL on error. // This produces an
      incomplete certificate which may be filled in to issue a new // certificate.
      OPENSSL_EXPORT X509 *X509_new(void); // X509_set_version sets |x509|''s version
      to |version|, which should be one of // the |X509V_VERSION_*| constants. It
      returns one on success and zero on error. // // If unsure, use |X509_VERSION_3|.
      OPENSSL_EXPORT int X509_set_version(X509 *x509, long version); // X509_set_serialNumber
      sets |x509|''s serial number to |serial|. It returns one // on success and zero
      on error. OPENSSL_EXPORT int X509_set_serialNumber(X509 *x509, const ASN1_INTEGER
      *serial); // X509_set1_notBefore sets |x509|''s notBefore time to |tm|. It returns
      one on // success and zero on error. OPENSSL_EXPORT int X509_set1_notBefore(X509
      *x509, const ASN1_TIME *tm); // X509_set1_notAfter sets |x509|''s notAfter time
      to |tm|. it returns one on // success and zero on error. OPENSSL_EXPORT int
      X509_set1_notAfter(X509 *x509, const ASN1_TIME *tm); // X509_getm_notBefore
      returns a mutable pointer to |x509|''s notBefore time. OPENSSL_EXPORT ASN1_TIME
      *X509_getm_notBefore(X509 *x509); // X509_getm_notAfter returns a mutable pointer
      to |x509|''s notAfter time. OPENSSL_EXPORT ASN1_TIME *X509_getm_notAfter(X509
      *x); // X509_set_issuer_name sets |x509|''s issuer to a copy of |name|. It returns
      one // on success and zero on error. OPENSSL_EXPORT int X509_set_issuer_name(X509
      *x509, X509_NAME *name); // X509_set_subject_name sets |x509|''s subject to
      a copy of |name|. It returns // one on success and zero on error. OPENSSL_EXPORT
      int X509_set_subject_name(X509 *x509, X509_NAME *name); // X509_set_pubkey sets
      |x509|''s public key to |pkey|. It returns one on success // and zero on error.
      This function does not take ownership of |pkey| and // internally copies and
      updates reference counts as needed. OPENSSL_EXPORT int X509_set_pubkey(X509
      *x509, EVP_PKEY *pkey); // X509_delete_ext removes the extension in |x| at index
      |loc| and returns the // removed extension, or NULL if |loc| was out of bounds.
      If non-NULL, the // caller must release the result with |X509_EXTENSION_free|.
      OPENSSL_EXPORT X509_EXTENSION *X509_delete_ext(X509 *x, int loc); // X509_add_ext
      adds a copy of |ex| to |x|. It returns one on success and zero // on failure.
      The caller retains ownership of |ex| and can release it // independently of
      |x|. // // The new extension is inserted at index |loc|, shifting extensions
      to the // right. If |loc| is -1 or out of bounds, the new extension is appended
      to the // list. OPENSSL_EXPORT int X509_add_ext(X509 *x, const X509_EXTENSION
      *ex, int loc); // X509_add1_ext_i2d behaves like |X509V3_add1_i2d| but adds
      the extension to // |x|''s extension list. // // WARNING: This function may
      return zero or -1 on error. The caller must also // ensure |value|''s type matches
      |nid|. See the documentation for // |X509V3_add1_i2d| for details. OPENSSL_EXPORT
      int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, unsigned long
      flags); // X509_sign signs |x509| with |pkey| and replaces the signature algorithm
      and // signature fields. It returns the length of the signature on success and
      zero // on error. This function uses digest algorithm |md|, or |pkey|''s default
      if // NULL. Other signing parameters use |pkey|''s defaults. To customize them,
      use // |X509_sign_ctx|. OPENSSL_EXPORT int X509_sign(X509 *x509, EVP_PKEY *pkey,
      const EVP_MD *md); // X509_sign_ctx signs |x509| with |ctx| and replaces the
      signature algorithm // and signature fields. It returns the length of the signature
      on success and // zero on error. The signature algorithm and parameters come
      from |ctx|, which // must have been initialized with |EVP_DigestSignInit|. The
      caller should // configure the corresponding |EVP_PKEY_CTX| before calling this
      function. // // On success or failure, this function mutates |ctx| and resets
      it to the empty // state. Caller should not rely on its contents after the function
      returns. OPENSSL_EXPORT int X509_sign_ctx(X509 *x509, EVP_MD_CTX *ctx); // i2d_re_X509_tbs
      serializes the TBSCertificate portion of |x509|, as described // in |i2d_SAMPLE|.
      // // This function re-encodes the TBSCertificate and may not reflect |x509|''s
      // original encoding. It may be used to manually generate a signature for a
      new // certificate. To verify certificates, use |i2d_X509_tbs| instead. OPENSSL_EXPORT
      int i2d_re_X509_tbs(X509 *x509, unsigned char **outp); // X509_set1_signature_algo
      sets |x509|''s signature algorithm to |algo| and // returns one on success or
      zero on error. It updates both the signature field // of the TBSCertificate
      structure, and the signatureAlgorithm field of the // Certificate. OPENSSL_EXPORT
      int X509_set1_signature_algo(X509 *x509, const X509_ALGOR *algo); // X509_set1_signature_value
      sets |x509|''s signature to a copy of the |sig_len| // bytes pointed by |sig|.
      It returns one on success and zero on error. // // Due to a specification error,
      X.509 certificates store signatures in ASN.1 // BIT STRINGs, but signature algorithms
      return byte strings rather than bit // strings. This function creates a BIT
      STRING containing a whole number of // bytes, with the bit order matching the
      DER encoding. This matches the // encoding used by all X.509 signature algorithms.
      OPENSSL_EXPORT int X509_set1_signature_value(X509 *x509, const uint8_t *sig,
      size_t sig_len); // Auxiliary certificate properties. // // |X509| objects optionally
      maintain auxiliary properties. These are not part // of the certificates themselves,
      and thus are not covered by signatures or // preserved by the standard serialization.
      They are used as inputs or outputs // to other functions in this library. //
      i2d_X509_AUX marshals |x509| as a DER-encoded X.509 Certificate (RFC 5280),
      // followed optionally by a separate, OpenSSL-specific structure with auxiliary
      // properties. It behaves as described in |i2d_SAMPLE|. // // Unlike similarly-named
      functions, this function does not output a single // ASN.1 element. Directly
      embedding the output in a larger ASN.1 structure will // not behave correctly.
      // // TODO(crbug.com/boringssl/407): |x509| should be const. OPENSSL_EXPORT
      int i2d_X509_AUX(X509 *x509, uint8_t **outp); // d2i_X509_AUX parses up to |length|
      bytes from |*inp| as a DER-encoded X.509 // Certificate (RFC 5280), followed
      optionally by a separate, OpenSSL-specific // structure with auxiliary properties.
      It behaves as described in |d2i_SAMPLE|. // // WARNING: Passing untrusted input
      to this function allows an attacker to // control auxiliary properties. This
      can allow unexpected influence over the // application if the certificate is
      used in a context that reads auxiliary // properties. This includes PKCS#12
      serialization, trusted certificates in // |X509_STORE|, and callers of |X509_alias_get0|
      or |X509_keyid_get0|. // // Unlike similarly-named functions, this function
      does not parse a single // ASN.1 element. Trying to parse data directly embedded
      in a larger ASN.1 // structure will not behave correctly. OPENSSL_EXPORT X509
      *d2i_X509_AUX(X509 **x509, const uint8_t **inp, long length); // X509_alias_set1
      sets |x509|''s alias to |len| bytes from |name|. If |name| is // NULL, the alias
      is cleared instead. Aliases are not part of the certificate // itself and will
      not be serialized by |i2d_X509|. If |x509| is serialized in // a PKCS#12 structure,
      the friendlyName attribute (RFC 2985) will contain this // alias. OPENSSL_EXPORT
      int X509_alias_set1(X509 *x509, const uint8_t *name, ossl_ssize_t len); // X509_keyid_set1
      sets |x509|''s key ID to |len| bytes from |id|. If |id| is // NULL, the key
      ID is cleared instead. Key IDs are not part of the certificate // itself and
      will not be serialized by |i2d_X509|. OPENSSL_EXPORT int X509_keyid_set1(X509
      *x509, const uint8_t *id, ossl_ssize_t len); // X509_alias_get0 looks up |x509|''s
      alias. If found, it sets |*out_len| to the // alias''s length and returns a
      pointer to a buffer containing the contents. If // not found, it outputs the
      empty string by returning NULL and setting // |*out_len| to zero. // // If |x509|
      was parsed from a PKCS#12 structure (see // |PKCS12_get_key_and_certs|), the
      alias will reflect the friendlyName // attribute (RFC 2985). // // WARNING:
      In OpenSSL, this function did not set |*out_len| when the alias was // missing.
      Callers that target both OpenSSL and BoringSSL should set the value // to zero
      before calling this function. OPENSSL_EXPORT const uint8_t *X509_alias_get0(const
      X509 *x509, int *out_len); // X509_keyid_get0 looks up |x509|''s key ID. If
      found, it sets |*out_len| to the // key ID''s length and returns a pointer to
      a buffer containing the contents. If // not found, it outputs the empty string
      by returning NULL and setting // |*out_len| to zero. // // WARNING: In OpenSSL,
      this function did not set |*out_len| when the alias was // missing. Callers
      that target both OpenSSL and BoringSSL should set the value // to zero before
      calling this function. OPENSSL_EXPORT const uint8_t *X509_keyid_get0(const X509
      *x509, int *out_len); // X509_add1_trust_object configures |x509| as a valid
      trust anchor for |obj|. // It returns one on success and zero on error. |obj|
      should be a certificate // usage OID associated with an |X509_TRUST_*| constant.
      // // See |X509_VERIFY_PARAM_set_trust| for details on how this value is evaluated.
      // Note this only takes effect if |x509| was configured as a trusted certificate
      // via |X509_STORE|. OPENSSL_EXPORT int X509_add1_trust_object(X509 *x509, const
      ASN1_OBJECT *obj); // X509_add1_reject_object configures |x509| as distrusted
      for |obj|. It returns // one on success and zero on error. |obj| should be a
      certificate usage OID // associated with an |X509_TRUST_*| constant. // // See
      |X509_VERIFY_PARAM_set_trust| for details on how this value is evaluated. //
      Note this only takes effect if |x509| was configured as a trusted certificate
      // via |X509_STORE|. OPENSSL_EXPORT int X509_add1_reject_object(X509 *x509,
      const ASN1_OBJECT *obj); // X509_trust_clear clears the list of OIDs for which
      |x509| is trusted. See // also |X509_add1_trust_object|. OPENSSL_EXPORT void
      X509_trust_clear(X509 *x509); // X509_reject_clear clears the list of OIDs for
      which |x509| is distrusted. See // also |X509_add1_reject_object|. OPENSSL_EXPORT
      void X509_reject_clear(X509 *x509); // Certificate revocation lists. // // An
      |X509_CRL| object represents an X.509 certificate revocation list (CRL), //
      defined in RFC 5280. A CRL is a signed list of certificates, the // revokedCertificates
      field, which are no longer considered valid. Each entry // of this list is represented
      with an |X509_REVOKED| object, documented in the // "CRL entries" section below.
      // // Although an |X509_CRL| is a mutable object, mutating an |X509_CRL| or
      its // |X509_REVOKED|s can give incorrect results. Callers typically obtain
      // |X509_CRL|s by parsing some input with |d2i_X509_CRL|, etc. Such objects
      // carry information such as the serialized TBSCertList and decoded extensions,
      // which will become inconsistent when mutated. // // Instead, mutation functions
      should only be used when issuing new CRLs, as // described in a later section.
      DEFINE_STACK_OF(X509_CRL)DEFINE_STACK_OF(X509_REVOKED)// X509_CRL_up_ref adds
      one to the reference count of |crl| and returns one.OPENSSL_EXPORT int X509_CRL_up_ref(X509_CRL
      *crl);// X509_CRL_dup returns a newly-allocated copy of |crl|, or NULL on error.
      This// function works by serializing the structure, so if |crl| is incomplete,
      it// may fail.//// TODO(https://crbug.com/boringssl/407): This function should
      be const and// thread-safe but is currently neither in some cases, notably if
      |crl| was// mutated.OPENSSL_EXPORT X509_CRL *X509_CRL_dup(X509_CRL *crl); //
      X509_CRL_free decrements |crl|''s reference count and, if zero, releases //
      memory associated with |crl|. OPENSSL_EXPORT void X509_CRL_free(X509_CRL *crl);
      // d2i_X509_CRL parses up to |len| bytes from |*inp| as a DER-encoded X.509
      // CertificateList (RFC 5280), as described in |d2i_SAMPLE|. OPENSSL_EXPORT
      X509_CRL *d2i_X509_CRL(X509_CRL **out, const uint8_t **inp, long len); // i2d_X509_CRL
      marshals |crl| as a X.509 CertificateList (RFC 5280), as // described in |i2d_SAMPLE|.
      // // TODO(https://crbug.com/boringssl/407): This function should be const and
      // thread-safe but is currently neither in some cases, notably if |crl| was
      // mutated. OPENSSL_EXPORT int i2d_X509_CRL(X509_CRL *crl, uint8_t **outp);
      // X509_CRL_match compares |a| and |b| and returns zero if they are equal, a
      // negative number if |b| sorts after |a| and a negative number if |a| sorts
      // after |b|. The sort order implemented by this function is arbitrary and does
      // not reflect properties of the CRL such as expiry. Applications should not
      // rely on the order itself. // // TODO(https://crbug.com/boringssl/355): This
      function works by comparing a // cached hash of the encoded CRL. This cached
      hash is computed when the CRL is // parsed, but not when mutating or issuing
      CRLs. This function should only be // used with |X509_CRL| objects that were
      parsed from bytes and never mutated. OPENSSL_EXPORT int X509_CRL_match(const
      X509_CRL *a, const X509_CRL *b); #define X509_CRL_VERSION_1 0#define X509_CRL_VERSION_2
      1// X509_CRL_get_version returns the numerical value of |crl|''s version, which//
      will be one of the |X509_CRL_VERSION_*| constants.OPENSSL_EXPORT long X509_CRL_get_version(const
      X509_CRL *crl); // X509_CRL_get0_lastUpdate returns |crl|''s thisUpdate time.
      The OpenSSL API // refers to this field as lastUpdate. OPENSSL_EXPORT const
      ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); // X509_CRL_get0_nextUpdate
      returns |crl|''s nextUpdate time, or NULL if |crl| // has none. OPENSSL_EXPORT
      const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); // X509_CRL_get_issuer
      returns |crl|''s issuer name. Note this function is not // const-correct for
      legacy reasons. OPENSSL_EXPORT X509_NAME *X509_CRL_get_issuer(const X509_CRL
      *crl); // X509_CRL_get0_by_serial finds the entry in |crl| whose serial number
      is // |serial|. If found, it sets |*out| to the entry and returns one. If not
      // found, it returns zero. // // On success, |*out| continues to be owned by
      |crl|. It is an error to free or // otherwise modify |*out|. // // TODO(crbug.com/boringssl/600):
      Ideally |crl| would be const. It is broadly // thread-safe, but changes the
      order of entries in |crl|. It cannot be called // concurrently with |i2d_X509_CRL|.
      OPENSSL_EXPORT int X509_CRL_get0_by_serial(X509_CRL *crl, X509_REVOKED **out,
      const ASN1_INTEGER *serial); // X509_CRL_get0_by_cert behaves like |X509_CRL_get0_by_serial|,
      except it looks // for the entry that matches |x509|. OPENSSL_EXPORT int X509_CRL_get0_by_cert(X509_CRL
      *crl, X509_REVOKED **out, X509 *x509); // X509_CRL_get_REVOKED returns the list
      of revoked certificates in |crl|, or // NULL if |crl| omits it. // // TOOD(davidben):
      This function was originally a macro, without clear const // semantics. It should
      take a const input and give const output, but the latter // would break existing
      callers. For now, we match upstream. OPENSSL_EXPORT STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL
      *crl); // X509_CRL_get0_extensions returns |crl|''s extension list, or NULL
      if |crl| // omits it. A CRL can have extensions on individual entries, which
      is // |X509_REVOKED_get0_extensions|, or on the overall CRL, which is this //
      function. OPENSSL_EXPORT const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(
      const X509_CRL *crl); // X509_CRL_get_ext_count returns the number of extensions
      in |x|. OPENSSL_EXPORT int X509_CRL_get_ext_count(const X509_CRL *x); // X509_CRL_get_ext_by_NID
      behaves like |X509v3_get_ext_by_NID| but searches for // extensions in |x|.
      OPENSSL_EXPORT int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
      // X509_CRL_get_ext_by_OBJ behaves like |X509v3_get_ext_by_OBJ| but searches
      for // extensions in |x|. OPENSSL_EXPORT int X509_CRL_get_ext_by_OBJ(const X509_CRL
      *x, const ASN1_OBJECT *obj, int lastpos); // X509_CRL_get_ext_by_critical behaves
      like |X509v3_get_ext_by_critical| but // searches for extensions in |x|. OPENSSL_EXPORT
      int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
      // X509_CRL_get_ext returns the extension in |x| at index |loc|, or NULL if
      // |loc| is out of bounds. This function returns a non-const pointer for OpenSSL
      // compatibility, but callers should not mutate the result. OPENSSL_EXPORT X509_EXTENSION
      *X509_CRL_get_ext(const X509_CRL *x, int loc); // X509_CRL_get_ext_d2i behaves
      like |X509V3_get_d2i| but looks for the // extension in |crl|''s extension list.
      // // WARNING: This function is difficult to use correctly. See the documentation
      // for |X509V3_get_d2i| for details. OPENSSL_EXPORT void *X509_CRL_get_ext_d2i(const
      X509_CRL *crl, int nid, int *out_critical, int *out_idx); // X509_CRL_get0_signature
      sets |*out_sig| and |*out_alg| to the signature and // signature algorithm of
      |crl|, respectively. Either output pointer may be NULL // to ignore the value.
      // // This function outputs the outer signature algorithm, not the one in the
      // TBSCertList. CRLs with mismatched signature algorithms will successfully
      // parse, but they will be rejected when verifying. OPENSSL_EXPORT void X509_CRL_get0_signature(const
      X509_CRL *crl, const ASN1_BIT_STRING **out_sig, const X509_ALGOR **out_alg);
      // X509_CRL_get_signature_nid returns the NID corresponding to |crl|''s signature
      // algorithm, or |NID_undef| if the signature algorithm does not correspond
      to // a known NID. OPENSSL_EXPORT int X509_CRL_get_signature_nid(const X509_CRL
      *crl); // i2d_X509_CRL_tbs serializes the TBSCertList portion of |crl|, as described
      in // |i2d_SAMPLE|. // // This function preserves the original encoding of the
      TBSCertList and may not // reflect modifications made to |crl|. It may be used
      to manually verify the // signature of an existing CRL. To generate CRLs, use
      |i2d_re_X509_CRL_tbs| // instead. OPENSSL_EXPORT int i2d_X509_CRL_tbs(X509_CRL
      *crl, unsigned char **outp); // X509_CRL_verify checks that |crl| has a valid
      signature by |pkey|. It returns // one if the signature is valid and zero otherwise.
      OPENSSL_EXPORT int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *pkey); // Issuing
      certificate revocation lists. // // An |X509_CRL| object may also represent
      an incomplete CRL. Callers may // construct empty |X509_CRL| objects, fill in
      fields individually, and finally // sign the result. The following functions
      may be used for this purpose. // X509_CRL_new returns a newly-allocated, empty
      |X509_CRL| object, or NULL on // error. This object may be filled in and then
      signed to construct a CRL. OPENSSL_EXPORT X509_CRL *X509_CRL_new(void); // X509_CRL_set_version
      sets |crl|''s version to |version|, which should be one // of the |X509_CRL_VERSION_*|
      constants. It returns one on success and zero on // error. // // If unsure,
      use |X509_CRL_VERSION_2|. Note that, unlike certificates, CRL // versions are
      only defined up to v2. Callers should not use |X509_VERSION_3|. OPENSSL_EXPORT
      int X509_CRL_set_version(X509_CRL *crl, long version); // X509_CRL_set_issuer_name
      sets |crl|''s issuer to a copy of |name|. It returns // one on success and zero
      on error. OPENSSL_EXPORT int X509_CRL_set_issuer_name(X509_CRL *crl, X509_NAME
      *name); // X509_CRL_set1_lastUpdate sets |crl|''s thisUpdate time to |tm|. It
      returns one // on success and zero on error. The OpenSSL API refers to this
      field as // lastUpdate. OPENSSL_EXPORT int X509_CRL_set1_lastUpdate(X509_CRL
      *crl, const ASN1_TIME *tm); // X509_CRL_set1_nextUpdate sets |crl|''s nextUpdate
      time to |tm|. It returns one // on success and zero on error. OPENSSL_EXPORT
      int X509_CRL_set1_nextUpdate(X509_CRL *crl, const ASN1_TIME *tm); // X509_CRL_add0_revoked
      adds |rev| to |crl|. On success, it takes ownership of // |rev| and returns
      one. On error, it returns zero. If this function fails, the // caller retains
      ownership of |rev| and must release it when done. OPENSSL_EXPORT int X509_CRL_add0_revoked(X509_CRL
      *crl, X509_REVOKED *rev); // X509_CRL_sort sorts the entries in |crl| by serial
      number. It returns one on // success and zero on error. OPENSSL_EXPORT int X509_CRL_sort(X509_CRL
      *crl); // X509_CRL_delete_ext removes the extension in |x| at index |loc| and
      returns // the removed extension, or NULL if |loc| was out of bounds. If non-NULL,
      the // caller must release the result with |X509_EXTENSION_free|. OPENSSL_EXPORT
      X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); // X509_CRL_add_ext
      adds a copy of |ex| to |x|. It returns one on success and // zero on failure.
      The caller retains ownership of |ex| and can release it // independently of
      |x|. // // The new extension is inserted at index |loc|, shifting extensions
      to the // right. If |loc| is -1 or out of bounds, the new extension is appended
      to the // list. OPENSSL_EXPORT int X509_CRL_add_ext(X509_CRL *x, const X509_EXTENSION
      *ex, int loc); // X509_CRL_add1_ext_i2d behaves like |X509V3_add1_i2d| but adds
      the extension // to |x|''s extension list. // // WARNING: This function may
      return zero or -1 on error. The caller must also // ensure |value|''s type matches
      |nid|. See the documentation for // |X509V3_add1_i2d| for details. OPENSSL_EXPORT
      int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, unsigned
      long flags); // X509_CRL_sign signs |crl| with |pkey| and replaces the signature
      algorithm // and signature fields. It returns the length of the signature on
      success and // zero on error. This function uses digest algorithm |md|, or |pkey|''s
      default // if NULL. Other signing parameters use |pkey|''s defaults. To customize
      them, // use |X509_CRL_sign_ctx|. OPENSSL_EXPORT int X509_CRL_sign(X509_CRL
      *crl, EVP_PKEY *pkey, const EVP_MD *md); // X509_CRL_sign_ctx signs |crl| with
      |ctx| and replaces the signature algorithm // and signature fields. It returns
      the length of the signature on success and // zero on error. The signature algorithm
      and parameters come from |ctx|, which // must have been initialized with |EVP_DigestSignInit|.
      The caller should // configure the corresponding |EVP_PKEY_CTX| before calling
      this function. // // On success or failure, this function mutates |ctx| and
      resets it to the empty // state. Caller should not rely on its contents after
      the function returns. OPENSSL_EXPORT int X509_CRL_sign_ctx(X509_CRL *crl, EVP_MD_CTX
      *ctx); // i2d_re_X509_CRL_tbs serializes the TBSCertList portion of |crl|, as
      described // in |i2d_SAMPLE|. // // This function re-encodes the TBSCertList
      and may not reflect |crl|''s original // encoding. It may be used to manually
      generate a signature for a new CRL. To // verify CRLs, use |i2d_X509_CRL_tbs|
      instead. OPENSSL_EXPORT int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char
      **outp); // X509_CRL_set1_signature_algo sets |crl|''s signature algorithm to
      |algo| and // returns one on success or zero on error. It updates both the signature
      field // of the TBSCertList structure, and the signatureAlgorithm field of the
      CRL. OPENSSL_EXPORT int X509_CRL_set1_signature_algo(X509_CRL *crl, const X509_ALGOR
      *algo); // X509_CRL_set1_signature_value sets |crl|''s signature to a copy of
      the // |sig_len| bytes pointed by |sig|. It returns one on success and zero
      on // error. // // Due to a specification error, X.509 CRLs store signatures
      in ASN.1 BIT // STRINGs, but signature algorithms return byte strings rather
      than bit // strings. This function creates a BIT STRING containing a whole number
      of // bytes, with the bit order matching the DER encoding. This matches the
      // encoding used by all X.509 signature algorithms. OPENSSL_EXPORT int X509_CRL_set1_signature_value(X509_CRL
      *crl, const uint8_t *sig, size_t sig_len); // CRL entries. // // Each entry
      of a CRL is represented as an |X509_REVOKED| object, which // describes a revoked
      certificate by serial number. // // When an |X509_REVOKED| is obtained from
      an |X509_CRL| object, it is an error // to mutate the object. Doing so may break
      |X509_CRL|''s and cause the library // to behave incorrectly. // X509_REVOKED_new
      returns a newly-allocated, empty |X509_REVOKED| object, or // NULL on allocation
      error. OPENSSL_EXPORT X509_REVOKED *X509_REVOKED_new(void); // X509_REVOKED_free
      releases memory associated with |rev|. OPENSSL_EXPORT void X509_REVOKED_free(X509_REVOKED
      *rev); // d2i_X509_REVOKED parses up to |len| bytes from |*inp| as a DER-encoded
      X.509 // CRL entry, as described in |d2i_SAMPLE|. OPENSSL_EXPORT X509_REVOKED
      *d2i_X509_REVOKED(X509_REVOKED **out, const uint8_t **inp, long len); // i2d_X509_REVOKED
      marshals |alg| as a DER-encoded X.509 CRL entry, as // described in |i2d_SAMPLE|.
      OPENSSL_EXPORT int i2d_X509_REVOKED(const X509_REVOKED *alg, uint8_t **outp);
      // X509_REVOKED_dup returns a newly-allocated copy of |rev|, or NULL on error.
      // This function works by serializing the structure, so if |rev| is incomplete,
      // it may fail. OPENSSL_EXPORT X509_REVOKED *X509_REVOKED_dup(const X509_REVOKED
      *rev); // X509_REVOKED_get0_serialNumber returns the serial number of the certificate
      // revoked by |revoked|. OPENSSL_EXPORT const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(
      const X509_REVOKED *revoked); // X509_REVOKED_set_serialNumber sets |revoked|''s
      serial number to |serial|. It // returns one on success or zero on error. OPENSSL_EXPORT
      int X509_REVOKED_set_serialNumber(X509_REVOKED *revoked, const ASN1_INTEGER
      *serial); // X509_REVOKED_get0_revocationDate returns the revocation time of
      the // certificate revoked by |revoked|. OPENSSL_EXPORT const ASN1_TIME *X509_REVOKED_get0_revocationDate(
      const X509_REVOKED *revoked); // X509_REVOKED_set_revocationDate sets |revoked|''s
      revocation time to |tm|. It // returns one on success or zero on error. OPENSSL_EXPORT
      int X509_REVOKED_set_revocationDate(X509_REVOKED *revoked, const ASN1_TIME *tm);
      // X509_REVOKED_get0_extensions returns |r|''s extensions list, or NULL if |r|
      // omits it. A CRL can have extensions on individual entries, which is this
      // function, or on the overall CRL, which is |X509_CRL_get0_extensions|. OPENSSL_EXPORT
      const STACK_OF(X509_EXTENSION) *X509_REVOKED_get0_extensions( const X509_REVOKED
      *r); // X509_REVOKED_get_ext_count returns the number of extensions in |x|.
      OPENSSL_EXPORT int X509_REVOKED_get_ext_count(const X509_REVOKED *x); // X509_REVOKED_get_ext_by_NID
      behaves like |X509v3_get_ext_by_NID| but searches // for extensions in |x|.
      OPENSSL_EXPORT int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid,
      int lastpos); // X509_REVOKED_get_ext_by_OBJ behaves like |X509v3_get_ext_by_OBJ|
      but searches // for extensions in |x|. OPENSSL_EXPORT int X509_REVOKED_get_ext_by_OBJ(const
      X509_REVOKED *x, const ASN1_OBJECT *obj, int lastpos); // X509_REVOKED_get_ext_by_critical
      behaves like |X509v3_get_ext_by_critical| // but searches for extensions in
      |x|. OPENSSL_EXPORT int X509_REVOKED_get_ext_by_critical(const X509_REVOKED
      *x, int crit, int lastpos); // X509_REVOKED_get_ext returns the extension in
      |x| at index |loc|, or NULL if // |loc| is out of bounds. This function returns
      a non-const pointer for OpenSSL // compatibility, but callers should not mutate
      the result. OPENSSL_EXPORT X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED
      *x, int loc); // X509_REVOKED_delete_ext removes the extension in |x| at index
      |loc| and // returns the removed extension, or NULL if |loc| was out of bounds.
      If // non-NULL, the caller must release the result with |X509_EXTENSION_free|.
      OPENSSL_EXPORT X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int
      loc); // X509_REVOKED_add_ext adds a copy of |ex| to |x|. It returns one on
      success // and zero on failure. The caller retains ownership of |ex| and can
      release it // independently of |x|. // // The new extension is inserted at index
      |loc|, shifting extensions to the // right. If |loc| is -1 or out of bounds,
      the new extension is appended to the // list. OPENSSL_EXPORT int X509_REVOKED_add_ext(X509_REVOKED
      *x, const X509_EXTENSION *ex, int loc); // X509_REVOKED_get_ext_d2i behaves
      like |X509V3_get_d2i| but looks for the // extension in |revoked|''s extension
      list. // // WARNING: This function is difficult to use correctly. See the documentation
      // for |X509V3_get_d2i| for details. OPENSSL_EXPORT void *X509_REVOKED_get_ext_d2i(const
      X509_REVOKED *revoked, int nid, int *out_critical, int *out_idx); // X509_REVOKED_add1_ext_i2d
      behaves like |X509V3_add1_i2d| but adds the // extension to |x|''s extension
      list. // // WARNING: This function may return zero or -1 on error. The caller
      must also // ensure |value|''s type matches |nid|. See the documentation for
      // |X509V3_add1_i2d| for details. OPENSSL_EXPORT int X509_REVOKED_add1_ext_i2d(X509_REVOKED
      *x, int nid, void *value, int crit, unsigned long flags); // Certificate requests.
      // // An |X509_REQ| represents a PKCS #10 certificate request (RFC 2986). These
      are // also referred to as certificate signing requests or CSRs. CSRs are a
      common // format used to request a certificate from a CA. // // Although an
      |X509_REQ| is a mutable object, mutating an |X509_REQ| can give // incorrect
      results. Callers typically obtain |X509_REQ|s by parsing some input // with
      |d2i_X509_REQ|, etc. Such objects carry information such as the // serialized
      CertificationRequestInfo, which will become inconsistent when // mutated. //
      // Instead, mutation functions should only be used when issuing new CRLs, as
      // described in a later section. // X509_REQ_dup returns a newly-allocated copy
      of |req|, or NULL on error. This // function works by serializing the structure,
      so if |req| is incomplete, it // may fail. // // TODO(https://crbug.com/boringssl/407):
      This function should be const and // thread-safe but is currently neither in
      some cases, notably if |req| was // mutated. OPENSSL_EXPORT X509_REQ *X509_REQ_dup(X509_REQ
      *req); // X509_REQ_free releases memory associated with |req|. OPENSSL_EXPORT
      void X509_REQ_free(X509_REQ *req); // d2i_X509_REQ parses up to |len| bytes
      from |*inp| as a DER-encoded // CertificateRequest (RFC 2986), as described
      in |d2i_SAMPLE|. OPENSSL_EXPORT X509_REQ *d2i_X509_REQ(X509_REQ **out, const
      uint8_t **inp, long len); // i2d_X509_REQ marshals |req| as a CertificateRequest
      (RFC 2986), as described // in |i2d_SAMPLE|. // // TODO(https://crbug.com/boringssl/407):
      This function should be const and // thread-safe but is currently neither in
      some cases, notably if |req| was // mutated. OPENSSL_EXPORT int i2d_X509_REQ(X509_REQ
      *req, uint8_t **outp); // X509_REQ_VERSION_1 is the version constant for |X509_REQ|
      objects. No other // versions are defined. #define X509_REQ_VERSION_1 0// X509_REQ_get_version
      returns the numerical value of |req|''s version. This// will always be |X509_REQ_VERSION_1|
      for valid CSRs. For compatibility,// |d2i_X509_REQ| also accepts some invalid
      version numbers, in which case this// function may return other values.OPENSSL_EXPORT
      long X509_REQ_get_version(const X509_REQ *req); // X509_REQ_get_subject_name
      returns |req|''s subject name. Note this function is // not const-correct for
      legacy reasons. OPENSSL_EXPORT X509_NAME *X509_REQ_get_subject_name(const X509_REQ
      *req); // X509_REQ_get0_pubkey returns |req|''s public key as an |EVP_PKEY|,
      or NULL if // the public key was unsupported or could not be decoded. The |EVP_PKEY|
      is // cached in |req|, so callers must not mutate the result. OPENSSL_EXPORT
      EVP_PKEY *X509_REQ_get0_pubkey(const X509_REQ *req); // X509_REQ_get_pubkey
      behaves like |X509_REQ_get0_pubkey| but increments the // reference count on
      the |EVP_PKEY|. The caller must release the result with // |EVP_PKEY_free| when
      done. The |EVP_PKEY| is cached in |req|, so callers must // not mutate the result.
      OPENSSL_EXPORT EVP_PKEY *X509_REQ_get_pubkey(const X509_REQ *req); // X509_REQ_check_private_key
      returns one if |req|''s public key matches |pkey| // and zero otherwise. OPENSSL_EXPORT
      int X509_REQ_check_private_key(const X509_REQ *req, const EVP_PKEY *pkey); //
      X509_REQ_get_attr_count returns the number of attributes in |req|. OPENSSL_EXPORT
      int X509_REQ_get_attr_count(const X509_REQ *req); // X509_REQ_get_attr returns
      the attribute at index |loc| in |req|, or NULL if // out of bounds. OPENSSL_EXPORT
      X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); // X509_REQ_get_attr_by_NID
      returns the index of the attribute in |req| of type // |nid|, or a negative
      number if not found. If found, callers can use // |X509_REQ_get_attr| to look
      up the attribute by index. // // If |lastpos| is non-negative, it begins searching
      at |lastpos| + 1. Callers // can thus loop over all matching attributes by first
      passing -1 and then // passing the previously-returned value until no match
      is returned. OPENSSL_EXPORT int X509_REQ_get_attr_by_NID(const X509_REQ *req,
      int nid, int lastpos); // X509_REQ_get_attr_by_OBJ behaves like |X509_REQ_get_attr_by_NID|
      but looks // for attributes of type |obj|. OPENSSL_EXPORT int X509_REQ_get_attr_by_OBJ(const
      X509_REQ *req, const ASN1_OBJECT *obj, int lastpos); // X509_REQ_extension_nid
      returns one if |nid| is a supported CSR attribute type // for carrying extensions
      and zero otherwise. The supported types are // |NID_ext_req| (pkcs-9-at-extensionRequest
      from RFC 2985) and |NID_ms_ext_req| // (a Microsoft szOID_CERT_EXTENSIONS variant).
      OPENSSL_EXPORT int X509_REQ_extension_nid(int nid); // X509_REQ_get_extensions
      decodes the most preferred list of requested // extensions in |req| and returns
      a newly-allocated |STACK_OF(X509_EXTENSION)| // containing the result. It returns
      NULL on error, or if |req| did not request // extensions. // // CSRs do not
      store extensions directly. Instead there are attribute types // which are defined
      to hold extensions. See |X509_REQ_extension_nid|. This // function supports
      both pkcs-9-at-extensionRequest from RFC 2985 and the // Microsoft szOID_CERT_EXTENSIONS
      variant. If both are present, // pkcs-9-at-extensionRequest is preferred. OPENSSL_EXPORT
      STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions( const X509_REQ *req); //
      X509_REQ_get0_signature sets |*out_sig| and |*out_alg| to the signature and
      // signature algorithm of |req|, respectively. Either output pointer may be
      NULL // to ignore the value. OPENSSL_EXPORT void X509_REQ_get0_signature(const
      X509_REQ *req, const ASN1_BIT_STRING **out_sig, const X509_ALGOR **out_alg);
      // X509_REQ_get_signature_nid returns the NID corresponding to |req|''s signature
      // algorithm, or |NID_undef| if the signature algorithm does not correspond
      to // a known NID. OPENSSL_EXPORT int X509_REQ_get_signature_nid(const X509_REQ
      *req); // X509_REQ_verify checks that |req| has a valid signature by |pkey|.
      It returns // one if the signature is valid and zero otherwise. OPENSSL_EXPORT
      int X509_REQ_verify(X509_REQ *req, EVP_PKEY *pkey); // X509_REQ_get1_email returns
      a newly-allocated list of NUL-terminated strings // containing all email addresses
      in |req|''s subject and all rfc822name names // in |req|''s subject alternative
      names. The subject alternative names extension // is extracted from the result
      of |X509_REQ_get_extensions|. Email addresses // which contain embedded NUL
      bytes are skipped. // // On error, or if there are no such email addresses,
      it returns NULL. When // done, the caller must release the result with |X509_email_free|.
      OPENSSL_EXPORT STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email( const X509_REQ
      *req); // Issuing certificate requests. // // An |X509_REQ| object may also
      represent an incomplete CSR. Callers may // construct empty |X509_REQ| objects,
      fill in fields individually, and finally // sign the result. The following functions
      may be used for this purpose. // X509_REQ_new returns a newly-allocated, empty
      |X509_REQ| object, or NULL on // error. This object may be filled in and then
      signed to construct a CSR. OPENSSL_EXPORT X509_REQ *X509_REQ_new(void); // X509_REQ_set_version
      sets |req|''s version to |version|, which should be // |X509_REQ_VERSION_1|.
      It returns one on success and zero on error. // // The only defined CSR version
      is |X509_REQ_VERSION_1|, so there is no need to // call this function. OPENSSL_EXPORT
      int X509_REQ_set_version(X509_REQ *req, long version); // X509_REQ_set_subject_name
      sets |req|''s subject to a copy of |name|. It // returns one on success and
      zero on error. OPENSSL_EXPORT int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME
      *name); // X509_REQ_set_pubkey sets |req|''s public key to |pkey|. It returns
      one on // success and zero on error. This function does not take ownership of
      |pkey| // and internally copies and updates reference counts as needed. OPENSSL_EXPORT
      int X509_REQ_set_pubkey(X509_REQ *req, EVP_PKEY *pkey); // X509_REQ_delete_attr
      removes the attribute at index |loc| in |req|. It // returns the removed attribute
      to the caller, or NULL if |loc| was out of // bounds. If non-NULL, the caller
      must release the result with // |X509_ATTRIBUTE_free| when done. It is also
      safe, but not necessary, to call // |X509_ATTRIBUTE_free| if the result is NULL.
      OPENSSL_EXPORT X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
      // X509_REQ_add1_attr appends a copy of |attr| to |req|''s list of attributes.
      It // returns one on success and zero on error. OPENSSL_EXPORT int X509_REQ_add1_attr(X509_REQ
      *req, const X509_ATTRIBUTE *attr); // X509_REQ_add1_attr_by_OBJ appends a new
      attribute to |req| with type |obj|. // It returns one on success and zero on
      error. The value is determined by // |X509_ATTRIBUTE_set1_data|. // // WARNING:
      The interpretation of |attrtype|, |data|, and |len| is complex and // error-prone.
      See |X509_ATTRIBUTE_set1_data| for details. OPENSSL_EXPORT int X509_REQ_add1_attr_by_OBJ(X509_REQ
      *req, const ASN1_OBJECT *obj, int attrtype, const unsigned char *data, int len);
      // X509_REQ_add1_attr_by_NID behaves like |X509_REQ_add1_attr_by_OBJ| except
      the // attribute type is determined by |nid|. OPENSSL_EXPORT int X509_REQ_add1_attr_by_NID(X509_REQ
      *req, int nid, int attrtype, const unsigned char *data, int len); // X509_REQ_add1_attr_by_txt
      behaves like |X509_REQ_add1_attr_by_OBJ| except the // attribute type is determined
      by calling |OBJ_txt2obj| with |attrname|. OPENSSL_EXPORT int X509_REQ_add1_attr_by_txt(X509_REQ
      *req, const char *attrname, int attrtype, const unsigned char *data, int len);
      // X509_REQ_add_extensions_nid adds an attribute to |req| of type |nid|, to
      // request the certificate extensions in |exts|. It returns one on success and
      // zero on error. |nid| should be |NID_ext_req| or |NID_ms_ext_req|. OPENSSL_EXPORT
      int X509_REQ_add_extensions_nid( X509_REQ *req, const STACK_OF(X509_EXTENSION)
      *exts, int nid); // X509_REQ_add_extensions behaves like |X509_REQ_add_extensions_nid|,
      using the // standard |NID_ext_req| for the attribute type. OPENSSL_EXPORT int
      X509_REQ_add_extensions( X509_REQ *req, const STACK_OF(X509_EXTENSION) *exts);
      // X509_REQ_sign signs |req| with |pkey| and replaces the signature algorithm
      // and signature fields. It returns the length of the signature on success and
      // zero on error. This function uses digest algorithm |md|, or |pkey|''s default
      // if NULL. Other signing parameters use |pkey|''s defaults. To customize them,
      // use |X509_REQ_sign_ctx|. OPENSSL_EXPORT int X509_REQ_sign(X509_REQ *req,
      EVP_PKEY *pkey, const EVP_MD *md); // X509_REQ_sign_ctx signs |req| with |ctx|
      and replaces the signature algorithm // and signature fields. It returns the
      length of the signature on success and // zero on error. The signature algorithm
      and parameters come from |ctx|, which // must have been initialized with |EVP_DigestSignInit|.
      The caller should // configure the corresponding |EVP_PKEY_CTX| before calling
      this function. // // On success or failure, this function mutates |ctx| and
      resets it to the empty // state. Caller should not rely on its contents after
      the function returns. OPENSSL_EXPORT int X509_REQ_sign_ctx(X509_REQ *req, EVP_MD_CTX
      *ctx); // i2d_re_X509_REQ_tbs serializes the CertificationRequestInfo (see RFC
      2986) // portion of |req|, as described in |i2d_SAMPLE|. // // This function
      re-encodes the CertificationRequestInfo and may not reflect // |req|''s original
      encoding. It may be used to manually generate a signature // for a new certificate
      request. OPENSSL_EXPORT int i2d_re_X509_REQ_tbs(X509_REQ *req, uint8_t **outp);
      // X509_REQ_set1_signature_algo sets |req|''s signature algorithm to |algo|
      and // returns one on success or zero on error. OPENSSL_EXPORT int X509_REQ_set1_signature_algo(X509_REQ
      *req, const X509_ALGOR *algo); // X509_REQ_set1_signature_value sets |req|''s
      signature to a copy of the // |sig_len| bytes pointed by |sig|. It returns one
      on success and zero on // error. // // Due to a specification error, PKCS#10
      certificate requests store signatures // in ASN.1 BIT STRINGs, but signature
      algorithms return byte strings rather // than bit strings. This function creates
      a BIT STRING containing a whole // number of bytes, with the bit order matching
      the DER encoding. This matches // the encoding used by all X.509 signature algorithms.
      OPENSSL_EXPORT int X509_REQ_set1_signature_value(X509_REQ *req, const uint8_t
      *sig, size_t sig_len); // Names. // // An |X509_NAME| represents an X.509 Name
      structure (RFC 5280). X.509 names are // a complex, hierarchical structure over
      a collection of attributes. Each name // is sequence of relative distinguished
      names (RDNs), decreasing in // specificity. For example, the first RDN may specify
      the country, while the // next RDN may specify a locality. Each RDN is, itself,
      a set of attributes. // Having more than one attribute in an RDN is uncommon,
      but possible. Within an // RDN, attributes have the same level in specificity.
      Attribute types are // OBJECT IDENTIFIERs. This determines the ASN.1 type of
      the value, which is // commonly a string but may be other types. // // The |X509_NAME|
      representation flattens this two-level structure into a // single list of attributes.
      Each attribute is stored in an |X509_NAME_ENTRY|, // with also maintains the
      index of the RDN it is part of, accessible via // |X509_NAME_ENTRY_set|. This
      can be used to recover the two-level structure. // // X.509 names are largely
      vestigial. Historically, DNS names were parsed out of // the subject''s common
      name attribute, but this is deprecated and has since // moved to the subject
      alternative name extension. In modern usage, X.509 names // are primarily opaque
      identifiers to link a certificate with its issuer. DEFINE_STACK_OF(X509_NAME_ENTRY)DEFINE_STACK_OF(X509_NAME)//
      X509_NAME is an |ASN1_ITEM| whose ASN.1 type is X.509 Name (RFC 5280) and C//
      type is |X509_NAME*|.DECLARE_ASN1_ITEM(X509_NAME)// X509_NAME_new returns a
      new, empty |X509_NAME|, or NULL on error.OPENSSL_EXPORT X509_NAME *X509_NAME_new(void);//
      X509_NAME_free releases memory associated with |name|.OPENSSL_EXPORT void X509_NAME_free(X509_NAME
      *name); // d2i_X509_NAME parses up to |len| bytes from |*inp| as a DER-encoded
      X.509 // Name (RFC 5280), as described in |d2i_SAMPLE|. OPENSSL_EXPORT X509_NAME
      *d2i_X509_NAME(X509_NAME **out, const uint8_t **inp, long len); // i2d_X509_NAME
      marshals |in| as a DER-encoded X.509 Name (RFC 5280), as // described in |i2d_SAMPLE|.
      // // TODO(https://crbug.com/boringssl/407): This function should be const and
      // thread-safe but is currently neither in some cases, notably if |in| was //
      mutated. OPENSSL_EXPORT int i2d_X509_NAME(X509_NAME *in, uint8_t **outp); //
      X509_NAME_dup returns a newly-allocated copy of |name|, or NULL on error. //
      // TODO(https://crbug.com/boringssl/407): This function should be const and
      // thread-safe but is currently neither in some cases, notably if |name| was
      // mutated. OPENSSL_EXPORT X509_NAME *X509_NAME_dup(X509_NAME *name); // X509_NAME_cmp
      compares |a| and |b|''s canonicalized forms. It returns zero if // they are
      equal, one if |a| sorts after |b|, -1 if |b| sorts after |a|, and -2 // on error.
      // // TODO(https://crbug.com/boringssl/407): This function is const, but it
      is not // always thread-safe, notably if |name| was mutated. // // TODO(https://crbug.com/boringssl/355):
      The -2 return is very inconvenient to // pass to a sorting function. Can we
      make this infallible? In the meantime, // prefer to use this function only for
      equality checks rather than comparisons. // Although even the library itself
      passes this to a sorting function. OPENSSL_EXPORT int X509_NAME_cmp(const X509_NAME
      *a, const X509_NAME *b); // X509_NAME_get0_der marshals |name| as a DER-encoded
      X.509 Name (RFC 5280). On // success, it returns one and sets |*out_der| and
      |*out_der_len| to a buffer // containing the result. Otherwise, it returns zero.
      |*out_der| is owned by // |name| and must not be freed by the caller. It is
      invalidated after |name| is // mutated or freed. // // Avoid this function and
      prefer |i2d_X509_NAME|. It is one of the reasons // |X509_NAME| functions, including
      this one, are not consistently thread-safe // or const-correct. Depending on
      the resolution of // https://crbug.com/boringssl/407, this function may be removed
      or cause poor // performance. OPENSSL_EXPORT int X509_NAME_get0_der(X509_NAME
      *name, const uint8_t **out_der, size_t *out_der_len); // X509_NAME_set makes
      a copy of |name|. On success, it frees |*xn|, sets |*xn| // to the copy, and
      returns one. Otherwise, it returns zero. // // TODO(https://crbug.com/boringssl/407):
      This function should be const and // thread-safe but is currently neither in
      some cases, notably if |name| was // mutated. OPENSSL_EXPORT int X509_NAME_set(X509_NAME
      **xn, X509_NAME *name); // X509_NAME_entry_count returns the number of entries
      in |name|. OPENSSL_EXPORT int X509_NAME_entry_count(const X509_NAME *name);
      // X509_NAME_get_index_by_NID returns the zero-based index of the first // attribute
      in |name| with type |nid|, or -1 if there is none. |nid| should be // one of
      the |NID_*| constants. If |lastpos| is non-negative, it begins // searching
      at |lastpos+1|. To search all attributes, pass in -1, not zero. // // Indices
      from this function refer to |X509_NAME|''s flattened representation. OPENSSL_EXPORT
      int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos);
      // X509_NAME_get_index_by_OBJ behaves like |X509_NAME_get_index_by_NID| but
      // looks for attributes with type |obj|. OPENSSL_EXPORT int X509_NAME_get_index_by_OBJ(const
      X509_NAME *name, const ASN1_OBJECT *obj, int lastpos); // X509_NAME_get_entry
      returns the attribute in |name| at index |loc|, or NULL // if |loc| is out of
      range. |loc| is interpreted using |X509_NAME|''s flattened // representation.
      This function returns a non-const pointer for OpenSSL // compatibility, but
      callers should not mutate the result. Doing so will break // internal invariants
      in the library. OPENSSL_EXPORT X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME
      *name, int loc); // X509_NAME_delete_entry removes and returns the attribute
      in |name| at index // |loc|, or NULL if |loc| is out of range. |loc| is interpreted
      using // |X509_NAME|''s flattened representation. If the attribute is found,
      the caller // is responsible for releasing the result with |X509_NAME_ENTRY_free|.
      // // This function will internally update RDN indices (see |X509_NAME_ENTRY_set|)
      // so they continue to be consecutive. OPENSSL_EXPORT X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME
      *name, int loc); // X509_NAME_add_entry adds a copy of |entry| to |name| and
      returns one on // success or zero on error. If |loc| is -1, the entry is appended
      to |name|. // Otherwise, it is inserted at index |loc|. If |set| is -1, the
      entry is added // to the previous entry''s RDN. If it is 0, the entry becomes
      a singleton RDN. // If 1, it is added to next entry''s RDN. // // This function
      will internally update RDN indices (see |X509_NAME_ENTRY_set|) // so they continue
      to be consecutive. OPENSSL_EXPORT int X509_NAME_add_entry(X509_NAME *name, const
      X509_NAME_ENTRY *entry, int loc, int set); // X509_NAME_add_entry_by_OBJ adds
      a new entry to |name| and returns one on // success or zero on error. The entry''s
      attribute type is |obj|. The entry''s // attribute value is determined by |type|,
      |bytes|, and |len|, as in // |X509_NAME_ENTRY_set_data|. The entry''s position
      is determined by |loc| and // |set| as in |X509_NAME_add_entry|. OPENSSL_EXPORT
      int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int
      type, const uint8_t *bytes, ossl_ssize_t len, int loc, int set); // X509_NAME_add_entry_by_NID
      behaves like |X509_NAME_add_entry_by_OBJ| but sets // the entry''s attribute
      type to |nid|, which should be one of the |NID_*| // constants. OPENSSL_EXPORT
      int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, const uint8_t
      *bytes, ossl_ssize_t len, int loc, int set); // X509_NAME_add_entry_by_txt behaves
      like |X509_NAME_add_entry_by_OBJ| but sets // the entry''s attribute type to
      |field|, which is passed to |OBJ_txt2obj|. OPENSSL_EXPORT int X509_NAME_add_entry_by_txt(X509_NAME
      *name, const char *field, int type, const uint8_t *bytes, ossl_ssize_t len,
      int loc, int set); // X509_NAME_ENTRY_new returns a new, empty |X509_NAME_ENTRY|,
      or NULL on error. OPENSSL_EXPORT X509_NAME_ENTRY *X509_NAME_ENTRY_new(void);
      // X509_NAME_ENTRY_free releases memory associated with |entry|. OPENSSL_EXPORT
      void X509_NAME_ENTRY_free(X509_NAME_ENTRY *entry); // X509_NAME_ENTRY_dup returns
      a newly-allocated copy of |entry|, or NULL on // error. OPENSSL_EXPORT X509_NAME_ENTRY
      *X509_NAME_ENTRY_dup( const X509_NAME_ENTRY *entry); // X509_NAME_ENTRY_get_object
      returns |entry|''s attribute type. This function // returns a non-const pointer
      for OpenSSL compatibility, but callers should not // mutate the result. Doing
      so will break internal invariants in the library. OPENSSL_EXPORT ASN1_OBJECT
      *X509_NAME_ENTRY_get_object( const X509_NAME_ENTRY *entry); // X509_NAME_ENTRY_set_object
      sets |entry|''s attribute type to |obj|. It returns // one on success and zero
      on error. OPENSSL_EXPORT int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *entry,
      const ASN1_OBJECT *obj); // X509_NAME_ENTRY_get_data returns |entry|''s attribute
      value, represented as an // |ASN1_STRING|. This value may have any ASN.1 type,
      so callers must check the // type before interpreting the contents. This function
      returns a non-const // pointer for OpenSSL compatibility, but callers should
      not mutate the result. // Doing so will break internal invariants in the library.
      // // See |ASN1_STRING| for how values are represented in this library. Where
      a // specific |ASN1_STRING| representation exists, that representation is used.
      // Otherwise, the |V_ASN1_OTHER| representation is used. Note that NULL, OBJECT
      // IDENTIFIER, and BOOLEAN attribute values are represented as |V_ASN1_OTHER|,
      // because their usual representation in this library is not // |ASN1_STRING|-compatible.
      OPENSSL_EXPORT ASN1_STRING *X509_NAME_ENTRY_get_data( const X509_NAME_ENTRY
      *entry); // X509_NAME_ENTRY_set_data sets |entry|''s value to |len| bytes from
      |bytes|. It // returns one on success and zero on error. If |len| is -1, |bytes|
      must be a // NUL-terminated C string and the length is determined by |strlen|.
      |bytes| is // converted to an ASN.1 type as follows: // // If |type| is a |MBSTRING_*|
      constant, the value is an ASN.1 string. The // string is determined by decoding
      |bytes| in the encoding specified by |type|, // and then re-encoding it in a
      form appropriate for |entry|''s attribute type. // See |ASN1_STRING_set_by_NID|
      for details. // // Otherwise, the value is an |ASN1_STRING| with type |type|
      and value |bytes|. // See |ASN1_STRING| for how to format ASN.1 types as an
      |ASN1_STRING|. If // |type| is |V_ASN1_UNDEF| the previous |ASN1_STRING| type
      is reused. OPENSSL_EXPORT int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *entry,
      int type, const uint8_t *bytes, ossl_ssize_t len); // X509_NAME_ENTRY_set returns
      the zero-based index of the RDN which contains // |entry|. Consecutive entries
      with the same index are part of the same RDN. OPENSSL_EXPORT int X509_NAME_ENTRY_set(const
      X509_NAME_ENTRY *entry); // X509_NAME_ENTRY_create_by_OBJ creates a new |X509_NAME_ENTRY|
      with attribute // type |obj|. The attribute value is determined from |type|,
      |bytes|, and |len| // as in |X509_NAME_ENTRY_set_data|. It returns the |X509_NAME_ENTRY|
      on success // and NULL on error. // // If |out| is non-NULL and |*out| is NULL,
      it additionally sets |*out| to the // result on success. If both |out| and |*out|
      are non-NULL, it updates the // object at |*out| instead of allocating a new
      one. OPENSSL_EXPORT X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ( X509_NAME_ENTRY
      **out, const ASN1_OBJECT *obj, int type, const uint8_t *bytes, ossl_ssize_t
      len); // X509_NAME_ENTRY_create_by_NID behaves like |X509_NAME_ENTRY_create_by_OBJ|
      // except the attribute type is |nid|, which should be one of the |NID_*| //
      constants. OPENSSL_EXPORT X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID( X509_NAME_ENTRY
      **out, int nid, int type, const uint8_t *bytes, ossl_ssize_t len); // X509_NAME_ENTRY_create_by_txt
      behaves like |X509_NAME_ENTRY_create_by_OBJ| // except the attribute type is
      |field|, which is passed to |OBJ_txt2obj|. OPENSSL_EXPORT X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(
      X509_NAME_ENTRY **out, const char *field, int type, const uint8_t *bytes, ossl_ssize_t
      len); // Public keys. // // X.509 encodes public keys as SubjectPublicKeyInfo
      (RFC 5280), sometimes // referred to as SPKI. These are represented in this
      library by |X509_PUBKEY|. // X509_PUBKEY_new returns a newly-allocated, empty
      |X509_PUBKEY| object, or // NULL on error. OPENSSL_EXPORT X509_PUBKEY *X509_PUBKEY_new(void);
      // X509_PUBKEY_free releases memory associated with |key|. OPENSSL_EXPORT void
      X509_PUBKEY_free(X509_PUBKEY *key); // d2i_X509_PUBKEY parses up to |len| bytes
      from |*inp| as a DER-encoded // SubjectPublicKeyInfo, as described in |d2i_SAMPLE|.
      OPENSSL_EXPORT X509_PUBKEY *d2i_X509_PUBKEY(X509_PUBKEY **out, const uint8_t
      **inp, long len); // i2d_X509_PUBKEY marshals |key| as a DER-encoded SubjectPublicKeyInfo,
      as // described in |i2d_SAMPLE|. OPENSSL_EXPORT int i2d_X509_PUBKEY(const X509_PUBKEY
      *key, uint8_t **outp); // X509_PUBKEY_set serializes |pkey| into a newly-allocated
      |X509_PUBKEY| // structure. On success, it frees |*x| if non-NULL, then sets
      |*x| to the new // object, and returns one. Otherwise, it returns zero. OPENSSL_EXPORT
      int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); // X509_PUBKEY_get0 returns
      |key| as an |EVP_PKEY|, or NULL if |key| either // could not be parsed or is
      an unrecognized algorithm. The |EVP_PKEY| is cached // in |key|, so callers
      must not mutate the result. OPENSSL_EXPORT EVP_PKEY *X509_PUBKEY_get0(const
      X509_PUBKEY *key); // X509_PUBKEY_get behaves like |X509_PUBKEY_get0| but increments
      the reference // count on the |EVP_PKEY|. The caller must release the result
      with // |EVP_PKEY_free| when done. The |EVP_PKEY| is cached in |key|, so callers
      must // not mutate the result. OPENSSL_EXPORT EVP_PKEY *X509_PUBKEY_get(const
      X509_PUBKEY *key); // X509_PUBKEY_set0_param sets |pub| to a key with AlgorithmIdentifier
      // determined by |obj|, |param_type|, and |param_value|, and an encoded // public
      key of |key|. On success, it gives |pub| ownership of all the other // parameters
      and returns one. Otherwise, it returns zero. |key| must have been // allocated
      by |OPENSSL_malloc|. |obj| and, if applicable, |param_value| must // not be
      freed after a successful call, and must have been allocated in a // manner compatible
      with |ASN1_OBJECT_free| or |ASN1_STRING_free|. // // |obj|, |param_type|, and
      |param_value| are interpreted as in // |X509_ALGOR_set0|. See |X509_ALGOR_set0|
      for details. OPENSSL_EXPORT int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT
      *obj, int param_type, void *param_value, uint8_t *key, int key_len); // X509_PUBKEY_get0_param
      outputs fields of |pub| and returns one. If |out_obj| // is not NULL, it sets
      |*out_obj| to AlgorithmIdentifier''s OID. If |out_key| // is not NULL, it sets
      |*out_key| and |*out_key_len| to the encoded public key. // If |out_alg| is
      not NULL, it sets |*out_alg| to the AlgorithmIdentifier. // // All pointers
      outputted by this function are internal to |pub| and must not be // freed by
      the caller. Additionally, although some outputs are non-const, // callers must
      not mutate the resulting objects. // // Note: X.509 SubjectPublicKeyInfo structures
      store the encoded public key as a // BIT STRING. |*out_key| and |*out_key_len|
      will silently pad the key with zero // bits if |pub| did not contain a whole
      number of bytes. Use // |X509_PUBKEY_get0_public_key| to preserve this information.
      OPENSSL_EXPORT int X509_PUBKEY_get0_param(ASN1_OBJECT **out_obj, const uint8_t
      **out_key, int *out_key_len, X509_ALGOR **out_alg, X509_PUBKEY *pub); // X509_PUBKEY_get0_public_key
      returns |pub|''s encoded public key. OPENSSL_EXPORT const ASN1_BIT_STRING *X509_PUBKEY_get0_public_key(
      const X509_PUBKEY *pub); // Extensions. // // X.509 certificates and CRLs may
      contain a list of extensions (RFC 5280). // Extensions have a type, specified
      by an object identifier (|ASN1_OBJECT|) and // a byte string value, which should
      a DER-encoded structure whose type is // determined by the extension type. This
      library represents extensions with the // |X509_EXTENSION| type. // X509_EXTENSION
      is an |ASN1_ITEM| whose ASN.1 type is X.509 Extension (RFC // 5280) and C type
      is |X509_EXTENSION*|. DECLARE_ASN1_ITEM(X509_EXTENSION)// X509_EXTENSION_new
      returns a newly-allocated, empty |X509_EXTENSION| object// or NULL on error.OPENSSL_EXPORT
      X509_EXTENSION *X509_EXTENSION_new(void); // X509_EXTENSION_free releases memory
      associated with |ex|. OPENSSL_EXPORT void X509_EXTENSION_free(X509_EXTENSION
      *ex); // d2i_X509_EXTENSION parses up to |len| bytes from |*inp| as a DER-encoded
      // X.509 Extension (RFC 5280), as described in |d2i_SAMPLE|. OPENSSL_EXPORT
      X509_EXTENSION *d2i_X509_EXTENSION(X509_EXTENSION **out, const uint8_t **inp,
      long len); // i2d_X509_EXTENSION marshals |ex| as a DER-encoded X.509 Extension
      (RFC // 5280), as described in |i2d_SAMPLE|. OPENSSL_EXPORT int i2d_X509_EXTENSION(const
      X509_EXTENSION *ex, uint8_t **outp); // X509_EXTENSION_dup returns a newly-allocated
      copy of |ex|, or NULL on error. // This function works by serializing the structure,
      so if |ex| is incomplete, // it may fail. OPENSSL_EXPORT X509_EXTENSION *X509_EXTENSION_dup(const
      X509_EXTENSION *ex); // X509_EXTENSION_create_by_NID creates a new |X509_EXTENSION|
      with type |nid|, // value |data|, and critical bit |crit|. It returns an |X509_EXTENSION|
      on // success, and NULL on error. |nid| should be a |NID_*| constant. // //
      If |ex| and |*ex| are both non-NULL, |*ex| is used to hold the result, // otherwise
      a new object is allocated. If |ex| is non-NULL and |*ex| is NULL, // the function
      sets |*ex| to point to the newly allocated result, in addition // to returning
      the result. OPENSSL_EXPORT X509_EXTENSION *X509_EXTENSION_create_by_NID( X509_EXTENSION
      **ex, int nid, int crit, const ASN1_OCTET_STRING *data); // X509_EXTENSION_create_by_OBJ
      behaves like |X509_EXTENSION_create_by_NID|, but // the extension type is determined
      by an |ASN1_OBJECT|. OPENSSL_EXPORT X509_EXTENSION *X509_EXTENSION_create_by_OBJ(
      X509_EXTENSION **ex, const ASN1_OBJECT *obj, int crit, const ASN1_OCTET_STRING
      *data); // X509_EXTENSION_get_object returns |ex|''s extension type. This function
      // returns a non-const pointer for OpenSSL compatibility, but callers should
      not // mutate the result. OPENSSL_EXPORT ASN1_OBJECT *X509_EXTENSION_get_object(const
      X509_EXTENSION *ex); // X509_EXTENSION_get_data returns |ne|''s extension value.
      This function returns // a non-const pointer for OpenSSL compatibility, but
      callers should not mutate // the result. OPENSSL_EXPORT ASN1_OCTET_STRING *X509_EXTENSION_get_data(
      const X509_EXTENSION *ne); // X509_EXTENSION_get_critical returns one if |ex|
      is critical and zero // otherwise. OPENSSL_EXPORT int X509_EXTENSION_get_critical(const
      X509_EXTENSION *ex); // X509_EXTENSION_set_object sets |ex|''s extension type
      to |obj|. It returns one // on success and zero on error. OPENSSL_EXPORT int
      X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); // X509_EXTENSION_set_critical
      sets |ex| to critical if |crit| is non-zero and // to non-critical if |crit|
      is zero. OPENSSL_EXPORT int X509_EXTENSION_set_critical(X509_EXTENSION *ex,
      int crit); // X509_EXTENSION_set_data set''s |ex|''s extension value to a copy
      of |data|. It // returns one on success and zero on error. OPENSSL_EXPORT int
      X509_EXTENSION_set_data(X509_EXTENSION *ex, const ASN1_OCTET_STRING *data);
      // Extension lists. // // The following functions manipulate lists of extensions.
      Most of them have // corresponding functions on the containing |X509|, |X509_CRL|,
      or // |X509_REVOKED|. DEFINE_STACK_OF(X509_EXTENSION)typedef STACK_OF(X509_EXTENSION)
      X509_EXTENSIONS; // d2i_X509_EXTENSIONS parses up to |len| bytes from |*inp|
      as a DER-encoded // SEQUENCE OF Extension (RFC 5280), as described in |d2i_SAMPLE|.
      OPENSSL_EXPORT X509_EXTENSIONS *d2i_X509_EXTENSIONS(X509_EXTENSIONS **out, const
      uint8_t **inp, long len); // i2d_X509_EXTENSIONS marshals |alg| as a DER-encoded
      SEQUENCE OF Extension // (RFC 5280), as described in |i2d_SAMPLE|. OPENSSL_EXPORT
      int i2d_X509_EXTENSIONS(const X509_EXTENSIONS *alg, uint8_t **outp); // X509v3_get_ext_count
      returns the number of extensions in |x|. OPENSSL_EXPORT int X509v3_get_ext_count(const
      STACK_OF(X509_EXTENSION) *x); // X509v3_get_ext_by_NID returns the index of
      the first extension in |x| with // type |nid|, or a negative number if not found.
      If found, callers can use // |X509v3_get_ext| to look up the extension by index.
      // // If |lastpos| is non-negative, it begins searching at |lastpos| + 1. Callers
      // can thus loop over all matching extensions by first passing -1 and then //
      passing the previously-returned value until no match is returned. OPENSSL_EXPORT
      int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, int nid, int lastpos);
      // X509v3_get_ext_by_OBJ behaves like |X509v3_get_ext_by_NID| but looks for
      // extensions matching |obj|. OPENSSL_EXPORT int X509v3_get_ext_by_OBJ(const
      STACK_OF(X509_EXTENSION) *x, const ASN1_OBJECT *obj, int lastpos); // X509v3_get_ext_by_critical
      returns the index of the first extension in |x| // whose critical bit matches
      |crit|, or a negative number if no such extension // was found. // // If |lastpos|
      is non-negative, it begins searching at |lastpos| + 1. Callers // can thus loop
      over all matching extensions by first passing -1 and then // passing the previously-returned
      value until no match is returned. OPENSSL_EXPORT int X509v3_get_ext_by_critical(const
      STACK_OF(X509_EXTENSION) *x, int crit, int lastpos); // X509v3_get_ext returns
      the extension in |x| at index |loc|, or NULL if |loc| // is out of bounds. This
      function returns a non-const pointer for OpenSSL // compatibility, but callers
      should not mutate the result. OPENSSL_EXPORT X509_EXTENSION *X509v3_get_ext(const
      STACK_OF(X509_EXTENSION) *x, int loc); // X509v3_delete_ext removes the extension
      in |x| at index |loc| and returns the // removed extension, or NULL if |loc|
      was out of bounds. If an extension was // returned, the caller must release
      it with |X509_EXTENSION_free|. OPENSSL_EXPORT X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION)
      *x, int loc); // X509v3_add_ext adds a copy of |ex| to the extension list in
      |*x|. If |*x| is // NULL, it allocates a new |STACK_OF(X509_EXTENSION)| to hold
      the copy and sets // |*x| to the new list. It returns |*x| on success and NULL
      on error. The // caller retains ownership of |ex| and can release it independently
      of |*x|. // // The new extension is inserted at index |loc|, shifting extensions
      to the // right. If |loc| is -1 or out of bounds, the new extension is appended
      to the // list. OPENSSL_EXPORT STACK_OF(X509_EXTENSION) *X509v3_add_ext( STACK_OF(X509_EXTENSION)
      **x, const X509_EXTENSION *ex, int loc); // Built-in extensions. // // Several
      functions in the library encode and decode extension values into a // C structure
      to that extension. The following extensions are supported: // // - |NID_authority_key_identifier|
      with type |AUTHORITY_KEYID| // - |NID_basic_constraints| with type |BASIC_CONSTRAINTS|
      // - |NID_certificate_issuer| with type |GENERAL_NAMES| // - |NID_certificate_policies|
      with type |CERTIFICATEPOLICIES| // - |NID_crl_distribution_points| with type
      |CRL_DIST_POINTS| // - |NID_crl_number| with type |ASN1_INTEGER| // - |NID_crl_reason|
      with type |ASN1_ENUMERATED| // - |NID_delta_crl| with type |ASN1_INTEGER| //
      - |NID_ext_key_usage| with type |EXTENDED_KEY_USAGE| // - |NID_freshest_crl|
      with type |ISSUING_DIST_POINT| // - |NID_id_pkix_OCSP_noCheck| with type |ASN1_NULL|
      // - |NID_info_access| with type |AUTHORITY_INFO_ACCESS| // - |NID_inhibit_any_policy|
      with type |ASN1_INTEGER| // - |NID_invalidity_date| with type |ASN1_GENERALIZEDTIME|
      // - |NID_issuer_alt_name| with type |GENERAL_NAMES| // - |NID_issuing_distribution_point|
      with type |ISSUING_DIST_POINT| // - |NID_key_usage| with type |ASN1_BIT_STRING|
      // - |NID_name_constraints| with type |NAME_CONSTRAINTS| // - |NID_netscape_base_url|
      with type |ASN1_IA5STRING| // - |NID_netscape_ca_policy_url| with type |ASN1_IA5STRING|
      // - |NID_netscape_ca_revocation_url| with type |ASN1_IA5STRING| // - |NID_netscape_cert_type|
      with type |ASN1_BIT_STRING| // - |NID_netscape_comment| with type |ASN1_IA5STRING|
      // - |NID_netscape_renewal_url| with type |ASN1_IA5STRING| // - |NID_netscape_revocation_url|
      with type |ASN1_IA5STRING| // - |NID_netscape_ssl_server_name| with type |ASN1_IA5STRING|
      // - |NID_policy_constraints| with type |POLICY_CONSTRAINTS| // - |NID_policy_mappings|
      with type |POLICY_MAPPINGS| // - |NID_sinfo_access| with type |AUTHORITY_INFO_ACCESS|
      // - |NID_subject_alt_name| with type |GENERAL_NAMES| // - |NID_subject_key_identifier|
      with type |ASN1_OCTET_STRING| // // If an extension does not appear in this
      list, e.g. for a custom extension, // callers can instead use functions such
      as |X509_get_ext_by_OBJ|, // |X509_EXTENSION_get_data|, and |X509_EXTENSION_create_by_OBJ|
      to inspect or // create extensions directly. Although the |X509V3_EXT_METHOD|
      mechanism allows // registering custom extensions, doing so is deprecated and
      may result in // threading or memory errors. // X509V3_EXT_d2i decodes |ext|
      and returns a pointer to a newly-allocated // structure, with type dependent
      on the type of the extension. It returns NULL // if |ext| is an unsupported
      extension or if there was a syntax error in the // extension. The caller should
      cast the return value to the expected type and // free the structure when done.
      // // WARNING: Casting the return value to the wrong type is a potentially //
      exploitable memory error, so callers must not use this function before // checking
      |ext| is of a known type. See the list at the top of this section // for the
      correct types. OPENSSL_EXPORT void *X509V3_EXT_d2i(const X509_EXTENSION *ext);
      // X509V3_get_d2i finds and decodes the extension in |extensions| of type |nid|.
      // If found, it decodes it and returns a newly-allocated structure, with type
      // dependent on |nid|. If the extension is not found or on error, it returns
      // NULL. The caller may distinguish these cases using the |out_critical| value.
      // // If |out_critical| is not NULL, this function sets |*out_critical| to one
      if // the extension is found and critical, zero if it is found and not critical,
      -1 // if it is not found, and -2 if there is an invalid duplicate extension.
      Note // this function may set |*out_critical| to one or zero and still return
      NULL if // the extension is found but has a syntax error. // // If |out_idx|
      is not NULL, this function looks for the first occurrence of the // extension
      after |*out_idx|. It then sets |*out_idx| to the index of the // extension,
      or -1 if not found. If |out_idx| is non-NULL, duplicate extensions // are not
      treated as an error. Callers, however, should not rely on this // behavior as
      it may be removed in the future. Duplicate extensions are // forbidden in RFC
      5280. // // WARNING: This function is difficult to use correctly. Callers should
      pass a // non-NULL |out_critical| and check both the return value and |*out_critical|
      // to handle errors. If the return value is NULL and |*out_critical| is not
      -1, // there was an error. Otherwise, the function succeeded and but may return
      NULL // for a missing extension. Callers should pass NULL to |out_idx| so that
      // duplicate extensions are handled correctly. // // Additionally, casting the
      return value to the wrong type is a potentially // exploitable memory error,
      so callers must ensure the cast and |nid| match. // See the list at the top
      of this section for the correct types. OPENSSL_EXPORT void *X509V3_get_d2i(const
      STACK_OF(X509_EXTENSION) *extensions, int nid, int *out_critical, int *out_idx);
      // X509V3_EXT_free casts |ext_data| into the type that corresponds to |nid|
      and // releases memory associated with it. It returns one on success and zero
      if // |nid| is not a known extension. // // WARNING: Casting |ext_data| to the
      wrong type is a potentially exploitable // memory error, so callers must ensure
      |ext_data|''s type matches |nid|. See the // list at the top of this section
      for the correct types. // // TODO(davidben): OpenSSL upstream no longer exposes
      this function. Remove it? OPENSSL_EXPORT int X509V3_EXT_free(int nid, void *ext_data);
      // X509V3_EXT_i2d casts |ext_struc| into the type that corresponds to // |ext_nid|,
      serializes it, and returns a newly-allocated |X509_EXTENSION| // object containing
      the serialization, or NULL on error. The |X509_EXTENSION| // has OID |ext_nid|
      and is critical if |crit| is one. // // WARNING: Casting |ext_struc| to the
      wrong type is a potentially exploitable // memory error, so callers must ensure
      |ext_struct|''s type matches |ext_nid|. // See the list at the top of this section
      for the correct types. OPENSSL_EXPORT X509_EXTENSION *X509V3_EXT_i2d(int ext_nid,
      int crit, void *ext_struc); // The following constants control the behavior
      of |X509V3_add1_i2d| and related // functions. // X509V3_ADD_OP_MASK can be
      ANDed with the flags to determine how duplicate // extensions are processed.
      #define X509V3_ADD_OP_MASK 0xfL// X509V3_ADD_DEFAULT causes the function to
      fail if the extension was already// present.#define X509V3_ADD_DEFAULT 0L//
      X509V3_ADD_APPEND causes the function to unconditionally appended the new//
      extension to to the extensions list, even if there is a duplicate.#define X509V3_ADD_APPEND
      1L// X509V3_ADD_REPLACE causes the function to replace the existing extension,
      or// append if it is not present.#define X509V3_ADD_REPLACE 2L// X509V3_ADD_REPLACE_EXISTING
      causes the function to replace the existing// extension and fail if it is not
      present.#define X509V3_ADD_REPLACE_EXISTING 3L// X509V3_ADD_KEEP_EXISTING causes
      the function to succeed without replacing the// extension if already present.#define
      X509V3_ADD_KEEP_EXISTING 4L// X509V3_ADD_DELETE causes the function to remove
      the matching extension. No// new extension is added. If there is no matching
      extension, the function// fails. The |value| parameter is ignored in this mode.#define
      X509V3_ADD_DELETE 5L// X509V3_ADD_SILENT may be ORed into one of the values
      above to indicate the// function should not add to the error queue on duplicate
      or missing extension.// The function will continue to return zero in those cases,
      and it will// continue to return -1 and add to the error queue on other errors.#define
      X509V3_ADD_SILENT 0x10// X509V3_add1_i2d casts |value| to the type that corresponds
      to |nid|,// serializes it, and appends it to the extension list in |*x|. If
      |*x| is NULL,// it will set |*x| to a newly-allocated |STACK_OF(X509_EXTENSION)|
      as needed.// The |crit| parameter determines whether the new extension is critical.//
      |flags| may be some combination of the |X509V3_ADD_*| constants to control//
      the function''s behavior on duplicate extension.//// This function returns one
      on success, zero if the operation failed due to a// missing or duplicate extension,
      and -1 on other errors.//// WARNING: Casting |value| to the wrong type is a
      potentially exploitable// memory error, so callers must ensure |value|''s type
      matches |nid|. See the// list at the top of this section for the correct types.OPENSSL_EXPORT
      int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int
      crit, unsigned long flags); // Basic constraints. // // The basic constraints
      extension (RFC 5280, section 4.2.1.9) determines // whether a certificate is
      a CA certificate and, if so, optionally constrains // the maximum depth of the
      certificate chain. // A BASIC_CONSTRAINTS_st, aka |BASIC_CONSTRAINTS| represents
      an // BasicConstraints structure (RFC 5280). struct BASIC_CONSTRAINTS_st { ASN1_BOOLEAN
      ca; ASN1_INTEGER *pathlen;} /* BASIC_CONSTRAINTS */; // BASIC_CONSTRAINTS is
      an |ASN1_ITEM| whose ASN.1 type is BasicConstraints (RFC // 5280) and C type
      is |BASIC_CONSTRAINTS*|. DECLARE_ASN1_ITEM(BASIC_CONSTRAINTS)// BASIC_CONSTRAINTS_new
      returns a newly-allocated, empty |BASIC_CONSTRAINTS|// object, or NULL on error.OPENSSL_EXPORT
      BASIC_CONSTRAINTS *BASIC_CONSTRAINTS_new(void); // BASIC_CONSTRAINTS_free releases
      memory associated with |bcons|. OPENSSL_EXPORT void BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS
      *bcons); // d2i_BASIC_CONSTRAINTS parses up to |len| bytes from |*inp| as a
      DER-encoded // BasicConstraints (RFC 5280), as described in |d2i_SAMPLE|. OPENSSL_EXPORT
      BASIC_CONSTRAINTS *d2i_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS **out, const uint8_t
      **inp, long len); // i2d_BASIC_CONSTRAINTS marshals |bcons| as a DER-encoded
      BasicConstraints (RFC // 5280), as described in |i2d_SAMPLE|. OPENSSL_EXPORT
      int i2d_BASIC_CONSTRAINTS(const BASIC_CONSTRAINTS *bcons, uint8_t **outp); //
      Extended key usage. // // The extended key usage extension (RFC 5280, section
      4.2.1.12) indicates the // purposes of the certificate''s public key. Such constraints
      are important to // avoid cross-protocol attacks. typedef STACK_OF(ASN1_OBJECT)
      EXTENDED_KEY_USAGE;// EXTENDED_KEY_USAGE is an |ASN1_ITEM| whose ASN.1 type
      is ExtKeyUsageSyntax// (RFC 5280) and C type is |STACK_OF(ASN1_OBJECT)*|, or
      |EXTENDED_KEY_USAGE*|.DECLARE_ASN1_ITEM(EXTENDED_KEY_USAGE)// EXTENDED_KEY_USAGE_new
      returns a newly-allocated, empty |EXTENDED_KEY_USAGE|// object, or NULL on error.OPENSSL_EXPORT
      EXTENDED_KEY_USAGE *EXTENDED_KEY_USAGE_new(void);// EXTENDED_KEY_USAGE_free
      releases memory associated with |eku|.OPENSSL_EXPORT void EXTENDED_KEY_USAGE_free(EXTENDED_KEY_USAGE
      *eku); // d2i_EXTENDED_KEY_USAGE parses up to |len| bytes from |*inp| as a DER-encoded
      // ExtKeyUsageSyntax (RFC 5280), as described in |d2i_SAMPLE|. OPENSSL_EXPORT
      EXTENDED_KEY_USAGE *d2i_EXTENDED_KEY_USAGE( EXTENDED_KEY_USAGE **out, const
      uint8_t **inp, long len); // i2d_EXTENDED_KEY_USAGE marshals |eku| as a DER-encoded
      ExtKeyUsageSyntax (RFC // 5280), as described in |i2d_SAMPLE|. OPENSSL_EXPORT
      int i2d_EXTENDED_KEY_USAGE(const EXTENDED_KEY_USAGE *eku, uint8_t **outp); //
      General names. // // A |GENERAL_NAME| represents an X.509 GeneralName structure,
      defined in RFC // 5280, Section 4.2.1.6. General names are distinct from names
      (|X509_NAME|). A // general name is a CHOICE type which may contain one of several
      name types, // most commonly a DNS name or an IP address. General names most
      commonly appear // in the subject alternative name (SAN) extension, though they
      are also used in // other extensions. // // Many extensions contain a SEQUENCE
      OF GeneralName, or GeneralNames, so // |STACK_OF(GENERAL_NAME)| is defined and
      aliased to |GENERAL_NAMES|. typedef struct otherName_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 46
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 46
    functionName: SignatureVerifyCache
    functionSourceFile: /src/boringssl/include/openssl/pki/signature_verify_cache.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OPENSSL_EXPORT
    signature: 'OPENSSL_EXPORT SignatureVerifyCache '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 133
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 133
    functionName: StatusCode
    functionSourceFile: /src/boringssl/include/openssl/pki/verify_error.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: enum class
    signature: 'enum class StatusCode '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VerifyTrustStore
      Src: /src/boringssl/include/openssl/pki/verify.h:23,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 37
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 37
    functionName: VerifyTrustStore
    functionSourceFile: /src/boringssl/include/openssl/pki/verify.h
    functionUses: []
    functionsReached:
    - VerifyTrustStore
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT VerifyTrustStore '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CertificateVerifyOptions
      Src: /src/boringssl/include/openssl/pki/verify.h:79,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 126
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 126
    functionName: CertificateVerifyOptions
    functionSourceFile: /src/boringssl/include/openssl/pki/verify.h
    functionUses: []
    functionsReached:
    - CertificateVerifyOptions
    linkageType: ''
    returnType: class
    signature: 'class OPENSSL_EXPORT CertificateVerifyOptions '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 96
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 96
    functionName: OCSPVerifyResult
    functionSourceFile: /src/boringssl/include/openssl/pki/ocsp.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct OPENSSL_EXPORT
    signature: 'struct OPENSSL_EXPORT OCSPVerifyResult '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 28
      start: 18
    functionDepth: 0
    functionLinenumber: 18
    functionLinenumberEnd: 28
    functionName: BORINGSSL_enum_c_type_test
    functionSourceFile: /src/boringssl/ssl/ssl_c_test.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int BORINGSSL_enum_c_type_test(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/boringssl/ssl/internal.h:81,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    functionName: empty
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - size
    linkageType: ''
    returnType: bool
    signature: 'bool empty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - i
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    functionName: operator
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: 'const T & operator[](size_t i) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSLTranscript
      Src: /src/boringssl/ssl/internal.h:417,1
    - Dst: buffer
      Src: /src/boringssl/ssl/internal.h:446,1
    - Dst: Span
      Src: /src/boringssl/ssl/internal.h:447,1
    - Dst: SSLAEADContext
      Src: /src/boringssl/ssl/internal.h:513,1
    - Dst: DTLSRecordNumber
      Src: /src/boringssl/ssl/internal.h:682,1
    - Dst: DTLSRecordNumber
      Src: /src/boringssl/ssl/internal.h:689,1
    - Dst: combined
      Src: /src/boringssl/ssl/internal.h:693,1
    - Dst: combined
      Src: /src/boringssl/ssl/internal.h:696,1
    - Dst: SetKey
      Src: /src/boringssl/ssl/internal.h:727,1
    - Dst: SSLTranscript
      Src: /src/boringssl/ssl/internal.h:419,1
    - Dst: sequence
      Src: /src/boringssl/ssl/internal.h:702,1
    - Dst: GenerateMask
      Src: /src/boringssl/ssl/internal.h:728,1
    - Dst: combined_
      Src: /src/boringssl/ssl/internal.h:710,1
    CyclomaticComplexity: 84
    EdgeCount: 84
    ICount: 77
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 752
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 752
    functionName: SSLTranscript
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - combined
    - combined_
    - sequence
    - buffer
    - Span
    - SetKey
    - SSLAEADContext
    - GenerateMask
    - SSLTranscript
    - DTLSRecordNumber
    linkageType: ''
    returnType: class
    signature: 'class SSLTranscript '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sequence
      Src: /src/boringssl/ssl/internal.h:702,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 702
      start: 702
    functionDepth: 0
    functionLinenumber: 702
    functionLinenumberEnd: 702
    functionName: HasNext
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - sequence
    linkageType: ''
    returnType: bool
    signature: 'bool HasNext() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSLAEADContext
      Src: /src/boringssl/ssl/internal.h:513,1
    - Dst: combined
      Src: /src/boringssl/ssl/internal.h:693,1
    - Dst: DTLSRecordNumber
      Src: /src/boringssl/ssl/internal.h:689,1
    - Dst: DTLSRecordNumber
      Src: /src/boringssl/ssl/internal.h:682,1
    - Dst: combined
      Src: /src/boringssl/ssl/internal.h:696,1
    - Dst: sequence
      Src: /src/boringssl/ssl/internal.h:702,1
    - Dst: combined_
      Src: /src/boringssl/ssl/internal.h:710,1
    CyclomaticComplexity: 65
    EdgeCount: 65
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 713
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 713
    functionName: DigestLen
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - combined_
    - combined
    - SSLAEADContext
    - sequence
    - DTLSRecordNumber
    linkageType: ''
    returnType: size_t
    signature: 'size_t DigestLen() const; // Digest returns the PRF hash. For TLS
      1.1 and below, this is // |EVP_md5_sha1|. const EVP_MD *Digest() const; // Update
      adds |in| to the handshake buffer and handshake hash, whichever is // enabled.
      It returns true on success and false on failure. bool Update(Span<const uint8_t>
      in); // GetHash writes the handshake hash to |out| which must have room for
      at // least |DigestLen| bytes. On success, it returns true and sets |*out_len|
      to // the number of bytes written. Otherwise, it returns false. bool GetHash(uint8_t
      *out, size_t *out_len) const; // GetFinishedMAC computes the MAC for the Finished
      message into the bytes // pointed by |out| and writes the number of bytes to
      |*out_len|. |out| must // have room for |EVP_MAX_MD_SIZE| bytes. It returns
      true on success and false // on failure. bool GetFinishedMAC(uint8_t *out, size_t
      *out_len, const SSL_SESSION *session, bool from_server) const; private: // HashBuffer
      initializes |ctx| to use |digest| and writes the contents of // |buffer_| to
      |ctx|. If this SSLTranscript is for DTLS 1.3, the appropriate // bytes in |buffer_|
      will be skipped when hashing the buffer. bool HashBuffer(EVP_MD_CTX *ctx, const
      EVP_MD *digest) const; // AddToBufferOrHash directly adds the contents of |in|
      to |buffer_| and/or // |hash_|. bool AddToBufferOrHash(Span<const uint8_t> in);
      // buffer_, if non-null, contains the handshake transcript. UniquePtr<BUF_MEM>
      buffer_; // hash, if initialized with an |EVP_MD|, maintains the handshake hash.
      ScopedEVP_MD_CTX hash_; // is_dtls_ indicates whether this is a transcript for
      a DTLS connection. bool is_dtls_ : 1; // version_ contains the version for the
      connection (if known). uint16_t version_ = 0; }; // tls1_prf computes the PRF
      function for |ssl|. It fills |out|, using |secret| // as the secret and |label|
      as the label. |seed1| and |seed2| are concatenated // to form the seed parameter.
      It returns true on success and false on failure. bool tls1_prf(const EVP_MD
      *digest, Span<uint8_t> out, Span<const uint8_t> secret, std::string_view label,
      Span<const uint8_t> seed1, Span<const uint8_t> seed2); // Encryption layer.
      // SSLAEADContext contains information about an AEAD that is being used to //
      encrypt an SSL connection. class SSLAEADContext '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 700
      start: 700
    functionDepth: 0
    functionLinenumber: 700
    functionLinenumberEnd: 700
    functionName: sequence
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: 'uint64_t sequence() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 649
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 649
    functionName: max_seq_num
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: 'uint64_t max_seq_num() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSLBuffer
      Src: /src/boringssl/ssl/internal.h:1032,1
    - Dst: SSLBuffer
      Src: /src/boringssl/ssl/internal.h:1033,1
    - Dst: span
      Src: /src/boringssl/ssl/internal.h:1043,1
    - Dst: Clear
      Src: /src/boringssl/ssl/internal.h:1033,1
    - Dst: Span
      Src: /src/boringssl/ssl/internal.h:1043,1
    - Dst: data
      Src: /src/boringssl/ssl/internal.h:1043,1
    - Dst: size
      Src: /src/boringssl/ssl/internal.h:1043,1
    - Dst: remaining
      Src: /src/boringssl/ssl/internal.h:1045,1
    - Dst: Span
      Src: /src/boringssl/ssl/internal.h:1045,1
    - Dst: data
      Src: /src/boringssl/ssl/internal.h:1045,1
    - Dst: size
      Src: /src/boringssl/ssl/internal.h:1045,1
    - Dst: size
      Src: /src/boringssl/ssl/internal.h:1045,1
    - Dst: cap
      Src: /src/boringssl/ssl/internal.h:1045,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1080
      start: 1030
    functionDepth: 0
    functionLinenumber: 1030
    functionLinenumberEnd: 1080
    functionName: SSLBuffer
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - Clear
    - cap
    - size
    - SSLBuffer
    - data
    - span
    - Span
    - remaining
    linkageType: ''
    returnType: class
    signature: 'class SSLBuffer '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - out
    argTypes:
    - CBB*
    constantsTouched: []
    func_position:
      end: 934
      start: 934
    functionDepth: 0
    functionLinenumber: 934
    functionLinenumberEnd: 934
    functionName: SerializePrivateKey
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual bool SerializePrivateKey(CBB *out) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - in
    argTypes:
    - CBS*
    constantsTouched: []
    func_position:
      end: 938
      start: 938
    functionDepth: 0
    functionLinenumber: 938
    functionLinenumberEnd: 938
    functionName: DeserializePrivateKey
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual bool DeserializePrivateKey(CBS *in) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3689
      start: 3669
    functionDepth: 0
    functionLinenumber: 3669
    functionLinenumberEnd: 3689
    functionName: ssl_method_st
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_END
    signature: 'BSSL_NAMESPACE_END // Opaque C types. // // The following types are
      exported to C code as public typedefs, so they must // be defined outside of
      the namespace. // ssl_method_st backs the public |SSL_METHOD| type. It is a
      compatibility // structure to support the legacy version-locked methods. struct
      ssl_method_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 95
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 95
    functionName: Clear
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Clear() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: size
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: combined_
      Src: /src/boringssl/ssl/internal.h:710,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 710
      start: 703
    functionDepth: 0
    functionLinenumber: 703
    functionLinenumberEnd: 710
    functionName: Next
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - combined_
    linkageType: ''
    returnType: DTLSRecordNumber
    signature: 'DTLSRecordNumber Next() const { BSSL_CHECK(HasNext()); // This will
      not overflow into the epoch. return DTLSRecordNumber::FromCombined(combined_
      + 1); } private: explicit DTLSRecordNumber(uint64_t combined) : combined_(combined) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1040
      start: 1040
    functionDepth: 0
    functionLinenumber: 1040
    functionLinenumberEnd: 1040
    functionName: empty
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool empty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 4250
      start: 4250
    functionDepth: 0
    functionLinenumber: 4250
    functionLinenumberEnd: 4250
    functionName: (CheckSubClass())
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: RefCounted
    signature: 'RefCounted (CheckSubClass()) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2904
      start: 2904
    functionDepth: 0
    functionLinenumber: 2904
    functionLinenumberEnd: 2904
    functionName: operator
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool operator !=(const Range &r) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2971
      start: 2961
    functionDepth: 0
    functionLinenumber: 2961
    functionLinenumberEnd: 2971
    functionName: IsFullyAcked
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: "struct DTLSOutgoingMessage {\n  size_t msg_len() const {\n    assert(!is_ccs);\n
      \   assert(data.size() >= DTLS1_HM_HEADER_LENGTH);\n    return data.size() -
      DTLS1_HM_HEADER_LENGTH;\n  }"
    signature: 'struct DTLSOutgoingMessage { size_t msg_len() const { assert(!is_ccs);
      assert(data.size() >= DTLS1_HM_HEADER_LENGTH); return data.size() - DTLS1_HM_HEADER_LENGTH;
      } bool IsFullyAcked() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_refcount_dec_and_test_zero
      Src: /src/boringssl/ssl/internal.h:151,1
    - Dst: OPENSSL_free
      Src: /src/boringssl/ssl/internal.h:154,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: DecRefInternal
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - OPENSSL_free
    - CRYPTO_refcount_dec_and_test_zero
    linkageType: ''
    returnType: void
    signature: 'void DecRefInternal() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 170
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 170
    functionName: (CheckSubClass)
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: RefCounted
    signature: 'RefCounted (CheckSubClass) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 253
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 253
    functionName: ssl_cipher_st
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: BSSL_NAMESPACE_END
    signature: 'BSSL_NAMESPACE_END struct ssl_cipher_st '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 658
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 658
    functionName: ExplicitNonceLen
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t ExplicitNonceLen() const; // MaxOverhead returns the maximum
      overhead of calling |Seal|. size_t MaxOverhead() const; // MaxSealInputLen returns
      the maximum length for |Seal| that can fit in // |max_out| output bytes, or
      zero if no input may fit. size_t MaxSealInputLen(size_t max_out) const; // SuffixLen
      calculates the suffix length written by |SealScatter| and writes // it to |*out_suffix_len|.
      It returns true on success and false on error. // |in_len| and |extra_in_len|
      should equal the argument of the same names // passed to |SealScatter|. bool
      SuffixLen(size_t *out_suffix_len, size_t in_len, size_t extra_in_len) const;
      // CiphertextLen calculates the total ciphertext length written by // |SealScatter|
      and writes it to |*out_len|. It returns true on success and // false on error.
      |in_len| and |extra_in_len| should equal the argument of // the same names passed
      to |SealScatter|. bool CiphertextLen(size_t *out_len, size_t in_len, size_t
      extra_in_len) const; // Open authenticates and decrypts |in| in-place. On success,
      it sets |*out| // to the plaintext in |in| and returns true. Otherwise, it returns
      // false. The output will always be |ExplicitNonceLen| bytes ahead of |in|.
      bool Open(Span<uint8_t> *out, uint8_t type, uint16_t record_version, uint64_t
      seqnum, Span<const uint8_t> header, Span<uint8_t> in); // Seal encrypts and
      authenticates |in_len| bytes from |in| and writes the // result to |out|. It
      returns true on success and false on error. // // If |in| and |out| alias then
      |out| + |ExplicitNonceLen| must be == |in|. bool Seal(uint8_t *out, size_t *out_len,
      size_t max_out, uint8_t type, uint16_t record_version, uint64_t seqnum, Span<const
      uint8_t> header, const uint8_t *in, size_t in_len); // SealScatter encrypts
      and authenticates |in_len| bytes from |in| and splits // the result between
      |out_prefix|, |out| and |out_suffix|. It returns one on // success and zero
      on error. // // On successful return, exactly |ExplicitNonceLen| bytes are written
      to // |out_prefix|, |in_len| bytes to |out|, and |SuffixLen| bytes to // |out_suffix|.
      // // |extra_in| may point to an additional plaintext buffer. If present, //
      |extra_in_len| additional bytes are encrypted and authenticated, and the //
      ciphertext is written to the beginning of |out_suffix|. |SuffixLen| should //
      be used to size |out_suffix| accordingly. // // If |in| and |out| alias then
      |out| must be == |in|. Other arguments may not // alias anything. bool SealScatter(uint8_t
      *out_prefix, uint8_t *out, uint8_t *out_suffix, uint8_t type, uint16_t record_version,
      uint64_t seqnum, Span<const uint8_t> header, const uint8_t *in, size_t in_len,
      const uint8_t *extra_in, size_t extra_in_len); bool GetIV(const uint8_t **out_iv,
      size_t *out_iv_len) const; private: // GetAdditionalData returns the additional
      data, writing into |storage| if // necessary. Span<const uint8_t> GetAdditionalData(uint8_t
      storage[13], uint8_t type, uint16_t record_version, uint64_t seqnum, size_t
      plaintext_len, Span<const uint8_t> header); const SSL_CIPHER *cipher_; ScopedEVP_AEAD_CTX
      ctx_; // fixed_nonce_ contains any bytes of the nonce that are fixed for all
      // records. InplaceVector<uint8_t, 12> fixed_nonce_; uint8_t variable_nonce_len_
      = 0; // variable_nonce_included_in_record_ is true if the variable nonce //
      for a record is included as a prefix before the ciphertext. bool variable_nonce_included_in_record_
      : 1; // random_variable_nonce_ is true if the variable nonce is // randomly
      generated, rather than derived from the sequence // number. bool random_variable_nonce_
      : 1; // xor_fixed_nonce_ is true if the fixed nonce should be XOR''d into the
      // variable nonce rather than prepended. bool xor_fixed_nonce_ : 1; // omit_length_in_ad_
      is true if the length should be omitted in the // AEAD''s ad parameter. bool
      omit_length_in_ad_ : 1; // ad_is_header_ is true if the AEAD''s ad parameter
      is the record header. bool ad_is_header_ : 1; }; // DTLS replay bitmap. // DTLSReplayBitmap
      maintains a sliding window of sequence numbers to detect // replayed packets.
      class DTLSReplayBitmap '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1039
      start: 1039
    functionDepth: 0
    functionLinenumber: 1039
    functionLinenumberEnd: 1039
    functionName: size
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ECHServerConfig
      Src: /src/boringssl/ssl/internal.h:1280,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1302
      start: 1277
    functionDepth: 0
    functionLinenumber: 1277
    functionLinenumberEnd: 1302
    functionName: ECHServerConfig
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - ECHServerConfig
    linkageType: ''
    returnType: class
    signature: 'class ECHServerConfig '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1295
      start: 1295
    functionDepth: 0
    functionLinenumber: 1295
    functionLinenumberEnd: 1295
    functionName: ech_config
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ECHConfig
    signature: 'const ECHConfig & ech_config() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2900
      start: 2891
    functionDepth: 0
    functionLinenumber: 2891
    functionLinenumberEnd: 2900
    functionName: DTLSMessageBitmap
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class DTLSMessageBitmap '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetKey
      Src: /src/boringssl/ssl/internal.h:727,1
    - Dst: GenerateMask
      Src: /src/boringssl/ssl/internal.h:728,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 729
      start: 715
    functionDepth: 0
    functionLinenumber: 715
    functionLinenumberEnd: 729
    functionName: RecordNumberEncrypter
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - GenerateMask
    - SetKey
    linkageType: ''
    returnType: class
    signature: 'class RecordNumberEncrypter '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2903
      start: 2901
    functionDepth: 0
    functionLinenumber: 2901
    functionLinenumberEnd: 2903
    functionName: operator
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool operator ==(const Range &r) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2920
      start: 2920
    functionDepth: 0
    functionLinenumber: 2920
    functionLinenumberEnd: 2920
    functionName: IsComplete
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsComplete() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: assert
      Src: /src/boringssl/ssl/internal.h:99,1
    - Dst: move
      Src: /src/boringssl/ssl/internal.h:102,1
    - Dst: move
      Src: /src/boringssl/ssl/internal.h:100,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - t
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 105
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 105
    functionName: PushBack
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - move
    - assert
    linkageType: ''
    returnType: void
    signature: 'void PushBack(T t) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CRYPTO_refcount_inc
      Src: /src/boringssl/ssl/internal.h:149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 149
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 149
    functionName: UpRefInternal
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - CRYPTO_refcount_inc
    linkageType: ''
    returnType: void
    signature: 'void UpRefInternal() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 0
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: is_null_cipher
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool is_null_cipher() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DTLSRecordNumber
      Src: /src/boringssl/ssl/internal.h:682,1
    - Dst: combined
      Src: /src/boringssl/ssl/internal.h:696,1
    - Dst: DTLSRecordNumber
      Src: /src/boringssl/ssl/internal.h:689,1
    - Dst: combined
      Src: /src/boringssl/ssl/internal.h:693,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 699
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 699
    functionName: DTLSRecordNumber
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - combined
    - DTLSRecordNumber
    linkageType: ''
    returnType: class
    signature: 'class DTLSRecordNumber '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1296
      start: 1296
    functionDepth: 0
    functionLinenumber: 1296
    functionLinenumberEnd: 1296
    functionName: is_retry_config
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool is_retry_config() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Dup
      Src: /src/boringssl/ssl/internal.h:1409,1
    - Dst: static_assert
      Src: /src/boringssl/ssl/internal.h:2883,1
    - Dst: type
      Src: /src/boringssl/ssl/internal.h:2234,1
    CyclomaticComplexity: 387
    EdgeCount: 387
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2905
      start: 1391
    functionDepth: 0
    functionLinenumber: 1391
    functionLinenumberEnd: 2905
    functionName: SSLCredentialType
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - type
    - Dup
    - static_assert
    linkageType: ''
    returnType: enum class
    signature: 'enum class SSLCredentialType '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Span
      Src: /src/boringssl/ssl/internal.h:2946,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2947
      start: 2941
    functionDepth: 0
    functionLinenumber: 2941
    functionLinenumberEnd: 2947
    functionName: msg
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - Span
    linkageType: ''
    returnType: "struct DTLSIncomingMessage {\n  static constexpr bool kAllowUniquePtr
      = true;\n\n  Span<uint8_t> msg() { return Span(data).subspan(DTLS1_HM_HEADER_LENGTH);
      }"
    signature: 'struct DTLSIncomingMessage { static constexpr bool kAllowUniquePtr
      = true; Span<uint8_t> msg() { return Span(data).subspan(DTLS1_HM_HEADER_LENGTH);
      } Span<const uint8_t> msg() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: msg
      Src: /src/boringssl/ssl/internal.h:2948,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2948
      start: 2948
    functionDepth: 0
    functionLinenumber: 2948
    functionLinenumberEnd: 2948
    functionName: msg_len
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - msg
    linkageType: ''
    returnType: size_t
    signature: 'size_t msg_len() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 538
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 538
    functionName: cipher
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: SSL_CIPHER*
    signature: 'const SSL_CIPHER *cipher() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1038
    functionDepth: 0
    functionLinenumber: 1038
    functionLinenumberEnd: 1038
    functionName: data
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint8_t*
    signature: 'uint8_t *data() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Encap
      Src: /src/boringssl/ssl/internal.h:923,1
    - Dst: Decap
      Src: /src/boringssl/ssl/internal.h:929,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 939
      start: 903
    functionDepth: 0
    functionLinenumber: 903
    functionLinenumberEnd: 939
    functionName: SSLKeyShare
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached:
    - Encap
    - Decap
    linkageType: ''
    returnType: class
    signature: 'class SSLKeyShare '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1041
      start: 1041
    functionDepth: 0
    functionLinenumber: 1041
    functionLinenumberEnd: 1041
    functionName: cap
    functionSourceFile: /src/boringssl/ssl/internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t cap() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 73
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 73
    functionName: MockQuicTransport
    functionSourceFile: /src/boringssl/ssl/test/mock_quic_transport.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class MockQuicTransport '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: if
      Src: /src/boringssl/ssl/test/fuzzer.h:295,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 297
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 297
    functionName: TLSFuzzer
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached:
    - if
    linkageType: ''
    returnType: class
    signature: 'class TLSFuzzer '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 5
    argCount: 6
    argNames:
    - ssl
    - out
    - out_len
    - in
    - in_len
    - arg
    argTypes:
    - SSL*
    - uint8_t**
    - uint8_t*
    - uint8_t*
    - unsigned
    - void*
    constantsTouched: []
    func_position:
      end: 261
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 261
    functionName: NPNSelectCallback
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int NPNSelectCallback(SSL *ssl, uint8_t **out, uint8_t *out_len, const
      uint8_t *in, unsigned in_len, void *arg) '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: ssl_handoff
      Src: /src/boringssl/ssl/test/fuzzer.h:338,1
    - Dst: SSL_set_accept_state
      Src: /src/boringssl/ssl/test/fuzzer.h:340,1
    - Dst: SSL_set0_rbio
      Src: /src/boringssl/ssl/test/fuzzer.h:342,1
    - Dst: ssl_handback
      Src: /src/boringssl/ssl/test/fuzzer.h:339,1
    - Dst: CBS_data
      Src: /src/boringssl/ssl/test/fuzzer.h:342,1
    - Dst: BIO_new
      Src: /src/boringssl/ssl/test/fuzzer.h:343,1
    - Dst: SSL_get_error
      Src: /src/boringssl/ssl/test/fuzzer.h:350,1
    - Dst: fprintf
      Src: /src/boringssl/ssl/test/fuzzer.h:356,1
    - Dst: fprintf
      Src: /src/boringssl/ssl/test/fuzzer.h:382,1
    - Dst: CBS_init
      Src: /src/boringssl/ssl/test/fuzzer.h:323,1
    - Dst: fprintf
      Src: /src/boringssl/ssl/test/fuzzer.h:327,1
    - Dst: SSL_set_tlsext_host_name
      Src: /src/boringssl/ssl/test/fuzzer.h:334,1
    - Dst: SSL_set0_wbio
      Src: /src/boringssl/ssl/test/fuzzer.h:343,1
    - Dst: SSL_do_handshake
      Src: /src/boringssl/ssl/test/fuzzer.h:349,1
    - Dst: MoveBIOs
      Src: /src/boringssl/ssl/test/fuzzer.h:363,1
    - Dst: SSL_get_error
      Src: /src/boringssl/ssl/test/fuzzer.h:362,1
    - Dst: fprintf
      Src: /src/boringssl/ssl/test/fuzzer.h:366,1
    - Dst: ERR_print_errors_fp
      Src: /src/boringssl/ssl/test/fuzzer.h:397,1
    - Dst: fprintf
      Src: /src/boringssl/ssl/test/fuzzer.h:380,1
    - Dst: SSL_read
      Src: /src/boringssl/ssl/test/fuzzer.h:390,1
    - Dst: RAND_reset_for_fuzzing
      Src: /src/boringssl/ssl/test/fuzzer.h:319,1
    - Dst: SetupTest
      Src: /src/boringssl/ssl/test/fuzzer.h:324,1
    - Dst: SSL_set_renegotiate_mode
      Src: /src/boringssl/ssl/test/fuzzer.h:333,1
    - Dst: SSL_new
      Src: /src/boringssl/ssl/test/fuzzer.h:338,1
    - Dst: SSL_new
      Src: /src/boringssl/ssl/test/fuzzer.h:339,1
    - Dst: CBS_len
      Src: /src/boringssl/ssl/test/fuzzer.h:342,1
    - Dst: BIO_s_mem
      Src: /src/boringssl/ssl/test/fuzzer.h:343,1
    - Dst: MakeBIO
      Src: /src/boringssl/ssl/test/fuzzer.h:342,1
    - Dst: MoveBIOs
      Src: /src/boringssl/ssl/test/fuzzer.h:351,1
    - Dst: SSL_apply_handoff
      Src: /src/boringssl/ssl/test/fuzzer.h:354,1
    - Dst: SSL_apply_handback
      Src: /src/boringssl/ssl/test/fuzzer.h:364,1
    - Dst: ERR_clear_error
      Src: /src/boringssl/ssl/test/fuzzer.h:399,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 92
    argCount: 2
    argNames:
    - buf
    - len
    argTypes:
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 401
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 401
    functionName: TestOneInput
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached:
    - SSL_set_accept_state
    - CBS_init
    - BIO_new
    - ERR_print_errors_fp
    - BIO_s_mem
    - MoveBIOs
    - SSL_read
    - SSL_set0_wbio
    - ssl_handback
    - CBS_len
    - SSL_apply_handoff
    - SSL_set0_rbio
    - SSL_apply_handback
    - SSL_set_renegotiate_mode
    - ERR_clear_error
    - SetupTest
    - SSL_do_handshake
    - fprintf
    - MakeBIO
    - ssl_handoff
    - SSL_set_tlsext_host_name
    - SSL_new
    - RAND_reset_for_fuzzing
    - SSL_get_error
    - CBS_data
    linkageType: ''
    returnType: int
    signature: 'int TestOneInput(const uint8_t *buf, size_t len) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BIO_get_data
      Src: /src/boringssl/ssl/test/fuzzer.h:611,1
    - Dst: min
      Src: /src/boringssl/ssl/test/fuzzer.h:613,1
    - Dst: memcpy
      Src: /src/boringssl/ssl/test/fuzzer.h:614,1
    - Dst: CBS_data
      Src: /src/boringssl/ssl/test/fuzzer.h:614,1
    - Dst: CBS_len
      Src: /src/boringssl/ssl/test/fuzzer.h:613,1
    - Dst: CBS_skip
      Src: /src/boringssl/ssl/test/fuzzer.h:615,1
    - Dst: CBS_get_u24_length_prefixed
      Src: /src/boringssl/ssl/test/fuzzer.h:621,1
    - Dst: min
      Src: /src/boringssl/ssl/test/fuzzer.h:624,1
    - Dst: CBS_len
      Src: /src/boringssl/ssl/test/fuzzer.h:624,1
    - Dst: memcpy
      Src: /src/boringssl/ssl/test/fuzzer.h:625,1
    - Dst: CBS_data
      Src: /src/boringssl/ssl/test/fuzzer.h:625,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - bio
    - out
    - len
    argTypes:
    - BIO*
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 627
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 627
    functionName: BIORead
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached:
    - memcpy
    - min
    - CBS_len
    - CBS_skip
    - CBS_data
    - BIO_get_data
    - CBS_get_u24_length_prefixed
    linkageType: ''
    returnType: int
    signature: 'static int BIORead(BIO *bio, char *out, int len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BIO_meth_new
      Src: /src/boringssl/ssl/test/fuzzer.h:637,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/ssl/test/fuzzer.h:640,1
    - Dst: BIO_meth_set_read
      Src: /src/boringssl/ssl/test/fuzzer.h:639,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/ssl/test/fuzzer.h:639,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/ssl/test/fuzzer.h:638,1
    - Dst: BIO_meth_set_destroy
      Src: /src/boringssl/ssl/test/fuzzer.h:640,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 644
      start: 635
    functionDepth: 0
    functionLinenumber: 635
    functionLinenumberEnd: 644
    functionName: BIOMethod
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - BIO_meth_new
    - BIO_meth_set_destroy
    - BIO_meth_set_read
    linkageType: ''
    returnType: BIO_METHOD*
    signature: 'static const BIO_METHOD *BIOMethod() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BIO_meth_new
      Src: /src/boringssl/ssl/test/fuzzer.h:637,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/ssl/test/fuzzer.h:640,1
    - Dst: BIO_meth_set_read
      Src: /src/boringssl/ssl/test/fuzzer.h:639,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/ssl/test/fuzzer.h:639,1
    - Dst: BSSL_CHECK
      Src: /src/boringssl/ssl/test/fuzzer.h:638,1
    - Dst: BIO_meth_set_destroy
      Src: /src/boringssl/ssl/test/fuzzer.h:640,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 642
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 642
    functionName: method
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached:
    - BSSL_CHECK
    - BIO_meth_new
    - BIO_meth_set_destroy
    - BIO_meth_set_read
    linkageType: ''
    returnType: BIO_METHOD
    signature: 'static const BIO_METHOD *method = [] '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 6
    argNames:
    - ssl
    - out
    - out_len
    - in
    - in_len
    - arg
    argTypes:
    - SSL*
    - uint8_t**
    - uint8_t*
    - uint8_t*
    - unsigned
    - void*
    constantsTouched: []
    func_position:
      end: 253
      start: 247
    functionDepth: 0
    functionLinenumber: 247
    functionLinenumberEnd: 253
    functionName: ALPNSelectCallback
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int ALPNSelectCallback(SSL *ssl, const uint8_t **out, uint8_t *out_len,
      const uint8_t *in, unsigned in_len, void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_rbio
      Src: /src/boringssl/ssl/test/fuzzer.h:305,1
    - Dst: SSL_get_wbio
      Src: /src/boringssl/ssl/test/fuzzer.h:309,1
    - Dst: BIO_up_ref
      Src: /src/boringssl/ssl/test/fuzzer.h:306,1
    - Dst: SSL_set0_rbio
      Src: /src/boringssl/ssl/test/fuzzer.h:307,1
    - Dst: BIO_up_ref
      Src: /src/boringssl/ssl/test/fuzzer.h:310,1
    - Dst: SSL_set0_wbio
      Src: /src/boringssl/ssl/test/fuzzer.h:311,1
    - Dst: SSL_set0_rbio
      Src: /src/boringssl/ssl/test/fuzzer.h:313,1
    - Dst: SSL_set0_wbio
      Src: /src/boringssl/ssl/test/fuzzer.h:314,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - dest
    - src
    argTypes:
    - SSL*
    - SSL*
    constantsTouched: []
    func_position:
      end: 315
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 315
    functionName: MoveBIOs
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached:
    - SSL_get_wbio
    - BIO_up_ref
    - SSL_get_rbio
    - SSL_set0_rbio
    - SSL_set0_wbio
    linkageType: ''
    returnType: void
    signature: 'static void MoveBIOs(SSL *dest, SSL *src) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 3
    argCount: 4
    argNames:
    - ssl
    - out
    - out_len
    - arg
    argTypes:
    - SSL*
    - uint8_t**
    - unsigned*
    - void*
    constantsTouched: []
    func_position:
      end: 271
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 271
    functionName: NPNAdvertiseCallback
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int NPNAdvertiseCallback(SSL *ssl, const uint8_t **out, unsigned *out_len,
      void *arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BIO_get_data
      Src: /src/boringssl/ssl/test/fuzzer.h:630,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - bio
    argTypes:
    - BIO*
    constantsTouched: []
    func_position:
      end: 633
      start: 629
    functionDepth: 0
    functionLinenumber: 629
    functionLinenumberEnd: 633
    functionName: BIODestroy
    functionSourceFile: /src/boringssl/ssl/test/fuzzer.h
    functionUses: []
    functionsReached:
    - BIO_get_data
    linkageType: ''
    returnType: int
    signature: 'static int BIODestroy(BIO *bio) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: external_symbol
      Src: /src/boringssl/util/ar/testdata/sample/foo.c:4,1
    - Dst: bar
      Src: /src/boringssl/util/ar/testdata/sample/foo.c:5,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - void
    argTypes:
    - void
    constantsTouched: []
    func_position:
      end: 6
      start: 3
    functionDepth: 0
    functionLinenumber: 3
    functionLinenumberEnd: 6
    functionName: foo
    functionSourceFile: /src/boringssl/util/ar/testdata/sample/foo.c
    functionUses: []
    functionsReached:
    - bar
    - external_symbol
    linkageType: ''
    returnType: void
    signature: 'void foo(void) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseArgsFromFd
      Src: /src/boringssl/util/fipstools/acvp/modulewrapper/modulewrapper.h:46,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 75
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 75
    functionName: bssl
    functionSourceFile: /src/boringssl/util/fipstools/acvp/modulewrapper/modulewrapper.h
    functionUses: []
    functionsReached:
    - ParseArgsFromFd
    linkageType: ''
    returnType: namespace
    signature: 'namespace bssl '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 39
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 39
    functionName: RequestBuffer
    functionSourceFile: /src/boringssl/util/fipstools/acvp/modulewrapper/modulewrapper.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class RequestBuffer '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseArgsFromFd
      Src: /src/boringssl/util/fipstools/acvp/modulewrapper/modulewrapper.h:46,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 74
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 74
    functionName: acvp
    functionSourceFile: /src/boringssl/util/fipstools/acvp/modulewrapper/modulewrapper.h
    functionUses: []
    functionsReached:
    - ParseArgsFromFd
    linkageType: ''
    returnType: namespace
    signature: 'namespace acvp '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - os
    argTypes:
    - ostream*
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - ostream*
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(ostream* os) const override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:158,1
    - Dst: GtestGreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:160,1
    - Dst: MakeMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:162,1
    - Dst: GetParam
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:165,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 166
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 166
    functionName: GTestMatcherTestP
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached:
    - GreaterThan
    - GtestGreaterThan
    - GetParam
    - MakeMatcher
    linkageType: ''
    returnType: class
    signature: 'class GTestMatcherTestP : public testing::TestWithParam<bool> '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GtestGreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:125,1
    - Dst: GreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:158,1
    - Dst: GtestGreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:160,1
    - Dst: MakeMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:162,1
    - Dst: GetParam
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:165,1
    - Dst: ExplainMatchResult
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:184,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 79
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 189
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 189
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached:
    - GreaterThan
    - GtestGreaterThan
    - MakeMatcher
    - ExplainMatchResult
    - GetParam
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - lhs
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 119
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 119
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(T lhs, MatchResultListener* listener) const '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GtestGreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:125,1
    - Dst: GreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:158,1
    - Dst: GtestGreaterThan
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:160,1
    - Dst: MakeMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:162,1
    - Dst: GetParam
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:165,1
    - Dst: ExplainMatchResult
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:184,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 78
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 188
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 188
    functionName: gmock_matchers_test
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached:
    - GreaterThan
    - GtestGreaterThan
    - MakeMatcher
    - ExplainMatchResult
    - GetParam
    linkageType: ''
    returnType: namespace
    signature: 'namespace gmock_matchers_test '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - os
    argTypes:
    - ostream*
    constantsTouched: []
    func_position:
      end: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - ostream*
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 143
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(T lhs, MatchResultListener* listener) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExplainMatchResult
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - m
    - x
    argTypes:
    - MatcherType
    - Value
    constantsTouched: []
    func_position:
      end: 186
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 186
    functionName: Explain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock-matchers_test.h
    functionUses: []
    functionsReached:
    - ExplainMatchResult
    linkageType: ''
    returnType: string
    signature: 'string Explain(const MatcherType& m, const Value& x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 231
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 231
    functionName: VoidFromVoid
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void VoidFromVoid() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - '*'
    - /* str */
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: VoidFromString
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void VoidFromString(char* /* str */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 241
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 241
    functionName: field
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int field() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames:
    - ReturnArgument
    - ret_value
    argTypes: []
    constantsTouched: []
    func_position:
      end: 450
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 450
    functionName: ACTION_P
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace { ACTION_P(ReturnArgument, ret_value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames:
    - ReturnEqualsEitherOf
    - first
    - second
    argTypes: []
    constantsTouched: []
    func_position:
      end: 464
      start: 461
    functionDepth: 0
    functionLinenumber: 461
    functionLinenumberEnd: 464
    functionName: ACTION_P2
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace { ACTION_P2(ReturnEqualsEitherOf, first, second) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IntRefFromString
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:201,1
    - Dst: VoidFromIntRef
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:203,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 207
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 207
    functionName: Interface
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached:
    - IntRefFromString
    - VoidFromIntRef
    linkageType: ''
    returnType: class
    signature: 'class Interface '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:215,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:217,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:219,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:221,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:220,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:220,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:219,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:217,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:221,1
    - Dst: Mock
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:211,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:214,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:213,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:218,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:213,1
    - Dst: int
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:215,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:216,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:217,1
    - Dst: MOCK_METHOD1
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 226
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 226
    functionName: Interface
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached:
    - Mock
    - int
    - void
    - MOCK_METHOD1
    linkageType: ''
    returnType: class
    signature: 'class Mock : public Interface '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - '*'
    - /* str */
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 232
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 232
    functionName: StaticVoidFromString
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void StaticVoidFromString(char* /* str */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 236
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 236
    functionName: InvokeHelper
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class InvokeHelper '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - '*'
    - /* str */
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 234
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 234
    functionName: StaticIntFromString
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'static int StaticIntFromString(char* /* str */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - '*'
    - /* str */
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 235
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 235
    functionName: StaticBoolFromString
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool StaticBoolFromString(const char* /* str */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: field_
      Src: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h:240,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 244
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 244
    functionName: FieldHelper
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached:
    - field_
    linkageType: ''
    returnType: class
    signature: 'class FieldHelper '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 438
      start: 438
    functionDepth: 0
    functionLinenumber: 438
    functionLinenumberEnd: 438
    functionName: (Return1)
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/test/gmock_link_test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ACTION
    signature: 'ACTION (Return1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:79,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - (&suffix)
    - (&str)
    argTypes:
    - char
    - char
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: EndsWith
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h
    functionUses: []
    functionsReached:
    - PrefixOf
    linkageType: ''
    returnType: bool
    signature: 'bool EndsWith(const char (&suffix)[N], const char (&str)[M]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:74,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - (&prefix)
    - (&str)
    argTypes:
    - char
    - char
    constantsTouched: []
    func_position:
      end: 75
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 75
    functionName: StartsWith
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h
    functionUses: []
    functionsReached:
    - PrefixOf
    linkageType: ''
    returnType: bool
    signature: 'bool StartsWith(const char (&prefix)[N], const char (&str)[M]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:69,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: PrefixOf
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h
    functionUses: []
    functionsReached:
    - PrefixOf
    linkageType: ''
    returnType: bool
    signature: 'constexpr bool PrefixOf(const char* a, const char* b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Adjust
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:63,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:74,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:69,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:79,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:84,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:89,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:90,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:91,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:92,1
    - Dst: StartsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:93,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:96,1
    - Dst: EndsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:98,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:95,1
    - Dst: StartsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:97,1
    - Dst: EndsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:94,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 84
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 101
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 101
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h
    functionUses: []
    functionsReached:
    - EndsWith
    - PrefixOf
    - StartsWith
    - Adjust
    - Equals
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:84,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - (&a)
    - (&b)
    argTypes:
    - char
    - char
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: Equals
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h
    functionUses: []
    functionsReached:
    - PrefixOf
    linkageType: ''
    returnType: bool
    signature: 'bool Equals(const char (&a)[N], const char (&b)[M]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Adjust
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:63,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:74,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:69,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:79,1
    - Dst: PrefixOf
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:84,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:89,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:90,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:91,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:92,1
    - Dst: StartsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:93,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:96,1
    - Dst: EndsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:98,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:95,1
    - Dst: StartsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:97,1
    - Dst: EndsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:94,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 85
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 109
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 109
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h
    functionUses: []
    functionsReached:
    - EndsWith
    - PrefixOf
    - StartsWith
    - Adjust
    - Equals
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:89,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:90,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:91,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:92,1
    - Dst: StartsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:93,1
    - Dst: EndsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:94,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:95,1
    - Dst: Equals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:96,1
    - Dst: StartsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:97,1
    - Dst: EndsWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h:98,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 1
    argNames:
    - (&spec)
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 99
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 99
    functionName: ValidateSpec
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-function-mocker.h
    functionUses: []
    functionsReached:
    - StartsWith
    - EndsWith
    - Equals
    linkageType: ''
    returnType: bool
    signature: 'bool ValidateSpec(const char (&spec)[N]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 84
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 84
    functionName: CardinalityInterface
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class CardinalityInterface '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:94,1
    - Dst: impl_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:97,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 132
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 132
    functionName: Cardinality
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached:
    - Cardinality
    - impl_
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Cardinality '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: ConservativeUpperBound
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual int ConservativeUpperBound() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    functionName: ConservativeLowerBound
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual int ConservativeLowerBound() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: ConservativeLowerBound
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int ConservativeLowerBound() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    functionName: ConservativeUpperBound
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int ConservativeUpperBound() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - call_count
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 114
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 114
    functionName: IsSaturatedByCallCount
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsSaturatedByCallCount(int call_count) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:94,1
    - Dst: impl_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:97,1
    - Dst: AnyNumber
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:141,1
    - Dst: Cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:151,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 154
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 154
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached:
    - Cardinality
    - impl_
    - AnyNumber
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - call_count
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 108
    functionName: IsSatisfiedByCallCount
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsSatisfiedByCallCount(int call_count) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: impl_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:97,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - impl
    argTypes:
    - CardinalityInterface*
    constantsTouched: []
    func_position:
      end: 97
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 97
    functionName: Cardinality
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached:
    - impl_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Cardinality(const CardinalityInterface* impl) : impl_(impl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h:151,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - CardinalityInterface*
    constantsTouched: []
    func_position:
      end: 152
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 152
    functionName: MakeCardinality
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached:
    - Cardinality
    linkageType: ''
    returnType: Cardinality
    signature: 'inline Cardinality MakeCardinality(const CardinalityInterface* c) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - call_count
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 121
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 121
    functionName: IsOverSaturatedByCallCount
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-cardinalities.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsOverSaturatedByCallCount(int call_count) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 246
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 246
    functionName: line
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int line() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 540
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 540
    functionName: expectation_base
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::shared_ptr<internal::ExpectationBase>& expectation_base()
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Sequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:617,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 626
      start: 614
    functionDepth: 0
    functionLinenumber: 614
    functionLinenumberEnd: 626
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Sequence
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Sequence '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 692
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 692
    functionName: file
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * file() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 693
      start: 693
    functionDepth: 0
    functionLinenumber: 693
    functionLinenumberEnd: 693
    functionName: line
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int line() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:797,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 798
      start: 795
    functionDepth: 0
    functionLinenumber: 795
    functionLinenumberEnd: 798
    functionName: IsSaturated
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - cardinality
    linkageType: ''
    returnType: bool
    signature: 'bool IsSaturated() const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:813,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:816,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 819
      start: 808
    functionDepth: 0
    functionLinenumber: 808
    functionLinenumberEnd: 819
    functionName: AllPrerequisitesAreSatisfied
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    linkageType: ''
    returnType: bool
    signature: 'bool AllPrerequisitesAreSatisfied() const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex);
      // Adds unsatisfied pre-requisites of this expectation to ''result''. void FindUnsatisfiedPrerequisites(ExpectationSet*
      result) const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex); // Returns the
      number this expectation has been invoked. int call_count() const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: call_count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1184,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1185,1
    - Dst: DescribeLocationTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1195,1
    - Dst: source_text
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1196,1
    - Dst: Log
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1201,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1182,1
    - Dst: repeated_action
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1207,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 40
    argCount: 2
    argNames:
    - mocker
    - args
    argTypes:
    - FunctionMocker*
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1208
      start: 1180
    functionDepth: 0
    functionLinenumber: 1180
    functionLinenumberEnd: 1208
    functionName: GetCurrentAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - repeated_action
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - call_count
    - DescribeLocationTo
    - source_text
    - Assert
    - Log
    linkageType: ''
    returnType: Action
    signature: 'const Action <F>& GetCurrentAction(const FunctionMocker<F>* mocker,
      const ArgumentTuple& args) const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Expectation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:483,1
    - Dst: Expectation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:488,1
    - Dst: Expectation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:484,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 544
      start: 480
    functionDepth: 0
    functionLinenumber: 480
    functionLinenumberEnd: 544
    functionName: Expectation
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Expectation
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Expectation '
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:715,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:954,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1018,1
    - Dst: cardinality_specified
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1046,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:813,1
    - Dst: AtLeast
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1047,1
    - Dst: FindUnsatisfiedPrerequisites
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1162,1
    - Dst: With
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:909,1
    - Dst: CheckActionCountIfNotDone
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1052,1
    - Dst: DescribeLocationTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1195,1
    - Dst: Retire
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1242,1
    - Dst: GetHandle
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:950,1
    - Dst: DescribeCallCountTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1233,1
    - Dst: source_text
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1250,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:816,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:994,1
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:797,1
    - Dst: UntypedTimes
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:935,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:964,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1058,1
    - Dst: CheckActionCountIfNotDone
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1066,1
    - Dst: TupleMatches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1118,1
    - Dst: source_text
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1196,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1138,1
    - Dst: IsSaturated
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1224,1
    - Dst: GetHandle
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:738,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:822,1
    - Dst: AllPrerequisitesAreSatisfied
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1157,1
    - Dst: IsSaturated
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1241,1
    - Dst: file
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:915,1
    - Dst: WillOnce
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1017,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: Description
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:928,1
    - Dst: Exactly
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:940,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:956,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:986,1
    - Dst: Exactly
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1026,1
    - Dst: Matches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1144,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1221,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:983,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:997,1
    - Dst: WillOnce
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1002,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:967,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1034,1
    - Dst: AllPrerequisitesAreSatisfied
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1132,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:706,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1124,1
    - Dst: ExplainMatchFailureTupleTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1146,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:958,1
    - Dst: RetiresOnSaturation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1057,1
    - Dst: IncrementCallCount
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1226,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1116,1
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:791,1
    - Dst: Times
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:934,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:953,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:972,1
    - Dst: call_count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1184,1
    - Dst: RetireAllPreRequisites
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1239,1
    - Dst: WillOnce
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1006,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1102,1
    - Dst: Matches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1132,1
    - Dst: repeated_action
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1207,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1007,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:971,1
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:803,1
    - Dst: WillRepeatedly
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1032,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1038,1
    - Dst: set_cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1047,1
    - Dst: is_retired
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1132,1
    - Dst: GetDescription
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1223,1
    - Dst: GetCurrentAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1251,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1185,1
    - Dst: cardinality_specified
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1025,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:743,1
    - Dst: Times
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:940,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:944,1
    - Dst: is_retired
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1141,1
    - Dst: line
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:962,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:992,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:879,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1023,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:773,1
    - Dst: CheckActionCountIfNotDone
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1131,1
    - Dst: Times
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:940,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:943,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:988,1
    - Dst: TupleMatches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1145,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1154,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:749,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:779,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:911,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:960,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:990,1
    - Dst: After
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:984,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1182,1
    - Dst: set_cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1026,1
    - Dst: Log
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1201,1
    - Dst: IncrementCallCount
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1238,1
    CyclomaticComplexity: 90
    EdgeCount: 90
    ICount: 394
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 664
    functionDepth: 0
    functionLinenumber: 664
    functionLinenumberEnd: 1263
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - UntypedTimes
    - Exactly
    - repeated_action
    - source_text
    - GetDescription
    - Expect
    - is_retired
    - Matches
    - WillOnce
    - AllPrerequisitesAreSatisfied
    - IsSaturated
    - AtLeast
    - DescribeCallCountTo
    - GetCurrentAction
    - GetHandle
    - Description
    - call_count
    - DescribeLocationTo
    - ExpectSpecProperty
    - move
    - Log
    - FormatFileLocation
    - IncrementCallCount
    - Retire
    - file
    - WillRepeatedly
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - FindUnsatisfiedPrerequisites
    - After
    - set_cardinality
    - CheckActionCountIfNotDone
    - RetiresOnSaturation
    - RetireAllPreRequisites
    - PrintIfNotEmpty
    - line
    - With
    - Times
    - ExplainMatchFailureTupleTo
    - R
    - Assert
    - cardinality_specified
    - cardinality
    - TupleMatches
    - InSequence
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FindOnCallSpec
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1601,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1608,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - args
    - '::'
    - os
    argTypes:
    - ArgumentTuple
    - std*
    constantsTouched: []
    func_position:
      end: 1610
      start: 1599
    functionDepth: 0
    functionLinenumber: 1599
    functionLinenumberEnd: 1610
    functionName: DescribeDefaultActionTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - FindOnCallSpec
    - FormatFileLocation
    linkageType: ''
    returnType: void
    signature: 'void DescribeDefaultActionTo(const ArgumentTuple& args, ::std::ostream*
      os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cleanup
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1395,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1398,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1394,1
    - Dst: f_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1395,1
    - Dst: f_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1399
      start: 1392
    functionDepth: 0
    functionLinenumber: 1392
    functionLinenumberEnd: 1399
    functionName: Cleanup
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - void
    - move
    - Cleanup
    - f_
    linkageType: ''
    returnType: class
    signature: 'class Cleanup final '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1617,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1623,1
    - Dst: DescribeDefaultActionTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1621,1
    - Dst: Name
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1622,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - untyped_args
    - '::'
    - os
    argTypes:
    - void*
    - std*
    constantsTouched: []
    func_position:
      end: 1624
      start: 1615
    functionDepth: 0
    functionLinenumber: 1615
    functionLinenumberEnd: 1624
    functionName: UntypedDescribeUninterestingCall
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - DescribeDefaultActionTo
    - UniversalPrint
    - Name
    - GTEST_LOCK_EXCLUDED_
    linkageType: ''
    returnType: void
    signature: 'void UntypedDescribeUninterestingCall(const void* untyped_args, ::std::ostream*
      os) const override GTEST_LOCK_EXCLUDED_(g_gmock_mutex) '
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: MockObject
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1573,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1735,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1519,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1513,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1500,1
    - Dst: FindOnCallSpec
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1601,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1623,1
    - Dst: ArgumentTuple
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1547,1
    - Dst: PerformDefaultAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1735,1
    - Dst: DescribeDefaultActionTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1700,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1782,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1645,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1776,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1608,1
    - Dst: FindMatchingExpectationLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1676,1
    - Dst: FunctionMocker
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1448,1
    - Dst: Exists
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1507,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1671,1
    - Dst: PerformAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1761,1
    - Dst: PerformAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1776,1
    - Dst: PerformActionAndPrintResult
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1772,1
    - Dst: Name
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1622,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1441,1
    - Dst: Exists
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1511,1
    - Dst: MockObject
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1562,1
    - Dst: RegisterUseByOnCallOrExpectCall
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1573,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1761,1
    - Dst: UnregisterLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1471,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1617,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1697,1
    - Dst: InvokeWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1547,1
    - Dst: RegisterUseByOnCallOrExpectCall
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1562,1
    - Dst: PrintAsActionResult
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1763,1
    - Dst: PrintTriedExpectationsLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1701,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1546,1
    - Dst: DescribeDefaultActionTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1621,1
    - Dst: AddNewOnCallSpec
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1559,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1741,1
    - Dst: PerformActionAndPrintResult
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1757,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1708,1
    - Dst: AddNewExpectation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1569,1
    - Dst: FunctionMocker
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1468,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1511,1
    - Dst: Expectation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1584,1
    - Dst: VerifyAndClearExpectationsLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1470,1
    - Dst: ClearDefaultActionsLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1472,1
    - Dst: With
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1550,1
    CyclomaticComplexity: 59
    EdgeCount: 59
    ICount: 264
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1783
      start: 1440
    functionDepth: 0
    functionLinenumber: 1440
    functionLinenumberEnd: 1783
    functionName: UntypedFunctionMockerBase
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - DescribeDefaultActionTo
    - FunctionMocker
    - Exists
    - ClearDefaultActionsLocked
    - PerformActionAndPrintResult
    - Get
    - InvokeWith
    - GTEST_LOCK_EXCLUDED_
    - PerformAction
    - PrintAsActionResult
    - PerformDefaultAction
    - VerifyAndClearExpectationsLocked
    - FindOnCallSpec
    - RegisterUseByOnCallOrExpectCall
    - move
    - FormatFileLocation
    - UniversalPrint
    - AddNewExpectation
    - Expectation
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - UnregisterLocked
    - Name
    - With
    - ArgumentTuple
    - AddNewOnCallSpec
    - R
    - Assert
    - FindMatchingExpectationLocked
    - PrintTriedExpectationsLocked
    - MockObject
    linkageType: ''
    returnType: public
    signature: 'public UntypedFunctionMockerBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1671,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - untyped_args
    - '::'
    - os
    argTypes:
    - void*
    - std*
    constantsTouched: []
    func_position:
      end: 1672
      start: 1667
    functionDepth: 0
    functionLinenumber: 1667
    functionLinenumberEnd: 1672
    functionName: UntypedPrintArgs
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void UntypedPrintArgs(const void* untyped_args, ::std::ostream* os)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1372
      start: 1372
    functionDepth: 0
    functionLinenumber: 1372
    functionLinenumberEnd: 1372
    functionName: Peek
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: 'const T & Peek() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:267,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - property
    - failure_message
    argTypes:
    - bool
    - std
    constantsTouched: []
    func_position:
      end: 268
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 268
    functionName: ExpectSpecProperty
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Expect
    linkageType: ''
    returnType: void
    signature: 'void ExpectSpecProperty(bool property, const std::string& failure_message)
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:749,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - property
    - failure_message
    argTypes:
    - bool
    - std
    constantsTouched: []
    func_position:
      end: 750
      start: 747
    functionDepth: 0
    functionLinenumber: 747
    functionLinenumberEnd: 750
    functionName: ExpectSpecProperty
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Expect
    linkageType: ''
    returnType: void
    signature: 'void ExpectSpecProperty(bool property, const std::string& failure_message)
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:779,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 782
      start: 779
    functionDepth: 0
    functionLinenumber: 779
    functionLinenumberEnd: 782
    functionName: Retire
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    linkageType: ''
    returnType: void
    signature: 'void Retire() GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Matches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1144,1
    - Dst: TupleMatches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1145,1
    - Dst: is_retired
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1141,1
    - Dst: ExplainMatchFailureTupleTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1146,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1154,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1138,1
    - Dst: FindUnsatisfiedPrerequisites
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1162,1
    - Dst: AllPrerequisitesAreSatisfied
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1157,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 2
    argNames:
    - args
    - '::'
    - os
    argTypes:
    - ArgumentTuple
    - std*
    constantsTouched: []
    func_position:
      end: 1177
      start: 1137
    functionDepth: 0
    functionLinenumber: 1137
    functionLinenumberEnd: 1177
    functionName: ExplainMatchResultTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - ExplainMatchFailureTupleTo
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - FindUnsatisfiedPrerequisites
    - TupleMatches
    - is_retired
    - PrintIfNotEmpty
    - Matches
    - AllPrerequisitesAreSatisfied
    linkageType: ''
    returnType: void
    signature: 'void ExplainMatchResultTo(const ArgumentTuple& args, ::std::ostream*
      os) const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RegisterUseByOnCallOrExpectCall
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1573,1
    - Dst: MockObject
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1573,1
    - Dst: Expectation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1584,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1588
      start: 1572
    functionDepth: 0
    functionLinenumber: 1572
    functionLinenumberEnd: 1588
    functionName: (g_gmock_mutex)
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - RegisterUseByOnCallOrExpectCall
    - MockObject
    - Expectation
    linkageType: ''
    returnType: GTEST_LOCK_EXCLUDED_
    signature: 'GTEST_LOCK_EXCLUDED_ (g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: line
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: file
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:715,1
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:791,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:773,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:813,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:749,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:779,1
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:803,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:706,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:816,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:743,1
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:797,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:879,1
    - Dst: GetHandle
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:738,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:822,1
    CyclomaticComplexity: 45
    EdgeCount: 45
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 906
      start: 684
    functionDepth: 0
    functionLinenumber: 684
    functionLinenumberEnd: 906
    functionName: ExpectationBase
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - file
    - GetHandle
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - R
    - Assert
    - Expect
    - move
    - cardinality
    - FormatFileLocation
    - line
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ ExpectationBase '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1090
      start: 1084
    functionDepth: 0
    functionLinenumber: 1084
    functionLinenumberEnd: 1090
    functionName: MaybeDescribeExtraMatcherTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void MaybeDescribeExtraMatcherTo(::std::ostream* os) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1108
      start: 1108
    functionDepth: 0
    functionLinenumber: 1108
    functionLinenumberEnd: 1108
    functionName: GetHandle
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Expectation
    signature: 'Expectation GetHandle() override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PerformDefaultAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1735,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1735,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1741,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 3
    argNames:
    - untyped_action
    - args
    - call_description
    argTypes:
    - void*
    - ArgumentTuple
    - std
    constantsTouched: []
    func_position:
      end: 1742
      start: 1732
    functionDepth: 0
    functionLinenumber: 1732
    functionLinenumberEnd: 1742
    functionName: PerformAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - PerformDefaultAction
    - move
    linkageType: ''
    returnType: R
    signature: 'R PerformAction(const void* untyped_action, ArgumentTuple&& args,
      const std::string& call_description) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UntypedFunctionMockerBase
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:141,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:174,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:190,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:261,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:267,1
    - Dst: With
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:297,1
    - Dst: WillByDefault
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:309,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:310,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:163,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:195,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:199,1
    - Dst: AssertSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:328,1
    - Dst: TupleMatches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:323,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:152,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:184,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:315,1
    CyclomaticComplexity: 49
    EdgeCount: 49
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 360
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 360
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - WillByDefault
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - ExpectSpecProperty
    - Assert
    - Expect
    - AssertSpecProperty
    - GTEST_LOCK_EXCLUDED_
    - TupleMatches
    - With
    - UntypedFunctionMockerBase
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UntypedFunctionMockerBase
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:141,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:174,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:190,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:261,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:267,1
    - Dst: With
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:297,1
    - Dst: WillByDefault
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:309,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:310,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:163,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:195,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:199,1
    - Dst: AssertSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:328,1
    - Dst: TupleMatches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:323,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:152,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:184,1
    - Dst: ExpectSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:315,1
    CyclomaticComplexity: 49
    EdgeCount: 49
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 351
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 351
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - WillByDefault
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - ExpectSpecProperty
    - Assert
    - Expect
    - AssertSpecProperty
    - GTEST_LOCK_EXCLUDED_
    - TupleMatches
    - With
    - UntypedFunctionMockerBase
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UntypedFunctionMockerBase
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:141,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:174,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:190,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:261,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:267,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:163,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:195,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:199,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:152,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:184,1
    CyclomaticComplexity: 42
    EdgeCount: 42
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 276
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 276
    functionName: UntypedFunctionMockerBase
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - Assert
    - Expect
    - GTEST_LOCK_EXCLUDED_
    - UntypedFunctionMockerBase
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ UntypedFunctionMockerBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 602
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 602
    functionName: size
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:715,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - description
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 716
      start: 714
    functionDepth: 0
    functionLinenumber: 714
    functionLinenumberEnd: 716
    functionName: UntypedDescription
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - move
    linkageType: ''
    returnType: void
    signature: 'void UntypedDescription(std::string description) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:773,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 776
      start: 770
    functionDepth: 0
    functionLinenumber: 770
    functionLinenumberEnd: 776
    functionName: RetireAllPreRequisites
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    linkageType: ''
    returnType: void
    signature: 'void RetireAllPreRequisites() GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex);
      // Returns true if and only if this expectation is retired. bool is_retired()
      const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:791,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 792
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 792
    functionName: IsSatisfied
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - cardinality
    linkageType: ''
    returnType: bool
    signature: 'bool IsSatisfied() const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:879,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 905
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 905
    functionName: CheckActionCountIfNotDone
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - R
    linkageType: ''
    returnType: void
    signature: 'void CheckActionCountIfNotDone() const GTEST_LOCK_EXCLUDED_(mutex_);
      friend class ::testing::Sequence; friend class ::testing::internal::ExpectationTester;
      template <typename Function> friend class TypedExpectation; // Implements the
      .Times() clause. void UntypedTimes(const Cardinality& a_cardinality); // This
      group of fields are part of the spec and won''t change after // an EXPECT_CALL()
      statement finishes. const char* file_; // The file that contains the expectation.
      int line_; // The line number of the expectation. const std::string source_text_;
      // The EXPECT_CALL(...) source text. std::string description_; // User-readable
      name for the expectation. // True if and only if the cardinality is specified
      explicitly. bool cardinality_specified_; Cardinality cardinality_; // The cardinality
      of the expectation. // The immediate pre-requisites (i.e. expectations that
      must be // satisfied before this expectation can be matched) of this // expectation.
      We use std::shared_ptr in the set because we want an // Expectation object to
      be co-owned by its FunctionMocker and its // successors. This allows multiple
      mock objects to be deleted at // different times. ExpectationSet immediate_prerequisites_;
      // This group of fields are the current state of the expectation, // and can
      change as the mock function is called. int call_count_; // How many times this
      expectation has been invoked. bool retired_; // True if and only if this expectation
      has retired. UntypedActions untyped_actions_; bool extra_matcher_specified_;
      bool repeated_action_specified_; // True if a WillRepeatedly() was specified.
      bool retires_on_saturation_; Clause last_clause_; mutable bool action_count_checked_;
      // Under mutex_. mutable Mutex mutex_; // Protects action_count_checked_. };
      // class ExpectationBase template <typename F>class TypedExpectation; // Implements
      an expectation for the given function type. template <typename R, typename...
      Args>class TypedExpectation<R(Args...)> : public ExpectationBase { private:
      using F = R(Args...); public: typedef typename Function<F>::ArgumentTuple ArgumentTuple;
      typedef typename Function<F>::ArgumentMatcherTuple ArgumentMatcherTuple; typedef
      typename Function<F>::Result Result; TypedExpectation(FunctionMocker<F>* owner,
      const char* a_file, int a_line, const std::string& a_source_text, const ArgumentMatcherTuple&
      m) : ExpectationBase(a_file, a_line, a_source_text), owner_(owner), matchers_(m),
      // By default, extra_matcher_ should match anything. However, // we cannot initialize
      it with _ as that causes ambiguity between // Matcher''s copy and move constructor
      for some argument types. extra_matcher_(A<const ArgumentTuple&>()), repeated_action_(DoDefault())
      {} ~TypedExpectation() override { // Check the validity of the action count
      if it hasn''t been done // yet (for example, if the expectation was never used).
      CheckActionCountIfNotDone(); for (UntypedActions::const_iterator it = untyped_actions_.begin();
      it != untyped_actions_.end(); ++it) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1072
    functionDepth: 0
    functionLinenumber: 1072
    functionLinenumberEnd: 1072
    functionName: matchers
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ArgumentMatcherTuple
    signature: 'const ArgumentMatcherTuple & matchers() const '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetDescription
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1223,1
    - Dst: IsSaturated
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1224,1
    - Dst: IncrementCallCount
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1226,1
    - Dst: DescribeCallCountTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1233,1
    - Dst: IncrementCallCount
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1238,1
    - Dst: RetireAllPreRequisites
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1239,1
    - Dst: IsSaturated
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1241,1
    - Dst: Retire
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1242,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1221,1
    - Dst: GetCurrentAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1251,1
    - Dst: source_text
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1250,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 35
    argCount: 4
    argNames:
    - mocker
    - args
    - '::'
    - what
    - '::'
    - why
    argTypes:
    - FunctionMocker*
    - ArgumentTuple
    - std*
    - std*
    constantsTouched: []
    func_position:
      end: 1252
      start: 1217
    functionDepth: 0
    functionLinenumber: 1217
    functionLinenumberEnd: 1252
    functionName: GetActionForArguments
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - GetDescription
    - source_text
    - RetireAllPreRequisites
    - DescribeCallCountTo
    - IncrementCallCount
    - GetCurrentAction
    - IsSaturated
    - Retire
    linkageType: ''
    returnType: Action*
    signature: 'const Action <F> * GetActionForArguments(const FunctionMocker<F>*
      mocker, const ArgumentTuple& args, ::std::ostream* what, ::std::ostream* why)
      GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UninterestingCallCleanupHandler
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1405,1
    - Dst: ReportUninterestingCall
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1406,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1408
      start: 1401
    functionDepth: 0
    functionLinenumber: 1401
    functionLinenumberEnd: 1408
    functionName: UninterestingCallCleanupHandler
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - UninterestingCallCleanupHandler
    - ReportUninterestingCall
    linkageType: ''
    returnType: struct UntypedFunctionMockerBase
    signature: 'struct UntypedFunctionMockerBase :: UninterestingCallCleanupHandler '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: FailureCleanupHandler
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1418,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1426,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1423,1
    - Dst: Log
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1431,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1434
      start: 1410
    functionDepth: 0
    functionLinenumber: 1410
    functionLinenumberEnd: 1434
    functionName: FailureCleanupHandler
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Log
    - FailureCleanupHandler
    - Expect
    linkageType: ''
    returnType: struct UntypedFunctionMockerBase
    signature: 'struct UntypedFunctionMockerBase :: FailureCleanupHandler '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1645,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 19
    argCount: 5
    argNames:
    - untyped_args
    - untyped_action
    - is_excessive
    - '::'
    - what
    - '::'
    - why
    argTypes:
    - void*
    - void**
    - bool*
    - std*
    - std*
    constantsTouched: []
    func_position:
      end: 1664
      start: 1642
    functionDepth: 0
    functionLinenumber: 1642
    functionLinenumberEnd: 1664
    functionName: UntypedFindMatchingExpectation
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_LOCK_EXCLUDED_
    linkageType: ''
    returnType: ExpectationBase*
    signature: 'const ExpectationBase * UntypedFindMatchingExpectation( const void*
      untyped_args, const void** untyped_action, bool* is_excessive, ::std::ostream*
      what, ::std::ostream* why) override GTEST_LOCK_EXCLUDED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:822,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 825
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 825
    functionName: IncrementCallCount
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    linkageType: ''
    returnType: void
    signature: 'void IncrementCallCount() GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RegisterUseByOnCallOrExpectCall
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1562,1
    - Dst: MockObject
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1562,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1566
      start: 1561
    functionDepth: 0
    functionLinenumber: 1561
    functionLinenumberEnd: 1566
    functionName: (g_gmock_mutex)
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - RegisterUseByOnCallOrExpectCall
    - MockObject
    linkageType: ''
    returnType: GTEST_LOCK_EXCLUDED_
    signature: 'GTEST_LOCK_EXCLUDED_ (g_gmock_mutex) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1691
      start: 1677
    functionDepth: 0
    functionLinenumber: 1677
    functionLinenumberEnd: 1691
    functionName: (g_gmock_mutex)
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: GTEST_EXCLUSIVE_LOCK_REQUIRED_
    signature: 'const GTEST_EXCLUSIVE_LOCK_REQUIRED_ (g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expectation_base_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:2066,1
    - Dst: GetHandle
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:2066,1
    - Dst: expectation_base
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:2066,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - exp
    argTypes:
    - internal
    constantsTouched: []
    func_position:
      end: 2066
      start: 2065
    functionDepth: 0
    functionLinenumber: 2065
    functionLinenumberEnd: 2066
    functionName: Expectation
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - expectation_base
    - expectation_base_
    - GetHandle
    linkageType: ''
    returnType: Expectation
    signature: 'inline Expectation :: Expectation(internal::ExpectationBase& exp)
      // NOLINT : expectation_base_(exp.GetHandle().expectation_base()) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VerifyAndClearExpectationsLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1470,1
    - Dst: UnregisterLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1471,1
    - Dst: ClearDefaultActionsLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1472,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames:
    - g_gmock_mutex
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1473
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1473
    functionName: GTEST_LOCK_EXCLUDED_
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - VerifyAndClearExpectationsLocked
    - ClearDefaultActionsLocked
    - UnregisterLocked
    linkageType: ''
    returnType: override
    signature: 'override GTEST_LOCK_EXCLUDED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:174,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:190,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:163,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:195,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:199,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:152,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:184,1
    CyclomaticComplexity: 37
    EdgeCount: 37
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 245
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 245
    functionName: VerifyAndClearExpectationsLocked
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - GTEST_LOCK_EXCLUDED_
    linkageType: ''
    returnType: bool
    signature: 'bool VerifyAndClearExpectationsLocked() GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex);
      // Clears the ON_CALL()s set on this mock function. virtual void ClearDefaultActionsLocked()
      GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) = 0; // In all of the following
      Untyped* functions, it''s the caller''s // responsibility to guarantee the correctness
      of the arguments'' // types. // Writes a message that the call is uninteresting
      (i.e. neither // explicitly expected nor explicitly unexpected) to the given
      // ostream. virtual void UntypedDescribeUninterestingCall(const void* untyped_args,
      ::std::ostream* os) const GTEST_LOCK_EXCLUDED_(g_gmock_mutex) = 0; // Returns
      the expectation that matches the given function arguments // (or NULL is there''s
      no match); when a match is found, // untyped_action is set to point to the action
      that should be // performed (or NULL if the action is "do default"), and //
      is_excessive is modified to indicate whether the call exceeds the // expected
      number. virtual const ExpectationBase* UntypedFindMatchingExpectation( const
      void* untyped_args, const void** untyped_action, bool* is_excessive, ::std::ostream*
      what, ::std::ostream* why) GTEST_LOCK_EXCLUDED_(g_gmock_mutex) = 0; // Prints
      the given function arguments to the ostream. virtual void UntypedPrintArgs(const
      void* untyped_args, ::std::ostream* os) const = 0; // Sets the mock object this
      mock method belongs to, and registers // this information in the global mock
      registry. Will be called // whenever an EXPECT_CALL() or ON_CALL() is executed
      on this mock // method. void RegisterOwner(const void* mock_obj) GTEST_LOCK_EXCLUDED_(g_gmock_mutex);
      // Sets the mock object this mock method belongs to, and sets the // name of
      the mock function. Will be called upon each invocation // of this mock function.
      void SetOwnerAndName(const void* mock_obj, const char* name) GTEST_LOCK_EXCLUDED_(g_gmock_mutex);
      // Returns the mock object this mock method belongs to. Must be // called after
      RegisterOwner() or SetOwnerAndName() has been // called. const void* MockObject()
      const GTEST_LOCK_EXCLUDED_(g_gmock_mutex); // Returns the name of this mock
      method. Must be called after // SetOwnerAndName() has been called. const char*
      Name() const GTEST_LOCK_EXCLUDED_(g_gmock_mutex); protected: typedef std::vector<const
      void*> UntypedOnCallSpecs; using UntypedExpectations = std::vector<std::shared_ptr<ExpectationBase>>;
      struct UninterestingCallCleanupHandler; struct FailureCleanupHandler; // Returns
      an Expectation object that references and co-owns exp, // which must be an expectation
      on this mock function. Expectation GetHandleOf(ExpectationBase* exp); // Address
      of the mock object this mock method belongs to. Only // valid after this mock
      method has been called or // ON_CALL/EXPECT_CALL has been invoked on it. const
      void* mock_obj_; // Protected by g_gmock_mutex. // Name of the function being
      mocked. Only valid after this mock // method has been called. const char* name_;
      // Protected by g_gmock_mutex. // All default action specs for this function
      mocker. UntypedOnCallSpecs untyped_on_call_specs_; // All expectations for this
      function mocker. // // It''s undefined behavior to interleave expectations (EXPECT_CALLs
      // or ON_CALLs) and mock function calls. Also, the order of // expectations
      is important. Therefore it''s a logic race condition // to read/write untyped_expectations_
      concurrently. In order for // tools like tsan to catch concurrent read/write
      accesses to // untyped_expectations, we deliberately leave accesses to it //
      unprotected. UntypedExpectations untyped_expectations_; }; // class UntypedFunctionMockerBase
      // Untyped base class for OnCallSpec<F>. class UntypedOnCallSpecBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertSpecProperty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:328,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 332
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 332
    functionName: GetAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - AssertSpecProperty
    linkageType: ''
    returnType: Action
    signature: 'const Action <F>& GetAction() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 604
      start: 604
    functionDepth: 0
    functionLinenumber: 604
    functionLinenumberEnd: 604
    functionName: begin
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: const_iterator
    signature: 'const_iterator begin() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:743,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - property
    - failure_message
    argTypes:
    - bool
    - std
    constantsTouched: []
    func_position:
      end: 744
      start: 741
    functionDepth: 0
    functionLinenumber: 741
    functionLinenumberEnd: 744
    functionName: AssertSpecProperty
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Assert
    linkageType: ''
    returnType: void
    signature: 'void AssertSpecProperty(bool property, const std::string& failure_message)
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 786
      start: 786
    functionDepth: 0
    functionLinenumber: 786
    functionLinenumberEnd: 786
    functionName: GetDescription
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string& GetDescription() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1077
      start: 1075
    functionDepth: 0
    functionLinenumber: 1075
    functionLinenumberEnd: 1077
    functionName: extra_matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Matcher
    signature: 'const Matcher < const ArgumentTuple&>& extra_matcher() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1080
      start: 1080
    functionDepth: 0
    functionLinenumber: 1080
    functionLinenumberEnd: 1080
    functionName: repeated_action
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Action
    signature: 'const Action <F>& repeated_action() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1350,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1350
      start: 1350
    functionDepth: 0
    functionLinenumber: 1350
    functionLinenumberEnd: 1350
    functionName: Unwrap
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - move
    linkageType: ''
    returnType: T
    signature: 'T Unwrap() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 694
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 694
    functionName: source_text
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * source_text() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1356
      start: 1356
    functionDepth: 0
    functionLinenumber: 1356
    functionLinenumberEnd: 1356
    functionName: Peek
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: 'const T & Peek() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_ptr_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1370,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ref
    argTypes:
    - reference
    constantsTouched: []
    func_position:
      end: 1370
      start: 1370
    functionDepth: 0
    functionLinenumber: 1370
    functionLinenumberEnd: 1370
    functionName: ReferenceOrValueWrapper
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - value_ptr_
    linkageType: ''
    returnType: explicit
    signature: 'explicit ReferenceOrValueWrapper(reference ref) : value_ptr_(&ref) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1519,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1541
      start: 1518
    functionDepth: 0
    functionLinenumber: 1518
    functionLinenumberEnd: 1541
    functionName: ClearDefaultActionsLocked
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    linkageType: ''
    returnType: void
    signature: 'void ClearDefaultActionsLocked() override GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 530
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 530
    functionName: Less
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class Less '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:654,1
    - Dst: InSequence
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 662
      start: 652
    functionDepth: 0
    functionLinenumber: 652
    functionLinenumberEnd: 662
    functionName: InSequence
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - InSequence
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ InSequence '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1500,1
    - Dst: Exists
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1507,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1511,1
    - Dst: Exists
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1511,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1513,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 2
    argNames:
    - args
    - call_description
    argTypes:
    - ArgumentTuple
    - std
    constantsTouched: []
    func_position:
      end: 1514
      start: 1496
    functionDepth: 0
    functionLinenumber: 1496
    functionLinenumberEnd: 1514
    functionName: PerformDefaultAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Exists
    - Get
    - Assert
    - move
    linkageType: ''
    returnType: Result
    signature: 'Result PerformDefaultAction(ArgumentTuple&& args, const std::string&
      call_description) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1697,1
    - Dst: PrintTriedExpectationsLocked
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1701,1
    - Dst: DescribeDefaultActionTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1700,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 3
    argNames:
    - args
    - '::'
    - os
    - '::'
    - why
    argTypes:
    - ArgumentTuple
    - std*
    - std*
    constantsTouched: []
    func_position:
      end: 1702
      start: 1694
    functionDepth: 0
    functionLinenumber: 1694
    functionLinenumberEnd: 1702
    functionName: FormatUnexpectedCallMessageLocked
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - DescribeDefaultActionTo
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - PrintTriedExpectationsLocked
    linkageType: ''
    returnType: void
    signature: 'void FormatUnexpectedCallMessageLocked(const ArgumentTuple& args,
      ::std::ostream* os, ::std::ostream* why) const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:389,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:386,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:392,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:412,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:427,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:438,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:447,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:454,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:461,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:370,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:382,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:376,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:417,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:422,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:432,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:442,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 462
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 462
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - GTEST_LOCK_EXCLUDED_
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Mock '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:261,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - property
    - failure_message
    argTypes:
    - bool
    - std
    constantsTouched: []
    func_position:
      end: 262
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 262
    functionName: AssertSpecProperty
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - Assert
    linkageType: ''
    returnType: void
    signature: 'void AssertSpecProperty(bool property, const std::string& failure_message)
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 605
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 605
    functionName: end
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: const_iterator
    signature: 'const_iterator end() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 696
      start: 696
    functionDepth: 0
    functionLinenumber: 696
    functionLinenumberEnd: 696
    functionName: cardinality
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Cardinality
    signature: 'const Cardinality & cardinality() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 758
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 758
    functionName: cardinality_specified
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool cardinality_specified() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - a_cardinality
    argTypes:
    - Cardinality
    constantsTouched: []
    func_position:
      end: 763
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 763
    functionName: set_cardinality
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_cardinality(const Cardinality& a_cardinality) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: cardinality
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:803,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 804
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 804
    functionName: IsOverSaturated
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - cardinality
    linkageType: ''
    returnType: bool
    signature: 'bool IsOverSaturated() const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 10
    argCount: 1
    argNames:
    - args
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1487
      start: 1478
    functionDepth: 0
    functionLinenumber: 1478
    functionLinenumberEnd: 1487
    functionName: FindOnCallSpec
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OnCallSpec*
    signature: 'const OnCallSpec <F> * FindOnCallSpec(const ArgumentTuple& args) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1708,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 32
    argCount: 2
    argNames:
    - args
    - '::'
    - why
    argTypes:
    - ArgumentTuple
    - std*
    constantsTouched: []
    func_position:
      end: 1727
      start: 1706
    functionDepth: 0
    functionLinenumber: 1706
    functionLinenumberEnd: 1727
    functionName: PrintTriedExpectationsLocked
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    linkageType: ''
    returnType: void
    signature: 'void PrintTriedExpectationsLocked(const ArgumentTuple& args, ::std::ostream*
      why) const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AllPrerequisitesAreSatisfied
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1132,1
    - Dst: is_retired
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1132,1
    - Dst: CheckActionCountIfNotDone
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1131,1
    - Dst: Matches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1132,1
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1124,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - args
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1133
      start: 1123
    functionDepth: 0
    functionLinenumber: 1123
    functionLinenumberEnd: 1133
    functionName: ShouldHandleArguments
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - CheckActionCountIfNotDone
    - is_retired
    - Matches
    - AllPrerequisitesAreSatisfied
    linkageType: ''
    returnType: bool
    signature: 'bool ShouldHandleArguments(const ArgumentTuple& args) const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TupleMatches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - args
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 324
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 324
    functionName: Matches
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - TupleMatches
    linkageType: ''
    returnType: bool
    signature: 'bool Matches(const ArgumentTuple& args) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExpectationSet
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:568,1
    - Dst: Expectation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 575
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 575
    functionName: ExpectationSet
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - ExpectationSet
    - Expectation
    linkageType: ''
    returnType: class
    signature: 'class ExpectationSet '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: line
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    - Dst: file
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:700,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 701
      start: 699
    functionDepth: 0
    functionLinenumber: 699
    functionLinenumberEnd: 701
    functionName: DescribeLocationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - FormatFileLocation
    - line
    - file
    linkageType: ''
    returnType: void
    signature: 'void DescribeLocationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_EXCLUSIVE_LOCK_REQUIRED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1116,1
    - Dst: TupleMatches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1118,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - args
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1119
      start: 1115
    functionDepth: 0
    functionLinenumber: 1115
    functionLinenumberEnd: 1119
    functionName: Matches
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - GTEST_EXCLUSIVE_LOCK_REQUIRED_
    - TupleMatches
    linkageType: ''
    returnType: bool
    signature: 'bool Matches(const ArgumentTuple& args) const GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1546,1
    - Dst: InvokeWith
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1547,1
    - Dst: ArgumentTuple
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1547,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - args
    argTypes:
    - Args
    constantsTouched: []
    func_position:
      end: 1548
      start: 1546
    functionDepth: 0
    functionLinenumber: 1546
    functionLinenumberEnd: 1548
    functionName: Invoke
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - ArgumentTuple
    - InvokeWith
    - GTEST_LOCK_EXCLUDED_
    linkageType: ''
    returnType: Result
    signature: 'Result Invoke(Args... args) GTEST_LOCK_EXCLUDED_(g_gmock_mutex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1905,1
    - Dst: AsStdFunction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1910,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1922,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1927,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1936,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1956,1
    - Dst: MockFunction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1932,1
    - Dst: gmock_Call
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1922,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1927,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1910,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1924,1
    - Dst: gmock_Call
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1927,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1955,1
    - Dst: MockFunction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h:1933,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 76
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1967
      start: 1899
    functionDepth: 0
    functionLinenumber: 1899
    functionLinenumberEnd: 1967
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached:
    - MockFunction
    - R
    - move
    - gmock_Call
    - AsStdFunction
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - args
    argTypes:
    - Args
    constantsTouched: []
    func_position:
      end: 1920
      start: 1917
    functionDepth: 0
    functionLinenumber: 1917
    functionLinenumberEnd: 1920
    functionName: Call
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-spec-builders.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: R
    signature: 'R Call(Args... args) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 94
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 94
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:206,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 207
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 207
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Get
    linkageType: ''
    returnType: T
    signature: 'static T Get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 216
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 216
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Get
    linkageType: ''
    returnType: T
    signature: 'static T Get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StdFunctionAdaptor
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:515,1
    - Dst: operator
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:537,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:539,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 546
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 546
    functionName: final
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - StdFunctionAdaptor
    - operator
    - move
    linkageType: ''
    returnType: StdFunctionAdaptor
    signature: 'StdFunctionAdaptor final '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 601
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 601
    functionName: IsSet
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool IsSet() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:613,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 615
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 615
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Get
    linkageType: ''
    returnType: T
    signature: 'static T Get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 598
      start: 595
    functionDepth: 0
    functionLinenumber: 595
    functionLinenumberEnd: 598
    functionName: Clear
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void Clear() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1103,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1108
      start: 1102
    functionDepth: 0
    functionLinenumber: 1102
    functionLinenumberEnd: 1108
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - move
    - GTEST_CHECK_
    linkageType: ''
    returnType: T
    signature: 'T operator()() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1133
      start: 1124
    functionDepth: 0
    functionLinenumber: 1124
    functionLinenumberEnd: 1133
    functionName: ReturnNullAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class ReturnNullAction '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePolymorphicAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1940,1
    - Dst: ReturnNullAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1940,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1941
      start: 1939
    functionDepth: 0
    functionLinenumber: 1939
    functionLinenumberEnd: 1941
    functionName: ReturnNull
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - ReturnNullAction
    - MakePolymorphicAction
    linkageType: ''
    returnType: PolymorphicAction
    signature: 'inline PolymorphicAction <internal::ReturnNullAction> ReturnNull() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2206
      start: 2174
    functionDepth: 0
    functionLinenumber: 2174
    functionLinenumberEnd: 2206
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Apply
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1720,1
    - Dst: T
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1722,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1725
      start: 1719
    functionDepth: 0
    functionLinenumber: 1719
    functionLinenumberEnd: 1725
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Apply
    - T
    linkageType: ''
    returnType: T*
    signature: 'T * operator()() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:176,1
    - Dst: __assume
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:181,1
    - Dst: __builtin_unreachable
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:179,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 187
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 187
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Assert
    - __builtin_unreachable
    - __assume
    linkageType: ''
    returnType: T
    signature: 'static T Get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 815
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 815
    functionName: OnceAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: operator
    signature: 'operator OnceAction <F>() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2233
      start: 2233
    functionDepth: 0
    functionLinenumber: 2233
    functionLinenumberEnd: 2233
    functionName: kExcessArg
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ExcessiveArg
    signature: 'static constexpr ExcessiveArg kExcessArg '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ref_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ref
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1175
      start: 1175
    functionDepth: 0
    functionLinenumber: 1175
    functionLinenumberEnd: 1175
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - ref_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(T& ref) : ref_(ref) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:171,1
    - Dst: __assume
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:181,1
    - Dst: __builtin_unreachable
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:179,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:176,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:206,1
    - Dst: Exists
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:215,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:216,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 226
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 226
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - __assume
    - Exists
    - Get
    - Assert
    - __builtin_unreachable
    - T
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:171,1
    - Dst: __assume
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:181,1
    - Dst: __builtin_unreachable
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:179,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:176,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:206,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 208
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 208
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - __assume
    - Get
    - Assert
    - __builtin_unreachable
    - T
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 690
      start: 690
    functionDepth: 0
    functionLinenumber: 690
    functionLinenumberEnd: 690
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void Get() '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsDoDefault
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:793,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:796,1
    - Dst: Apply
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:796,1
    - Dst: IllegalDoDefault
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:794,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - args
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 797
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 797
    functionName: Perform
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Apply
    - IllegalDoDefault
    - IsDoDefault
    - move
    linkageType: ''
    returnType: Result
    signature: 'Result Perform(ArgumentTuple args) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1143
      start: 1136
    functionDepth: 0
    functionLinenumber: 1136
    functionLinenumberEnd: 1143
    functionName: ReturnVoidAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class ReturnVoidAction '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1250
      start: 1246
    functionDepth: 0
    functionLinenumber: 1246
    functionLinenumberEnd: 1250
    functionName: Next
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: 'T Next() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1277
    functionDepth: 0
    functionLinenumber: 1277
    functionLinenumberEnd: 1279
    functionName: ''
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Perform(const ArgumentTuple& /* args */)
    signature: 'Perform(const ArgumentTuple& /* args */) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoDefaultAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1996,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1997
      start: 1995
    functionDepth: 0
    functionLinenumber: 1995
    functionLinenumberEnd: 1997
    functionName: DoDefault
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - DoDefaultAction
    linkageType: ''
    returnType: internal
    signature: 'inline internal ::DoDefaultAction DoDefault() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 225
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 225
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'static T * Get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 627
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 627
    functionName: Produce
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: 'T Produce() override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const ArgumentTuple
    - '&'
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1177
      start: 1177
    functionDepth: 0
    functionLinenumber: 1177
    functionLinenumberEnd: 1177
    functionName: Perform
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Result
    signature: 'Result Perform(const ArgumentTuple&) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Apply
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2220,1
    - Dst: Apply
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2226,1
    - Dst: MakeAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2254,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2255,1
    - Dst: MakeAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2248,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 51
    argCount: 1
    argNames:
    - impl
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 2399
      start: 2215
    functionDepth: 0
    functionLinenumber: 2215
    functionLinenumberEnd: 2399
    functionName: ActionImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Apply
    - move
    - MakeAction
    linkageType: ''
    returnType: explicit
    signature: 'explicit ActionImpl(std::shared_ptr<Impl> impl) : Base '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - exception
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 2171
      start: 2169
    functionDepth: 0
    functionLinenumber: 2169
    functionLinenumberEnd: 2171
    functionName: Rethrow
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: internal
    signature: 'inline internal ::RethrowAction Rethrow(std::exception_ptr exception) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: function_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:495,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - args
    argTypes:
    - Args
    constantsTouched: []
    func_position:
      end: 496
      start: 494
    functionDepth: 0
    functionLinenumber: 494
    functionLinenumberEnd: 496
    functionName: Call
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - function_
    linkageType: ''
    returnType: Result
    signature: 'Result Call(Args... args) && '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 661
      start: 661
    functionDepth: 0
    functionLinenumber: 661
    functionLinenumberEnd: 661
    functionName: Clear
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void Clear() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 664
      start: 664
    functionDepth: 0
    functionLinenumber: 664
    functionLinenumberEnd: 664
    functionName: IsSet
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool IsSet() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fun_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:774,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - impl
    argTypes:
    - ActionInterface*
    constantsTouched: []
    func_position:
      end: 774
      start: 773
    functionDepth: 0
    functionLinenumber: 773
    functionLinenumberEnd: 774
    functionName: Action
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - fun_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Action(ActionInterface<F>* impl) : fun_(ActionAdapter{::std::shared_ptr<ActionInterface<F>>(impl)}) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 784
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 784
    functionName: IsDoDefault
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsDoDefault() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: impl_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:887,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - impl
    argTypes:
    - Impl
    constantsTouched: []
    func_position:
      end: 887
      start: 887
    functionDepth: 0
    functionLinenumber: 887
    functionLinenumberEnd: 887
    functionName: MonomorphicImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - impl_
    linkageType: ''
    returnType: explicit
    signature: 'explicit MonomorphicImpl(const Impl& impl) : impl_(impl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: payload
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:925,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:925,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 925
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 925
    functionName: ByMoveWrapper
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - payload
    - move
    linkageType: ''
    returnType: explicit
    signature: 'explicit ByMoveWrapper(T value) : payload(std::move(value)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: U
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:942,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:933,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:943,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:965,1
    - Dst: State
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:969,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:971,1
    - Dst: input_value
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:988,1
    - Dst: input_value
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1002,1
    - Dst: state_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:965,1
    - Dst: state_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:969,1
    - Dst: State
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:965,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:933,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1002,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 56
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 931
    functionDepth: 0
    functionLinenumber: 931
    functionLinenumberEnd: 1089
    functionName: final
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - U
    - state_
    - State
    - move
    - input_value
    - value_
    linkageType: ''
    returnType: ReturnAction
    signature: 'ReturnAction final '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 891
      start: 889
    functionDepth: 0
    functionLinenumber: 889
    functionLinenumberEnd: 891
    functionName: Perform
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Result
    signature: 'Result Perform(const ArgumentTuple& args) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: State
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:969,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:965,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:971,1
    - Dst: input_value
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:988,1
    - Dst: input_value
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1002,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1002,1
    - Dst: state_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:965,1
    - Dst: state_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:969,1
    - Dst: State
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:965,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1086
      start: 960
    functionDepth: 0
    functionLinenumber: 960
    functionLinenumberEnd: 1086
    functionName: final
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - state_
    - State
    - move
    - input_value
    linkageType: ''
    returnType: Impl
    signature: 'Impl final '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Apply
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2220,1
    - Dst: Apply
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2226,1
    - Dst: MakeAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2254,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2255,1
    - Dst: MakeAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:2248,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 49
    argCount: 1
    argNames:
    - arg
    argTypes:
    - Args
    constantsTouched: []
    func_position:
      end: 2341
      start: 2217
    functionDepth: 0
    functionLinenumber: 2217
    functionLinenumberEnd: 2341
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Apply
    - move
    - MakeAction
    linkageType: ''
    returnType: R
    signature: 'R operator()(Args&&... arg) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const ArgumentTuple
    - '&'
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1219
      start: 1219
    functionDepth: 0
    functionLinenumber: 1219
    functionLinenumberEnd: 1219
    functionName: Perform
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Result
    signature: 'Result Perform(const ArgumentTuple&) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePolymorphicAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1945,1
    - Dst: ReturnVoidAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1945,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1946
      start: 1944
    functionDepth: 0
    functionLinenumber: 1944
    functionLinenumberEnd: 1946
    functionName: Return
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - ReturnVoidAction
    - MakePolymorphicAction
    linkageType: ''
    returnType: PolymorphicAction
    signature: 'inline PolymorphicAction <internal::ReturnVoidAction> Return() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: T
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - T
    linkageType: ''
    returnType: T
    signature: 'static T Get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 224
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: Exists
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool Exists() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:626,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 633
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 633
    functionName: FixedValueProducer
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - value_
    linkageType: ''
    returnType: class
    signature: 'class FixedValueProducer : public ValueProducer '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: factory_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:638,1
    - Dst: factory_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:639,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 645
      start: 635
    functionDepth: 0
    functionLinenumber: 635
    functionLinenumberEnd: 645
    functionName: FactoryValueProducer
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - factory_
    linkageType: ''
    returnType: class
    signature: 'class FactoryValueProducer : public ValueProducer '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsSet
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:606,1
    - Dst: Exists
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:606,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 607
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 607
    functionName: Exists
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Exists
    - IsSet
    linkageType: ''
    returnType: bool
    signature: 'static bool Exists() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsSet
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:669,1
    - Dst: Exists
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:669,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 670
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 670
    functionName: Exists
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Exists
    - IsSet
    linkageType: ''
    returnType: bool
    signature: 'static bool Exists() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:676,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 678
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 678
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - Get
    linkageType: ''
    returnType: T
    signature: 'static T & Get() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:971,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 971
      start: 971
    functionDepth: 0
    functionLinenumber: 971
    functionLinenumberEnd: 971
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - move
    linkageType: ''
    returnType: U
    signature: 'U operator()() && '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FactoryValueProducer
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:591,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - factory
    argTypes:
    - FactoryFunction
    constantsTouched: []
    func_position:
      end: 592
      start: 589
    functionDepth: 0
    functionLinenumber: 589
    functionLinenumberEnd: 592
    functionName: SetFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - FactoryValueProducer
    linkageType: ''
    returnType: void
    signature: 'static void SetFactory(FactoryFunction factory) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: factory_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:639,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 639
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 639
    functionName: Produce
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - factory_
    linkageType: ''
    returnType: T
    signature: 'T Produce() override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: state_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:969,1
    - Dst: State
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:969,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - input_value
    argTypes:
    - R
    constantsTouched: []
    func_position:
      end: 969
      start: 969
    functionDepth: 0
    functionLinenumber: 969
    functionLinenumberEnd: 969
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - state_
    - State
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(const R& input_value) : state_(new State(input_value)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 972
      start: 972
    functionDepth: 0
    functionLinenumber: 972
    functionLinenumberEnd: 972
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: U
    signature: 'U operator()() const& '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const ArgumentTuple
    - '&'
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1132
      start: 1130
    functionDepth: 0
    functionLinenumber: 1130
    functionLinenumberEnd: 1132
    functionName: Perform
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Result
    signature: 'Result Perform(const ArgumentTuple&) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - const ArgumentTuple
    - '&'
    argTypes:
    - ArgumentTuple
    constantsTouched: []
    func_position:
      end: 1142
      start: 1140
    functionDepth: 0
    functionLinenumber: 1140
    functionLinenumberEnd: 1142
    functionName: Perform
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Perform(const ArgumentTuple&) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1448,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 1
    argNames:
    - args
    argTypes:
    - Args
    constantsTouched: []
    func_position:
      end: 1451
      start: 1447
    functionDepth: 0
    functionLinenumber: 1447
    functionLinenumberEnd: 1451
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - move
    linkageType: ''
    returnType: R
    signature: 'R operator()(Args&&... args) && '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssignAction
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1274,1
    - Dst: ptr_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1274,1
    - Dst: operator
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1315,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1274,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1318
      start: 1259
    functionDepth: 0
    functionLinenumber: 1259
    functionLinenumberEnd: 1318
    functionName: DoDefaultAction
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - AssignAction
    - value_
    - operator
    - ptr_
    linkageType: ''
    returnType: class
    signature: 'class DoDefaultAction '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1217,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1217
      start: 1217
    functionDepth: 0
    functionLinenumber: 1217
    functionLinenumberEnd: 1217
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-actions.h
    functionUses: []
    functionsReached:
    - value_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(const T& value) : value_(value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:584,1
    - Dst: InvokeArgument
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:593,1
    - Dst: operator
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:602,1
    - Dst: InvokeArgument
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:603,1
    - Dst: args_tuple
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:606,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:609,1
    - Dst: decltype
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:611,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 616
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 616
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - operator
    - move
    - args_tuple
    - InvokeArgument
    - decltype
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvokeArgument
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:593,1
    - Dst: operator
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:602,1
    - Dst: InvokeArgument
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:603,1
    - Dst: args_tuple
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:606,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:609,1
    - Dst: decltype
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h:611,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 613
      start: 586
    functionDepth: 0
    functionLinenumber: 586
    functionLinenumberEnd: 613
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-actions.h
    functionUses: []
    functionsReached:
    - operator
    - move
    - args_tuple
    - InvokeArgument
    - decltype
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Cast
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:341,1
    - Dst: CastImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:355,1
    - Dst: Impl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:407,1
    - Dst: CastImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:362,1
    - Dst: source_matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:422,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 67
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 461
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 461
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - source_matcher_
    - Impl
    - CastImpl
    - Cast
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2389
      start: 2386
    functionDepth: 0
    functionLinenumber: 2386
    functionLinenumberEnd: 2389
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1703
      start: 1703
    functionDepth: 0
    functionLinenumber: 1703
    functionLinenumberEnd: 1703
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2385
      start: 2382
    functionDepth: 0
    functionLinenumber: 2382
    functionLinenumberEnd: 2385
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2398,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - container
    - listener
    argTypes:
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2400
      start: 2391
    functionDepth: 0
    functionLinenumber: 2391
    functionLinenumberEnd: 2400
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintIfNotEmpty
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Container container, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - type_name
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 591
      start: 586
    functionDepth: 0
    functionLinenumber: 586
    functionLinenumberEnd: 591
    functionName: IsReadableTypeName
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsReadableTypeName(const std::string& type_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3720
      start: 3720
    functionDepth: 0
    functionLinenumber: 3720
    functionLinenumberEnd: 3720
    functionName: count
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t count() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - container
    - listener
    argTypes:
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2873
      start: 2870
    functionDepth: 0
    functionLinenumber: 2870
    functionLinenumberEnd: 2873
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Container container, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4264,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4267
      start: 4263
    functionDepth: 0
    functionLinenumber: 4263
    functionLinenumberEnd: 4267
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetTypeName
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1040,1
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1041,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - s
    - listener
    argTypes:
    - internal
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 1042
      start: 1036
    functionDepth: 0
    functionLinenumber: 1036
    functionLinenumberEnd: 1042
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - string
    - MatchAndExplain
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(const internal::StringView& s, MatchResultListener*
      listener) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - explanation
    - '::'
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 581
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 581
    functionName: PrintIfNotEmpty
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void PrintIfNotEmpty(const std::string& explanation, ::std::ostream*
      os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 771
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 771
    functionName: AnythingMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class AnythingMatcher '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 781
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 781
    functionName: IsNullMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class IsNullMatcher '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1015,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1016
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1016
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2604,1
    - Dst: sorted_container
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2605,1
    - Dst: sort
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2607,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2617,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2623,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 2
    argNames:
    - lhs
    - listener
    argTypes:
    - LhsContainer
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2625
      start: 2602
    functionDepth: 0
    functionLinenumber: 2602
    functionLinenumberEnd: 2625
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    - sorted_container
    - sort
    - PrintIfNotEmpty
    - ConstReference
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(LhsContainer lhs, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2905,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2906
      start: 2903
    functionDepth: 0
    functionLinenumber: 2903
    functionLinenumberEnd: 2906
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintToString
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 783
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 783
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1020,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1021
      start: 1018
    functionDepth: 0
    functionLinenumber: 1018
    functionLinenumberEnd: 1021
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - (*f)
    - arg
    argTypes:
    - ResType
    - T
    constantsTouched: []
    func_position:
      end: 2269
      start: 2267
    functionDepth: 0
    functionLinenumber: 2267
    functionLinenumberEnd: 2269
    functionName: Invoke
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ResType
    signature: 'ResType Invoke(ResType (*f)(ArgType), T arg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size_matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - size_matcher
    argTypes:
    - SizeMatcher
    constantsTouched: []
    func_position:
      end: 2380
      start: 2379
    functionDepth: 0
    functionLinenumber: 2379
    functionLinenumberEnd: 2380
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - size_matcher_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(const SizeMatcher& size_matcher) : size_matcher_(MatcherCast<SizeType>(size_matcher)) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2913,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2912,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 2
    argNames:
    - value
    - listener
    argTypes:
    - V
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2916
      start: 2908
    functionDepth: 0
    functionLinenumber: 2908
    functionLinenumberEnd: 2916
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintToString
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(V value, MatchResultListener* listener) const
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4203,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4206
      start: 4202
    functionDepth: 0
    functionLinenumber: 4202
    functionLinenumberEnd: 4206
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetTypeName
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DescribeNegationToImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3855,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3856
      start: 3854
    functionDepth: 0
    functionLinenumber: 3854
    functionLinenumberEnd: 3856
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - DescribeNegationToImpl
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Rank1
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3126,1
    - Dst: First
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3126,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - key_value
    - listener
    argTypes:
    - PairType
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 3132
      start: 3122
    functionDepth: 0
    functionLinenumber: 3122
    functionLinenumberEnd: 3132
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Rank1
    - First
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(PairType key_value, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CaseInsensitiveCStringEquals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:873,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 874
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 874
    functionName: CaseInsensitiveCStringEquals
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - CaseInsensitiveCStringEquals
    linkageType: ''
    returnType: bool
    signature: 'inline bool CaseInsensitiveCStringEquals(const char* lhs, const char*
      rhs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1256
      start: 1254
    functionDepth: 0
    functionLinenumber: 1254
    functionLinenumberEnd: 1256
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2027
      start: 2024
    functionDepth: 0
    functionLinenumber: 2024
    functionLinenumberEnd: 2027
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2069
      start: 2069
    functionDepth: 0
    functionLinenumber: 2069
    functionLinenumberEnd: 2069
    functionName: GetToName
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'static std ::string GetToName() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DescribeToImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3850,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3851
      start: 3849
    functionDepth: 0
    functionLinenumber: 3849
    functionLinenumberEnd: 3851
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - DescribeToImpl
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: forward_as_tuple
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4307,1
    - Dst: PrintIndices
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4310,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4311,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4316,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - args
    - listener
    argTypes:
    - ArgsTuple
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 4318
      start: 4302
    functionDepth: 0
    functionLinenumber: 4302
    functionLinenumberEnd: 4318
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - forward_as_tuple
    - PrintToString
    - PrintIfNotEmpty
    - PrintIndices
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(ArgsTuple args, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 572
      start: 572
    functionDepth: 0
    functionLinenumber: 572
    functionLinenumberEnd: 572
    functionName: Rank0
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct Rank1
    signature: 'struct Rank1 : Rank0 '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CaseInsensitiveWideCStringEquals
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:878,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - wchar_t*
    - wchar_t*
    constantsTouched: []
    func_position:
      end: 879
      start: 876
    functionDepth: 0
    functionLinenumber: 876
    functionLinenumberEnd: 879
    functionName: CaseInsensitiveCStringEquals
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - CaseInsensitiveWideCStringEquals
    linkageType: ''
    returnType: bool
    signature: 'inline bool CaseInsensitiveCStringEquals(const wchar_t* lhs, const
      wchar_t* rhs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1260
      start: 1258
    functionDepth: 0
    functionLinenumber: 1258
    functionLinenumberEnd: 1260
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1301
      start: 1294
    functionDepth: 0
    functionLinenumber: 1294
    functionLinenumberEnd: 1301
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetRawPointer
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2032,1
    - Dst: MatchPrintAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2033,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - pointer
    - listener
    argTypes:
    - PointerType
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2034
      start: 2029
    functionDepth: 0
    functionLinenumber: 2029
    functionLinenumberEnd: 2034
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MatchPrintAndExplain
    - GetRawPointer
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(PointerType pointer, MatchResultListener* listener)
      const override '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: holds_alternative
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4169,1
    - Dst: get
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4171,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4189,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4196,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4198,1
    - Dst: matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4178,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4178,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4203,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4209,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 4226
      start: 4166
    functionDepth: 0
    functionLinenumber: 4166
    functionLinenumberEnd: 4226
    functionName: variant_matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetTypeName
    - get
    - matcher_
    - holds_alternative
    - move
    - PrintIfNotEmpty
    - PrintToString
    linkageType: ''
    returnType: namespace
    signature: 'namespace variant_matcher '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintIndices
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4322,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4324
      start: 4320
    functionDepth: 0
    functionLinenumber: 4320
    functionLinenumberEnd: 4324
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintIndices
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1163
      start: 1160
    functionDepth: 0
    functionLinenumber: 1160
    functionLinenumberEnd: 1163
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2263,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - (*f)
    argTypes:
    - ResType
    constantsTouched: []
    func_position:
      end: 2265
      start: 2262
    functionDepth: 0
    functionLinenumber: 2262
    functionLinenumberEnd: 2265
    functionName: CheckIsValid
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GTEST_CHECK_
    linkageType: ''
    returnType: void
    signature: 'static void CheckIsValid(ResType (*f)(ArgType)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2442
      start: 2439
    functionDepth: 0
    functionLinenumber: 2439
    functionLinenumberEnd: 2442
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4137
      start: 4134
    functionDepth: 0
    functionLinenumber: 4134
    functionLinenumberEnd: 4137
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - const MatcherTuple
    - '&'
    - /* matchers */
    - const ValueTuple
    - '&'
    - /* values */
    - '::'
    - '*'
    - /* os */
    argTypes:
    - MatcherTuple
    - ValueTuple
    - std
    constantsTouched: []
    func_position:
      end: 683
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 683
    functionName: ExplainMatchFailuresTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void ExplainMatchFailuresTo(const MatcherTuple& /* matchers */, const
      ValueTuple& /* values */, ::std::ostream* /* os */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: f
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:732,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - f
    - t
    - out
    argTypes:
    - Func
    - Tup
    - OutIter
    constantsTouched: []
    func_position:
      end: 734
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 734
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - f
    linkageType: ''
    returnType: OutIter
    signature: 'OutIter operator()(Func f, const Tup& t, OutIter out) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1168
      start: 1165
    functionDepth: 0
    functionLinenumber: 1165
    functionLinenumberEnd: 1168
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: distance
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2448,1
    - Dst: begin
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2448,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2454,1
    - Dst: end
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2448,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - container
    - listener
    argTypes:
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2456
      start: 2444
    functionDepth: 0
    functionLinenumber: 2444
    functionLinenumberEnd: 2456
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintIfNotEmpty
    - begin
    - end
    - distance
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Container container, MatchResultListener* listener)
      const override '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IsOptionalEngaged
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4141,1
    - Dst: HighestRank
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4141,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4152,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4154,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 2
    argNames:
    - optional
    - listener
    argTypes:
    - Optional
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 4156
      start: 4139
    functionDepth: 0
    functionLinenumber: 4139
    functionLinenumberEnd: 4156
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintIfNotEmpty
    - IsOptionalEngaged
    - HighestRank
    - PrintToString
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Optional optional, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 3
    argNames:
    - Func
    - /* f */
    - const Tup
    - '&'
    - /* t */
    - out
    argTypes:
    - Func
    - Tup
    - OutIter
    constantsTouched: []
    func_position:
      end: 740
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 740
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: OutIter
    signature: 'OutIter operator()(Func /* f */, const Tup& /* t */, OutIter out)
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1832,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1834
      start: 1831
    functionDepth: 0
    functionLinenumber: 1831
    functionLinenumberEnd: 1834
    functionName: FloatType
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MakeMatcher
    linkageType: ''
    returnType: operator
    signature: 'operator Matcher< FloatType >() const '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2713,1
    - Dst: InnerMatcherArg
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2729,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2733,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2735,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2737,1
    - Dst: InnerMatcherArg
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2742,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 43
    argCount: 2
    argNames:
    - lhs
    - listener
    argTypes:
    - LhsContainer
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2749
      start: 2711
    functionDepth: 0
    functionLinenumber: 2711
    functionLinenumberEnd: 2749
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - InnerMatcherArg
    - UniversalPrint
    - ConstReference
    - PrintIfNotEmpty
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(LhsContainer lhs, MatchResultListener* listener)
      const override '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3591,1
    - Dst: Elements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3596,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3597,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3596,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3600,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3604
      start: 3590
    functionDepth: 0
    functionLinenumber: 3590
    functionLinenumberEnd: 3604
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - count
    - Elements
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetCastTypeDescription
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2057,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2059
      start: 2056
    functionDepth: 0
    functionLinenumber: 2056
    functionLinenumberEnd: 2059
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetCastTypeDescription
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: explanations
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3614,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3623,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3660,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3701,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3690,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3692,1
    - Dst: Elements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3666,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3614,1
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3615,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 66
    argCount: 2
    argNames:
    - container
    - listener
    argTypes:
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 3713
      start: 3606
    functionDepth: 0
    functionLinenumber: 3606
    functionLinenumberEnd: 3713
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - count
    - explanations
    - Elements
    - PrintIfNotEmpty
    - ConstReference
    - PrintToString
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Container container, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - inner_matcher
    argTypes:
    - SafeMatcherCast
    constantsTouched: []
    func_position:
      end: 4300
      start: 4299
    functionDepth: 0
    functionLinenumber: 4299
    functionLinenumberEnd: 4300
    functionName: inner_matcher_
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ArgsMatcherImpl(const InnerMatcher& inner_matcher)
    signature: 'ArgsMatcherImpl(const InnerMatcher& inner_matcher) : inner_matcher_(SafeMatcherCast<const
      SelectedArgs&>(inner_matcher) ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1074,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1075
      start: 1072
    functionDepth: 0
    functionLinenumber: 1072
    functionLinenumberEnd: 1075
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1700
      start: 1694
    functionDepth: 0
    functionLinenumber: 1694
    functionLinenumberEnd: 1700
    functionName: IsNanMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class IsNanMatcher '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1069,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1070
      start: 1067
    functionDepth: 0
    functionLinenumber: 1067
    functionLinenumberEnd: 1070
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1702
      start: 1702
    functionDepth: 0
    functionLinenumber: 1702
    functionLinenumberEnd: 1702
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1863,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - nan_eq_nan
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 1863
      start: 1863
    functionDepth: 0
    functionLinenumber: 1863
    functionLinenumberEnd: 1863
    functionName: FloatingEq2Matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Init
    linkageType: ''
    returnType: explicit
    signature: 'explicit FloatingEq2Matcher(bool nan_eq_nan) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1866,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - max_abs_error
    argTypes:
    - FloatType
    constantsTouched: []
    func_position:
      end: 1867
      start: 1865
    functionDepth: 0
    functionLinenumber: 1865
    functionLinenumberEnd: 1867
    functionName: FloatingEq2Matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Init
    linkageType: ''
    returnType: explicit
    signature: 'explicit FloatingEq2Matcher(FloatType max_abs_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:856,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 857
      start: 854
    functionDepth: 0
    functionLinenumber: 854
    functionLinenumberEnd: 857
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ArgTuple
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4062,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - x
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 4064
      start: 4061
    functionDepth: 0
    functionLinenumber: 4061
    functionLinenumberEnd: 4064
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - ArgTuple
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(T x, MatchResultListener* listener) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Matches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:632,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 2
    argNames:
    - matcher_tuple
    - value_tuple
    argTypes:
    - MatcherTuple
    - ValueTuple
    constantsTouched: []
    func_position:
      end: 634
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 634
    functionName: Matches
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Matches
    linkageType: ''
    returnType: bool
    signature: 'bool Matches(const MatcherTuple& matcher_tuple, const ValueTuple&
      value_tuple) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:861,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 862
      start: 859
    functionDepth: 0
    functionLinenumber: 859
    functionLinenumberEnd: 862
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MatchInternal
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3490,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - t
    - listener
    argTypes:
    - Struct
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 3491
      start: 3489
    functionDepth: 0
    functionLinenumber: 3489
    functionLinenumberEnd: 3491
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MatchInternal
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Struct t, MatchResultListener* listener) const
      override '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3572,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3578,1
    - Dst: Elements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3578,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3574,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3579,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3582,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3587
      start: 3571
    functionDepth: 0
    functionLinenumber: 3571
    functionLinenumberEnd: 3587
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - count
    - Elements
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriber
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3844,1
    - Dst: push_back
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3844,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3845
      start: 3839
    functionDepth: 0
    functionLinenumber: 3839
    functionLinenumberEnd: 3845
    functionName: (matcher_flags)
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - push_back
    - GetDescriber
    linkageType: ''
    returnType: UnorderedElementsAreMatcherImplBase
    signature: 'UnorderedElementsAreMatcherImplBase (matcher_flags) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - x
    - listener
    argTypes:
    - Super
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 852
      start: 848
    functionDepth: 0
    functionLinenumber: 848
    functionLinenumberEnd: 852
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Super& x, MatchResultListener* listener) const
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1586
      start: 1584
    functionDepth: 0
    functionLinenumber: 1584
    functionLinenumberEnd: 1586
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2781,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2791,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - all_elements_should_match
    - container
    - listener
    argTypes:
    - bool
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2796
      start: 2779
    functionDepth: 0
    functionLinenumber: 2779
    functionLinenumberEnd: 2796
    functionName: MatchAndExplainImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintIfNotEmpty
    - ConstReference
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplainImpl(bool all_elements_should_match, Container
      container, MatchResultListener* listener) const '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: StringMatchResultListener
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2827,1
    - Dst: ContainsMatcherImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2856,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2841,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2900,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2913,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2831,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2905,1
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2801,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2912,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 94
    argCount: 3
    argNames:
    - count_matcher
    - container
    - listener
    argTypes:
    - Matcher
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2922
      start: 2798
    functionDepth: 0
    functionLinenumber: 2798
    functionLinenumberEnd: 2922
    functionName: MatchAndExplainImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - StringMatchResultListener
    - PrintIfNotEmpty
    - ContainsMatcherImpl
    - ConstReference
    - PrintToString
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplainImpl(const Matcher<size_t>& count_matcher, Container
      container, MatchResultListener* listener) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2973
      start: 2968
    functionDepth: 0
    functionLinenumber: 2968
    functionLinenumberEnd: 2973
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ExplainMatchFailuresTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:645,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:664,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:663,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 32
    argCount: 3
    argNames:
    - matchers
    - values
    - '::'
    - os
    argTypes:
    - MatcherTuple
    - ValueTuple
    - std*
    constantsTouched: []
    func_position:
      end: 667
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 667
    functionName: ExplainMatchFailuresTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintIfNotEmpty
    - UniversalPrint
    - ExplainMatchFailuresTo
    linkageType: ''
    returnType: void
    signature: 'void ExplainMatchFailuresTo(const MatcherTuple& matchers, const ValueTuple&
      values, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1590
      start: 1588
    functionDepth: 0
    functionLinenumber: 1588
    functionLinenumberEnd: 1590
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2942
      start: 2939
    functionDepth: 0
    functionLinenumber: 2939
    functionLinenumberEnd: 2942
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - container
    - listener
    argTypes:
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2978
      start: 2975
    functionDepth: 0
    functionLinenumber: 2975
    functionLinenumberEnd: 2978
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Container container, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3189
      start: 3186
    functionDepth: 0
    functionLinenumber: 3186
    functionLinenumberEnd: 3189
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - x
    - listener
    argTypes:
    - ImplArgT
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 448
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 448
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(ImplArgT x, MatchResultListener* listener) const
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3194
      start: 3191
    functionDepth: 0
    functionLinenumber: 3191
    functionLinenumberEnd: 3194
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:987,1
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:988,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - s
    - listener
    argTypes:
    - internal
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 989
      start: 983
    functionDepth: 0
    functionLinenumber: 983
    functionLinenumberEnd: 989
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - string
    - MatchAndExplain
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(const internal::StringView& s, MatchResultListener*
      listener) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1094,1
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1095,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - s
    - listener
    argTypes:
    - internal
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 1096
      start: 1090
    functionDepth: 0
    functionLinenumber: 1090
    functionLinenumberEnd: 1096
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - string
    - MatchAndExplain
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(const internal::StringView& s, MatchResultListener*
      listener) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1310
      start: 1303
    functionDepth: 0
    functionLinenumber: 1303
    functionLinenumberEnd: 1310
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringMatchResultListener
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:308,1
    - Dst: MatchResultListener
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:308,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 322
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 322
    functionName: StringMatchResultListener
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - StringMatchResultListener
    - MatchResultListener
    linkageType: ''
    returnType: class
    signature: 'class StringMatchResultListener : public MatchResultListener '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ExplainMatchFailuresTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:708,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 710
      start: 707
    functionDepth: 0
    functionLinenumber: 707
    functionLinenumberEnd: 710
    functionName: os
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - ExplainMatchFailuresTo
    linkageType: ''
    returnType: ostream*
    signature: 'ostream * os ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1958,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - matcher
    argTypes:
    - InnerMatcher
    constantsTouched: []
    func_position:
      end: 1958
      start: 1957
    functionDepth: 0
    functionLinenumber: 1957
    functionLinenumberEnd: 1958
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - matcher_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(const InnerMatcher& matcher) : matcher_(MatcherCast<const
      Pointee&>(matcher)) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: any_cast
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4232,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4251,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4257,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4259,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4264,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4270,1
    - Dst: matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4239,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 4287
      start: 4228
    functionDepth: 0
    functionLinenumber: 4228
    functionLinenumberEnd: 4287
    functionName: any_cast_matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetTypeName
    - matcher_
    - any_cast
    - PrintIfNotEmpty
    - PrintToString
    linkageType: ''
    returnType: namespace
    signature: 'namespace any_cast_matcher '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4270,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4273
      start: 4269
    functionDepth: 0
    functionLinenumber: 4269
    functionLinenumberEnd: 4273
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetTypeName
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1963
      start: 1960
    functionDepth: 0
    functionLinenumber: 1960
    functionLinenumberEnd: 1963
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 795
      start: 789
    functionDepth: 0
    functionLinenumber: 789
    functionLinenumberEnd: 795
    functionName: NotNullMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class NotNullMatcher '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - x
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 1320
      start: 1312
    functionDepth: 0
    functionLinenumber: 1312
    functionLinenumberEnd: 1320
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(const T& x, MatchResultListener* listener) const
      override '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 2
    argNames:
    - x
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 1450
      start: 1440
    functionDepth: 0
    functionLinenumber: 1440
    functionLinenumberEnd: 1450
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(const T& x, MatchResultListener* listener) const
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4056,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4059
      start: 4054
    functionDepth: 0
    functionLinenumber: 4054
    functionLinenumberEnd: 4059
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3231
      start: 3226
    functionDepth: 0
    functionLinenumber: 3226
    functionLinenumberEnd: 3231
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames:
    - Functor
    - /* functor */
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2248
      start: 2248
    functionDepth: 0
    functionLinenumber: 2248
    functionLinenumberEnd: 2248
    functionName: CheckIsValid
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void CheckIsValid(Functor /* functor */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: distance_matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2433,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - distance_matcher
    argTypes:
    - DistanceMatcher
    constantsTouched: []
    func_position:
      end: 2433
      start: 2432
    functionDepth: 0
    functionLinenumber: 2432
    functionLinenumberEnd: 2433
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - distance_matcher_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(const DistanceMatcher& distance_matcher) : distance_matcher_(MatcherCast<DistanceType>(distance_matcher)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: match_flags_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3790,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3813,1
    - Dst: matcher_describers
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3810,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3821
      start: 3786
    functionDepth: 0
    functionLinenumber: 3786
    functionLinenumberEnd: 3821
    functionName: UnorderedElementsAreMatcherImplBase
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - matcher_describers
    - Message
    - match_flags_
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ UnorderedElementsAreMatcherImplBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - value_matcher
    argTypes:
    - ValueMatcher
    constantsTouched: []
    func_position:
      end: 4127
      start: 4126
    functionDepth: 0
    functionLinenumber: 4126
    functionLinenumberEnd: 4127
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - value_matcher_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(const ValueMatcher& value_matcher) : value_matcher_(MatcherCast<ValueType>(value_matcher)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4209,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4212
      start: 4208
    functionDepth: 0
    functionLinenumber: 4208
    functionLinenumberEnd: 4212
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetTypeName
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 770
      start: 765
    functionDepth: 0
    functionLinenumber: 765
    functionLinenumberEnd: 770
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2438
      start: 2435
    functionDepth: 0
    functionLinenumber: 2435
    functionLinenumberEnd: 2438
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2868
      start: 2865
    functionDepth: 0
    functionLinenumber: 2865
    functionLinenumberEnd: 2868
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - matcher
    argTypes:
    - InnerMatcher
    constantsTouched: []
    func_position:
      end: 3184
      start: 3183
    functionDepth: 0
    functionLinenumber: 3183
    functionLinenumberEnd: 3184
    functionName: Impl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - matcher_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Impl(const InnerMatcher& matcher) : matcher_(MatcherCast<Address>(matcher)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4132
      start: 4129
    functionDepth: 0
    functionLinenumber: 4129
    functionLinenumberEnd: 4132
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: expected_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2491,1
    - Dst: Copy
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2491,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - expected
    argTypes:
    - Container
    constantsTouched: []
    func_position:
      end: 2491
      start: 2490
    functionDepth: 0
    functionLinenumber: 2490
    functionLinenumberEnd: 2491
    functionName: ContainerEqMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - expected_
    - Copy
    linkageType: ''
    returnType: explicit
    signature: 'explicit ContainerEqMatcher(const Container& expected) : expected_(View::Copy(expected)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 314
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 314
    functionName: Clear
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Clear() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1837,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1839
      start: 1836
    functionDepth: 0
    functionLinenumber: 1836
    functionLinenumberEnd: 1839
    functionName: FloatType
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MakeMatcher
    linkageType: ''
    returnType: operator
    signature: 'operator Matcher<const FloatType &>() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2330
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2330
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintIndices
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:4328,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 4330
      start: 4326
    functionDepth: 0
    functionLinenumber: 4326
    functionLinenumberEnd: 4330
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - PrintIndices
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 784
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 784
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1842,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1844
      start: 1841
    functionDepth: 0
    functionLinenumber: 1841
    functionLinenumberEnd: 1844
    functionName: FloatType
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MakeMatcher
    linkageType: ''
    returnType: operator
    signature: 'operator Matcher< FloatType &>() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2321
      start: 2314
    functionDepth: 0
    functionLinenumber: 2314
    functionLinenumberEnd: 2321
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MatchPrintAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2344,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - obj
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2345
      start: 2332
    functionDepth: 0
    functionLinenumber: 2332
    functionLinenumberEnd: 2345
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MatchPrintAndExplain
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(T obj, MatchResultListener* listener) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3813,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - n
    argTypes:
    - size_t
    constantsTouched: []
    func_position:
      end: 3814
      start: 3812
    functionDepth: 0
    functionLinenumber: 3812
    functionLinenumberEnd: 3814
    functionName: Elements
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Message
    linkageType: ''
    returnType: Message
    signature: 'static Message Elements(size_t n) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3144
      start: 3141
    functionDepth: 0
    functionLinenumber: 3141
    functionLinenumberEnd: 3144
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2017,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 0
    argNames:
    - PointerType
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2017
      start: 2013
    functionDepth: 0
    functionLinenumber: 2013
    functionLinenumberEnd: 2017
    functionName: GTEST_REMOVE_REFERENCE_AND_CONST_
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - matcher_
    linkageType: ''
    returnType: typename
    signature: 'typename std::pointer_traits< GTEST_REMOVE_REFERENCE_AND_CONST_( PointerType)
      >:: element_type*; explicit Impl(const InnerMatcher& matcher) : matcher_(MatcherCast<Pointer>(matcher)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3138
      start: 3135
    functionDepth: 0
    functionLinenumber: 3135
    functionLinenumberEnd: 3138
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Matches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:699,1
    - Dst: Matches
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:632,1
    - Dst: ExplainMatchFailuresTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:645,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:616,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:663,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:664,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:610,1
    - Dst: TransformTupleValues
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:748,1
    - Dst: ExplainMatchFailuresTo
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:708,1
    - Dst: MatchPrintAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:599,1
    - Dst: IsReadableTypeName
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:613,1
    - Dst: f
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:732,1
    - Dst: Run
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:749,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 178
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 785
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 785
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    - IsReadableTypeName
    - f
    - TransformTupleValues
    - Run
    - MatchPrintAndExplain
    - PrintIfNotEmpty
    - Matches
    - ExplainMatchFailuresTo
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: internal_matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - internal_matcher
    argTypes:
    - Matcher
    constantsTouched: []
    func_position:
      end: 1143
      start: 1141
    functionDepth: 0
    functionLinenumber: 1141
    functionLinenumberEnd: 1143
    functionName: WhenBase64UnescapedMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - internal_matcher_
    linkageType: ''
    returnType: explicit
    signature: 'explicit WhenBase64UnescapedMatcher( const Matcher<const std::string&>&
      internal_matcher) : internal_matcher_(internal_matcher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1208
      start: 1206
    functionDepth: 0
    functionLinenumber: 1206
    functionLinenumberEnd: 1208
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1211
      start: 1209
    functionDepth: 0
    functionLinenumber: 1209
    functionLinenumberEnd: 1211
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - x
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 1252
      start: 1249
    functionDepth: 0
    functionLinenumber: 1249
    functionLinenumberEnd: 1252
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(const T& x, MatchResultListener* listener) const
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2966
      start: 2961
    functionDepth: 0
    functionLinenumber: 2961
    functionLinenumberEnd: 2966
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Rank1
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3249,1
    - Dst: First
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3252,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3255,1
    - Dst: Second
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3259,1
    - Dst: ExplainSuccess
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3265,1
    - Dst: Rank1
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3252,1
    - Dst: Rank1
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3259,1
    - Dst: First
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3248,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3262,1
    - Dst: Rank1
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3248,1
    - Dst: Second
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3249,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 2
    argNames:
    - a_pair
    - listener
    argTypes:
    - PairType
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 3268
      start: 3243
    functionDepth: 0
    functionLinenumber: 3243
    functionLinenumberEnd: 3268
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - ExplainSuccess
    - Rank1
    - First
    - Second
    - PrintIfNotEmpty
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(PairType a_pair, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SpaceIndex
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3739,1
    - Dst: SpaceIndex
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3742,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3766
      start: 3729
    functionDepth: 0
    functionLinenumber: 3729
    functionLinenumberEnd: 3766
    functionName: MatchMatrix
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - SpaceIndex
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ MatchMatrix '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 3239
      start: 3234
    functionDepth: 0
    functionLinenumber: 3234
    functionLinenumberEnd: 3239
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Base64Unescape
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1151,1
    - Dst: MatchPrintAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1157,1
    - Dst: internal_matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1143,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1172
      start: 1137
    functionDepth: 0
    functionLinenumber: 1137
    functionLinenumberEnd: 1172
    functionName: WhenBase64UnescapedMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Base64Unescape
    - MatchPrintAndExplain
    - internal_matcher_
    linkageType: ''
    returnType: class
    signature: 'class WhenBase64UnescapedMatcher '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: HasMaxAbsError
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1792,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1797
      start: 1778
    functionDepth: 0
    functionLinenumber: 1778
    functionLinenumberEnd: 1797
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - HasMaxAbsError
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 452
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 452
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1123,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1124
      start: 1121
    functionDepth: 0
    functionLinenumber: 1121
    functionLinenumberEnd: 1124
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2595
      start: 2592
    functionDepth: 0
    functionLinenumber: 2592
    functionLinenumberEnd: 2595
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3591,1
    - Dst: Elements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3596,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3690,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3572,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3813,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3881,1
    - Dst: push_back
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3844,1
    - Dst: Elements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3578,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3579,1
    - Dst: explanations
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3614,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3701,1
    - Dst: matcher_describers
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3810,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3623,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3600,1
    - Dst: SpaceIndex
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3742,1
    - Dst: UnorderedElementsAreMatcherImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3837,1
    - Dst: SpaceIndex
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3739,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3692,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3596,1
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3615,1
    - Dst: match_flags_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3790,1
    - Dst: FindPairing
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3867,1
    - Dst: Elements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3666,1
    - Dst: AnalyzeElements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3863,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3578,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3614,1
    - Dst: DescribeToImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3850,1
    - Dst: GetDescriber
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3844,1
    - Dst: VerifyMatchMatrix
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3866,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3597,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3574,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3660,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3717,1
    - Dst: inner_listener
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3506,1
    - Dst: VariadicExpand
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3508,1
    - Dst: ElementsAreMatcherImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3564,1
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3860,1
    - Dst: DescribeNegationToImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3855,1
    - Dst: VariadicExpand
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3499,1
    - Dst: MatchInternal
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3490,1
    - Dst: PrintIfNotEmpty
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3515,1
    - Dst: count
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3582,1
    CyclomaticComplexity: 88
    EdgeCount: 88
    ICount: 305
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 3900
      start: 3482
    functionDepth: 0
    functionLinenumber: 3482
    functionLinenumberEnd: 3900
    functionName: ''
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - AnalyzeElements
    - explanations
    - VerifyMatchMatrix
    - UnorderedElementsAreMatcherImpl
    - GetDescriber
    - DescribeNegationToImpl
    - ConstReference
    - VariadicExpand
    - FindPairing
    - SpaceIndex
    - ElementsAreMatcherImpl
    - DescribeToImpl
    - PrintIfNotEmpty
    - matcher_describers
    - match_flags_
    - inner_listener
    - count
    - Elements
    - push_back
    - Message
    - MatchInternal
    - PrintToString
    linkageType: ''
    returnType: override
    signature: 'const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConstReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3860,1
    - Dst: AnalyzeElements
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3863,1
    - Dst: VerifyMatchMatrix
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3866,1
    - Dst: FindPairing
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3867,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - container
    - listener
    argTypes:
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 3868
      start: 3858
    functionDepth: 0
    functionLinenumber: 3858
    functionLinenumberEnd: 3868
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - ConstReference
    - VerifyMatchMatrix
    - FindPairing
    - AnalyzeElements
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Container container, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 456
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 456
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - const MatcherTuple
    - '&'
    - /* matcher_tuple */
    - const ValueTuple
    - '&'
    - /* value_tuple */
    argTypes:
    - MatcherTuple
    - ValueTuple
    constantsTouched: []
    func_position:
      end: 678
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 678
    functionName: Matches
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool Matches(const MatcherTuple& /* matcher_tuple */, const ValueTuple&
      /* value_tuple */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1129
      start: 1126
    functionDepth: 0
    functionLinenumber: 1126
    functionLinenumberEnd: 1129
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: HasMaxAbsError
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1811,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1817
      start: 1799
    functionDepth: 0
    functionLinenumber: 1799
    functionLinenumberEnd: 1817
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - HasMaxAbsError
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2600
      start: 2597
    functionDepth: 0
    functionLinenumber: 2597
    functionLinenumberEnd: 2600
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2937
      start: 2934
    functionDepth: 0
    functionLinenumber: 2934
    functionLinenumberEnd: 2937
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StringMatchResultListener
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:308,1
    - Dst: Cast
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:341,1
    - Dst: CastImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:355,1
    - Dst: CastImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:362,1
    - Dst: Impl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:407,1
    - Dst: MatchResultListener
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:308,1
    - Dst: source_matcher_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:422,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 84
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 469
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 469
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - CastImpl
    - Cast
    - MatchResultListener
    - source_matcher_
    - Impl
    - StringMatchResultListener
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 763
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 763
    functionName: ''
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: MatchAndExplain(const T& /* x */, std::ostream* /* listener */)
    signature: 'MatchAndExplain(const T& /* x */, std::ostream* /* listener */) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 797
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 797
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 1968
      start: 1965
    functionDepth: 0
    functionLinenumber: 1965
    functionLinenumberEnd: 1968
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2203
      start: 2200
    functionDepth: 0
    functionLinenumber: 2200
    functionLinenumberEnd: 2203
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MatchAndExplainImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2231,1
    - Dst: false_type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2231,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 3
    argNames:
    - true_type
    - /* is_pointer */
    - p
    - listener
    argTypes:
    - std
    - Class*
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2232
      start: 2223
    functionDepth: 0
    functionLinenumber: 2223
    functionLinenumberEnd: 2232
    functionName: MatchAndExplainImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - false_type
    - MatchAndExplainImpl
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplainImpl(std::true_type /* is_pointer */, const Class*
      p, MatchResultListener* listener) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2495,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2496
      start: 2493
    functionDepth: 0
    functionLinenumber: 2493
    functionLinenumberEnd: 2496
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2698,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2701
      start: 2695
    functionDepth: 0
    functionLinenumber: 2695
    functionLinenumberEnd: 2701
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetCastTypeDescription
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2062,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2064
      start: 2061
    functionDepth: 0
    functionLinenumber: 2061
    functionLinenumberEnd: 2064
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - GetCastTypeDescription
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2022
      start: 2019
    functionDepth: 0
    functionLinenumber: 2019
    functionLinenumberEnd: 2022
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 764
      start: 764
    functionDepth: 0
    functionLinenumber: 764
    functionLinenumberEnd: 764
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 798
      start: 798
    functionDepth: 0
    functionLinenumber: 798
    functionLinenumberEnd: 798
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetRawPointer
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1972,1
    - Dst: MatchPrintAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:1975,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 2
    argNames:
    - pointer
    - listener
    argTypes:
    - Pointer
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 1976
      start: 1970
    functionDepth: 0
    functionLinenumber: 1970
    functionLinenumberEnd: 1976
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MatchPrintAndExplain
    - GetRawPointer
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Pointer pointer, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2499,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2500
      start: 2497
    functionDepth: 0
    functionLinenumber: 2497
    functionLinenumberEnd: 2500
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:2706,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 2709
      start: 2702
    functionDepth: 0
    functionLinenumber: 2702
    functionLinenumberEnd: 2709
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - container
    - listener
    argTypes:
    - Container
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 2947
      start: 2944
    functionDepth: 0
    functionLinenumber: 2944
    functionLinenumberEnd: 2947
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Container container, MatchResultListener* listener)
      const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: addressof
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3199,1
    - Dst: MatchPrintAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h:3200,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - object
    - listener
    argTypes:
    - Type
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 3201
      start: 3196
    functionDepth: 0
    functionLinenumber: 3196
    functionLinenumberEnd: 3201
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-matchers.h
    functionUses: []
    functionsReached:
    - MatchPrintAndExplain
    - addressof
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(Type object, MatchResultListener* listener) const
      override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 85
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 85
    functionName: IsEmptyMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h
    functionUses: []
    functionsReached:
    - string
    - MatchAndExplain
    linkageType: ''
    returnType: class
    signature: 'class IsEmptyMatcher '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 2
    argNames:
    - s
    - listener
    argTypes:
    - char*
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h
    functionUses: []
    functionsReached:
    - string
    - MatchAndExplain
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(const char* s, MatchResultListener* listener)
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePolymorphicMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:93,1
    - Dst: IsEmptyMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:93,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 94
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 94
    functionName: IsEmpty
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h
    functionUses: []
    functionsReached:
    - MakePolymorphicMatcher
    - IsEmptyMatcher
    linkageType: ''
    returnType: PolymorphicMatcher
    signature: 'inline PolymorphicMatcher <internal::IsEmptyMatcher> IsEmpty() '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:51,1
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:55,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    - Dst: MakePolymorphicMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:93,1
    - Dst: IsEmptyMatcher
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:93,1
    - Dst: MATCHER
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:100,1
    - Dst: MATCHER
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:108,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:113,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:115,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 117
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 117
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - MatchAndExplain
    - string
    - MATCHER
    - IsEmptyMatcher
    - MakePolymorphicMatcher
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h:78,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 87
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 87
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h
    functionUses: []
    functionsReached:
    - string
    - MatchAndExplain
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-more-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: decltype
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:90,1
    - Dst: AllowUninterestingCalls
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:113,1
    - Dst: StrictnessModifierProbe
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:90,1
    - Dst: NiceMockImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:116,1
    - Dst: NiceMockImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:112,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 119
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 119
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h
    functionUses: []
    functionsReached:
    - NiceMockImpl
    - StrictnessModifierProbe
    - decltype
    - AllowUninterestingCalls
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: decltype
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:90,1
    - Dst: StrictnessModifierProbe
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 91
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 91
    functionName: HasStrictnessModifier
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h
    functionUses: []
    functionsReached:
    - StrictnessModifierProbe
    - decltype
    linkageType: ''
    returnType: bool
    signature: 'bool HasStrictnessModifier() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: decltype
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:90,1
    - Dst: AllowUninterestingCalls
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:113,1
    - Dst: StrictnessModifierProbe
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:90,1
    - Dst: NiceMockImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:116,1
    - Dst: NiceMockImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h:112,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 118
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 118
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/gmock-nice-strict.h
    functionUses: []
    functionsReached:
    - NiceMockImpl
    - StrictnessModifierProbe
    - decltype
    - AllowUninterestingCalls
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - Element*
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    functionName: GetRawPointer
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Element*
    signature: 'Element * GetRawPointer(Element* p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - Pointer
    constantsTouched: []
    func_position:
      end: 80
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: GetRawPointer
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: typename*
    signature: 'const typename Pointer::element_type * GetRawPointer(const Pointer&
      p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 232
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 232
    functionName: FailureReporterInterface
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class FailureReporterInterface '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:245,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 4
    argNames:
    - condition
    - file
    - line
    - msg
    argTypes:
    - bool
    - char*
    - int
    - std
    constantsTouched: []
    func_position:
      end: 248
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 248
    functionName: Assert
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - GetFailureReporter
    linkageType: ''
    returnType: void
    signature: 'inline void Assert(bool condition, const char* file, int line, const
      std::string& msg) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:258,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 4
    argNames:
    - condition
    - file
    - line
    - msg
    argTypes:
    - bool
    - char*
    - int
    - std
    constantsTouched: []
    func_position:
      end: 261
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 261
    functionName: Expect
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - GetFailureReporter
    linkageType: ''
    returnType: void
    signature: 'inline void Expect(bool condition, const char* file, int line, const
      std::string& msg) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WithoutMatchers
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:300,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 302
      start: 298
    functionDepth: 0
    functionLinenumber: 298
    functionLinenumberEnd: 302
    functionName: WithoutMatchers
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - WithoutMatchers
    linkageType: ''
    returnType: class
    signature: 'class WithoutMatchers '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:314,1
    - Dst: __assume
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:319,1
    - Dst: __builtin_unreachable
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:317,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 323
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 323
    functionName: Invalid
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - Assert
    - __builtin_unreachable
    - __assume
    linkageType: ''
    returnType: T
    signature: 'T Invalid() '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:142,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:148,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:150,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:158,1
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:235,1
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:374,1
    - Dst: RelationToSourceCopy
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:374,1
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:395,1
    - Dst: Apply
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:431,1
    - Dst: ApplyImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:436,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:145,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:250,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:263,1
    - Dst: WithoutMatchers
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:300,1
    - Dst: GetWithoutMatchers
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:305,1
    - Dst: __builtin_unreachable
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:317,1
    - Dst: static_assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:348,1
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:371,1
    - Dst: R
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:458,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:478,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:61,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:152,1
    - Dst: GMOCK_KIND_OF_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:217,1
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:258,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:465,1
    - Dst: IgnoredValue
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:466,1
    - Dst: RelationToSourceCopy
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:395,1
    - Dst: RelationToSourceReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:371,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:162,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:163,1
    - Dst: GMOCK_KIND_OF_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:218,1
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:245,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:314,1
    - Dst: __assume
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:319,1
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:391,1
    - Dst: RelationToSourceReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:392,1
    - Dst: ApplyImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:432,1
    - Dst: ApplyImpl
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:423,1
    CyclomaticComplexity: 51
    EdgeCount: 51
    ICount: 219
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 481
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 481
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - RelationToSourceReference
    - Apply
    - GMOCK_KIND_OF_
    - __builtin_unreachable
    - Expect
    - ApplyImpl
    - type
    - GetFailureReporter
    - GMOCK_DECLARE_KIND_
    - void
    - WithoutMatchers
    - GetWithoutMatchers
    - IgnoredValue
    - __assume
    - static_assert
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - R
    - Assert
    - RelationToSourceCopy
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:142,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:148,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:150,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:158,1
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:235,1
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:374,1
    - Dst: RelationToSourceCopy
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:374,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:145,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:250,1
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:263,1
    - Dst: WithoutMatchers
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:300,1
    - Dst: GetWithoutMatchers
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:305,1
    - Dst: __builtin_unreachable
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:317,1
    - Dst: static_assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:348,1
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:371,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:61,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:152,1
    - Dst: GMOCK_KIND_OF_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:217,1
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:258,1
    - Dst: RelationToSourceReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:371,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:162,1
    - Dst: GMOCK_DECLARE_KIND_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:163,1
    - Dst: GMOCK_KIND_OF_
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:218,1
    - Dst: GetFailureReporter
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:245,1
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:314,1
    - Dst: __assume
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:319,1
    CyclomaticComplexity: 41
    EdgeCount: 41
    ICount: 111
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 376
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 376
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - __assume
    - RelationToSourceReference
    - GetFailureReporter
    - GMOCK_DECLARE_KIND_
    - GMOCK_KIND_OF_
    - WithoutMatchers
    - Assert
    - __builtin_unreachable
    - Expect
    - static_assert
    - RelationToSourceCopy
    - type
    - GetWithoutMatchers
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 3
    argNames:
    - condition
    - file
    - line
    argTypes:
    - bool
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 251
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 251
    functionName: Assert
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - Assert
    linkageType: ''
    returnType: void
    signature: 'inline void Assert(bool condition, const char* file, int line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Expect
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:263,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 3
    argNames:
    - condition
    - file
    - line
    argTypes:
    - bool
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 264
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 264
    functionName: Expect
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - Expect
    linkageType: ''
    returnType: void
    signature: 'inline void Expect(bool condition, const char* file, int line) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_assert
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - container
    argTypes:
    - RawContainer
    constantsTouched: []
    func_position:
      end: 351
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 351
    functionName: ConstReference
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - static_assert
    linkageType: ''
    returnType: const_reference
    signature: 'static const_reference ConstReference(const RawContainer& container) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - container
    argTypes:
    - RawContainer
    constantsTouched: []
    func_position:
      end: 352
      start: 352
    functionDepth: 0
    functionLinenumber: 352
    functionLinenumberEnd: 352
    functionName: Copy
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: type
    signature: 'static type Copy(const RawContainer& container) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:371,1
    - Dst: RelationToSourceReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:371,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - '[N]'
    argTypes:
    - Element (&array)
    constantsTouched: []
    func_position:
      end: 372
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 372
    functionName: ConstReference
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - type
    - RelationToSourceReference
    linkageType: ''
    returnType: const_reference
    signature: 'static const_reference ConstReference(const Element (&array)[N]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:374,1
    - Dst: RelationToSourceCopy
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:374,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - '[N]'
    argTypes:
    - Element (&array)
    constantsTouched: []
    func_position:
      end: 375
      start: 373
    functionDepth: 0
    functionLinenumber: 373
    functionLinenumberEnd: 375
    functionName: Copy
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - type
    - RelationToSourceCopy
    linkageType: ''
    returnType: type
    signature: 'static type Copy(const Element (&array)[N]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - r
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 86
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 86
    functionName: GetRawPointer
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Element*
    signature: 'const Element * GetRawPointer(const std::reference_wrapper<Element>&
      r) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:391,1
    - Dst: RelationToSourceReference
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:392,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ElementPointer
    - array
    argTypes:
    - std
    - Size
    constantsTouched: []
    func_position:
      end: 393
      start: 389
    functionDepth: 0
    functionLinenumber: 389
    functionLinenumberEnd: 393
    functionName: ConstReference
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - type
    - RelationToSourceReference
    linkageType: ''
    returnType: const_reference
    signature: 'static const_reference ConstReference( const ::std::tuple<ElementPointer,
      Size>& array) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:395,1
    - Dst: RelationToSourceCopy
      Src: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h:395,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ElementPointer
    - array
    argTypes:
    - std
    - Size
    constantsTouched: []
    func_position:
      end: 396
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 396
    functionName: Copy
    functionSourceFile: /src/boringssl/third_party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h
    functionUses: []
    functionsReached:
    - type
    - RelationToSourceCopy
    linkageType: ''
    returnType: type
    signature: 'static type Copy(const ::std::tuple<ElementPointer, Size>& array) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FRIEND_TEST
      Src: /src/boringssl/third_party/googletest/googletest/test/production.h:40,1
    - Dst: PrivateCode
      Src: /src/boringssl/third_party/googletest/googletest/test/production.h:45,1
    - Dst: FRIEND_TEST
      Src: /src/boringssl/third_party/googletest/googletest/test/production.h:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 52
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 52
    functionName: PrivateCode
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/test/production.h
    functionUses: []
    functionsReached:
    - PrivateCode
    - FRIEND_TEST
    linkageType: ''
    returnType: class
    signature: 'class PrivateCode '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 47
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 47
    functionName: x
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/test/production.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int x() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 41
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 41
    functionName: ExternalInstantiationTest
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/test/googletest-param-test-test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class ExternalInstantiationTest : public ::testing::TestWithParam<int> '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 46
      start: 45
    functionDepth: 0
    functionLinenumber: 45
    functionLinenumberEnd: 46
    functionName: InstantiationInMultipleTranslationUnitsTest
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/test/googletest-param-test-test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class InstantiationInMultipleTranslationUnitsTest : public ::testing::TestWithParam<int> '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Failed
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:580,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 580
      start: 580
    functionDepth: 0
    functionLinenumber: 580
    functionLinenumberEnd: 580
    functionName: Passed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - Failed
    linkageType: ''
    returnType: bool
    signature: 'bool Passed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: failed_test_suite_count
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    - Dst: ad_hoc_test_result
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 586
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 586
    functionName: Failed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - failed_test_suite_count
    - ad_hoc_test_result
    linkageType: ''
    returnType: bool
    signature: 'bool Failed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:597,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 597
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 597
    functionName: GetTestCase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetTestSuite
    linkageType: ''
    returnType: TestCase*
    signature: 'const TestCase * GetTestCase(int i) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ForEach
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:730,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 731
      start: 729
    functionDepth: 0
    functionLinenumber: 729
    functionLinenumberEnd: 731
    functionName: ClearNonAdHocTestResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - ForEach
    linkageType: ''
    returnType: void
    signature: 'void ClearNonAdHocTestResult() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1056
    functionDepth: 0
    functionLinenumber: 1056
    functionLinenumberEnd: 1072
    functionName: TestResultAccessor
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class TestResultAccessor '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1108,1
    - Dst: write
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1112,1
    - Dst: GTEST_LOG_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1113,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 1
    argNames:
    - message
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 1116
      start: 1107
    functionDepth: 0
    functionLinenumber: 1107
    functionLinenumberEnd: 1116
    functionName: Send
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GTEST_LOG_
    - write
    - GTEST_CHECK_
    linkageType: ''
    returnType: void
    signature: 'void Send(const std::string& message) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1197,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1199,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1198,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo
    constantsTouched: []
    func_position:
      end: 1200
      start: 1196
    functionDepth: 0
    functionLinenumber: 1196
    functionLinenumberEnd: 1200
    functionName: OnTestEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - FormatBool
    - StreamableToString
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void OnTestEnd(const TestInfo& test_info) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 755
      start: 755
    functionDepth: 0
    functionLinenumber: 755
    functionLinenumberEnd: 755
    functionName: current_test_suite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestSuite*
    signature: 'const TestSuite * current_test_suite() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 842
      start: 842
    functionDepth: 0
    functionLinenumber: 842
    functionLinenumberEnd: 842
    functionName: set_catch_exceptions
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_catch_exceptions(bool value) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1206,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1205,1
    - Dst: UrlEncode
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1205,1
    - Dst: UrlEncode
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1207,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - test_part_result
    argTypes:
    - TestPartResult
    constantsTouched: []
    func_position:
      end: 1208
      start: 1202
    functionDepth: 0
    functionLinenumber: 1202
    functionLinenumberEnd: 1208
    functionName: OnTestPartResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - StreamableToString
    - UrlEncode
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void OnTestPartResult(const TestPartResult& test_part_result) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 825
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 825
    functionName: catch_exceptions
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool catch_exceptions() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Send
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1091,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - message
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 1091
      start: 1091
    functionDepth: 0
    functionLinenumber: 1091
    functionLinenumberEnd: 1091
    functionName: SendLn
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - Send
    linkageType: ''
    returnType: void
    signature: 'void SendLn(const std::string& message) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1159,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1159,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - unit_test
    argTypes:
    - UnitTest
    constantsTouched: []
    func_position:
      end: 1163
      start: 1156
    functionDepth: 0
    functionLinenumber: 1156
    functionLinenumberEnd: 1163
    functionName: OnTestProgramEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - FormatBool
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void OnTestProgramEnd(const UnitTest& unit_test) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:591,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 593
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 593
    functionName: GetTestSuite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetElementOr
    linkageType: ''
    returnType: TestSuite*
    signature: 'const TestSuite * GetTestSuite(int i) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:347,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 356
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 356
    functionName: TestPropertyKeyIs
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - key_
    linkageType: ''
    returnType: class
    signature: 'class TestPropertyKeyIs '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - test_property
    argTypes:
    - TestProperty
    constantsTouched: []
    func_position:
      end: 352
      start: 350
    functionDepth: 0
    functionLinenumber: 350
    functionLinenumberEnd: 352
    functionName: operator
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool operator()(const TestProperty& test_property) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 576
      start: 535
    functionDepth: 0
    functionLinenumber: 535
    functionLinenumberEnd: 576
    functionName: successful_test_suite_count
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int successful_test_suite_count() const; // Gets the number of failed
      test suites. int failed_test_suite_count() const; // Gets the number of all
      test suites. int total_test_suite_count() const; // Gets the number of all test
      suites that contain at least one test // that should run. int test_suite_to_run_count()
      const; // Gets the number of successful tests. int successful_test_count() const;
      // Gets the number of skipped tests. int skipped_test_count() const; // Gets
      the number of failed tests. int failed_test_count() const; // Gets the number
      of disabled tests that will be reported in the XML report. int reportable_disabled_test_count()
      const; // Gets the number of disabled tests. int disabled_test_count() const;
      // Gets the number of tests to be printed in the XML report. int reportable_test_count()
      const; // Gets the number of all tests. int total_test_count() const; // Gets
      the number of tests that should run. int test_to_run_count() const; // Gets
      the time of the test program start, in ms from the start of the // UNIX epoch.
      TimeInMillis start_timestamp() const { return start_timestamp_; } // Gets the
      elapsed time, in milliseconds. TimeInMillis elapsed_time() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:603,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - i
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 605
      start: 602
    functionDepth: 0
    functionLinenumber: 602
    functionLinenumberEnd: 605
    functionName: GetMutableSuiteCase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetElementOr
    linkageType: ''
    returnType: TestSuite*
    signature: 'TestSuite * GetMutableSuiteCase(int i) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 615
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 615
    functionName: ad_hoc_test_result
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestResult*
    signature: 'const TestResult * ad_hoc_test_result() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 734
      start: 734
    functionDepth: 0
    functionLinenumber: 734
    functionLinenumberEnd: 734
    functionName: ClearAdHocTestResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void ClearAdHocTestResult() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 769
      start: 767
    functionDepth: 0
    functionLinenumber: 767
    functionLinenumberEnd: 769
    functionName: gtest_trace_stack
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<TraceInfo>& gtest_trace_stack() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseInternalRunDeathTestFlag
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:773,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 774
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 774
    functionName: InitDeathTestSubprocessControlInfo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - ParseInternalRunDeathTestFlag
    linkageType: ''
    returnType: void
    signature: 'void InitDeathTestSubprocessControlInfo() '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:307,1
    - Dst: ParseInternalRunDeathTestFlag
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:773,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:146,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:184,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:178,1
    - Dst: close
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1127,1
    - Dst: Start
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1149,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:173,1
    - Dst: gtest_trace_stack
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:764,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1187,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1197,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:170,1
    - Dst: OsStackTraceGetter
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:439,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:310,1
    - Dst: parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:699,1
    - Dst: type_parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:710,1
    - Dst: strtoull
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1036,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1159,1
    - Dst: GetTimeInMillis
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:115,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:171,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:176,1
    - Dst: predicate
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:280,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1124,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1188,1
    - Dst: GTestFlagSaver
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:143,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:174,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:188,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:692,1
    - Dst: IsDigit
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1026,1
    - Dst: Send
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1091,1
    - Dst: port_num_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1181,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1193,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1206,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:177,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:181,1
    - Dst: MakeConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1099,1
    - Dst: CloseConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1103,1
    - Dst: write
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1112,1
    - Dst: GTEST_LOG_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1113,1
    - Dst: OsStackTraceGetterInterface
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:410,1
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:603,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:144,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:145,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:179,1
    - Dst: ShuffleRange
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:304,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1198,1
    - Dst: for_each
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:288,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:186,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1039,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1168,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1173,1
    - Dst: UrlEncode
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1207,1
    - Dst: SocketWriter
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1102,1
    - Dst: Failed
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:580,1
    - Dst: host_name_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1153,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:175,1
    - Dst: swap
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:321,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:597,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:131,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:189,1
    - Dst: ad_hoc_test_result
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:591,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:180,1
    - Dst: ForEach
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:730,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1173,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1187,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:163,1
    - Dst: UrlEncode
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1205,1
    - Dst: GetTimeInMillis
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:90,1
    - Dst: GTestFlagSaver
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:169,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:182,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:191,1
    - Dst: GetInstance
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:982,1
    - Dst: failed_test_suite_count
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:185,1
    - Dst: ignored_parameterized_test_suites
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:703,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1159,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1174,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1199,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:162,1
    - Dst: socket_writer_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1148,1
    - Dst: GetCurrentDir
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:686,1
    - Dst: environments
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:761,1
    - Dst: sockfd_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1205,1
    - Dst: key_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:347,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:164,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:190,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:147,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:148,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:155,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:157,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:158,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:156,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:159,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:161,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1216,1
    - Dst: ShuffleRange
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:329,1
    - Dst: ParseNaturalNumber
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1022,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1108,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1167,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:165,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:663,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:687,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:149,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:151,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:153,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:150,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:154,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:152,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:172,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:183,1
    CyclomaticComplexity: 230
    EdgeCount: 230
    ICount: 467
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1228
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 1228
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - Start
    - ad_hoc_test_result
    - GetCurrentDir
    - GTestFlagSaver
    - UrlEncode
    - ParseInternalRunDeathTestFlag
    - GTEST_LOG_
    - Failed
    - GTEST_FLAG_SET
    - SendLn
    - StreamableToString
    - environments
    - predicate
    - for_each
    - swap
    - write
    - key_
    - GTEST_FLAG_GET
    - close
    - port_num_
    - CloseConnection
    - ShuffleRange
    - OsStackTraceGetterInterface
    - ForEach
    - string
    - GetInstance
    - parameterized_test_registry
    - Send
    - failed_test_suite_count
    - gtest_trace_stack
    - MakeConnection
    - IsDigit
    - socket_writer_
    - FormatBool
    - ParseNaturalNumber
    - sockfd_
    - GetElementOr
    - GTEST_CHECK_
    - OsStackTraceGetter
    - type_parameterized_test_registry
    - strtoull
    - host_name_
    - SocketWriter
    - GetTestSuite
    - GetTimeInMillis
    - ignored_parameterized_test_suites
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTestFlagSaver
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:143,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:174,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:188,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:175,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:164,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:190,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:146,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:147,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:148,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:161,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:155,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:157,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:158,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:159,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:162,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:156,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:177,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:184,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:185,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:173,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:163,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:145,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:144,1
    - Dst: GTestFlagSaver
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:169,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:170,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:179,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:182,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:181,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:191,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:189,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:165,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:149,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:150,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:151,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:152,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:153,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:154,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:171,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:172,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:176,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:178,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:183,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:186,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 69
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 217
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 217
    functionName: GTestFlagSaver
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GTEST_FLAG_GET
    - GTestFlagSaver
    - GTEST_FLAG_SET
    linkageType: ''
    returnType: class
    signature: 'class GTestFlagSaver '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 483
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 483
    functionName: DefaultGlobalTestPartResultReporter
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class DefaultGlobalTestPartResultReporter : public TestPartResultReporterInterface '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Failed
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:580,1
    - Dst: GetCurrentDir
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:686,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:692,1
    - Dst: environments
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:761,1
    - Dst: ParseInternalRunDeathTestFlag
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:773,1
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:591,1
    - Dst: ad_hoc_test_result
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:597,1
    - Dst: ForEach
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:730,1
    - Dst: gtest_trace_stack
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:764,1
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:603,1
    - Dst: parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:699,1
    - Dst: type_parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:710,1
    - Dst: failed_test_suite_count
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:663,1
    - Dst: ignored_parameterized_test_suites
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:703,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:687,1
    CyclomaticComplexity: 99
    EdgeCount: 99
    ICount: 104
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 977
      start: 508
    functionDepth: 0
    functionLinenumber: 508
    functionLinenumberEnd: 977
    functionName: UnitTestImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetElementOr
    - environments
    - GTEST_CHECK_
    - ForEach
    - ad_hoc_test_result
    - GetCurrentDir
    - type_parameterized_test_registry
    - parameterized_test_registry
    - GetTestSuite
    - failed_test_suite_count
    - ParseInternalRunDeathTestFlag
    - gtest_trace_stack
    - Failed
    - ignored_parameterized_test_suites
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ UnitTestImpl '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 781
      start: 779
    functionDepth: 0
    functionLinenumber: 779
    functionLinenumberEnd: 781
    functionName: internal_run_death_test_flag
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: InternalRunDeathTestFlag*
    signature: 'const InternalRunDeathTestFlag * internal_run_death_test_flag() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - test_result
    argTypes:
    - TestResult
    constantsTouched: []
    func_position:
      end: 1071
      start: 1068
    functionDepth: 0
    functionLinenumber: 1068
    functionLinenumberEnd: 1071
    functionName: test_part_results
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'static const std ::vector<testing::TestPartResult>& test_part_results(
      const TestResult& test_result) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1167,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - const UnitTest
    - '&'
    - /* unit_test */
    - iteration
    argTypes:
    - UnitTest
    - int
    constantsTouched: []
    func_position:
      end: 1169
      start: 1165
    functionDepth: 0
    functionLinenumber: 1165
    functionLinenumberEnd: 1169
    functionName: OnTestIterationStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - StreamableToString
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration)
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:131,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - seed
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 136
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 136
    functionName: GetNextRandomSeed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GTEST_CHECK_
    linkageType: ''
    returnType: int
    signature: 'inline int GetNextRandomSeed(int seed) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ShuffleRange
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:329,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 2
    argNames:
    - random
    - v
    argTypes:
    - internal*
    - std*
    constantsTouched: []
    func_position:
      end: 330
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 330
    functionName: Shuffle
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - ShuffleRange
    linkageType: ''
    returnType: void
    signature: 'void Shuffle(internal::Random* random, std::vector<E>* v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - v
    - i
    - default_value
    argTypes:
    - std
    - int
    - E
    constantsTouched: []
    func_position:
      end: 297
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 297
    functionName: GetElementOr
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: E
    signature: 'E GetElementOr(const std::vector<E>& v, int i, E default_value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - x
    argTypes:
    - T*
    constantsTouched: []
    func_position:
      end: 337
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 337
    functionName: Delete
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Delete(T* x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 811
      start: 811
    functionDepth: 0
    functionLinenumber: 811
    functionLinenumberEnd: 811
    functionName: random_seed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int random_seed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - a_current_test_suite
    argTypes:
    - TestSuite*
    constantsTouched: []
    func_position:
      end: 847
      start: 845
    functionDepth: 0
    functionLinenumber: 845
    functionLinenumberEnd: 847
    functionName: set_current_test_suite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_current_test_suite(TestSuite* a_current_test_suite) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Send
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1091,1
    - Dst: host_name_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: port_num_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: sockfd_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: MakeConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1099,1
    - Dst: SocketWriter
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1102,1
    - Dst: CloseConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1103,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1108,1
    - Dst: write
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1112,1
    - Dst: GTEST_LOG_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1113,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1124,1
    - Dst: close
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1127,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 47
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1145
      start: 1077
    functionDepth: 0
    functionLinenumber: 1077
    functionLinenumberEnd: 1145
    functionName: EmptyTestEventListener
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - CloseConnection
    - sockfd_
    - GTEST_CHECK_
    - Send
    - GTEST_LOG_
    - host_name_
    - MakeConnection
    - write
    - SocketWriter
    - close
    - port_num_
    linkageType: ''
    returnType: class
    signature: 'class StreamingListener : public EmptyTestEventListener '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: sockfd_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: host_name_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: port_num_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: MakeConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1099,1
    - Dst: SocketWriter
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1102,1
    - Dst: CloseConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1103,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1108,1
    - Dst: write
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1112,1
    - Dst: GTEST_LOG_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1113,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1124,1
    - Dst: close
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1127,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1137
      start: 1095
    functionDepth: 0
    functionLinenumber: 1095
    functionLinenumberEnd: 1137
    functionName: AbstractSocketWriter
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - CloseConnection
    - sockfd_
    - GTEST_CHECK_
    - GTEST_LOG_
    - host_name_
    - MakeConnection
    - write
    - SocketWriter
    - close
    - port_num_
    linkageType: ''
    returnType: class
    signature: 'class SocketWriter : public AbstractSocketWriter '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1124,1
    - Dst: close
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1127,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1129
      start: 1123
    functionDepth: 0
    functionLinenumber: 1123
    functionLinenumberEnd: 1129
    functionName: CloseConnection
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - close
    - GTEST_CHECK_
    linkageType: ''
    returnType: void
    signature: 'void CloseConnection() override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1216
      start: 1216
    functionDepth: 0
    functionLinenumber: 1216
    functionLinenumberEnd: 1216
    functionName: Start
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void Start() '
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:307,1
    - Dst: ParseInternalRunDeathTestFlag
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:773,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:146,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:184,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:178,1
    - Dst: close
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1127,1
    - Dst: Start
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1149,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:173,1
    - Dst: gtest_trace_stack
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:764,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1187,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1197,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:170,1
    - Dst: OsStackTraceGetter
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:439,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:310,1
    - Dst: parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:699,1
    - Dst: type_parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:710,1
    - Dst: strtoull
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1036,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1159,1
    - Dst: GetTimeInMillis
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:115,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:171,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:176,1
    - Dst: predicate
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:280,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1124,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1188,1
    - Dst: GTestFlagSaver
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:143,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:174,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:188,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:692,1
    - Dst: IsDigit
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1026,1
    - Dst: Send
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1091,1
    - Dst: port_num_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1181,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1193,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1206,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:177,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:181,1
    - Dst: MakeConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1099,1
    - Dst: CloseConnection
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1103,1
    - Dst: write
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1112,1
    - Dst: GTEST_LOG_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1113,1
    - Dst: OsStackTraceGetterInterface
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:410,1
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:603,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:144,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:145,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:179,1
    - Dst: ShuffleRange
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:304,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1198,1
    - Dst: for_each
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:288,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:186,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1039,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1168,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1173,1
    - Dst: UrlEncode
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1207,1
    - Dst: SocketWriter
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1102,1
    - Dst: Failed
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:580,1
    - Dst: host_name_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1153,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:175,1
    - Dst: swap
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:321,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:597,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:131,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:189,1
    - Dst: ad_hoc_test_result
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    - Dst: GetElementOr
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:591,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:180,1
    - Dst: ForEach
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:730,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1173,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1187,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:163,1
    - Dst: UrlEncode
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1205,1
    - Dst: GetTimeInMillis
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:90,1
    - Dst: GTestFlagSaver
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:169,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:182,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:191,1
    - Dst: GetInstance
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:982,1
    - Dst: failed_test_suite_count
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:585,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:185,1
    - Dst: ignored_parameterized_test_suites
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:703,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1159,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1174,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1199,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:162,1
    - Dst: socket_writer_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1148,1
    - Dst: GetCurrentDir
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:686,1
    - Dst: environments
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:761,1
    - Dst: sockfd_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1098,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1205,1
    - Dst: key_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:347,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:164,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:190,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:147,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:148,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:155,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:157,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:158,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:156,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:159,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:161,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1216,1
    - Dst: ShuffleRange
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:329,1
    - Dst: ParseNaturalNumber
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1022,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1108,1
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1167,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:165,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:663,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:687,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:149,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:151,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:153,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:150,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:154,1
    - Dst: GTEST_FLAG_GET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:152,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:172,1
    - Dst: GTEST_FLAG_SET
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:183,1
    CyclomaticComplexity: 230
    EdgeCount: 230
    ICount: 468
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1229
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 1229
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - Start
    - ad_hoc_test_result
    - GetCurrentDir
    - GTestFlagSaver
    - UrlEncode
    - ParseInternalRunDeathTestFlag
    - GTEST_LOG_
    - Failed
    - GTEST_FLAG_SET
    - SendLn
    - StreamableToString
    - environments
    - predicate
    - for_each
    - swap
    - write
    - key_
    - GTEST_FLAG_GET
    - close
    - port_num_
    - CloseConnection
    - ShuffleRange
    - OsStackTraceGetterInterface
    - ForEach
    - string
    - GetInstance
    - parameterized_test_registry
    - Send
    - failed_test_suite_count
    - gtest_trace_stack
    - MakeConnection
    - IsDigit
    - socket_writer_
    - FormatBool
    - ParseNaturalNumber
    - sockfd_
    - GetElementOr
    - GTEST_CHECK_
    - OsStackTraceGetter
    - type_parameterized_test_registry
    - strtoull
    - host_name_
    - SocketWriter
    - GetTestSuite
    - GetTimeInMillis
    - ignored_parameterized_test_suites
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: socket_writer_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1148,1
    - Dst: Start
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1149,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - socket_writer
    argTypes:
    - AbstractSocketWriter*
    constantsTouched: []
    func_position:
      end: 1150
      start: 1147
    functionDepth: 0
    functionLinenumber: 1147
    functionLinenumberEnd: 1150
    functionName: StreamingListener
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - Start
    - socket_writer_
    linkageType: ''
    returnType: explicit
    signature: 'explicit StreamingListener(AbstractSocketWriter* socket_writer) :
      socket_writer_(socket_writer) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetInstance
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:982,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 983
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 983
    functionName: GetUnitTestImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetInstance
    linkageType: ''
    returnType: UnitTestImpl*
    signature: 'inline UnitTestImpl * GetUnitTestImpl() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1181,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - test_suite
    argTypes:
    - TestSuite
    constantsTouched: []
    func_position:
      end: 1182
      start: 1180
    functionDepth: 0
    functionLinenumber: 1180
    functionLinenumberEnd: 1182
    functionName: OnTestSuiteStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - string
    linkageType: ''
    returnType: void
    signature: 'void OnTestSuiteStart(const TestSuite& test_suite) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 608
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 608
    functionName: listeners
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestEventListeners*
    signature: 'TestEventListeners * listeners() '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:687,1
    - Dst: GetCurrentDir
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:686,1
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:692,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - set_up_tc
    - tear_down_tc
    - test_info
    argTypes:
    - internal
    - internal
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 695
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 695
    functionName: AddTestInfo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetTestSuite
    - GetCurrentDir
    - GTEST_CHECK_
    linkageType: ''
    returnType: void
    signature: 'void AddTestInfo(internal::SetUpTestSuiteFunc set_up_tc, internal::TearDownTestSuiteFunc
      tear_down_tc, TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1173,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1174,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - unit_test
    - int
    - /* iteration */
    argTypes:
    - UnitTest
    - int
    constantsTouched: []
    func_position:
      end: 1176
      start: 1171
    functionDepth: 0
    functionLinenumber: 1171
    functionLinenumberEnd: 1176
    functionName: OnTestIterationEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - FormatBool
    - StreamableToString
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration
      */) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTimeInMillis
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - random_seed_flag
    argTypes:
    - int32_t
    constantsTouched: []
    func_position:
      end: 125
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 125
    functionName: GetRandomSeedFromFlag
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetTimeInMillis
    linkageType: ''
    returnType: int
    signature: 'inline int GetRandomSeedFromFlag(int32_t random_seed_flag) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: predicate
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:280,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - c
    - predicate
    argTypes:
    - Container
    - Predicate
    constantsTouched: []
    func_position:
      end: 283
      start: 275
    functionDepth: 0
    functionLinenumber: 275
    functionLinenumberEnd: 283
    functionName: CountIf
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - predicate
    linkageType: ''
    returnType: int
    signature: 'int CountIf(const Container& c, Predicate predicate) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OsStackTraceGetterInterface
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:410,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 434
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 434
    functionName: OsStackTraceGetterInterface
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - OsStackTraceGetterInterface
    linkageType: ''
    returnType: class
    signature: 'class OsStackTraceGetterInterface '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OsStackTraceGetter
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:439,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 457
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 457
    functionName: OsStackTraceGetterInterface
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - OsStackTraceGetter
    linkageType: ''
    returnType: class
    signature: 'class OsStackTraceGetter : public OsStackTraceGetterInterface '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTestSuite
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:663,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 4
    argNames:
    - test_case_name
    - type_param
    - set_up_tc
    - tear_down_tc
    argTypes:
    - std
    - char*
    - internal
    - internal
    constantsTouched: []
    func_position:
      end: 664
      start: 659
    functionDepth: 0
    functionLinenumber: 659
    functionLinenumberEnd: 664
    functionName: GetTestCase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - GetTestSuite
    linkageType: ''
    returnType: TestCase*
    signature: 'TestCase * GetTestCase(const std::string& test_case_name, const char*
      type_param, internal::SetUpTestSuiteFunc set_up_tc, internal::TearDownTestSuiteFunc
      tear_down_tc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 756
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 756
    functionName: current_test_info
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestInfo*
    signature: 'TestInfo * current_test_info() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1088
      start: 1088
    functionDepth: 0
    functionLinenumber: 1088
    functionLinenumberEnd: 1088
    functionName: CloseConnection
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void CloseConnection() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1187,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1188,1
    - Dst: FormatBool
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - test_suite
    argTypes:
    - TestSuite
    constantsTouched: []
    func_position:
      end: 1190
      start: 1186
    functionDepth: 0
    functionLinenumber: 1186
    functionLinenumberEnd: 1190
    functionName: OnTestSuiteEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - FormatBool
    - StreamableToString
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void OnTestSuiteEnd(const TestSuite& test_suite) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 757
      start: 757
    functionDepth: 0
    functionLinenumber: 757
    functionLinenumberEnd: 757
    functionName: current_test_info
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestInfo*
    signature: 'const TestInfo * current_test_info() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - test_result
    argTypes:
    - TestResult*
    constantsTouched: []
    func_position:
      end: 1066
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1066
    functionName: ClearTestPartResults
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void ClearTestPartResults(TestResult* test_result) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SendLn
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - const UnitTest
    - '&'
    - /* unit_test */
    argTypes:
    - UnitTest
    constantsTouched: []
    func_position:
      end: 1154
      start: 1152
    functionDepth: 0
    functionLinenumber: 1152
    functionLinenumberEnd: 1154
    functionName: OnTestProgramStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - SendLn
    linkageType: ''
    returnType: void
    signature: 'void OnTestProgramStart(const UnitTest& /* unit_test */) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h:1193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo
    constantsTouched: []
    func_position:
      end: 1194
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1194
    functionName: OnTestStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached:
    - string
    linkageType: ''
    returnType: void
    signature: 'void OnTestStart(const TestInfo& test_info) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 502
      start: 487
    functionDepth: 0
    functionLinenumber: 487
    functionLinenumberEnd: 502
    functionName: DefaultPerThreadTestPartResultReporter
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class DefaultPerThreadTestPartResultReporter : public TestPartResultReporterInterface '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - a_current_test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 854
      start: 852
    functionDepth: 0
    functionLinenumber: 852
    functionLinenumberEnd: 854
    functionName: set_current_test_info
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_current_test_info(TestInfo* a_current_test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 399
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 399
    functionName: UnitTestOptions
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/src/gtest-internal-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ UnitTestOptions '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 49
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 49
    functionName: PrimeTable
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class PrimeTable '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - n
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: IsPrime
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsPrime(int n) const override '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: IsPrime
      Src: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h:69,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 72
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 72
    functionName: OnTheFlyPrimeTable
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h
    functionUses: []
    functionsReached:
    - IsPrime
    linkageType: ''
    returnType: class
    signature: 'class OnTheFlyPrimeTable : public PrimeTable '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: IsPrime
      Src: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h:69,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 1
    argNames:
    - p
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 71
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 71
    functionName: GetNextPrime
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h
    functionUses: []
    functionsReached:
    - IsPrime
    linkageType: ''
    returnType: int
    signature: 'int GetNextPrime(int p) const override '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - p
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 96
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 96
    functionName: GetNextPrime
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int GetNextPrime(int p) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: is_prime_size_
      Src: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h:80,1
    - Dst: max
      Src: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h:80,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 83
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 83
    functionName: PreCalculatedPrimeTable
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/prime_tables.h
    functionUses: []
    functionsReached:
    - max
    - is_prime_size_
    linkageType: ''
    returnType: class
    signature: 'class PreCalculatedPrimeTable : public PrimeTable '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Set
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames:
    - nullptr
    argTypes: []
    constantsTouched: []
    func_position:
      end: 61
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 61
    functionName: c_string_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample2.h
    functionUses: []
    functionsReached:
    - Set
    linkageType: ''
    returnType: MyString(const MyString& string)
    signature: 'MyString(const MyString& string) : c_string_(nullptr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    functionName: c_string
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample2.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * c_string() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    functionName: (nullptr)
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample2.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: c_string_
    signature: 'c_string_ (nullptr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:72,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: Length
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample2.h
    functionUses: []
    functionsReached:
    - strlen
    linkageType: ''
    returnType: size_t
    signature: 'size_t Length() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MyString
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:51,1
    - Dst: Set
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:55,1
    - Dst: MyString
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:67,1
    - Dst: Set
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:60,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:72,1
    - Dst: c_string_
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:54,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 76
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 76
    functionName: MyString
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample2.h
    functionUses: []
    functionsReached:
    - strlen
    - Set
    - c_string_
    - MyString
    linkageType: ''
    returnType: class
    signature: 'class MyString '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: c_string_
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:54,1
    - Dst: Set
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample2.h:55,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - a_c_string
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: MyString
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample2.h
    functionUses: []
    functionsReached:
    - Set
    - c_string_
    linkageType: ''
    returnType: explicit
    signature: 'explicit MyString(const char* a_c_string) : c_string_(nullptr) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Counter
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample4.h:40,1
    - Dst: counter_
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample4.h:40,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 50
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 50
    functionName: Counter
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample4.h
    functionUses: []
    functionsReached:
    - Counter
    - counter_
    linkageType: ''
    returnType: class
    signature: 'class Counter '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 53
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 53
    functionName: next
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: QueueNode*
    signature: 'QueueNode * next() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 99
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 99
    functionName: Size
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t Size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 54
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 54
    functionName: next
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: QueueNode*
    signature: 'const QueueNode * next() const '
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 96
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 96
    functionName: Clear
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Clear() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: Last
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: QueueNode*
    signature: 'const QueueNode <E> * Last() const '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: E
      Src: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h:140,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 144
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 144
    functionName: Dequeue
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached:
    - E
    linkageType: ''
    returnType: E*
    signature: 'E * Dequeue() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    functionName: Head
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: QueueNode*
    signature: 'const QueueNode <E> * Head() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - element
    argTypes:
    - E
    constantsTouched: []
    func_position:
      end: 124
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 124
    functionName: Enqueue
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/samples/sample3-inl.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Enqueue(const E& element) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ScopedFakeTestPartResultReporter
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-spi.h:73,1
    - Dst: SingleFailureChecker
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-spi.h:107,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 120
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 120
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-spi.h
    functionUses: []
    functionsReached:
    - ScopedFakeTestPartResultReporter
    - SingleFailureChecker
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SingleFailureChecker
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-spi.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 118
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 118
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-spi.h
    functionUses: []
    functionsReached:
    - SingleFailureChecker
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SingleFailureChecker
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-spi.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 116
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 116
    functionName: SingleFailureChecker
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-spi.h
    functionUses: []
    functionsReached:
    - SingleFailureChecker
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ SingleFailureChecker '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 342
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 342
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-death-test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 203
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 203
    functionName: ExitedWithCode
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-death-test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ ExitedWithCode '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 64
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 64
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-death-test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 215
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 215
    functionName: KilledBySignal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-death-test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ KilledBySignal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AssertionSuccess
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:88,1
    - Dst: PrintToString
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:93,1
    - Dst: AssertionFailure
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:90,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 94
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 94
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h
    functionUses: []
    functionsReached:
    - PrintToString
    - AssertionFailure
    - AssertionSuccess
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fatally_failed
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h:107,1
    - Dst: nonfatally_failed
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h:107,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 124
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 124
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached:
    - nonfatally_failed
    - fatally_failed
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    functionName: line_number
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int line_number() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 92
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 92
    functionName: message
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * message() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 95
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 95
    functionName: skipped
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool skipped() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: passed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool passed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    functionName: nonfatally_failed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool nonfatally_failed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 104
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 104
    functionName: fatally_failed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool fatally_failed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fatally_failed
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h:107,1
    - Dst: nonfatally_failed
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    functionName: failed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached:
    - nonfatally_failed
    - fatally_failed
    linkageType: ''
    returnType: bool
    signature: 'bool failed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 82
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 82
    functionName: file_name
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * file_name() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestPartResultArray
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h:135,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 151
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 151
    functionName: TestPartResultArray
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached:
    - TestPartResultArray
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TestPartResultArray '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HasNewFatalFailureHelper
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h:172,1
    - Dst: HasNewFatalFailureHelper
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h:173,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 185
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 185
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached:
    - HasNewFatalFailureHelper
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    functionName: has_new_fatal_failure
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool has_new_fatal_failure() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    functionName: summary
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * summary() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 76
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 76
    functionName: TestPartResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TestPartResult '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 159
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 159
    functionName: TestPartResultReporterInterface
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-test-part.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TestPartResultReporterInterface '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 240
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 240
    functionName: Matches
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - MatchAndExplain
    linkageType: ''
    returnType: bool
    signature: 'bool Matches(const T& x) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 328
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 328
    functionName: IsShared
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsShared() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 252
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 252
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - GTEST_CHECK_
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const final '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: GetDescriber
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: MatcherDescriberInterface*
    signature: 'const MatcherDescriberInterface * GetDescriber() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 626
      start: 626
    functionDepth: 0
    functionLinenumber: 626
    functionLinenumberEnd: 626
    functionName: impl
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Impl
    signature: 'const Impl & impl() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:824,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 825
      start: 821
    functionDepth: 0
    functionLinenumber: 821
    functionLinenumberEnd: 825
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - impl
    argTypes:
    - MatcherInterface*
    constantsTouched: []
    func_position:
      end: 577
      start: 576
    functionDepth: 0
    functionLinenumber: 576
    functionLinenumberEnd: 577
    functionName: Matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: explicit
    signature: 'explicit Matcher(const MatcherInterface<internal::StringView>* impl)
      : internal::MatcherBase<internal::StringView>(impl ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 746
      start: 746
    functionDepth: 0
    functionLinenumber: 746
    functionLinenumberEnd: 746
    functionName: NegatedDesc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * NegatedDesc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 754
      start: 754
    functionDepth: 0
    functionLinenumber: 754
    functionLinenumberEnd: 754
    functionName: NegatedDesc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * NegatedDesc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 763
      start: 763
    functionDepth: 0
    functionLinenumber: 763
    functionLinenumberEnd: 763
    functionName: NegatedDesc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * NegatedDesc() '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:239,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:244,1
    - Dst: MatcherBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:269,1
    - Dst: buffer_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:269,1
    - Dst: vtable_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:274,1
    - Dst: vtable_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:280,1
    - Dst: IsShared
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:294,1
    - Dst: Ref
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:286,1
    - Dst: Destroy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:305,1
    - Dst: DescribeTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:132,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:214,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:250,1
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:257,1
    - Dst: buffer_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:274,1
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:275,1
    - Dst: Destroy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:291,1
    - Dst: MatcherBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:312,1
    - Dst: stream_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:82,1
    - Dst: value
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:214,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:232,1
    - Dst: vtable_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:269,1
    - Dst: buffer_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:280,1
    - Dst: vtable_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:299,1
    - Dst: buffer_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:299,1
    - Dst: Destroy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:312,1
    - Dst: value
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:213,1
    - Dst: DummyMatchResultListener
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:184,1
    - Dst: MatcherBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:280,1
    - Dst: MatcherBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:298,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:335,1
    - Dst: MatchResultListener
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:197,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:334,1
    CyclomaticComplexity: 59
    EdgeCount: 59
    ICount: 136
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 336
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 336
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - DummyMatchResultListener
    - DescribeTo
    - vtable_
    - value
    - GTEST_CHECK_
    - MatchAndExplain
    - buffer_
    - MatcherBase
    - IsShared
    - MatchResultListener
    - Get
    - Destroy
    - move
    - Ref
    - stream_
    - Init
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: stream_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:82,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 107
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 107
    functionName: MatchResultListener
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - stream_
    linkageType: ''
    returnType: class
    signature: 'class MatchResultListener '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DummyMatchResultListener
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:184,1
    - Dst: MatchResultListener
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:197,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 209
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 209
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - DummyMatchResultListener
    - MatchResultListener
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:244,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 246
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 246
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - GTEST_CHECK_
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const final '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 377
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 377
    functionName: GetVTable
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: VTable*
    signature: 'VTable * GetVTable() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 399
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 399
    functionName: IsInlined
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'constexpr bool IsInlined() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - impl
    argTypes:
    - MatcherInterface*
    constantsTouched: []
    func_position:
      end: 523
      start: 522
    functionDepth: 0
    functionLinenumber: 522
    functionLinenumberEnd: 523
    functionName: Matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: explicit
    signature: 'explicit Matcher(const MatcherInterface<std::string>* impl) : internal::MatcherBase<std::string>(impl
      ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Desc
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:702,1
    - Dst: Unwrap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:699,1
    - Dst: Op
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:699,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:703,1
    - Dst: Unwrap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:703,1
    - Dst: NegatedDesc
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:706,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:707,1
    - Dst: Unwrap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:707,1
    - Dst: Unwrap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:712,1
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:812,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:801,1
    - Dst: Unwrap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:716,1
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:801,1
    - Dst: rhs_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:693,1
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:813,1
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:800,1
    CyclomaticComplexity: 43
    EdgeCount: 43
    ICount: 129
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 814
      start: 679
    functionDepth: 0
    functionLinenumber: 679
    functionLinenumberEnd: 814
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    - Op
    - rhs_
    - MatchAndExplain
    - string
    - NegatedDesc
    - Unwrap
    - PartialMatch
    - FullMatch
    - Desc
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - impl
    argTypes:
    - MatcherInterface*
    constantsTouched: []
    func_position:
      end: 549
      start: 548
    functionDepth: 0
    functionLinenumber: 548
    functionLinenumberEnd: 549
    functionName: Matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: explicit
    signature: 'explicit Matcher(const MatcherInterface<const internal::StringView&>*
      impl) : internal::MatcherBase<const internal::StringView&>(impl ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 639
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 639
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NegatedDesc
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:706,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:707,1
    - Dst: Unwrap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:707,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 708
      start: 705
    functionDepth: 0
    functionLinenumber: 705
    functionLinenumberEnd: 708
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - Unwrap
    - UniversalPrint
    - NegatedDesc
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 745
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 745
    functionName: Desc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * Desc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 753
      start: 753
    functionDepth: 0
    functionLinenumber: 753
    functionLinenumberEnd: 753
    functionName: Desc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * Desc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:818,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 819
      start: 816
    functionDepth: 0
    functionLinenumber: 816
    functionLinenumberEnd: 819
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    functionName: IsInterested
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsInterested() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DummyMatchResultListener
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 189
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 189
    functionName: DummyMatchResultListener
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - DummyMatchResultListener
    linkageType: ''
    returnType: class
    signature: 'class DummyMatchResultListener : public MatchResultListener '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MatchResultListener
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:197,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 203
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 203
    functionName: StreamMatchResultListener
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - MatchResultListener
    linkageType: ''
    returnType: class
    signature: 'class StreamMatchResultListener : public MatchResultListener '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:213,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 213
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 213
    functionName: SharedPayload
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - value
    linkageType: ''
    returnType: explicit
    signature: 'explicit SharedPayload(const T& v) : value(v) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: decltype
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:365,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:368,1
    - Dst: make_tuple
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:368,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:365,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - m
    argTypes:
    - MatcherBase
    constantsTouched: []
    func_position:
      end: 369
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 369
    functionName: GetDescriberImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - Get
    - make_tuple
    - decltype
    linkageType: ''
    returnType: MatcherDescriberInterface*
    signature: 'const MatcherDescriberInterface * GetDescriberImpl( const MatcherBase&
      m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - MatcherBase
    constantsTouched: []
    func_position:
      end: 435
      start: 433
    functionDepth: 0
    functionLinenumber: 433
    functionLinenumberEnd: 435
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: M
    signature: 'static const M & Get(const MatcherBase& m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePolymorphicMatcher
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:837,1
    - Dst: MatchesRegexMatcher
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:837,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - regex
    argTypes:
    - internal*
    constantsTouched: []
    func_position:
      end: 838
      start: 835
    functionDepth: 0
    functionLinenumber: 835
    functionLinenumberEnd: 838
    functionName: MatchesRegex
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - MatchesRegexMatcher
    - MakePolymorphicMatcher
    linkageType: ''
    returnType: PolymorphicMatcher
    signature: 'inline PolymorphicMatcher <internal::MatchesRegexMatcher> MatchesRegex(
      const internal::RE* regex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DescribeTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:132,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 135
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 135
    functionName: MatcherDescriberInterface
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - DescribeTo
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ MatcherDescriberInterface '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:214,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - v
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 214
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 214
    functionName: SharedPayload
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - move
    - value
    linkageType: ''
    returnType: explicit
    signature: 'explicit SharedPayload(T&& v) : value(std::move(v)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - shared
    argTypes:
    - SharedPayloadBase*
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: Destroy
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void Destroy(SharedPayloadBase* shared) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Shared
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:437,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - m
    - impl
    argTypes:
    - MatcherBase
    - M*
    constantsTouched: []
    func_position:
      end: 438
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 438
    functionName: Init
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - Shared
    linkageType: ''
    returnType: void
    signature: 'static void Init(MatcherBase& m, M* impl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 729
      start: 729
    functionDepth: 0
    functionLinenumber: 729
    functionLinenumberEnd: 729
    functionName: NegatedDesc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * NegatedDesc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 738
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 738
    functionName: NegatedDesc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * NegatedDesc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 772
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 772
    functionName: NegatedDesc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * NegatedDesc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 207
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 207
    functionName: Ref
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Ref() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 208
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 208
    functionName: Unref
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool Unref() '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:351,1
    - Dst: Get
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:349,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 3
    argNames:
    - m
    - os
    - negation
    argTypes:
    - MatcherBase
    - std*
    - bool
    constantsTouched: []
    func_position:
      end: 353
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 353
    functionName: DescribeImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - Get
    linkageType: ''
    returnType: void
    signature: 'void DescribeImpl(const MatcherBase& m, std::ostream* os, bool negation) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IsShared
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:389,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 392
      start: 388
    functionDepth: 0
    functionLinenumber: 388
    functionLinenumberEnd: 392
    functionName: Destroy
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - IsShared
    linkageType: ''
    returnType: void
    signature: 'void Destroy() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - MatcherBase
    constantsTouched: []
    func_position:
      end: 409
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 409
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: M
    signature: 'static const M & Get(const MatcherBase& m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DescribeNegationTo(::std::ostream* os) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 791
      start: 782
    functionDepth: 0
    functionLinenumber: 782
    functionLinenumberEnd: 791
    functionName: MatchesRegexMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class MatchesRegexMatcher '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePolymorphicMatcher
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:849,1
    - Dst: MatchesRegexMatcher
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:849,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - regex
    argTypes:
    - internal*
    constantsTouched: []
    func_position:
      end: 850
      start: 847
    functionDepth: 0
    functionLinenumber: 847
    functionLinenumberEnd: 850
    functionName: ContainsRegex
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - MatchesRegexMatcher
    - MakePolymorphicMatcher
    linkageType: ''
    returnType: PolymorphicMatcher
    signature: 'inline PolymorphicMatcher <internal::MatchesRegexMatcher> ContainsRegex(
      const internal::RE* regex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: new
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:411,1
    - Dst: M
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:411,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - m
    - impl
    argTypes:
    - MatcherBase
    - M
    constantsTouched: []
    func_position:
      end: 412
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 412
    functionName: Init
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - new
    - M
    linkageType: ''
    returnType: void
    signature: 'static void Init(MatcherBase& m, M impl) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - MatcherBase
    constantsTouched: []
    func_position:
      end: 421
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 421
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: M
    signature: 'static const M & Get(const MatcherBase& m) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - impl
    argTypes:
    - MatcherInterface*
    constantsTouched: []
    func_position:
      end: 499
      start: 498
    functionDepth: 0
    functionLinenumber: 498
    functionLinenumberEnd: 499
    functionName: Matcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: explicit
    signature: 'explicit Matcher(const MatcherInterface<const std::string&>* impl)
      : internal::MatcherBase<const std::string&>(impl ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - x
    - listener
    argTypes:
    - T
    - MatchResultListener*
    constantsTouched: []
    func_position:
      end: 647
      start: 645
    functionDepth: 0
    functionLinenumber: 645
    functionLinenumberEnd: 647
    functionName: MatchAndExplain
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool MatchAndExplain(T x, MatchResultListener* listener) const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 728
      start: 728
    functionDepth: 0
    functionLinenumber: 728
    functionLinenumberEnd: 728
    functionName: Desc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * Desc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 737
      start: 737
    functionDepth: 0
    functionLinenumber: 737
    functionLinenumberEnd: 737
    functionName: Desc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * Desc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 762
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 762
    functionName: Desc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * Desc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 771
      start: 771
    functionDepth: 0
    functionLinenumber: 771
    functionLinenumberEnd: 771
    functionName: Desc
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'static const char * Desc() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MatchAndExplain
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:257,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - x
    - '::'
    - os
    argTypes:
    - T
    - std*
    constantsTouched: []
    func_position:
      end: 258
      start: 255
    functionDepth: 0
    functionLinenumber: 255
    functionLinenumberEnd: 258
    functionName: ExplainMatchResultTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - MatchAndExplain
    linkageType: ''
    returnType: void
    signature: 'void ExplainMatchResultTo(const T& x, ::std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Desc
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:702,1
    - Dst: Unwrap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:703,1
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:703,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 704
      start: 701
    functionDepth: 0
    functionLinenumber: 701
    functionLinenumberEnd: 704
    functionName: DescribeTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    - Desc
    - Unwrap
    linkageType: ''
    returnType: void
    signature: 'void DescribeTo(std::ostream* os) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DescribeTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h:132,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - '::'
    - os
    argTypes:
    - std*
    constantsTouched: []
    func_position:
      end: 134
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 134
    functionName: DescribeNegationTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-matchers.h
    functionUses: []
    functionsReached:
    - DescribeTo
    linkageType: ''
    returnType: virtual
    signature: 'virtual void DescribeNegationTo(::std::ostream* os) const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StrCat
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:161,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:108,1
    - Dst: ss_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:116,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 47
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 198
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 198
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h
    functionUses: []
    functionsReached:
    - Message
    - StrCat
    - ss_
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Message '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ss_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:116,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 118
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 118
    functionName: Message
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h
    functionUses: []
    functionsReached:
    - ss_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Message(const char* str) : ss_(new ::std::stringstream) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StrCat
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:161,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:108,1
    - Dst: ss_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:116,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 201
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 201
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h
    functionUses: []
    functionsReached:
    - Message
    - StrCat
    - ss_
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 245
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 245
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h
    functionUses: []
    functionsReached:
    - Message
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - stringstream
    argTypes:
    - new
    constantsTouched: []
    func_position:
      end: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    functionName: ss_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Message(const Message& msg)
    signature: 'Message(const Message& msg) : ss_(new ::std::stringstream) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h:242,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - streamable
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 243
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 243
    functionName: StreamableToString
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-message.h
    functionUses: []
    functionsReached:
    - Message
    linkageType: ''
    returnType: string
    signature: 'string StreamableToString(const T& streamable) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RecordProperty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:303,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:303,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - key
    - value
    argTypes:
    - std
    - T
    constantsTouched: []
    func_position:
      end: 304
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 304
    functionName: RecordProperty
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - Message
    - RecordProperty
    linkageType: ''
    returnType: void
    signature: 'void RecordProperty(const std::string& key, const T& value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Failed
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:414,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 433
      start: 408
    functionDepth: 0
    functionLinenumber: 408
    functionLinenumberEnd: 433
    functionName: total_part_count
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - Failed
    linkageType: ''
    returnType: int
    signature: 'int total_part_count() const; // Returns the number of the test properties.
      int test_property_count() const; // Returns true if and only if the test passed
      (i.e. no test part failed). bool Passed() const { return !Skipped() && !Failed();
      } // Returns true if and only if the test was skipped. bool Skipped() const;
      // Returns true if and only if the test failed. bool Failed() const; // Returns
      true if and only if the test fatally failed. bool HasFatalFailure() const; //
      Returns true if and only if the test has a non-fatal failure. bool HasNonfatalFailure()
      const; // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time()
      const { return elapsed_time_; } // Gets the time of the test case start, in
      ms from the start of the // UNIX epoch. TimeInMillis start_timestamp() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 803
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 803
    functionName: RunTearDownTestSuite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void RunTearDownTestSuite() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1151,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1152,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1251,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1272,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1276,1
    - Dst: AddGlobalTestEnvironment
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1291,1
    - Dst: UnitTest
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1298,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1133,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1137,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1142,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1306,1
    - Dst: AddEnvironment
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1345,1
    CyclomaticComplexity: 79
    EdgeCount: 79
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1385
      start: 1112
    functionDepth: 0
    functionLinenumber: 1112
    functionLinenumberEnd: 1385
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - AddEnvironment
    - UnitTest
    - parameterized_test_registry
    - GTEST_LOCK_EXCLUDED_
    - AddGlobalTestEnvironment
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ UnitTest '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1043
      start: 1041
    functionDepth: 0
    functionLinenumber: 1041
    functionLinenumberEnd: 1043
    functionName: default_result_printer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestEventListener*
    signature: 'TestEventListener * default_result_printer() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 839
      start: 837
    functionDepth: 0
    functionLinenumber: 837
    functionLinenumberEnd: 839
    functionName: ShouldRunTest
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool ShouldRunTest(const TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 628
      start: 626
    functionDepth: 0
    functionLinenumber: 626
    functionLinenumberEnd: 628
    functionName: increment_death_test_count
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int increment_death_test_count() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 762
      start: 760
    functionDepth: 0
    functionLinenumber: 760
    functionLinenumberEnd: 762
    functionName: test_info_list
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<TestInfo*>& test_info_list() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 742
      start: 742
    functionDepth: 0
    functionLinenumber: 742
    functionLinenumberEnd: 742
    functionName: start_timestamp
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TimeInMillis
    signature: 'TimeInMillis start_timestamp() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: factory_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2305,1
    - Dst: factory_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2306,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2305,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2310
      start: 2303
    functionDepth: 0
    functionLinenumber: 2303
    functionLinenumberEnd: 2310
    functionName: TestFactoryBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - factory_
    - move
    linkageType: ''
    returnType: class
    signature: 'class FactoryImpl : public internal:: TestFactoryBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 907
      start: 907
    functionDepth: 0
    functionLinenumber: 907
    functionLinenumberEnd: 907
    functionName: Setup
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual*
    signature: 'virtual Setup_should_be_spelled_SetUp * Setup() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const UnitTest
    - '&'
    - /*unit_test*/
    argTypes:
    - UnitTest
    constantsTouched: []
    func_position:
      end: 996
      start: 996
    functionDepth: 0
    functionLinenumber: 996
    functionLinenumberEnd: 996
    functionName: OnEnvironmentsSetUpStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const UnitTest
    - '&'
    - /*unit_test*/
    argTypes:
    - UnitTest
    constantsTouched: []
    func_position:
      end: 1017
      start: 1017
    functionDepth: 0
    functionLinenumber: 1017
    functionLinenumberEnd: 1017
    functionName: OnTestProgramEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestProgramEnd(const UnitTest& /*unit_test*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestCase
    - '&'
    - /*test_case*/
    argTypes:
    - TestCase
    constantsTouched: []
    func_position:
      end: 948
      start: 948
    functionDepth: 0
    functionLinenumber: 948
    functionLinenumberEnd: 948
    functionName: OnTestCaseStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void OnTestCaseStart(const TestCase& /*test_case*/) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestCase
    - '&'
    - /*test_case*/
    argTypes:
    - TestCase
    constantsTouched: []
    func_position:
      end: 1001
      start: 1001
    functionDepth: 0
    functionLinenumber: 1001
    functionLinenumberEnd: 1001
    functionName: OnTestCaseStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestCaseStart(const TestCase& /*test_case*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 493
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 493
    functionName: increment_death_test_count
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int increment_death_test_count() '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TestInfo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:536,1
    - Dst: test_suite_name
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:543,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 666
      start: 532
    functionDepth: 0
    functionLinenumber: 532
    functionLinenumberEnd: 666
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - test_suite_name
    - TestInfo
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TestInfo '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestInfo
    - '&'
    - /*test_info*/
    argTypes:
    - TestInfo
    constantsTouched: []
    func_position:
      end: 955
      start: 955
    functionDepth: 0
    functionLinenumber: 955
    functionLinenumberEnd: 955
    functionName: OnTestDisabled
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void OnTestDisabled(const TestInfo& /*test_info*/) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2157
      start: 2154
    functionDepth: 0
    functionLinenumber: 2154
    functionLinenumberEnd: 2157
    functionName: StaticAssertTypeEq
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool StaticAssertTypeEq() noexcept '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 700
      start: 697
    functionDepth: 0
    functionLinenumber: 697
    functionLinenumberEnd: 700
    functionName: type_param
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * type_param() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 693
      start: 693
    functionDepth: 0
    functionLinenumber: 693
    functionLinenumberEnd: 693
    functionName: name
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * name() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const UnitTest
    - '&'
    - /*unit_test*/
    argTypes:
    - UnitTest
    constantsTouched: []
    func_position:
      end: 997
      start: 997
    functionDepth: 0
    functionLinenumber: 997
    functionLinenumberEnd: 997
    functionName: OnEnvironmentsSetUpEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const UnitTest
    - '&'
    - /*unit_test*/
    argTypes:
    - UnitTest
    constantsTouched: []
    func_position:
      end: 1013
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1013
    functionName: OnEnvironmentsTearDownStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestSuite
    - '&'
    - /*test_suite*/
    argTypes:
    - TestSuite
    constantsTouched: []
    func_position:
      end: 998
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 998
    functionName: OnTestSuiteStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestSuiteStart(const TestSuite& /*test_suite*/) override '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetUnitTestImpl
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:187,1
    - Dst: GetIgnoredParameterizedTestSuites
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:190,1
    - Dst: Test
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:308,1
    - Dst: failed_test_count
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:734,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1133,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1137,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1142,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1272,1
    - Dst: TestEventListeners
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1023,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1251,1
    - Dst: GTestNonCopyable
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:200,1
    - Dst: TestInfo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:536,1
    - Dst: test_suite_name
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:543,1
    - Dst: test_info_list
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:757,1
    - Dst: GTestNonCopyable
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:197,1
    - Dst: Failed
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:414,1
    - Dst: AddEnvironment
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1345,1
    - Dst: UnitTest
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1298,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:167,1
    - Dst: RecordProperty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:303,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:303,1
    - Dst: key_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:374,1
    - Dst: TestResult
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:401,1
    - Dst: TestResult
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:404,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:374,1
    - Dst: ad_hoc_test_result
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:734,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1152,1
    - Dst: AddGlobalTestEnvironment
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1291,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1306,1
    - Dst: TestEventListeners
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1024,1
    - Dst: HasFatalFailure
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:282,1
    - Dst: HasNonfatalFailure
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:282,1
    - Dst: GoogleTestFailureException
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:917,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1276,1
    - Dst: parameterized_test_registry
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1151,1
    CyclomaticComplexity: 286
    EdgeCount: 286
    ICount: 224
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1386
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 1386
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - HasNonfatalFailure
    - ad_hoc_test_result
    - AddEnvironment
    - HasFatalFailure
    - GTestNonCopyable
    - GTEST_LOCK_EXCLUDED_
    - Failed
    - test_info_list
    - GoogleTestFailureException
    - UnitTest
    - RecordProperty
    - Test
    - key_
    - TestResult
    - test_suite_name
    - failed_test_count
    - parameterized_test_registry
    - GetIgnoredParameterizedTestSuites
    - value_
    - TestEventListeners
    - TestInfo
    - GetUnitTestImpl
    - Message
    - AddGlobalTestEnvironment
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HasFatalFailure
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:282,1
    - Dst: HasNonfatalFailure
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:282,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 282
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 282
    functionName: HasFailure
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - HasFatalFailure
    - HasNonfatalFailure
    linkageType: ''
    returnType: bool
    signature: 'static bool HasFailure() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 813
      start: 811
    functionDepth: 0
    functionLinenumber: 811
    functionLinenumberEnd: 813
    functionName: TestSkipped
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool TestSkipped(const TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestCase
    - '&'
    - /*test_case*/
    argTypes:
    - TestCase
    constantsTouched: []
    func_position:
      end: 970
      start: 970
    functionDepth: 0
    functionLinenumber: 970
    functionLinenumberEnd: 970
    functionName: OnTestCaseEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void OnTestCaseEnd(const TestCase& /*test_case*/) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: HasFatalFailure
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:282,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:303,1
    - Dst: RecordProperty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:303,1
    - Dst: HasNonfatalFailure
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:282,1
    - Dst: Test
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:308,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 360
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 360
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - HasNonfatalFailure
    - HasFatalFailure
    - RecordProperty
    - Test
    - Message
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Test '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 567
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 567
    functionName: line
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int line() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: factory_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2306,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2306
      start: 2306
    functionDepth: 0
    functionLinenumber: 2306
    functionLinenumberEnd: 2306
    functionName: CreateTest
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - factory_
    linkageType: ''
    returnType: Test*
    signature: 'Test * CreateTest() override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 268
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 268
    functionName: SetUpTestCase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void SetUpTestCase() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: failed_test_count
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:734,1
    - Dst: ad_hoc_test_result
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:734,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 735
      start: 706
    functionDepth: 0
    functionLinenumber: 706
    functionLinenumberEnd: 735
    functionName: successful_test_count
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - ad_hoc_test_result
    - failed_test_count
    linkageType: ''
    returnType: int
    signature: 'int successful_test_count() const; // Gets the number of skipped tests
      in this test suite. int skipped_test_count() const; // Gets the number of failed
      tests in this test suite. int failed_test_count() const; // Gets the number
      of disabled tests that will be reported in the XML report. int reportable_disabled_test_count()
      const; // Gets the number of disabled tests in this test suite. int disabled_test_count()
      const; // Gets the number of tests to be printed in the XML report. int reportable_test_count()
      const; // Get the number of tests in this test suite that should run. int test_to_run_count()
      const; // Gets the number of all tests in this test suite. int total_test_count()
      const; // Returns true if and only if the test suite passed. bool Passed() const
      { return !Failed(); } // Returns true if and only if the test suite failed.
      bool Failed() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestInfo
    - '&'
    - /*test_info*/
    argTypes:
    - TestInfo
    constantsTouched: []
    func_position:
      end: 1005
      start: 1005
    functionDepth: 0
    functionLinenumber: 1005
    functionLinenumberEnd: 1005
    functionName: OnTestDisabled
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestDisabled(const TestInfo& /*test_info*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - test_suite
    argTypes:
    - TestSuite*
    constantsTouched: []
    func_position:
      end: 781
      start: 779
    functionDepth: 0
    functionLinenumber: 779
    functionLinenumberEnd: 781
    functionName: ClearTestSuiteResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void ClearTestSuiteResult(TestSuite* test_suite) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestPartResult
    - '&'
    - /*test_part_result*/
    argTypes:
    - TestPartResult
    constantsTouched: []
    func_position:
      end: 1006
      start: 1006
    functionDepth: 0
    functionLinenumber: 1006
    functionLinenumberEnd: 1006
    functionName: OnTestPartResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestPartResult(const TestPartResult& /*test_part_result*/)
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestCase
    - '&'
    - /*test_case*/
    argTypes:
    - TestCase
    constantsTouched: []
    func_position:
      end: 1010
      start: 1010
    functionDepth: 0
    functionLinenumber: 1010
    functionLinenumberEnd: 1010
    functionName: OnTestCaseEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestCaseEnd(const TestCase& /*test_case*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 570
      start: 570
    functionDepth: 0
    functionLinenumber: 570
    functionLinenumberEnd: 570
    functionName: is_in_another_shard
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool is_in_another_shard() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 588
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 588
    functionName: should_run
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool should_run() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 834
      start: 832
    functionDepth: 0
    functionLinenumber: 832
    functionLinenumberEnd: 834
    functionName: TestReportable
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool TestReportable(const TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1251,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1272,1
    - Dst: GTEST_LOCK_EXCLUDED_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1276,1
    CyclomaticComplexity: 43
    EdgeCount: 43
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1280
      start: 1155
    functionDepth: 0
    functionLinenumber: 1155
    functionLinenumberEnd: 1280
    functionName: successful_test_suite_count
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - GTEST_LOCK_EXCLUDED_
    linkageType: ''
    returnType: int
    signature: 'int successful_test_suite_count() const; // Gets the number of failed
      test suites. int failed_test_suite_count() const; // Gets the number of all
      test suites. int total_test_suite_count() const; // Gets the number of all test
      suites that contain at least one test // that should run. int test_suite_to_run_count()
      const; // Legacy API is deprecated but still available#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
      int successful_test_case_count() const; int failed_test_case_count() const;
      int total_test_case_count() const; int test_case_to_run_count() const;#endif
      // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Gets the number of successful tests.
      int successful_test_count() const; // Gets the number of skipped tests. int
      skipped_test_count() const; // Gets the number of failed tests. int failed_test_count()
      const; // Gets the number of disabled tests that will be reported in the XML
      report. int reportable_disabled_test_count() const; // Gets the number of disabled
      tests. int disabled_test_count() const; // Gets the number of tests to be printed
      in the XML report. int reportable_test_count() const; // Gets the number of
      all tests. int total_test_count() const; // Gets the number of tests that should
      run. int test_to_run_count() const; // Gets the time of the test program start,
      in ms from the start of the // UNIX epoch. TimeInMillis start_timestamp() const;
      // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const;
      // Returns true if and only if the unit test passed (i.e. all test suites //
      passed). bool Passed() const; // Returns true if and only if the unit test failed
      (i.e. some test suite // failed or something outside of all tests failed). bool
      Failed() const; // Gets the i-th test suite among all the test suites. i can
      range from 0 to // total_test_suite_count() - 1. If i is not in that range,
      returns NULL. const TestSuite* GetTestSuite(int i) const; // Legacy API is deprecated
      but still available #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ const TestCase*
      GetTestCase(int i) const; #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Returns
      the TestResult containing information on test failures and // properties logged
      outside of individual test suites. const TestResult& ad_hoc_test_result() const;
      // Returns the list of event listeners that can be used to track events // inside
      Google Test. TestEventListeners& listeners(); private: // Registers and returns
      a global test environment. When a test // program is run, all global test environments
      will be set-up in // the order they were registered. After all tests in the
      program // have finished, all global test environments will be torn-down in
      // the *reverse* order they were registered. // // The UnitTest object takes
      ownership of the given environment. // // This method can only be called from
      the main thread. Environment* AddEnvironment(Environment* env); // Adds a TestPartResult
      to the current TestResult object. All // Google Test assertion macros (e.g.
      ASSERT_TRUE, EXPECT_EQ, etc) // eventually call this to report their results.
      The user code // should use the assertion macros instead of calling this directly.
      void AddTestPartResult(TestPartResult::Type result_type, const char* file_name,
      int line_number, const std::string& message, const std::string& os_stack_trace)
      GTEST_LOCK_EXCLUDED_(mutex_); // Adds a TestProperty to the current TestResult
      object when invoked from // inside a test, to current TestSuite''s ad_hoc_test_result_
      when invoked // from SetUpTestSuite or TearDownTestSuite, or to the global property
      set // when invoked elsewhere. If the result already contains a property with
      // the same key, the value will be updated. void RecordProperty(const std::string&
      key, const std::string& value); // Gets the i-th test suite among all the test
      suites. i can range from 0 to // total_test_suite_count() - 1. If i is not in
      that range, returns NULL. TestSuite* GetMutableTestSuite(int i); // Invokes
      OsStackTrackGetterInterface::UponLeavingGTest. UponLeavingGTest() // should
      be called immediately before Google Test calls user code. It saves // some information
      about the current stack that CurrentStackTrace() will use // to find and hide
      Google Test stack frames. void UponLeavingGTest(); // Sets the TestSuite object
      for the test that''s currently running. void set_current_test_suite(TestSuite*
      a_current_test_suite) GTEST_LOCK_EXCLUDED_(mutex_); // Sets the TestInfo object
      for the test that''s currently running. void set_current_test_info(TestInfo*
      a_current_test_info) GTEST_LOCK_EXCLUDED_(mutex_); // Accessors for the implementation
      object. internal::UnitTestImpl* impl() { return impl_; } const internal::UnitTestImpl*
      impl() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 564
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 564
    functionName: file
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * file() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 829
      start: 827
    functionDepth: 0
    functionLinenumber: 827
    functionLinenumberEnd: 829
    functionName: TestDisabled
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool TestDisabled(const TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1054
      start: 1052
    functionDepth: 0
    functionLinenumber: 1052
    functionLinenumberEnd: 1054
    functionName: default_xml_generator
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestEventListener*
    signature: 'TestEventListener * default_xml_generator() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 380
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 380
    functionName: value
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * value() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - new_value
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 383
      start: 383
    functionDepth: 0
    functionLinenumber: 383
    functionLinenumberEnd: 383
    functionName: SetValue
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void SetValue(const std::string& new_value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - elapsed
    argTypes:
    - TimeInMillis
    constantsTouched: []
    func_position:
      end: 469
      start: 469
    functionDepth: 0
    functionLinenumber: 469
    functionLinenumberEnd: 469
    functionName: set_elapsed_time
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_elapsed_time(TimeInMillis elapsed) '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 561
      start: 558
    functionDepth: 0
    functionLinenumber: 558
    functionLinenumberEnd: 561
    functionName: value_param
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * value_param() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 738
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 738
    functionName: elapsed_time
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TimeInMillis
    signature: 'TimeInMillis elapsed_time() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 795
      start: 791
    functionDepth: 0
    functionLinenumber: 791
    functionLinenumberEnd: 795
    functionName: RunSetUpTestSuite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void RunSetUpTestSuite() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestInfo
    - '&'
    - /*test_info*/
    argTypes:
    - TestInfo
    constantsTouched: []
    func_position:
      end: 1007
      start: 1007
    functionDepth: 0
    functionLinenumber: 1007
    functionLinenumberEnd: 1007
    functionName: OnTestEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestEnd(const TestInfo& /*test_info*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestEventListeners
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1023,1
    - Dst: TestEventListeners
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1024,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1100
      start: 1021
    functionDepth: 0
    functionLinenumber: 1021
    functionLinenumberEnd: 1100
    functionName: TestEventListeners
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - TestEventListeners
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TestEventListeners '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestSuite
    - '&'
    - /*test_suite*/
    argTypes:
    - TestSuite
    constantsTouched: []
    func_position:
      end: 1008
      start: 1008
    functionDepth: 0
    functionLinenumber: 1008
    functionLinenumberEnd: 1008
    functionName: OnTestSuiteEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 377
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 377
    functionName: key
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * key() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - start
    argTypes:
    - TimeInMillis
    constantsTouched: []
    func_position:
      end: 466
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 466
    functionName: set_start_timestamp
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_start_timestamp(TimeInMillis start) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 539
      start: 539
    functionDepth: 0
    functionLinenumber: 539
    functionLinenumberEnd: 539
    functionName: test_suite_name
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * test_suite_name() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 355
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 355
    functionName: Setup
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual*
    signature: 'virtual Setup_should_be_spelled_SetUp * Setup() '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: failed_test_count
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:734,1
    - Dst: test_info_list
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:757,1
    - Dst: ad_hoc_test_result
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:734,1
    CyclomaticComplexity: 60
    EdgeCount: 60
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 876
      start: 671
    functionDepth: 0
    functionLinenumber: 671
    functionLinenumberEnd: 876
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - ad_hoc_test_result
    - failed_test_count
    - test_info_list
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TestSuite '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 898
      start: 898
    functionDepth: 0
    functionLinenumber: 898
    functionLinenumberEnd: 898
    functionName: SetUp
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void SetUp() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ScopedTrace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2078,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2079,1
    - Dst: PushTrace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2079,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2085
      start: 2070
    functionDepth: 0
    functionLinenumber: 2070
    functionLinenumberEnd: 2085
    functionName: ScopedTrace
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - ScopedTrace
    - Message
    - PushTrace
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ ScopedTrace '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 824
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 824
    functionName: TestReportableDisabled
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool TestReportableDisabled(const TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 818
      start: 816
    functionDepth: 0
    functionLinenumber: 816
    functionLinenumberEnd: 818
    functionName: TestFailed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool TestFailed(const TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestSuite
    - '&'
    - /*test_suite*/
    argTypes:
    - TestSuite
    constantsTouched: []
    func_position:
      end: 944
      start: 944
    functionDepth: 0
    functionLinenumber: 944
    functionLinenumberEnd: 944
    functionName: OnTestSuiteStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void OnTestSuiteStart(const TestSuite& /*test_suite*/) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTestNonCopyable
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:197,1
    - Dst: GTestNonCopyable
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 201
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 201
    functionName: GTestNonCopyable
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - GTestNonCopyable
    linkageType: ''
    returnType: class
    signature: 'class GTestNonCopyable '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 463
      start: 461
    functionDepth: 0
    functionLinenumber: 461
    functionLinenumberEnd: 463
    functionName: test_properties
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<TestProperty>& test_properties() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 490
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 490
    functionName: death_test_count
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int death_test_count() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 703
      start: 703
    functionDepth: 0
    functionLinenumber: 703
    functionLinenumberEnd: 703
    functionName: should_run
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool should_run() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 984
      start: 924
    functionDepth: 0
    functionLinenumber: 924
    functionLinenumberEnd: 984
    functionName: TestEventListener
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class TestEventListener '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AddEnvironment
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1345,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1379
      start: 1309
    functionDepth: 0
    functionLinenumber: 1309
    functionLinenumberEnd: 1379
    functionName: PopGTestTrace
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - AddEnvironment
    linkageType: ''
    returnType: void
    signature: 'void PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_); // Protects mutable
      state in *impl_. This is mutable as some const // methods need to lock it too.
      mutable internal::Mutex mutex_; // Opaque implementation object. This field
      is never changed once // the object is constructed. We don''t mark it as const
      here, as // doing so will cause a warning in the constructor of UnitTest. //
      Mutable state in *impl_ is protected by mutex_. internal::UnitTestImpl* impl_;
      // We disallow copying UnitTest. UnitTest(const UnitTest&) = delete; UnitTest&
      operator=(const UnitTest&) = delete; }; // A convenient wrapper for adding an
      environment for the test // program. // // You should call this before RUN_ALL_TESTS()
      is called, probably in // main(). If you use gtest_main, you need to call this
      before main() // starts for it to take effect. For example, you can define a
      global // variable like this: // // testing::Environment* const foo_env = //
      testing::AddGlobalTestEnvironment(new FooEnvironment); // // However, we strongly
      recommend you to write your own main() and // call AddGlobalTestEnvironment()
      there, as relying on initialization // of global variables makes the code harder
      to read and may cause // problems when you register multiple environments from
      different // translation units and the environments have dependencies among
      them // (remember that the compiler doesn''t guarantee the order in which //
      global variables from different translation units are initialized). inline Environment*
      AddGlobalTestEnvironment(Environment* env) { return UnitTest::GetInstance()->AddEnvironment(env);}//
      Initializes Google Test. This must be called before calling// RUN_ALL_TESTS().
      In particular, it parses a command line for the// flags that Google Test recognizes.
      Whenever a Google Test flag is// seen, it is removed from argv, and *argc is
      decremented.//// No value is returned. Instead, the Google Test flag variables
      are// updated.//// Calling the function for the second time has no user-visible
      effect.GTEST_API_ void InitGoogleTest(int* argc, char** argv); // This overloaded
      version can be used in Windows programs compiled in // UNICODE mode. GTEST_API_
      void InitGoogleTest(int* argc, wchar_t** argv); // This overloaded version can
      be used on Arduino/embedded platforms where // there is no argc/argv. GTEST_API_
      void InitGoogleTest(); namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1696,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1700
      start: 1695
    functionDepth: 0
    functionLinenumber: 1695
    functionLinenumberEnd: 1700
    functionName: GetParam
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - GTEST_CHECK_
    linkageType: ''
    returnType: ParamType
    signature: '[[nodiscard]] static const ParamType & GetParam() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CmpHelperEQ
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1412,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 4
    argNames:
    - lhs_expression
    - rhs_expression
    - lhs
    - rhs
    argTypes:
    - char*
    - char*
    - T1
    - T2
    constantsTouched: []
    func_position:
      end: 1413
      start: 1409
    functionDepth: 0
    functionLinenumber: 1409
    functionLinenumberEnd: 1413
    functionName: Compare
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - CmpHelperEQ
    linkageType: ''
    returnType: AssertionResult
    signature: 'AssertionResult Compare(const char* lhs_expression, const char* rhs_expression,
      const T1& lhs, const T2& rhs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 595
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 595
    functionName: is_reportable
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool is_reportable() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 598
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 598
    functionName: result
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestResult*
    signature: 'const TestResult * result() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CmpHelperEQ
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1433,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    argCount: 4
    argNames:
    - lhs_expression
    - rhs_expression
    - // Handle cases where '0' is used as a null pointer literal.
    - 'std::'
    - nullptr_t
    - /* lhs */
    - rhs
    argTypes:
    - char*
    - char*
    - nullptr_t
    - T*
    constantsTouched: []
    func_position:
      end: 1435
      start: 1428
    functionDepth: 0
    functionLinenumber: 1428
    functionLinenumberEnd: 1435
    functionName: Compare
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - CmpHelperEQ
    linkageType: ''
    returnType: AssertionResult
    signature: 'AssertionResult Compare( const char* lhs_expression, const char* rhs_expression,
      // Handle cases where ''0'' is used as a null pointer literal. std::nullptr_t
      /* lhs */, T* rhs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestSuite
    - '&'
    - /*test_suite*/
    argTypes:
    - TestSuite
    constantsTouched: []
    func_position:
      end: 966
      start: 966
    functionDepth: 0
    functionLinenumber: 966
    functionLinenumberEnd: 966
    functionName: OnTestSuiteEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void OnTestSuiteEnd(const TestSuite& /*test_suite*/) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CmpHelperEQ
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1412,1
    - Dst: CmpHelperEQ
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1424,1
    - Dst: CmpHelperEQ
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1433,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1436
      start: 1400
    functionDepth: 0
    functionLinenumber: 1400
    functionLinenumberEnd: 1436
    functionName: EqHelper
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - CmpHelperEQ
    linkageType: ''
    returnType: class
    signature: 'class EqHelper '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestResult
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:401,1
    - Dst: Failed
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:414,1
    - Dst: TestResult
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:404,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 519
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 519
    functionName: TestResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - Failed
    - TestResult
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TestResult '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 808
      start: 806
    functionDepth: 0
    functionLinenumber: 806
    functionLinenumberEnd: 808
    functionName: TestPassed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool TestPassed(const TestInfo* test_info) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 991
    functionDepth: 0
    functionLinenumber: 991
    functionLinenumberEnd: 1018
    functionName: EmptyTestEventListener
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class EmptyTestEventListener : public TestEventListener '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const TestInfo
    - '&'
    - /*test_info*/
    argTypes:
    - TestInfo
    constantsTouched: []
    func_position:
      end: 1004
      start: 1004
    functionDepth: 0
    functionLinenumber: 1004
    functionLinenumberEnd: 1004
    functionName: OnTestStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestStart(const TestInfo& /*test_info*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CmpHelperEQ
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:1424,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 4
    argNames:
    - lhs_expression
    - rhs_expression
    - lhs
    - rhs
    argTypes:
    - char*
    - char*
    - BiggestInt
    - BiggestInt
    constantsTouched: []
    func_position:
      end: 1425
      start: 1421
    functionDepth: 0
    functionLinenumber: 1421
    functionLinenumberEnd: 1425
    functionName: Compare
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - CmpHelperEQ
    linkageType: ''
    returnType: AssertionResult
    signature: 'static AssertionResult Compare(const char* lhs_expression, const char*
      rhs_expression, BiggestInt lhs, BiggestInt rhs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 908
      start: 892
    functionDepth: 0
    functionLinenumber: 892
    functionLinenumberEnd: 908
    functionName: Environment
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class Environment '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 254
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 254
    functionName: SetUpTestSuite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void SetUpTestSuite() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 262
      start: 262
    functionDepth: 0
    functionLinenumber: 262
    functionLinenumberEnd: 262
    functionName: TearDownTestSuite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void TearDownTestSuite() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 267
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 267
    functionName: TearDownTestCase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void TearDownTestCase() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 458
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 458
    functionName: test_part_results
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::vector<TestPartResult>& test_part_results() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - const UnitTest
    - '&'
    - /*unit_test*/
    argTypes:
    - UnitTest
    constantsTouched: []
    func_position:
      end: 1014
      start: 1014
    functionDepth: 0
    functionLinenumber: 1014
    functionLinenumberEnd: 1014
    functionName: OnEnvironmentsTearDownEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - const UnitTest
    - '&'
    - /*unit_test*/
    - int
    - /*iteration*/
    argTypes:
    - UnitTest
    - int
    constantsTouched: []
    func_position:
      end: 995
      start: 994
    functionDepth: 0
    functionLinenumber: 994
    functionLinenumberEnd: 995
    functionName: OnTestIterationStart
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestIterationStart(const UnitTest& /*unit_test*/, int /*iteration*/)
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - const UnitTest
    - '&'
    - /*unit_test*/
    - int
    - /*iteration*/
    argTypes:
    - UnitTest
    - int
    constantsTouched: []
    func_position:
      end: 1016
      start: 1015
    functionDepth: 0
    functionLinenumber: 1015
    functionLinenumberEnd: 1016
    functionName: OnTestIterationEnd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void OnTestIterationEnd(const UnitTest& /*unit_test*/, int /*iteration*/)
      override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_suite_name
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:543,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 543
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 543
    functionName: test_case_name
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - test_suite_name
    linkageType: ''
    returnType: char*
    signature: 'const char * test_case_name() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 554
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 554
    functionName: type_param
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * type_param() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 901
      start: 901
    functionDepth: 0
    functionLinenumber: 901
    functionLinenumberEnd: 901
    functionName: TearDown
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual void TearDown() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 334
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 334
    functionName: DeleteSelf_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void DeleteSelf_() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:374,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:374,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 390
      start: 368
    functionDepth: 0
    functionLinenumber: 368
    functionLinenumberEnd: 390
    functionName: TestProperty
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - key_
    - value_
    linkageType: ''
    returnType: class
    signature: 'class TestProperty '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 547
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 547
    functionName: name
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * name() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 750
      start: 750
    functionDepth: 0
    functionLinenumber: 750
    functionLinenumberEnd: 750
    functionName: ad_hoc_test_result
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: TestResult
    signature: 'const TestResult & ad_hoc_test_result() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - should
    argTypes:
    - bool
    constantsTouched: []
    func_position:
      end: 769
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 769
    functionName: set_should_run
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set_should_run(bool should) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetUnitTestImpl
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:187,1
    - Dst: GTestNonCopyable
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:200,1
    - Dst: GetIgnoredParameterizedTestSuites
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:190,1
    - Dst: GTestNonCopyable
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:197,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 203
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 203
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - GetIgnoredParameterizedTestSuites
    - GetUnitTestImpl
    - GTestNonCopyable
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetInstance
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h:2333,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2333
      start: 2333
    functionDepth: 0
    functionLinenumber: 2333
    functionLinenumberEnd: 2333
    functionName: RUN_ALL_TESTS
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached:
    - GetInstance
    linkageType: ''
    returnType: int
    signature: 'inline int RUN_ALL_TESTS() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - test_info
    argTypes:
    - TestInfo*
    constantsTouched: []
    func_position:
      end: 639
      start: 637
    functionDepth: 0
    functionLinenumber: 637
    functionLinenumberEnd: 639
    functionName: ClearTestResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'static void ClearTestResult(TestInfo* test_info) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:150,1
    - Dst: message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:193,1
    - Dst: swap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:175,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:170,1
    - Dst: AppendMessage
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:198,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:198,1
    - Dst: AppendMessage
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:206,1
    - Dst: Message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:206,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 227
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 227
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - AppendMessage
    - Message
    - swap
    - message
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:150,1
    - Dst: swap
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:175,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:170,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 177
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 177
    functionName: AssertionResult
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - swap
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ AssertionResult '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: message
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h:193,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 193
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 193
    functionName: failure_message
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h
    functionUses: []
    functionsReached:
    - message
    linkageType: ''
    returnType: char*
    signature: 'const char * failure_message() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 180
      start: 180
    functionDepth: 0
    functionLinenumber: 180
    functionLinenumberEnd: 180
    functionName: bool
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: operator
    signature: 'operator bool() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: message
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-assertion-result.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * message() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 159
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 159
    functionName: BaseTest
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class BaseTest : public ::testing::Test '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Range
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:229,1
    - Dst: Range
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:236,1
    - Dst: ValuesIn
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:304,1
    - Dst: Range
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:235,1
    - Dst: ValuesIn
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:297,1
    - Dst: const
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:304,1
    - Dst: ValuesIn
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:305,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 306
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 306
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h
    functionUses: []
    functionsReached:
    - Range
    - const
    - ValuesIn
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Values
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h:359,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 359
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 359
    functionName: Bool
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-param-test.h
    functionUses: []
    functionsReached:
    - Values
    linkageType: ''
    returnType: internal
    signature: 'inline internal ::ParamGenerator<bool> Bool() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintWithFallback
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:493,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 494
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 494
    functionName: os
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintWithFallback
    linkageType: ''
    returnType: ostream*
    signature: 'ostream * os ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:534,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - c
    - '::'
    - os
    argTypes:
    - char8_t
    - std*
    constantsTouched: []
    func_position:
      end: 535
      start: 531
    functionDepth: 0
    functionLinenumber: 531
    functionLinenumberEnd: 535
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(char8_t c, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:648,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - signed char*
    - std*
    constantsTouched: []
    func_position:
      end: 649
      start: 647
    functionDepth: 0
    functionLinenumber: 647
    functionLinenumberEnd: 649
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const signed char* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:669,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - char16_t*
    - std*
    constantsTouched: []
    func_position:
      end: 670
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 670
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(char16_t* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:651,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - signed char*
    - std*
    constantsTouched: []
    func_position:
      end: 652
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 652
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(signed char* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintU8StringTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:714,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 715
      start: 713
    functionDepth: 0
    functionLinenumber: 713
    functionLinenumberEnd: 715
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintU8StringTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const ::std::u8string& s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Format
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:395,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - value
    argTypes:
    - ToPrint*
    constantsTouched: []
    func_position:
      end: 396
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 396
    functionName: Format
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - Format
    linkageType: ''
    returnType: string
    signature: 'string Format(const ToPrint* value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1064,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - value
    - '::'
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 1065
      start: 1063
    functionDepth: 0
    functionLinenumber: 1063
    functionLinenumberEnd: 1065
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: 'static void Print(std::reference_wrapper<T> value, ::std::ostream*
      os) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: u32string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1128,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - str
    - '::'
    - os
    argTypes:
    - char32_t*
    - std*
    constantsTouched: []
    func_position:
      end: 1130
      start: 1124
    functionDepth: 0
    functionLinenumber: 1124
    functionLinenumberEnd: 1130
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - u32string
    linkageType: ''
    returnType: void
    signature: 'static void Print(const char32_t* str, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:185,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 187
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 187
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:654,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - unsigned char*
    - std*
    constantsTouched: []
    func_position:
      end: 655
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 655
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const unsigned char* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:674,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - char32_t*
    - std*
    constantsTouched: []
    func_position:
      end: 675
      start: 673
    functionDepth: 0
    functionLinenumber: 673
    functionLinenumberEnd: 675
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(char32_t* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - 'std::'
    - nullptr_t
    - '::'
    - os
    argTypes:
    - nullptr_t
    - std*
    constantsTouched: []
    func_position:
      end: 745
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 745
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(std::nullptr_t, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 761
      start: 759
    functionDepth: 0
    functionLinenumber: 759
    functionLinenumberEnd: 761
    functionName: VoidifyPointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void*
    signature: 'inline const void * VoidifyPointer(volatile const void* p) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PrintOrderingHelper
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:813,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - ordering
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 815
      start: 809
    functionDepth: 0
    functionLinenumber: 809
    functionLinenumberEnd: 815
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintOrderingHelper
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(std::strong_ordering ordering, std::ostream* os) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PrintTupleTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:839,1
    - Dst: GTEST_INTENTIONAL_CONST_COND_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:840,1
    - Dst: GTEST_INTENTIONAL_CONST_COND_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:842,1
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:845,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 847
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 847
    functionName: os
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTupleTo
    - Print
    - GTEST_INTENTIONAL_CONST_COND_POP_
    - GTEST_INTENTIONAL_CONST_COND_PUSH_
    linkageType: ''
    returnType: ostream*
    signature: 'ostream * os ) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: u16string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - str
    - '::'
    - os
    argTypes:
    - char16_t*
    - std*
    constantsTouched: []
    func_position:
      end: 1115
      start: 1109
    functionDepth: 0
    functionLinenumber: 1109
    functionLinenumberEnd: 1115
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - u16string
    linkageType: ''
    returnType: void
    signature: 'static void Print(const char16_t* str, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 227
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 227
    functionName: else
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: "struct PointerPrinter {\n  template <typename T>\n  static void PrintValue(T*
      p, ::std::ostream* os) {\n    if (p == nullptr) {\n      *os << \"NULL\";\n
      \   }"
    signature: 'struct PointerPrinter { template <typename T> static void PrintValue(T*
      p, ::std::ostream* os) { if (p == nullptr) { *os << "NULL"; } else '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:657,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - unsigned char*
    - std*
    constantsTouched: []
    func_position:
      end: 658
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 658
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(unsigned char* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:686,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - wchar_t*
    - std*
    constantsTouched: []
    func_position:
      end: 687
      start: 685
    functionDepth: 0
    functionLinenumber: 685
    functionLinenumberEnd: 687
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(wchar_t* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintWideStringTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:734,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 735
      start: 733
    functionDepth: 0
    functionLinenumber: 733
    functionLinenumberEnd: 735
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintWideStringTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PrintOrderingHelper
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:821,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 2
    argNames:
    - ordering
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 823
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 823
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintOrderingHelper
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(std::partial_ordering ordering, std::ostream*
      os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintStringTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:707,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 708
      start: 706
    functionDepth: 0
    functionLinenumber: 706
    functionLinenumberEnd: 708
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintStringTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const ::std::string& s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1168
    functionDepth: 0
    functionLinenumber: 1168
    functionLinenumberEnd: 1173
    functionName: os
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: ostream*
    signature: 'ostream * os ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 213
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 213
    functionName: else
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: "struct FunctionPointerPrinter {\n  template <typename T, typename
      = typename std::enable_if<\n                            std::is_function<T>::value>::type>\n
      \ static void PrintValue(T* p, ::std::ostream* os) {\n    if (p == nullptr)
      {\n      *os << \"NULL\";\n    }"
    signature: 'struct FunctionPointerPrinter { template <typename T, typename = typename
      std::enable_if< std::is_function<T>::value>::type> static void PrintValue(T*
      p, ::std::ostream* os) { if (p == nullptr) { *os << "NULL"; } else '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 181
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 181
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppropriateResolution
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:627,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - f
    - '::'
    - os
    argTypes:
    - float
    - std*
    constantsTouched: []
    func_position:
      end: 630
      start: 625
    functionDepth: 0
    functionLinenumber: 625
    functionLinenumberEnd: 630
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - AppropriateResolution
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(float f, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 758
      start: 758
    functionDepth: 0
    functionLinenumber: 758
    functionLinenumberEnd: 758
    functionName: VoidifyPointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void*
    signature: 'inline const void * VoidifyPointer(const void* p) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1154,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - str
    - '::'
    - os
    argTypes:
    - wchar_t*
    - std*
    constantsTouched: []
    func_position:
      end: 1155
      start: 1153
    functionDepth: 0
    functionLinenumber: 1153
    functionLinenumberEnd: 1155
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: void
    signature: 'static void Print(wchar_t* str, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppropriateResolution
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:634,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - d
    - '::'
    - os
    argTypes:
    - double
    - std*
    constantsTouched: []
    func_position:
      end: 637
      start: 632
    functionDepth: 0
    functionLinenumber: 632
    functionLinenumberEnd: 637
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - AppropriateResolution
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(double d, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:642,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - char*
    - std*
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(char* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintU16StringTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:721,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 722
      start: 720
    functionDepth: 0
    functionLinenumber: 720
    functionLinenumberEnd: 722
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintU16StringTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const ::std::u16string& s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintU32StringTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:727,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 728
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 728
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintU32StringTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const ::std::u32string& s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:889,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - value
    - '::'
    - os
    argTypes:
    - T
    - std*
    constantsTouched: []
    func_position:
      end: 890
      start: 880
    functionDepth: 0
    functionLinenumber: 880
    functionLinenumberEnd: 890
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'static void Print(const T& value, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UniversalPrint
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1036,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - value
    - '::'
    - os
    argTypes:
    - T
    - std*
    constantsTouched: []
    func_position:
      end: 1037
      start: 1030
    functionDepth: 0
    functionLinenumber: 1030
    functionLinenumberEnd: 1037
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - UniversalPrint
    linkageType: ''
    returnType: void
    signature: 'static void Print(const T& value, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - x
    - '::'
    - os
    argTypes:
    - bool
    - std*
    constantsTouched: []
    func_position:
      end: 513
      start: 511
    functionDepth: 0
    functionLinenumber: 511
    functionLinenumberEnd: 513
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(bool x, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:741,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - sp
    - '::'
    - os
    argTypes:
    - internal
    - std*
    constantsTouched: []
    func_position:
      end: 742
      start: 740
    functionDepth: 0
    functionLinenumber: 740
    functionLinenumberEnd: 742
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - string
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(internal::StringView sp, ::std::ostream* os) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: u8string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1097,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - str
    - '::'
    - os
    argTypes:
    - char8_t*
    - std*
    constantsTouched: []
    func_position:
      end: 1099
      start: 1093
    functionDepth: 0
    functionLinenumber: 1093
    functionLinenumberEnd: 1099
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - u8string
    linkageType: ''
    returnType: void
    signature: 'static void Print(const char8_t* str, ::std::ostream* os) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: wstring
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1144,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - str
    - '::'
    - os
    argTypes:
    - wchar_t*
    - std*
    constantsTouched: []
    func_position:
      end: 1146
      start: 1140
    functionDepth: 0
    functionLinenumber: 1140
    functionLinenumberEnd: 1146
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - wstring
    linkageType: ''
    returnType: void
    signature: 'static void Print(const wchar_t* str, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1212
      start: 1208
    functionDepth: 0
    functionLinenumber: 1208
    functionLinenumberEnd: 1212
    functionName: PrintToString
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: string
    signature: 'string PrintToString(const T& value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 258
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 258
    functionName: internal_stream_operator_without_lexical_name_lookup
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal_stream_operator_without_lexical_name_lookup '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:507,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - c
    - '::'
    - os
    argTypes:
    - char
    - std*
    constantsTouched: []
    func_position:
      end: 508
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 508
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(char c, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:528,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - c
    - '::'
    - os
    argTypes:
    - char16_t
    - std*
    constantsTouched: []
    func_position:
      end: 529
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 529
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(char16_t c, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintTo
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:663,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - s
    - '::'
    - os
    argTypes:
    - char8_t*
    - std*
    constantsTouched: []
    func_position:
      end: 664
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 664
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintTo
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(char8_t* s, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintOrderingHelper
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:826,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - ordering
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 827
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 827
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintOrderingHelper
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(std::weak_ordering ordering, std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PrintValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:364,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 365
      start: 354
    functionDepth: 0
    functionLinenumber: 354
    functionLinenumberEnd: 365
    functionName: os
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - PrintValue
    linkageType: ''
    returnType: ostream*
    signature: 'ostream * os ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Format
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:467,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - value
    - const T2
    - '&'
    - /* other_operand */
    argTypes:
    - T1
    - T2
    constantsTouched: []
    func_position:
      end: 468
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 468
    functionName: FormatForComparisonFailureMessage
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - Format
    linkageType: ''
    returnType: string
    signature: 'string FormatForComparisonFailureMessage(const T1& value, const T2&
      /* other_operand */) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1081,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    argCount: 2
    argNames:
    - str
    - '::'
    - os
    argTypes:
    - char*
    - std*
    constantsTouched: []
    func_position:
      end: 1083
      start: 1077
    functionDepth: 0
    functionLinenumber: 1077
    functionLinenumberEnd: 1083
    functionName: Print
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - string
    linkageType: ''
    returnType: void
    signature: 'static void Print(const char* str, ::std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:1160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1161
      start: 1159
    functionDepth: 0
    functionLinenumber: 1159
    functionLinenumberEnd: 1161
    functionName: os
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - Print
    linkageType: ''
    returnType: ostream*
    signature: 'ostream * os ) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h:749,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 2
    argNames:
    - info
    - os
    argTypes:
    - std
    - std*
    constantsTouched: []
    func_position:
      end: 750
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 750
    functionName: PrintTo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/gtest-printers.h
    functionUses: []
    functionsReached:
    - GetTypeName
    linkageType: ''
    returnType: void
    signature: 'inline void PrintTo(const std::type_info& info, std::ostream* os) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 941
      start: 941
    functionDepth: 0
    functionLinenumber: 941
    functionLinenumberEnd: 941
    functionName: pattern
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string& pattern() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fflush
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1053,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1053
      start: 1053
    functionDepth: 0
    functionLinenumber: 1053
    functionLinenumberEnd: 1053
    functionName: FlushInfoLog
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - fflush
    linkageType: ''
    returnType: void
    signature: 'inline void FlushInfoLog() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1565,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1565
      start: 1565
    functionDepth: 0
    functionLinenumber: 1565
    functionLinenumberEnd: 1565
    functionName: get
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pointer
    linkageType: ''
    returnType: T
    signature: 'const T & get() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1867
      start: 1867
    functionDepth: 0
    functionLinenumber: 1867
    functionLinenumberEnd: 1867
    functionName: Unlock
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Unlock() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1866
      start: 1866
    functionDepth: 0
    functionLinenumber: 1866
    functionLinenumberEnd: 1866
    functionName: Lock
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Lock() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1893
      start: 1893
    functionDepth: 0
    functionLinenumber: 1893
    functionLinenumberEnd: 1893
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T * pointer() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isupper
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1939,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1940
      start: 1938
    functionDepth: 0
    functionLinenumber: 1938
    functionLinenumberEnd: 1940
    functionName: IsUpper
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isupper
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsUpper(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tolower
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1963,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1964
      start: 1962
    functionDepth: 0
    functionLinenumber: 1962
    functionLinenumberEnd: 1964
    functionName: ToLower
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - tolower
    linkageType: ''
    returnType: char
    signature: 'inline char ToLower(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1894
      start: 1894
    functionDepth: 0
    functionLinenumber: 1894
    functionLinenumberEnd: 1894
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'const T * pointer() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isxdigit
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1942,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1943
      start: 1941
    functionDepth: 0
    functionLinenumber: 1941
    functionLinenumberEnd: 1943
    functionName: IsXDigit
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isxdigit
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsXDigit(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: toupper
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1966,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1967
      start: 1965
    functionDepth: 0
    functionLinenumber: 1965
    functionLinenumberEnd: 1967
    functionName: ToUpper
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - toupper
    linkageType: ''
    returnType: char
    signature: 'inline char ToUpper(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _wfopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2097,1
    - Dst: fopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2099,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 2
    argNames:
    - path
    - mode
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 2101
      start: 2091
    functionDepth: 0
    functionLinenumber: 2091
    functionLinenumberEnd: 2101
    functionName: FOpen
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - fopen
    - _wfopen
    linkageType: ''
    returnType: FILE*
    signature: 'inline FILE * FOpen(const char* path, const char* mode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1275
    functionDepth: 0
    functionLinenumber: 1275
    functionLinenumberEnd: 1279
    functionName: ThreadWithParamBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class ThreadWithParamBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1644,1
    - Dst: pthread_mutex_lock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1644,1
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1656,1
    - Dst: pthread_self
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1645,1
    - Dst: pthread_mutex_unlock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1656,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1662,1
    - Dst: pthread_equal
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1662,1
    - Dst: pthread_self
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1662,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1681
      start: 1640
    functionDepth: 0
    functionLinenumber: 1640
    functionLinenumberEnd: 1681
    functionName: MutexBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pthread_mutex_unlock
    - GTEST_CHECK_
    - pthread_self
    - pthread_equal
    - pthread_mutex_lock
    - GTEST_CHECK_POSIX_SUCCESS_
    linkageType: ''
    returnType: class
    signature: 'class MutexBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stat
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2023,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - path
    - buf
    argTypes:
    - char*
    - StatStruct*
    constantsTouched: []
    func_position:
      end: 2023
      start: 2023
    functionDepth: 0
    functionLinenumber: 2023
    functionLinenumberEnd: 2023
    functionName: Stat
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - stat
    linkageType: ''
    returnType: int
    signature: 'inline int Stat(const char* path, StatStruct* buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - string_view
    argTypes:
    - absl
    constantsTouched: []
    func_position:
      end: 937
      start: 937
    functionDepth: 0
    functionLinenumber: 937
    functionLinenumberEnd: 937
    functionName: RE
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: RE(const char* regex)
    signature: 'RE(const char* regex) : RE(absl::string_view(regex)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isxdigit
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1946,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char8_t
    constantsTouched: []
    func_position:
      end: 1947
      start: 1945
    functionDepth: 0
    functionLinenumber: 1945
    functionLinenumberEnd: 1947
    functionName: IsXDigit
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isxdigit
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsXDigit(char8_t ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocalBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1457,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1463
      start: 1448
    functionDepth: 0
    functionLinenumber: 1448
    functionLinenumberEnd: 1463
    functionName: ThreadLocalBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ThreadLocalBase
    linkageType: ''
    returnType: class
    signature: 'class ThreadLocalBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTestLog
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1034,1
    - Dst: GetStream
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1036,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1036
      start: 1029
    functionDepth: 0
    functionLinenumber: 1029
    functionLinenumberEnd: 1036
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GetStream
    - GTestLog
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ GTestLog '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - x
    argTypes:
    - To
    constantsTouched: []
    func_position:
      end: 1136
      start: 1134
    functionDepth: 0
    functionLinenumber: 1134
    functionLinenumberEnd: 1136
    functionName: ImplicitCast_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: To
    signature: 'To ImplicitCast_(To x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1253,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1255
      start: 1252
    functionDepth: 0
    functionLinenumber: 1252
    functionLinenumberEnd: 1255
    functionName: WaitForNotification
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - lock
    linkageType: ''
    returnType: void
    signature: 'void WaitForNotification() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Mutex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1384,1
    - Dst: Mutex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1385,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1411
      start: 1371
    functionDepth: 0
    functionLinenumber: 1371
    functionLinenumberEnd: 1411
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - Mutex
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Mutex '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isalnum
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1927,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1928
      start: 1926
    functionDepth: 0
    functionLinenumber: 1926
    functionLinenumberEnd: 1928
    functionName: IsAlNum
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isalnum
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsAlNum(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1833,1
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1835,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1844
      start: 1831
    functionDepth: 0
    functionLinenumber: 1831
    functionLinenumberEnd: 1844
    functionName: InstanceValueHolderFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    - value_
    linkageType: ''
    returnType: class
    signature: 'class InstanceValueHolderFactory : public ValueHolderFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:964,1
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:967,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 969
      start: 960
    functionDepth: 0
    functionLinenumber: 960
    functionLinenumberEnd: 969
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - Init
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ RE '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1566,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1566
      start: 1566
    functionDepth: 0
    functionLinenumber: 1566
    functionLinenumberEnd: 1566
    functionName: set
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pointer
    linkageType: ''
    returnType: void
    signature: 'void set(const T& value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: key_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1755,1
    - Dst: CreateKey
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1755,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 3
    argCount: 1
    argNames:
    - InstanceValueHolderFactory
    argTypes:
    - new
    constantsTouched: []
    func_position:
      end: 1756
      start: 1754
    functionDepth: 0
    functionLinenumber: 1754
    functionLinenumberEnd: 1756
    functionName: default_factory_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - CreateKey
    - key_
    linkageType: ''
    returnType: explicit
    signature: 'explicit ThreadLocal(const T& value) : key_(CreateKey()), default_factory_(new
      InstanceValueHolderFactory(value)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1835,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1836
      start: 1834
    functionDepth: 0
    functionLinenumber: 1834
    functionLinenumberEnd: 1836
    functionName: MakeNewHolder
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    linkageType: ''
    returnType: ValueHolder*
    signature: 'ValueHolder * MakeNewHolder() const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1892,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1892
      start: 1892
    functionDepth: 0
    functionLinenumber: 1892
    functionLinenumberEnd: 1892
    functionName: ThreadLocal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - value_
    linkageType: ''
    returnType: explicit
    signature: 'explicit ThreadLocal(const T& value) : value_(value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isdigit
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1930,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1931
      start: 1929
    functionDepth: 0
    functionLinenumber: 1929
    functionLinenumberEnd: 1931
    functionName: IsDigit
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isdigit
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsDigit(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _stricmp
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2053,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - s1
    - s2
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 2054
      start: 2052
    functionDepth: 0
    functionLinenumber: 2052
    functionLinenumberEnd: 2054
    functionName: StrCaseCmp
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - _stricmp
    linkageType: ''
    returnType: int
    signature: 'inline int StrCaseCmp(const char* s1, const char* s2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: chdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2089,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - dir
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 2089
      start: 2089
    functionDepth: 0
    functionLinenumber: 2089
    functionLinenumberEnd: 2089
    functionName: ChDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - chdir
    linkageType: ''
    returnType: int
    signature: 'inline int ChDir(const char* dir) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 921
      start: 919
    functionDepth: 0
    functionLinenumber: 919
    functionLinenumberEnd: 921
    functionName: Secret
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class Secret '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - pattern
    argTypes:
    - other
    constantsTouched: []
    func_position:
      end: 939
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 939
    functionName: RE
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: RE(const RE& other)
    signature: 'RE(const RE& other) : RE(other.pattern()) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultValueHolderFactory
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1607,1
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1608,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1614
      start: 1605
    functionDepth: 0
    functionLinenumber: 1605
    functionLinenumberEnd: 1614
    functionName: DefaultValueHolderFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    - DefaultValueHolderFactory
    linkageType: ''
    returnType: class
    signature: 'class DefaultValueHolderFactory : public ValueHolderFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - value_holder
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 1746
      start: 1744
    functionDepth: 0
    functionLinenumber: 1744
    functionLinenumberEnd: 1746
    functionName: DeleteThreadLocalValue
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void DeleteThreadLocalValue(void* value_holder) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: IsSpace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1971,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - str
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 1973
      start: 1969
    functionDepth: 0
    functionLinenumber: 1969
    functionLinenumberEnd: 1973
    functionName: StripTrailingSpaces
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - IsSpace
    linkageType: ''
    returnType: std
    signature: 'inline std ::string StripTrailingSpaces(std::string str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1777,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1777
      start: 1777
    functionDepth: 0
    functionLinenumber: 1777
    functionLinenumberEnd: 1777
    functionName: ValueHolder
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - value_
    linkageType: ''
    returnType: explicit
    signature: 'explicit ValueHolder(const T& value) : value_(value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2116
      start: 2116
    functionDepth: 0
    functionLinenumber: 2116
    functionLinenumberEnd: 2116
    functionName: Close
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - close
    linkageType: ''
    returnType: int
    signature: 'inline int Close(int fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2342
      start: 2338
    functionDepth: 0
    functionLinenumber: 2338
    functionLinenumberEnd: 2342
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1992,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 1992
      start: 1992
    functionDepth: 0
    functionLinenumber: 1992
    functionLinenumberEnd: 1992
    functionName: FileNo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - _fileno
    linkageType: ''
    returnType: int
    signature: 'inline int FileNo(FILE* file) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:983,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - str
    - re
    argTypes:
    - std
    - RE
    constantsTouched: []
    func_position:
      end: 984
      start: 982
    functionDepth: 0
    functionLinenumber: 982
    functionLinenumberEnd: 984
    functionName: PartialMatch
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - PartialMatch
    linkageType: ''
    returnType: bool
    signature: 'static bool PartialMatch(const ::std::string& str, const RE& re) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - thread
    argTypes:
    - void*
    constantsTouched: []
    func_position:
      end: 1290
      start: 1287
    functionDepth: 0
    functionLinenumber: 1287
    functionLinenumberEnd: 1290
    functionName: ThreadFuncWithCLinkage
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void*
    signature: 'inline void * ThreadFuncWithCLinkage(void* thread) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1506
      start: 1506
    functionDepth: 0
    functionLinenumber: 1506
    functionLinenumberEnd: 1506
    functionName: ThreadWithParam
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual ~ ThreadWithParam() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetValueOnCurrentThread
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1586,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1588
      start: 1584
    functionDepth: 0
    functionLinenumber: 1584
    functionLinenumberEnd: 1588
    functionName: GetOrCreateValue
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GetValueOnCurrentThread
    linkageType: ''
    returnType: T*
    signature: 'T * GetOrCreateValue() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 2
    argNames:
    - path
    - buf
    argTypes:
    - char*
    - StatStruct*
    constantsTouched: []
    func_position:
      end: 2012
      start: 2009
    functionDepth: 0
    functionLinenumber: 2009
    functionLinenumberEnd: 2012
    functionName: Stat
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int Stat(const char* path, StatStruct* buf) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isatty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2040,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2040
      start: 2040
    functionDepth: 0
    functionLinenumber: 2040
    functionLinenumberEnd: 2040
    functionName: DoIsATTY
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isatty
    linkageType: ''
    returnType: int
    signature: 'inline int DoIsATTY(int fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2134,1
    - Dst: getenv
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2137,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 14
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 2139
      start: 2124
    functionDepth: 0
    functionLinenumber: 2124
    functionLinenumberEnd: 2139
    functionName: GetEnv
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - getenv
    linkageType: ''
    returnType: char*
    signature: 'inline const char * GetEnv(const char* name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1592
      start: 1590
    functionDepth: 0
    functionLinenumber: 1590
    functionLinenumberEnd: 1592
    functionName: NewValueForCurrentThread
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ThreadLocalValueHolderBase*
    signature: 'ThreadLocalValueHolderBase * NewValueForCurrentThread() const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isxdigit
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1951,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char16_t
    constantsTouched: []
    func_position:
      end: 1952
      start: 1949
    functionDepth: 0
    functionLinenumber: 1949
    functionLinenumberEnd: 1952
    functionName: IsXDigit
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isxdigit
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsXDigit(char16_t ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rmdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2013,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - dir
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 2013
      start: 2013
    functionDepth: 0
    functionLinenumber: 2013
    functionLinenumberEnd: 2013
    functionName: RmDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - rmdir
    linkageType: ''
    returnType: int
    signature: 'inline int RmDir(const char* dir) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: stricmp
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2042,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - s1
    - s2
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 2043
      start: 2041
    functionDepth: 0
    functionLinenumber: 2041
    functionLinenumberEnd: 2043
    functionName: StrCaseCmp
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - stricmp
    linkageType: ''
    returnType: int
    signature: 'inline int StrCaseCmp(const char* s1, const char* s2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2354
      start: 2352
    functionDepth: 0
    functionLinenumber: 2352
    functionLinenumberEnd: 2354
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AutoHandle
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1200,1
    - Dst: lock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1245,1
    - Dst: AutoHandle
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1203,1
    - Dst: lock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1253,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1261
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1261
    functionName: AutoHandle
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - AutoHandle
    - lock
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ AutoHandle '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: func_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1513,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1513
      start: 1513
    functionDepth: 0
    functionLinenumber: 1513
    functionLinenumberEnd: 1513
    functionName: Run
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - func_
    linkageType: ''
    returnType: virtual
    signature: 'virtual void Run() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1791,1
    - Dst: pthread_key_create
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1792,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1787
    functionDepth: 0
    functionLinenumber: 1787
    functionLinenumberEnd: 1794
    functionName: CreateKey
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pthread_key_create
    - GTEST_CHECK_POSIX_SUCCESS_
    linkageType: ''
    returnType: pthread_key_t
    signature: 'static pthread_key_t CreateKey() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: freopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2104,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 2
    argCount: 3
    argNames:
    - path
    - mode
    - stream
    argTypes:
    - char*
    - char*
    - FILE*
    constantsTouched: []
    func_position:
      end: 2105
      start: 2103
    functionDepth: 0
    functionLinenumber: 2103
    functionLinenumberEnd: 2105
    functionName: FReopen
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - freopen
    linkageType: ''
    returnType: FILE*
    signature: 'inline FILE * FReopen(const char* path, const char* mode, FILE* stream) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: abort
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2149,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2149
      start: 2149
    functionDepth: 0
    functionLinenumber: 2149
    functionLinenumberEnd: 2149
    functionName: Abort
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - abort
    linkageType: ''
    returnType: void
    signature: '[[noreturn]] inline void Abort() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2021,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 2021
      start: 2021
    functionDepth: 0
    functionLinenumber: 2021
    functionLinenumberEnd: 2021
    functionName: FileNo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - fileno
    linkageType: ''
    returnType: int
    signature: 'inline int FileNo(FILE* file) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _isatty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2050,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2050
      start: 2050
    functionDepth: 0
    functionLinenumber: 2050
    functionLinenumberEnd: 2050
    functionName: DoIsATTY
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - _isatty
    linkageType: ''
    returnType: int
    signature: 'inline int DoIsATTY(int fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fdopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2106,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - fd
    - mode
    argTypes:
    - int
    - char*
    constantsTouched: []
    func_position:
      end: 2106
      start: 2106
    functionDepth: 0
    functionLinenumber: 2106
    functionLinenumberEnd: 2106
    functionName: FDOpen
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - fdopen
    linkageType: ''
    returnType: FILE*
    signature: 'inline FILE * FDOpen(int fd, const char* mode) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2007,1
    - Dst: stat
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2023,1
    - Dst: rmdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2028,1
    - Dst: S_ISDIR
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2030,1
    - Dst: GTEST_DISABLE_MSC_DEPRECATED_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2079,1
    - Dst: fclose
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2108,1
    - Dst: read
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2111,1
    - Dst: abort
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2149,1
    - Dst: getenv
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2134,1
    - Dst: isatty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2059,1
    - Dst: strcasecmp
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2061,1
    - Dst: DoIsATTY
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2071,1
    - Dst: strerror
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2121,1
    - Dst: getenv
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2137,1
    - Dst: write
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2114,1
    - Dst: _fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1992,1
    - Dst: rmdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2013,1
    - Dst: isatty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2040,1
    - Dst: _stricmp
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2053,1
    - Dst: stricmp
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2042,1
    - Dst: chdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2089,1
    - Dst: _wfopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2097,1
    - Dst: fopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2099,1
    - Dst: freopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2104,1
    - Dst: _stat
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1998,1
    - Dst: _fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1996,1
    - Dst: _rmdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1999,1
    - Dst: S_ISDIR
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2014,1
    - Dst: fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2021,1
    - Dst: _isatty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2050,1
    - Dst: fdopen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2106,1
    - Dst: close
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2116,1
    - Dst: GTEST_DISABLE_MSC_DEPRECATED_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2141,1
    CyclomaticComplexity: 98
    EdgeCount: 98
    ICount: 124
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2152
      start: 1981
    functionDepth: 0
    functionLinenumber: 1981
    functionLinenumberEnd: 2152
    functionName: posix
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - _wfopen
    - stat
    - stricmp
    - read
    - _stat
    - _rmdir
    - DoIsATTY
    - _stricmp
    - getenv
    - S_ISDIR
    - strerror
    - _isatty
    - write
    - isatty
    - fdopen
    - close
    - freopen
    - rmdir
    - chdir
    - strcasecmp
    - fclose
    - GTEST_DISABLE_MSC_DEPRECATED_PUSH_
    - _fileno
    - fopen
    - abort
    - fileno
    - GTEST_DISABLE_MSC_DEPRECATED_POP_
    linkageType: ''
    returnType: namespace
    signature: 'namespace posix '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1597
      start: 1597
    functionDepth: 0
    functionLinenumber: 1597
    functionLinenumberEnd: 1597
    functionName: ValueHolderFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual ~ ValueHolderFactory() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames:
    - StaticConstructorSelector
    - /*dummy*/
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1382
      start: 1382
    functionDepth: 0
    functionLinenumber: 1382
    functionLinenumberEnd: 1382
    functionName: Mutex
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: explicit
    signature: 'explicit Mutex(StaticConstructorSelector /*dummy*/) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1478
      start: 1468
    functionDepth: 0
    functionLinenumber: 1468
    functionLinenumberEnd: 1478
    functionName: ThreadLocalRegistry
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ ThreadLocalRegistry '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DoIsATTY
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2071,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2075
      start: 2066
    functionDepth: 0
    functionLinenumber: 2066
    functionLinenumberEnd: 2075
    functionName: IsATTY
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - DoIsATTY
    linkageType: ''
    returnType: int
    signature: 'inline int IsATTY(int fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1620,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1621
      start: 1619
    functionDepth: 0
    functionLinenumber: 1619
    functionLinenumberEnd: 1621
    functionName: MakeNewHolder
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    linkageType: ''
    returnType: ValueHolder*
    signature: 'ValueHolder * MakeNewHolder() const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2007,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 2007
      start: 2007
    functionDepth: 0
    functionLinenumber: 2007
    functionLinenumberEnd: 2007
    functionName: FileNo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - fileno
    linkageType: ''
    returnType: int
    signature: 'inline int FileNo(FILE* file) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - '*'
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 2026
      start: 2026
    functionDepth: 0
    functionLinenumber: 2026
    functionLinenumberEnd: 2026
    functionName: RmDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int RmDir(const char*) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1656,1
    - Dst: pthread_mutex_unlock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1656,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1657
      start: 1650
    functionDepth: 0
    functionLinenumber: 1650
    functionLinenumberEnd: 1657
    functionName: Unlock
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pthread_mutex_unlock
    - GTEST_CHECK_POSIX_SUCCESS_
    linkageType: ''
    returnType: void
    signature: 'void Unlock() '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_getspecific
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1798,1
    - Dst: pthread_setspecific
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1805,1
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1805,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1807
      start: 1796
    functionDepth: 0
    functionLinenumber: 1796
    functionLinenumberEnd: 1807
    functionName: GetOrCreateValue
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pthread_setspecific
    - pthread_getspecific
    - GTEST_CHECK_POSIX_SUCCESS_
    linkageType: ''
    returnType: T*
    signature: 'T * GetOrCreateValue() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:947,1
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:944,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 952
      start: 934
    functionDepth: 0
    functionLinenumber: 934
    functionLinenumberEnd: 952
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - PartialMatch
    - FullMatch
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ RE '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1512
      start: 1512
    functionDepth: 0
    functionLinenumber: 1512
    functionLinenumberEnd: 1512
    functionName: RunnableImpl
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual ~ RunnableImpl() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1662,1
    - Dst: pthread_self
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1662,1
    - Dst: pthread_equal
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1662,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1664
      start: 1661
    functionDepth: 0
    functionLinenumber: 1661
    functionLinenumberEnd: 1664
    functionName: AssertHeld
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pthread_self
    - pthread_equal
    - GTEST_CHECK_
    linkageType: ''
    returnType: void
    signature: 'void AssertHeld() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1895
      start: 1895
    functionDepth: 0
    functionLinenumber: 1895
    functionLinenumberEnd: 1895
    functionName: get
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T
    signature: 'const T & get() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrCreateValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1767,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1767
      start: 1767
    functionDepth: 0
    functionLinenumber: 1767
    functionLinenumberEnd: 1767
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GetOrCreateValue
    linkageType: ''
    returnType: T*
    signature: 'T * pointer() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1779
      start: 1779
    functionDepth: 0
    functionLinenumber: 1779
    functionLinenumberEnd: 1779
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T * pointer() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ValueHolderFactory
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1811,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1818
      start: 1809
    functionDepth: 0
    functionLinenumber: 1809
    functionLinenumberEnd: 1818
    functionName: ValueHolderFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolderFactory
    linkageType: ''
    returnType: class
    signature: 'class ValueHolderFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2341
      start: 2339
    functionDepth: 0
    functionLinenumber: 2339
    functionLinenumberEnd: 2341
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1458
      start: 1458
    functionDepth: 0
    functionLinenumber: 1458
    functionLinenumberEnd: 1458
    functionName: ThreadLocalBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: virtual
    signature: 'virtual ~ ThreadLocalBase() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1769,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1769
      start: 1769
    functionDepth: 0
    functionLinenumber: 1769
    functionLinenumberEnd: 1769
    functionName: get
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pointer
    linkageType: ''
    returnType: T
    signature: 'const T & get() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: islower
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1933,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1934
      start: 1932
    functionDepth: 0
    functionLinenumber: 1932
    functionLinenumberEnd: 1934
    functionName: IsLower
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - islower
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsLower(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fclose
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - fp
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 2108
      start: 2108
    functionDepth: 0
    functionLinenumber: 2108
    functionLinenumberEnd: 2108
    functionName: FClose
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - fclose
    linkageType: ''
    returnType: int
    signature: 'inline int FClose(FILE* fp) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 3
    argNames:
    - fd
    - buf
    - count
    argTypes:
    - int
    - void*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2112
      start: 2110
    functionDepth: 0
    functionLinenumber: 2110
    functionLinenumberEnd: 2112
    functionName: Read
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - read
    linkageType: ''
    returnType: int
    signature: 'inline int Read(int fd, void* buf, unsigned int count) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultValueHolderFactory
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1822,1
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1823,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1829
      start: 1820
    functionDepth: 0
    functionLinenumber: 1820
    functionLinenumberEnd: 1829
    functionName: DefaultValueHolderFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    - DefaultValueHolderFactory
    linkageType: ''
    returnType: class
    signature: 'class DefaultValueHolderFactory : public ValueHolderFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isspace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1936,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1937
      start: 1935
    functionDepth: 0
    functionLinenumber: 1935
    functionLinenumberEnd: 1937
    functionName: IsSpace
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isspace
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsSpace(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - st
    argTypes:
    - StatStruct
    constantsTouched: []
    func_position:
      end: 2000
      start: 2000
    functionDepth: 0
    functionLinenumber: 2000
    functionLinenumberEnd: 2000
    functionName: IsDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsDir(const StatStruct& st) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2114,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 3
    argNames:
    - fd
    - buf
    - count
    argTypes:
    - int
    - void*
    - unsigned int
    constantsTouched: []
    func_position:
      end: 2115
      start: 2113
    functionDepth: 0
    functionLinenumber: 2113
    functionLinenumberEnd: 2115
    functionName: Write
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - write
    linkageType: ''
    returnType: int
    signature: 'inline int Write(int fd, const void* buf, unsigned int count) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 2355
      start: 2351
    functionDepth: 0
    functionLinenumber: 2351
    functionLinenumberEnd: 2355
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _stat
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1998,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - path
    - buf
    argTypes:
    - char*
    - StatStruct*
    constantsTouched: []
    func_position:
      end: 1998
      start: 1998
    functionDepth: 0
    functionLinenumber: 1998
    functionLinenumberEnd: 1998
    functionName: Stat
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - _stat
    linkageType: ''
    returnType: int
    signature: 'inline int Stat(const char* path, StatStruct* buf) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: func_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1331,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1332
      start: 1329
    functionDepth: 0
    functionLinenumber: 1329
    functionLinenumberEnd: 1332
    functionName: Run
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - func_
    linkageType: ''
    returnType: void
    signature: 'void Run() override '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1769,1
    - Dst: pointer
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1770,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1776,1
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1776,1
    - Dst: pthread_setspecific
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1805,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1833,1
    - Dst: ValueHolderFactory
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1811,1
    - Dst: CreateKey
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1755,1
    - Dst: pthread_key_delete
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1764,1
    - Dst: GetOrCreateValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1767,1
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1791,1
    - Dst: ThreadLocal
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1752,1
    - Dst: ThreadLocal
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1758,1
    - Dst: pthread_getspecific
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1760,1
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1764,1
    - Dst: DefaultValueHolderFactory
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1822,1
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1823,1
    - Dst: DeleteThreadLocalValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1760,1
    - Dst: GetOrCreateValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1768,1
    - Dst: pthread_getspecific
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1798,1
    - Dst: pthread_key_create
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1792,1
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1805,1
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1835,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1777,1
    - Dst: key_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1755,1
    CyclomaticComplexity: 30
    EdgeCount: 30
    ICount: 70
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1852
      start: 1750
    functionDepth: 0
    functionLinenumber: 1750
    functionLinenumberEnd: 1852
    functionName: ThreadLocal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - CreateKey
    - GetOrCreateValue
    - DefaultValueHolderFactory
    - DeleteThreadLocalValue
    - GTEST_CHECK_POSIX_SUCCESS_
    - pthread_getspecific
    - ThreadLocal
    - value_
    - pointer
    - pthread_setspecific
    - pthread_key_create
    - pthread_key_delete
    - ValueHolderFactory
    - ValueHolder
    - key_
    linkageType: ''
    returnType: GTEST_API_
    signature: 'GTEST_API_ ThreadLocal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _rmdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1999,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - dir
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 1999
      start: 1999
    functionDepth: 0
    functionLinenumber: 1999
    functionLinenumberEnd: 1999
    functionName: RmDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - _rmdir
    linkageType: ''
    returnType: int
    signature: 'inline int RmDir(const char* dir) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Mutex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1700,1
    - Dst: Mutex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1704,1
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1701,1
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1704,1
    - Dst: pthread_mutex_init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1701,1
    - Dst: pthread_mutex_destroy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1704,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1709
      start: 1698
    functionDepth: 0
    functionLinenumber: 1698
    functionLinenumberEnd: 1709
    functionName: MutexBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pthread_mutex_destroy
    - GTEST_CHECK_POSIX_SUCCESS_
    - Mutex
    - pthread_mutex_init
    linkageType: ''
    returnType: class
    signature: 'class Mutex : public MutexBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ValueHolderFactory
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1596,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1603
      start: 1594
    functionDepth: 0
    functionLinenumber: 1594
    functionLinenumberEnd: 1603
    functionName: ValueHolderFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolderFactory
    linkageType: ''
    returnType: class
    signature: 'class ValueHolderFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mutex_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1426,1
    - Dst: GTestMutexLock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1428,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1435
      start: 1424
    functionDepth: 0
    functionLinenumber: 1424
    functionLinenumberEnd: 1435
    functionName: GTestMutexLock
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GTestMutexLock
    - mutex_
    linkageType: ''
    returnType: class
    signature: 'class GTestMutexLock '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrCreateValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1563,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1563
      start: 1563
    functionDepth: 0
    functionLinenumber: 1563
    functionLinenumberEnd: 1563
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GetOrCreateValue
    linkageType: ''
    returnType: T*
    signature: 'T * pointer() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1823,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1823
      start: 1823
    functionDepth: 0
    functionLinenumber: 1823
    functionLinenumberEnd: 1823
    functionName: MakeNewHolder
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    linkageType: ''
    returnType: ValueHolder*
    signature: 'ValueHolder * MakeNewHolder() const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrCreateValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1564,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1564
      start: 1564
    functionDepth: 0
    functionLinenumber: 1564
    functionLinenumberEnd: 1564
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GetOrCreateValue
    linkageType: ''
    returnType: T*
    signature: 'const T * pointer() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1896
      start: 1896
    functionDepth: 0
    functionLinenumber: 1896
    functionLinenumberEnd: 1896
    functionName: set
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void set(const T& value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: S_ISDIR
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2030,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - st
    argTypes:
    - StatStruct
    constantsTouched: []
    func_position:
      end: 2030
      start: 2030
    functionDepth: 0
    functionLinenumber: 2030
    functionLinenumberEnd: 2030
    functionName: IsDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - S_ISDIR
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsDir(const StatStruct& st) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1740
      start: 1737
    functionDepth: 0
    functionLinenumber: 1737
    functionLinenumberEnd: 1740
    functionName: ThreadLocalValueHolderBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ ThreadLocalValueHolderBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - int
    - /* fd */
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2048
      start: 2048
    functionDepth: 0
    functionLinenumber: 2048
    functionLinenumberEnd: 2048
    functionName: DoIsATTY
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'inline int DoIsATTY(int /* fd */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strerror
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - errnum
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2121
      start: 2121
    functionDepth: 0
    functionLinenumber: 2121
    functionLinenumberEnd: 2121
    functionName: StrError
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - strerror
    linkageType: ''
    returnType: char*
    signature: 'inline const char * StrError(int errnum) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrCreateValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1768,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1768
      start: 1768
    functionDepth: 0
    functionLinenumber: 1768
    functionLinenumberEnd: 1768
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GetOrCreateValue
    linkageType: ''
    returnType: T*
    signature: 'const T * pointer() const '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_POSIX_SUCCESS_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1324,1
    - Dst: pthread_join
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1324,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1327
      start: 1322
    functionDepth: 0
    functionLinenumber: 1322
    functionLinenumberEnd: 1327
    functionName: Join
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pthread_join
    - GTEST_CHECK_POSIX_SUCCESS_
    linkageType: ''
    returnType: void
    signature: 'void Join() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1608,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1608
      start: 1608
    functionDepth: 0
    functionLinenumber: 1608
    functionLinenumberEnd: 1608
    functionName: MakeNewHolder
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    linkageType: ''
    returnType: ValueHolder*
    signature: 'ValueHolder * MakeNewHolder() const override '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _fileno
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1996,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - file
    argTypes:
    - FILE*
    constantsTouched: []
    func_position:
      end: 1996
      start: 1996
    functionDepth: 0
    functionLinenumber: 1996
    functionLinenumberEnd: 1996
    functionName: FileNo
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - _fileno
    linkageType: ''
    returnType: int
    signature: 'inline int FileNo(FILE* file) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1574,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1574
      start: 1574
    functionDepth: 0
    functionLinenumber: 1574
    functionLinenumberEnd: 1574
    functionName: ValueHolder
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - value_
    linkageType: ''
    returnType: explicit
    signature: 'explicit ValueHolder(const T& value) : value_(value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1444
      start: 1441
    functionDepth: 0
    functionLinenumber: 1441
    functionLinenumberEnd: 1444
    functionName: ThreadLocalValueHolderBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class ThreadLocalValueHolderBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1868
      start: 1868
    functionDepth: 0
    functionLinenumber: 1868
    functionLinenumberEnd: 1868
    functionName: AssertHeld
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void AssertHeld() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mutex_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1718,1
    - Dst: GTestMutexLock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1720,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1727
      start: 1716
    functionDepth: 0
    functionLinenumber: 1716
    functionLinenumberEnd: 1727
    functionName: GTestMutexLock
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GTestMutexLock
    - mutex_
    linkageType: ''
    returnType: class
    signature: 'class GTestMutexLock '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadLocal
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1891,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1892,1
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1891,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1900
      start: 1889
    functionDepth: 0
    functionLinenumber: 1889
    functionLinenumberEnd: 1900
    functionName: ThreadLocal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - value_
    - ThreadLocal
    linkageType: ''
    returnType: GTEST_API_
    signature: 'GTEST_API_ ThreadLocal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:947,1
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:944,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:955,1
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:964,1
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:967,1
    - Dst: RE
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:970,1
    - Dst: GTestLog
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1034,1
    - Dst: GetStream
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1036,1
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:983,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1005,1
    - Dst: fflush
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1053,1
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:980,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 56
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 902
    functionDepth: 0
    functionLinenumber: 902
    functionLinenumberEnd: 1107
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - GetStream
    - fflush
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - GTestLog
    - PartialMatch
    - FullMatch
    - RE
    - Init
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 973
      start: 973
    functionDepth: 0
    functionLinenumber: 973
    functionLinenumberEnd: 973
    functionName: pattern
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * pattern() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1245,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1248
      start: 1205
    functionDepth: 0
    functionLinenumber: 1205
    functionLinenumberEnd: 1248
    functionName: Get
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - lock
    linkageType: ''
    returnType: Handle
    signature: 'Handle Get() const; void Reset(); void Reset(Handle handle); private:
      // Returns true if and only if the handle is a valid handle object that can
      be // closed. bool IsCloseable() const; Handle handle_; AutoHandle(const AutoHandle&)
      = delete; AutoHandle& operator=(const AutoHandle&) = delete; };#endif#if GTEST_HAS_NOTIFICATION_//
      Notification has already been imported into the namespace.// Nothing to do here.#elseGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251
      \/* class A needs to have dll-interface to be used by clients of class B */)//
      Allows a controller thread to pause execution of newly created// threads until
      notified. Instances of this class must be created// and destroyed in the controller
      thread.//// This class is only for testing Google Test''s own constructs. Do
      not// use it in user tests, either directly or indirectly.// TODO(b/203539622):
      Replace unconditionally with absl::Notification.class GTEST_API_ Notification
      { public: Notification() : notified_(false) {} Notification(const Notification&)
      = delete; Notification& operator=(const Notification&) = delete; // Notifies
      all threads created with this notification to start. Must // be called from
      the controller thread. void Notify() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pointer
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1770,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1770
      start: 1770
    functionDepth: 0
    functionLinenumber: 1770
    functionLinenumberEnd: 1770
    functionName: set
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - pointer
    linkageType: ''
    returnType: void
    signature: 'void set(const T& value) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isxdigit
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1955,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char32_t
    constantsTouched: []
    func_position:
      end: 1956
      start: 1953
    functionDepth: 0
    functionLinenumber: 1953
    functionLinenumberEnd: 1956
    functionName: IsXDigit
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isxdigit
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsXDigit(char32_t ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isxdigit
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1959,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ch
    argTypes:
    - wchar_t
    constantsTouched: []
    func_position:
      end: 1960
      start: 1957
    functionDepth: 0
    functionLinenumber: 1957
    functionLinenumberEnd: 1960
    functionName: IsXDigit
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isxdigit
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsXDigit(wchar_t ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: S_ISDIR
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2014,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - st
    argTypes:
    - StatStruct
    constantsTouched: []
    func_position:
      end: 2014
      start: 2014
    functionDepth: 0
    functionLinenumber: 2014
    functionLinenumberEnd: 2014
    functionName: IsDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - S_ISDIR
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsDir(const StatStruct& st) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1884
      start: 1881
    functionDepth: 0
    functionLinenumber: 1881
    functionLinenumberEnd: 1884
    functionName: GTestMutexLock
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class GTestMutexLock '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1052
      start: 1052
    functionDepth: 0
    functionLinenumber: 1052
    functionLinenumberEnd: 1052
    functionName: LogToStderr
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'inline void LogToStderr() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Mutex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1865,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1869
      start: 1863
    functionDepth: 0
    functionLinenumber: 1863
    functionLinenumberEnd: 1869
    functionName: Mutex
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - Mutex
    linkageType: ''
    returnType: class
    signature: 'class Mutex '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:947,1
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:944,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:955,1
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:964,1
    - Dst: Init
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:967,1
    - Dst: RE
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:970,1
    - Dst: GTestLog
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1034,1
    - Dst: GetStream
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1036,1
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:983,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1005,1
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:980,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1043
      start: 914
    functionDepth: 0
    functionLinenumber: 914
    functionLinenumberEnd: 1043
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - GetStream
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - GTestLog
    - PartialMatch
    - FullMatch
    - RE
    - Init
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:980,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - str
    - re
    argTypes:
    - std
    - RE
    constantsTouched: []
    func_position:
      end: 981
      start: 979
    functionDepth: 0
    functionLinenumber: 979
    functionLinenumberEnd: 981
    functionName: FullMatch
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - FullMatch
    linkageType: ''
    returnType: bool
    signature: 'static bool FullMatch(const ::std::string& str, const RE& re) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: default_factory_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1559,1
    - Dst: InstanceValueHolderFactory
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1559,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    constantsTouched: []
    func_position:
      end: 1559
      start: 1558
    functionDepth: 0
    functionLinenumber: 1558
    functionLinenumberEnd: 1559
    functionName: ThreadLocal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - default_factory_
    - InstanceValueHolderFactory
    linkageType: ''
    returnType: explicit
    signature: 'explicit ThreadLocal(const T& value) : default_factory_(new InstanceValueHolderFactory(value)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rmdir
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2028,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - dir
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 2028
      start: 2028
    functionDepth: 0
    functionLinenumber: 2028
    functionLinenumberEnd: 2028
    functionName: RmDir
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - rmdir
    linkageType: ''
    returnType: int
    signature: 'inline int RmDir(const char* dir) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1618,1
    - Dst: ValueHolder
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1620,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1629
      start: 1616
    functionDepth: 0
    functionLinenumber: 1616
    functionLinenumberEnd: 1629
    functionName: InstanceValueHolderFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ValueHolder
    - value_
    linkageType: ''
    returnType: class
    signature: 'class InstanceValueHolderFactory : public ValueHolderFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FullMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:944,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - str
    - re
    argTypes:
    - absl
    - RE
    constantsTouched: []
    func_position:
      end: 945
      start: 943
    functionDepth: 0
    functionLinenumber: 943
    functionLinenumberEnd: 945
    functionName: FullMatch
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - FullMatch
    linkageType: ''
    returnType: bool
    signature: 'static bool FullMatch(absl::string_view str, const RE& re) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isatty
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2059,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    constantsTouched: []
    func_position:
      end: 2059
      start: 2059
    functionDepth: 0
    functionLinenumber: 2059
    functionLinenumberEnd: 2059
    functionName: DoIsATTY
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isatty
    linkageType: ''
    returnType: int
    signature: 'inline int DoIsATTY(int fd) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PartialMatch
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:947,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - str
    - re
    argTypes:
    - absl
    - RE
    constantsTouched: []
    func_position:
      end: 948
      start: 946
    functionDepth: 0
    functionLinenumber: 946
    functionLinenumberEnd: 948
    functionName: PartialMatch
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - PartialMatch
    linkageType: ''
    returnType: bool
    signature: 'static bool PartialMatch(absl::string_view str, const RE& re) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ThreadWithParamBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1491,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1496
      start: 1480
    functionDepth: 0
    functionLinenumber: 1480
    functionLinenumberEnd: 1496
    functionName: ThreadWithParamBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - ThreadWithParamBase
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ ThreadWithParamBase '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1576
      start: 1576
    functionDepth: 0
    functionLinenumber: 1576
    functionLinenumberEnd: 1576
    functionName: pointer
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: T*
    signature: 'T * pointer() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: isalpha
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:1924,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ch
    argTypes:
    - char
    constantsTouched: []
    func_position:
      end: 1925
      start: 1923
    functionDepth: 0
    functionLinenumber: 1923
    functionLinenumberEnd: 1925
    functionName: IsAlpha
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - isalpha
    linkageType: ''
    returnType: bool
    signature: 'inline bool IsAlpha(char ch) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcasecmp
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:2061,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 2
    argNames:
    - s1
    - s2
    argTypes:
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 2062
      start: 2060
    functionDepth: 0
    functionLinenumber: 2060
    functionLinenumberEnd: 2062
    functionName: StrCaseCmp
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-port.h
    functionUses: []
    functionsReached:
    - strcasecmp
    linkageType: ''
    returnType: int
    signature: 'inline int StrCaseCmp(const char* s1, const char* s2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:70,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - regex
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 71
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 71
    functionName: MakeDeathTestMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - ContainsRegex
    linkageType: ''
    returnType: Matcher
    signature: 'inline Matcher < const ::std::string&> MakeDeathTestMatcher( const
      ::std::string& regex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - '::'
    - regex
    argTypes:
    - testing
    constantsTouched: []
    func_position:
      end: 64
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 64
    functionName: MakeDeathTestMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - ContainsRegex
    linkageType: ''
    returnType: Matcher
    signature: 'inline Matcher < const ::std::string&> MakeDeathTestMatcher( ::testing::internal::RE
      regex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: test_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:116,1
    - Dst: ReturnSentinel
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:117,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 123
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 123
    functionName: ReturnSentinel
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - ReturnSentinel
    - test_
    linkageType: ''
    returnType: class
    signature: 'class ReturnSentinel '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 180
    functionName: DeathTestFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class DeathTestFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 187
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 187
    functionName: DefaultDeathTestFactory
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class DefaultDeathTestFactory : public DeathTestFactory '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: file_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: index_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: write_fd_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: line_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: InternalRunDeathTestFlag
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:276,1
    - Dst: Close
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 278
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 278
    functionName: InternalRunDeathTestFlag
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - write_fd_
    - line_
    - InternalRunDeathTestFlag
    - file_
    - Close
    - index_
    linkageType: ''
    returnType: class
    signature: 'class InternalRunDeathTestFlag '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 280
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 280
    functionName: file
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string& file() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 281
      start: 281
    functionDepth: 0
    functionLinenumber: 281
    functionLinenumberEnd: 281
    functionName: line
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int line() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:63,1
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:66,1
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:70,1
    - Dst: DeathTest
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:110,1
    - Dst: ReturnSentinel
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:117,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:171,1
    - Dst: test_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:116,1
    - Dst: file_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: InternalRunDeathTestFlag
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:276,1
    - Dst: Close
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:277,1
    - Dst: index_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:82,1
    - Dst: write_fd_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: line_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 303
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 303
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - write_fd_
    - line_
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - file_
    - InternalRunDeathTestFlag
    - ReturnSentinel
    - Close
    - ContainsRegex
    - index_
    - test_
    - DeathTest
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:63,1
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:66,1
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:70,1
    - Dst: DeathTest
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:110,1
    - Dst: ReturnSentinel
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:117,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:171,1
    - Dst: test_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:116,1
    - Dst: file_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: InternalRunDeathTestFlag
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:276,1
    - Dst: Close
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:277,1
    - Dst: index_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:82,1
    - Dst: write_fd_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    - Dst: line_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:274,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 302
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 302
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - write_fd_
    - line_
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - file_
    - InternalRunDeathTestFlag
    - ReturnSentinel
    - Close
    - ContainsRegex
    - index_
    - test_
    - DeathTest
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ContainsRegex
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:66,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - regex
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 67
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 67
    functionName: MakeDeathTestMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - ContainsRegex
    linkageType: ''
    returnType: Matcher
    signature: 'inline Matcher < const ::std::string&> MakeDeathTestMatcher(const
      char* regex) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DeathTest
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:110,1
    - Dst: ReturnSentinel
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:117,1
    - Dst: test_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h:116,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 169
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 169
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached:
    - ReturnSentinel
    - test_
    - DeathTest
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ DeathTest '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 282
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 282
    functionName: index
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int index() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 283
      start: 283
    functionDepth: 0
    functionLinenumber: 283
    functionLinenumberEnd: 283
    functionName: write_fd
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: 'int write_fd() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - matcher
    argTypes:
    - Matcher
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: MakeDeathTestMatcher
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Matcher
    signature: 'inline Matcher < const ::std::string&> MakeDeathTestMatcher( Matcher<const
      ::std::string&> matcher) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: String
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-string.h:167,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 175
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 175
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-string.h
    functionUses: []
    functionsReached:
    - String
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: String
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-string.h:167,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 174
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 174
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-string.h
    functionUses: []
    functionsReached:
    - String
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: String
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-string.h:167,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 168
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 168
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-string.h
    functionUses: []
    functionsReached:
    - String
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ String '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: __cxa_demangle
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:99,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:114,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:66,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:112,1
    - Dst: CanonicalizeForStdLibVersioning
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:102,1
    - Dst: typeid
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:130,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:62,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:82,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:63,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:66,1
    - Dst: free
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:101,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:130,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 93
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 217
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 217
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h
    functionUses: []
    functionsReached:
    - typeid
    - CanonicalizeForStdLibVersioning
    - GetTypeName
    - free
    - strlen
    - __cxa_demangle
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:63,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:62,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:66,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:66,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:82,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - s
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 86
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 86
    functionName: CanonicalizeForStdLibVersioning
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h
    functionUses: []
    functionsReached:
    - strlen
    linkageType: ''
    returnType: std
    signature: 'inline std ::string CanonicalizeForStdLibVersioning(std::string s) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: __cxa_demangle
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:99,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:114,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:66,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:112,1
    - Dst: CanonicalizeForStdLibVersioning
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:102,1
    - Dst: typeid
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:130,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:62,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:82,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:63,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:66,1
    - Dst: free
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:101,1
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:130,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 87
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 212
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 212
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h
    functionUses: []
    functionsReached:
    - typeid
    - CanonicalizeForStdLibVersioning
    - GetTypeName
    - free
    - strlen
    - __cxa_demangle
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetTypeName
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:130,1
    - Dst: typeid
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 134
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 134
    functionName: GetTypeName
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h
    functionUses: []
    functionsReached:
    - typeid
    - GetTypeName
    linkageType: ''
    returnType: string
    signature: 'string GetTypeName() '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: free
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:101,1
    - Dst: __cxa_demangle
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:99,1
    - Dst: CanonicalizeForStdLibVersioning
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:102,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:112,1
    - Dst: strlen
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h:114,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 18
    argCount: 1
    argNames:
    - type
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 120
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 120
    functionName: GetTypeName
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h
    functionUses: []
    functionsReached:
    - free
    - strlen
    - CanonicalizeForStdLibVersioning
    - __cxa_demangle
    linkageType: ''
    returnType: std
    signature: 'inline std ::string GetTypeName(const std::type_info& type) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 90
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 90
    functionName: string
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: std
    signature: 'const std ::string& string() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - FilePath
    constantsTouched: []
    func_position:
      end: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    functionName: Set
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Set(const FilePath& rhs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pathname_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h:75,1
    - Dst: Normalize
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h:76,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - pathname
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 77
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 77
    functionName: FilePath
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h
    functionUses: []
    functionsReached:
    - Normalize
    - move
    - pathname_
    linkageType: ''
    returnType: explicit
    signature: 'explicit FilePath(std::string pathname) : pathname_(std::move(pathname)) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    functionName: IsEmpty
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool IsEmpty() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - pathname_
    argTypes:
    - rhs
    constantsTouched: []
    func_position:
      end: 72
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 72
    functionName: pathname_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FilePath(const FilePath& rhs)
    signature: 'FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    functionName: c_str
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: char*
    signature: 'const char * c_str() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ReinterpretBits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 306
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 306
    functionName: Infinity
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - ReinterpretBits
    linkageType: ''
    returnType: RawType
    signature: 'static RawType Infinity() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AlwaysTrue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:814,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 814
      start: 814
    functionDepth: 0
    functionLinenumber: 814
    functionLinenumberEnd: 814
    functionName: AlwaysFalse
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - AlwaysTrue
    linkageType: ''
    returnType: bool
    signature: 'inline bool AlwaysFalse() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1095
      start: 1095
    functionDepth: 0
    functionLinenumber: 1095
    functionLinenumberEnd: 1095
    functionName: end
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: const_iterator
    signature: 'const_iterator end() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1324
      start: 1319
    functionDepth: 0
    functionLinenumber: 1319
    functionLinenumberEnd: 1324
    functionName: NeverThrown
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: class
    signature: 'class NeverThrown '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - from
    - to
    argTypes:
    - T
    - U*
    constantsTouched: []
    func_position:
      end: 1032
      start: 1030
    functionDepth: 0
    functionLinenumber: 1030
    functionLinenumberEnd: 1032
    functionName: CopyArray
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void CopyArray(const T& from, U* to) '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:301,1
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:373,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:464,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:504,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:521,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:523,1
    - Dst: fflush
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:586,1
    - Dst: IsSpace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:631,1
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:639,1
    - Dst: GenerateNamesRecursively
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:666,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:622,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:162,1
    - Dst: GetTypeId
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:409,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:469,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:525,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:568,1
    - Dst: fprintf
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:582,1
    - Dst: CodeLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:589,1
    - Dst: GetName
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:652,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:585,1
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:627,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:653,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:640,1
    - Dst: GenerateNamesRecursively
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:663,1
    - Dst: AppendUserMessage
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:143,1
    - Dst: ReinterpretBits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:306,1
    - Dst: exponent_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:372,1
    - Dst: TestFactoryBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:435,1
    - Dst: TypedTestSuitePState
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:574,1
    - Dst: Abort
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:587,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:599,1
    - Dst: IgnoredValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:139,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:148,1
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:292,1
    - Dst: fraction_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    - Dst: is_nan
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:338,1
    - Dst: DistanceBetweenSignAndMagnitudeNumbers
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:340,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:465,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:479,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:500,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:502,1
    - Dst: Tail
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:668,1
    CyclomaticComplexity: 81
    EdgeCount: 81
    ICount: 197
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 670
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 670
    functionName: IgnoredValue
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - memcpy
    - DistanceBetweenSignAndMagnitudeNumbers
    - strchr
    - exponent_bits
    - GetName
    - StreamableToString
    - void
    - IsSpace
    - is_nan
    - move
    - AppendUserMessage
    - GetNotDefaultOrNull
    - SignAndMagnitudeToBiased
    - GetTypeId
    - FormatFileLocation
    - IgnoredValue
    - string
    - fraction_bits
    - fprintf
    - TypedTestSuitePState
    - TestFactoryBase
    - fflush
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - GTEST_CHECK_
    - CodeLocation
    - GenerateNamesRecursively
    - ReinterpretBits
    - Abort
    - Tail
    linkageType: ''
    returnType: class
    signature: 'class IgnoredValue '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - lhs
    - rhs
    argTypes:
    - T
    - U
    constantsTouched: []
    func_position:
      end: 992
      start: 990
    functionDepth: 0
    functionLinenumber: 990
    functionLinenumberEnd: 992
    functionName: ArrayEq
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool ArrayEq(const T& lhs, const U& rhs) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyArray
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:1108,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 2
    argNames:
    - array
    - a_size
    argTypes:
    - Element*
    - size_t
    constantsTouched: []
    func_position:
      end: 1112
      start: 1106
    functionDepth: 0
    functionLinenumber: 1106
    functionLinenumberEnd: 1112
    functionName: InitCopy
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - CopyArray
    linkageType: ''
    returnType: void
    signature: 'void InitCopy(const Element* array, size_t a_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exponent_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    - Dst: fraction_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 327
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 327
    functionName: is_nan
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - fraction_bits
    - exponent_bits
    linkageType: ''
    returnType: bool
    signature: 'bool is_nan() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:599,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - test_name
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 601
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 601
    functionName: GetCodeLocation
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - GTEST_CHECK_
    linkageType: ''
    returnType: CodeLocation
    signature: 'const CodeLocation & GetCodeLocation(const std::string& test_name)
      const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:639,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:640,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 641
      start: 638
    functionDepth: 0
    functionLinenumber: 638
    functionLinenumberEnd: 641
    functionName: GetPrefixUntilComma
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - string
    - strchr
    linkageType: ''
    returnType: std
    signature: 'inline std ::string GetPrefixUntilComma(const char* str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 823
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 823
    functionName: ConstCharPtr
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: struct GTEST_API_
    signature: 'struct GTEST_API_ ConstCharPtr '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ArrayEq
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:997,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - '[N]'
    - '[N]'
    argTypes:
    - T (&lhs)
    - U (&rhs)
    constantsTouched: []
    func_position:
      end: 998
      start: 996
    functionDepth: 0
    functionLinenumber: 996
    functionLinenumberEnd: 998
    functionName: ArrayEq
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - ArrayEq
    linkageType: ''
    returnType: bool
    signature: 'bool ArrayEq(const T (&lhs)[N], const U (&rhs)[N]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1094
      start: 1094
    functionDepth: 0
    functionLinenumber: 1094
    functionLinenumberEnd: 1094
    functionName: begin
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: const_iterator
    signature: 'const_iterator begin() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1237
    functionDepth: 0
    functionLinenumber: 1237
    functionLinenumberEnd: 1242
    functionName: TypedTestCase_P_IsDeprecated
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: '[[deprecated( "TYPED_TEST_CASE_P is deprecated, please use " "TYPED_TEST_SUITE_P")]]
      constexpr bool TypedTestCase_P_IsDeprecated() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1256
      start: 1251
    functionDepth: 0
    functionLinenumber: 1251
    functionLinenumberEnd: 1256
    functionName: RegisterTypedTestCase_P_IsDeprecated
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: '[[deprecated( "REGISTER_TYPED_TEST_CASE_P is deprecated, please use
      " "REGISTER_TYPED_TEST_SUITE_P")]] constexpr bool RegisterTypedTestCase_P_IsDeprecated() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - str
    argTypes:
    - str
    constantsTouched: []
    func_position:
      end: 820
      start: 820
    functionDepth: 0
    functionLinenumber: 820
    functionLinenumberEnd: 820
    functionName: value
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ConstCharPtr(const char* str)
    signature: 'ConstCharPtr(const char* str) : value(str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:292,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - x
    argTypes:
    - RawType
    constantsTouched: []
    func_position:
      end: 292
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 292
    functionName: FloatingPoint
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: explicit
    signature: 'explicit FloatingPoint(RawType x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:372,1
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - sam1
    - sam2
    argTypes:
    - Bits
    - Bits
    constantsTouched: []
    func_position:
      end: 375
      start: 371
    functionDepth: 0
    functionLinenumber: 371
    functionLinenumberEnd: 375
    functionName: DistanceBetweenSignAndMagnitudeNumbers
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - SignAndMagnitudeToBiased
    linkageType: ''
    returnType: Bits
    signature: 'static Bits DistanceBetweenSignAndMagnitudeNumbers(Bits sam1, Bits
      sam2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:521,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:523,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:525,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - filename
    - line_num
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 536
      start: 517
    functionDepth: 0
    functionLinenumber: 517
    functionLinenumberEnd: 536
    functionName: GetTearDownCaseOrSuite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - GetNotDefaultOrNull
    - GTEST_CHECK_
    linkageType: ''
    returnType: SetUpTearDownSuiteFuncType
    signature: 'static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite(const char*
      filename, int line_num) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - test_name
    argTypes:
    - std
    constantsTouched: []
    func_position:
      end: 595
      start: 593
    functionDepth: 0
    functionLinenumber: 593
    functionLinenumberEnd: 595
    functionName: TestExists
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'bool TestExists(const std::string& test_name) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyArray
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:1037,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - '[N]'
    - (*to)
    argTypes:
    - T (&from)
    - U
    constantsTouched: []
    func_position:
      end: 1038
      start: 1036
    functionDepth: 0
    functionLinenumber: 1036
    functionLinenumberEnd: 1038
    functionName: CopyArray
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - CopyArray
    linkageType: ''
    returnType: void
    signature: 'void CopyArray(const T (&from)[N], U (*to)[N]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1249
      start: 1244
    functionDepth: 0
    functionLinenumber: 1244
    functionLinenumberEnd: 1249
    functionName: TypedTestCaseIsDeprecated
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: '[[deprecated( "TYPED_TEST_CASE is deprecated, please use " "TYPED_TEST_SUITE")]]
      constexpr bool TypedTestCaseIsDeprecated() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1326
      start: 1317
    functionDepth: 0
    functionLinenumber: 1317
    functionLinenumberEnd: 1326
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1327
      start: 1316
    functionDepth: 0
    functionLinenumber: 1316
    functionLinenumberEnd: 1327
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_nan
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:338,1
    - Dst: DistanceBetweenSignAndMagnitudeNumbers
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:340,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - FloatingPoint
    constantsTouched: []
    func_position:
      end: 341
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 341
    functionName: AlmostEquals
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - DistanceBetweenSignAndMagnitudeNumbers
    - is_nan
    linkageType: ''
    returnType: bool
    signature: 'bool AlmostEquals(const FloatingPoint& rhs) const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    functionName: proto2
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace proto2 '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:301,1
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:373,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:464,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:504,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:521,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:523,1
    - Dst: fflush
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:586,1
    - Dst: IsSpace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:631,1
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:639,1
    - Dst: GenerateNamesRecursively
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:666,1
    - Dst: Types
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:675,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:718,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:622,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:162,1
    - Dst: GetTypeId
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:409,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:469,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:525,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:568,1
    - Dst: fprintf
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:582,1
    - Dst: CodeLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:589,1
    - Dst: GetName
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:652,1
    - Dst: GenerateNames
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:673,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:585,1
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:627,1
    - Dst: StripTrailingSpaces
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:706,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:653,1
    - Dst: GetTearDownCaseOrSuite
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:712,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:640,1
    - Dst: GenerateNamesRecursively
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:663,1
    - Dst: AppendUserMessage
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:143,1
    - Dst: ReinterpretBits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:306,1
    - Dst: exponent_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:372,1
    - Dst: TestFactoryBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:435,1
    - Dst: TypedTestSuitePState
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:574,1
    - Dst: Abort
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:587,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:599,1
    - Dst: IgnoredValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:139,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:148,1
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:292,1
    - Dst: fraction_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    - Dst: is_nan
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:338,1
    - Dst: DistanceBetweenSignAndMagnitudeNumbers
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:340,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:465,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:479,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:500,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:502,1
    - Dst: GetSetUpCaseOrSuite
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:710,1
    - Dst: GetPrefixUntilComma
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:706,1
    - Dst: Register
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:718,1
    - Dst: Tail
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:668,1
    CyclomaticComplexity: 88
    EdgeCount: 88
    ICount: 239
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 721
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 721
    functionName: internal
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - memcpy
    - Register
    - DistanceBetweenSignAndMagnitudeNumbers
    - strchr
    - exponent_bits
    - GetName
    - StreamableToString
    - void
    - IsSpace
    - GetPrefixUntilComma
    - is_nan
    - move
    - AppendUserMessage
    - Types
    - GetNotDefaultOrNull
    - SignAndMagnitudeToBiased
    - GetTypeId
    - FormatFileLocation
    - IgnoredValue
    - GetSetUpCaseOrSuite
    - string
    - fraction_bits
    - GenerateNames
    - fprintf
    - TypedTestSuitePState
    - TestFactoryBase
    - fflush
    - StripTrailingSpaces
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - GTEST_CHECK_
    - CodeLocation
    - GenerateNamesRecursively
    - ReinterpretBits
    - Abort
    - GetTearDownCaseOrSuite
    - Tail
    linkageType: ''
    returnType: namespace
    signature: 'namespace internal '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 186
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 186
    functionName: edit_distance
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace edit_distance '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 311
      start: 311
    functionDepth: 0
    functionLinenumber: 311
    functionLinenumberEnd: 311
    functionName: bits
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Bits
    signature: 'const Bits & bits() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 314
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 314
    functionName: exponent_bits
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Bits
    signature: 'Bits exponent_bits() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 317
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 317
    functionName: fraction_bits
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Bits
    signature: 'Bits fraction_bits() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 320
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 320
    functionName: sign_bit
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: Bits
    signature: 'Bits sign_bit() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestFactoryBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:435,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 440
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 440
    functionName: TestFactoryBase
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - TestFactoryBase
    linkageType: ''
    returnType: class
    signature: 'class TestFactoryBase '
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:301,1
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:373,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:464,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:504,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:521,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:523,1
    - Dst: fflush
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:586,1
    - Dst: IsSpace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:631,1
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:639,1
    - Dst: GenerateNamesRecursively
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:666,1
    - Dst: Types
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:675,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:718,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:622,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_POP_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:162,1
    - Dst: GetTypeId
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:409,1
    - Dst: move
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:469,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:525,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:568,1
    - Dst: fprintf
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:582,1
    - Dst: CodeLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:589,1
    - Dst: GetName
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:652,1
    - Dst: GenerateNames
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:673,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:585,1
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:627,1
    - Dst: StripTrailingSpaces
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:706,1
    - Dst: StreamableToString
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:653,1
    - Dst: GetTearDownCaseOrSuite
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:712,1
    - Dst: string
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:640,1
    - Dst: GenerateNamesRecursively
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:663,1
    - Dst: AppendUserMessage
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:143,1
    - Dst: ReinterpretBits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:306,1
    - Dst: exponent_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    - Dst: SignAndMagnitudeToBiased
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:372,1
    - Dst: TestFactoryBase
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:435,1
    - Dst: TypedTestSuitePState
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:574,1
    - Dst: Abort
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:587,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:599,1
    - Dst: IgnoredValue
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:139,1
    - Dst: GTEST_DISABLE_MSC_WARNINGS_PUSH_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:148,1
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:292,1
    - Dst: fraction_bits
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:326,1
    - Dst: is_nan
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:338,1
    - Dst: DistanceBetweenSignAndMagnitudeNumbers
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:340,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:465,1
    - Dst: void
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:479,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:500,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:502,1
    - Dst: GetSetUpCaseOrSuite
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:710,1
    - Dst: GetPrefixUntilComma
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:706,1
    - Dst: Register
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:718,1
    - Dst: Tail
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:668,1
    CyclomaticComplexity: 90
    EdgeCount: 90
    ICount: 246
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 734
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 734
    functionName: testing
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - GTEST_DISABLE_MSC_WARNINGS_PUSH_
    - memcpy
    - Register
    - DistanceBetweenSignAndMagnitudeNumbers
    - strchr
    - exponent_bits
    - GetName
    - StreamableToString
    - void
    - IsSpace
    - GetPrefixUntilComma
    - is_nan
    - move
    - AppendUserMessage
    - Types
    - GetNotDefaultOrNull
    - SignAndMagnitudeToBiased
    - GetTypeId
    - FormatFileLocation
    - IgnoredValue
    - GetSetUpCaseOrSuite
    - string
    - fraction_bits
    - GenerateNames
    - fprintf
    - TypedTestSuitePState
    - TestFactoryBase
    - fflush
    - StripTrailingSpaces
    - GTEST_DISABLE_MSC_WARNINGS_POP_
    - GTEST_CHECK_
    - CodeLocation
    - GenerateNamesRecursively
    - ReinterpretBits
    - Abort
    - GetTearDownCaseOrSuite
    - Tail
    linkageType: ''
    returnType: namespace
    signature: 'namespace testing '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:500,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:504,1
    - Dst: GetNotDefaultOrNull
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:502,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - filename
    - line_num
    argTypes:
    - char*
    - int
    constantsTouched: []
    func_position:
      end: 515
      start: 496
    functionDepth: 0
    functionLinenumber: 496
    functionLinenumberEnd: 515
    functionName: GetSetUpCaseOrSuite
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - GetNotDefaultOrNull
    - GTEST_CHECK_
    linkageType: ''
    returnType: SetUpTearDownSuiteFuncType
    signature: 'static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite(const char*
      filename, int line_num) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TypedTestSuitePState
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:574,1
    - Dst: fflush
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:586,1
    - Dst: fprintf
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:582,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:585,1
    - Dst: Abort
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:587,1
    - Dst: CodeLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:589,1
    - Dst: GTEST_CHECK_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:599,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 615
      start: 572
    functionDepth: 0
    functionLinenumber: 572
    functionLinenumberEnd: 615
    functionName: TypedTestSuitePState
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - fflush
    - GTEST_CHECK_
    - CodeLocation
    - fprintf
    - Abort
    - FormatFileLocation
    - TypedTestSuitePState
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ TypedTestSuitePState '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strchr
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:627,1
    - Dst: IsSpace
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:631,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 6
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    constantsTouched: []
    func_position:
      end: 634
      start: 626
    functionDepth: 0
    functionLinenumber: 626
    functionLinenumberEnd: 634
    functionName: SkipComma
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - strchr
    - IsSpace
    linkageType: ''
    returnType: char*
    signature: 'inline const char * SkipComma(const char* str) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - bits
    argTypes:
    - Bits
    constantsTouched: []
    func_position:
      end: 303
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 303
    functionName: ReinterpretBits
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: RawType
    signature: 'static RawType ReinterpretBits(Bits bits) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - seed
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 846
      start: 846
    functionDepth: 0
    functionLinenumber: 846
    functionLinenumberEnd: 846
    functionName: Reseed
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void Reseed(uint32_t seed) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - a
    - def
    argTypes:
    - SetUpTearDownSuiteFuncType
    - SetUpTearDownSuiteFuncType
    constantsTouched: []
    func_position:
      end: 484
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 484
    functionName: GetNotDefaultOrNull
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: SetUpTearDownSuiteFuncType
    signature: 'inline SetUpTearDownSuiteFuncType GetNotDefaultOrNull( SetUpTearDownSuiteFuncType
      a, SetUpTearDownSuiteFuncType def) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:582,1
    - Dst: fflush
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:586,1
    - Dst: FormatFileLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:585,1
    - Dst: Abort
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:587,1
    - Dst: CodeLocation
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:589,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 4
    argNames:
    - file
    - line
    - case_name
    - test_name
    argTypes:
    - char*
    - int
    - char*
    - char*
    constantsTouched: []
    func_position:
      end: 591
      start: 579
    functionDepth: 0
    functionLinenumber: 579
    functionLinenumberEnd: 591
    functionName: AddTestName
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - fflush
    - CodeLocation
    - fprintf
    - Abort
    - FormatFileLocation
    linkageType: ''
    returnType: bool
    signature: 'bool AddTestName(const char* file, int line, const char* case_name,
      const char* test_name) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1263
      start: 1258
    functionDepth: 0
    functionLinenumber: 1258
    functionLinenumberEnd: 1263
    functionName: InstantiateTypedTestCase_P_IsDeprecated
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: '[[deprecated( "INSTANTIATE_TYPED_TEST_CASE_P is deprecated, please
      use " "INSTANTIATE_TYPED_TEST_SUITE_P")]] constexpr bool InstantiateTypedTestCase_P_IsDeprecated() '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 821
      start: 821
    functionDepth: 0
    functionLinenumber: 821
    functionLinenumberEnd: 821
    functionName: bool
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: operator
    signature: 'operator bool() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: state_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:844,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 856
      start: 840
    functionDepth: 0
    functionLinenumber: 840
    functionLinenumberEnd: 856
    functionName: GTEST_API_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - state_
    linkageType: ''
    returnType: class
    signature: 'class GTEST_API_ Random '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1093
      start: 1093
    functionDepth: 0
    functionLinenumber: 1093
    functionLinenumberEnd: 1093
    functionName: size
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: 'size_t size() const '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1235
      start: 1230
    functionDepth: 0
    functionLinenumber: 1230
    functionLinenumberEnd: 1235
    functionName: InstantiateTestCase_P_IsDeprecated
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: '[[deprecated( "INSTANTIATE_TEST_CASE_P is deprecated, please use "
      "INSTANTIATE_TEST_SUITE_P")]] constexpr bool InstantiateTestCase_P_IsDeprecated() '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: state_
      Src: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h:844,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - seed
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 844
      start: 844
    functionDepth: 0
    functionLinenumber: 844
    functionLinenumberEnd: 844
    functionName: Random
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached:
    - state_
    linkageType: ''
    returnType: explicit
    signature: 'explicit Random(uint32_t seed) : state_(seed) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 927
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 927
    functionName: (long /* dummy */)
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: IsContainerTest
    signature: 'IsContainerTest (long /* dummy */) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    constantsTouched: []
    func_position:
      end: 1282
      start: 1268
    functionDepth: 0
    functionLinenumber: 1268
    functionLinenumberEnd: 1282
    functionName: std
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: namespace
    signature: 'namespace std '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 2
    argNames:
    - array
    - a_size
    argTypes:
    - Element*
    - size_t
    constantsTouched: []
    func_position:
      end: 1119
      start: 1115
    functionDepth: 0
    functionLinenumber: 1115
    functionLinenumberEnd: 1119
    functionName: InitRef
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: 'void InitRef(const Element* array, size_t a_size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 1
    argCount: 1
    argNames:
    - Clone
    argTypes:
    - other
    constantsTouched: []
    func_position:
      end: 136
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 136
    functionName: impl_
    functionSourceFile: /src/boringssl/third_party/googletest/googletest/include/gtest/internal/gtest-param-util.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: ParamIterator(const ParamIterator& other)
    signature: 'ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _subborrow_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:85,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 90
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 90
    functionName: fiat_25519_subborrowx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - _subborrow_u64
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u64(uint64_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:139,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 142
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 142
    functionName: fiat_25519_subborrowx_u51
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u51(uint64_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:189,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:188,1
    - Dst: fiat_25519_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:189,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 191
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 191
    functionName: fiat_25519_cmovznz_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_25519_value_barrier_u64
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_cmovznz_u64(uint64_t*
      out1, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:366,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:373,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:411,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:397,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:418,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:383,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:404,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:425,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:376,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:387,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:412,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:419,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:364,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:370,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:398,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:405,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:426,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:431,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:434,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:439,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:395,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:388,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:365,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:372,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:379,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:413,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:399,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:420,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:427,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:406,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:363,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:369,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:382,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:389,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:414,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:400,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:421,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:364,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:370,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:375,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:385,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:407,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:428,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:436,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:390,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:378,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:450,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:362,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:368,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:371,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:415,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:401,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:422,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:408,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:363,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:369,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:391,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:435,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:443,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:416,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:423,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:381,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:409,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:444,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:392,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:361,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:367,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:374,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:384,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:430,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:438,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:447,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:442,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:362,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:366,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:368,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:377,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:417,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:424,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:394,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:402,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:393,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:432,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:440,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:410,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:396,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:403,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:386,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:361,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:365,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:367,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:380,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 168
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 457
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 457
    functionName: fiat_25519_carry_mul
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - fiat_25519_mulx_u64
    - fiat_25519_addcarryx_u64
    - UINT8_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_mul(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1, const fiat_25519_loose_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:676,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:676,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:678,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:677,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:679,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:680,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:681,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:682,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 50
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 688
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 688
    functionName: fiat_25519_carry
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT8_C
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:728,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:732,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:730,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:731,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:729,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 738
      start: 722
    functionDepth: 0
    functionLinenumber: 722
    functionLinenumberEnd: 738
    functionName: fiat_25519_sub
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_sub(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:898,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:897,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:899,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:900,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:901,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:912,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:916,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:920,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:925,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:929,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:942,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:946,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:950,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:970,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:953,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:972,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:974,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:976,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:897,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:899,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:898,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:900,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:903,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:905,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:904,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:906,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:907,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:914,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:918,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:922,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:927,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:931,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:935,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:938,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:940,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:944,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:948,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:963,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:933,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:955,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:957,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:959,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:961,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:901,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:902,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:904,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:906,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:902,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:903,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:905,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:907,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:966,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:968,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 232
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint8_t
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 1010
      start: 805
    functionDepth: 0
    functionLinenumber: 805
    functionLinenumberEnd: 1010
    functionName: fiat_25519_to_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - fiat_25519_cmovznz_u64
    - UINT8_C
    - fiat_25519_addcarryx_u51
    - fiat_25519_subborrowx_u51
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_to_bytes(uint8_t out1[32],
      const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 1194
      start: 1178
    functionDepth: 0
    functionLinenumber: 1178
    functionLinenumberEnd: 1194
    functionName: fiat_25519_relax
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_relax(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1244,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1246,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1248,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1255,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1258,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1263,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1266,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1245,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1247,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1257,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1251,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1254,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1262,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1265,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1267,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1273,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1246,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1244,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1248,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1250,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1253,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1261,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1245,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1247,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1249,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1259,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1270,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 94
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 1280
      start: 1203
    functionDepth: 0
    functionLinenumber: 1203
    functionLinenumberEnd: 1280
    functionName: fiat_25519_carry_scmul_121666
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - fiat_25519_mulx_u64
    - UINT32_C
    - UINT8_C
    - fiat_25519_addcarryx_u64
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_scmul_121666(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _addcarry_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:57,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 66
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 66
    functionName: fiat_25519_addcarryx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - _addcarry_u64
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u64(uint64_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 116
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 116
    functionName: fiat_25519_addcarryx_u51
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u51(uint64_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _umul128
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:161,1
    - Dst: __umulh
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:164,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 4
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    argTypes:
    - uint64_t*
    - uint64_t*
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 168
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 168
    functionName: fiat_25519_mulx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - _umul128
    - __umulh
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_mulx_u64(uint64_t* out1,
      uint64_t* out2, uint64_t arg1, uint64_t arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:578,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:585,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:583,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:586,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:588,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:593,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:594,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:596,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:604,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:606,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:630,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:627,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:575,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:590,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:598,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:592,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:600,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:601,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:603,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:617,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:622,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:618,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:626,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:619,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:620,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:608,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:639,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:623,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:634,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:628,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:584,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:587,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:597,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:595,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:602,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:605,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:607,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:610,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:612,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:614,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:631,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:589,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:599,1
    - Dst: fiat_25519_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:591,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:615,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:616,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:624,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:632,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:635,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:636,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:642,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:609,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:611,1
    - Dst: fiat_25519_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:613,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 136
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 649
      start: 466
    functionDepth: 0
    functionLinenumber: 466
    functionLinenumberEnd: 649
    functionName: fiat_25519_carry_square
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - fiat_25519_mulx_u64
    - fiat_25519_addcarryx_u64
    - UINT8_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_square(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 713
      start: 697
    functionDepth: 0
    functionLinenumber: 697
    functionLinenumberEnd: 713
    functionName: fiat_25519_add
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_add(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:753,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:757,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:754,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:755,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:756,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 763
      start: 747
    functionDepth: 0
    functionLinenumber: 747
    functionLinenumberEnd: 763
    functionName: fiat_25519_opp
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_opp(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:784,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:786,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:787,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:788,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 794
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 794
    functionName: fiat_25519_selectznz
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_25519_cmovznz_u64
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_selectznz(uint64_t out1[5],
      fiat_25519_uint1 arg1, const uint64_t arg2[5], const uint64_t arg3[5]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1131,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1156,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1139,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_msvc.h:1148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 151
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - uint8_t
    constantsTouched: []
    func_position:
      end: 1169
      start: 1021
    functionDepth: 0
    functionLinenumber: 1021
    functionLinenumberEnd: 1169
    functionName: fiat_25519_from_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_from_bytes(fiat_25519_tight_field_element
      out1, const uint8_t arg1[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:36,1
    - Dst: _umul128
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:41,1
    - Dst: __umulh
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:45,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 4
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    argTypes:
    - uint64_t*
    - uint64_t*
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 51
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 51
    functionName: fiat_mulx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - _umul128
    - target
    - __umulh
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static inline void fiat_mulx_u64(uint64_t*
      out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:16,1
    - Dst: fiat_curve25519_adx_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:17,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 3
    argNames:
    - out
    - x
    - y
    argTypes:
    - fe4
    - fe4
    - fe4
    constantsTouched: []
    func_position:
      end: 17
      start: 16
    functionDepth: 0
    functionLinenumber: 16
    functionLinenumberEnd: 17
    functionName: fe4_mul
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - target
    - fiat_curve25519_adx_mul
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static inline void fe4_mul(fe4
      out, const fe4 x, const fe4 y) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:110,1
    - Dst: subborrow64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:119,1
    - Dst: _subborrow_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:123,1
    - Dst: __has_builtin
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_uint1*
    - fiat_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 130
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 130
    functionName: fiat_subborrowx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - target
    - __has_builtin
    - subborrow64
    - _subborrow_u64
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static inline void fiat_subborrowx_u64(uint64_t*
      out1, fiat_uint1* out2, fiat_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:209,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:240,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:238,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:242,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:236,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:243,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:243,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:244,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:245,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:246,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:247,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:248,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:249,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 254
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 254
    functionName: fe4_sub
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fiat_cmovznz_u64
    - target
    - fiat_subborrowx_u64
    - UINT8_C
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static void fe4_sub(uint64_t out1[4],
      const uint64_t arg1[4], const uint64_t arg2[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:347,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:348,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:351,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:350,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:349,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:357,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:347,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:352,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:354,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:354,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:352,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:358,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:344,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:345,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:346,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:353,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:353,1
    - Dst: fiat_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:355,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:355,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:359,1
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:318,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:345,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:344,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:346,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:356,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 364
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 364
    functionName: fe4_canon
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fiat_cmovznz_u64
    - target
    - fiat_subborrowx_u64
    - UINT64_C
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static void fe4_canon(uint64_t
      out1[4], const uint64_t arg1[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:375,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:389,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:387,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:386,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:388,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:390,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:391,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:392,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t
    - uint64_t
    - fiat_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 402
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 402
    functionName: fe4_cswap
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fiat_cmovznz_u64
    - target
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static void fe4_cswap(uint64_t
      out1[4], uint64_t out2[4], fiat_uint1 arg1, const uint64_t arg2[4], const uint64_t
      arg3[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:472,1
    - Dst: fe4_cswap
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:510,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:525,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:533,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:534,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:535,1
    - Dst: fe4_canon
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:543,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:544,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:495,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:524,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:530,1
    - Dst: fe4_cswap
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:538,1
    - Dst: fe4_cswap
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:539,1
    - Dst: fe4_invert
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:541,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:542,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:532,1
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:468,1
    - Dst: fe4_cswap
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:511,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:519,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:520,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:521,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:523,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:526,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:527,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:528,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:529,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:497,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:518,1
    - Dst: fe4_scmul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:531,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:522,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 45
    argCount: 3
    argNames:
    - out
    - scalar
    - point
    argTypes:
    - uint8_t
    - uint8_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 545
      start: 468
    functionDepth: 0
    functionLinenumber: 468
    functionLinenumberEnd: 545
    functionName: x25519_scalar_mult_adx
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - OPENSSL_memcpy
    - fe4_cswap
    - fe4_canon
    - fe4_sq
    - fe4_sub
    - target
    - fe4_mul
    - fe4_invert
    - fe4_scmul
    - fe4_add
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) void x25519_scalar_mult_adx(uint8_t
      out[32], const uint8_t scalar[32], const uint8_t point[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:583,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:590,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:591,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:592,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:593,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:594,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:595,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:596,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:597,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:598,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:599,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:602,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:603,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:600,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:601,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - r
    - p
    - q
    argTypes:
    - ge_p3_4*
    - ge_p3_4*
    - ge_precomp_4*
    constantsTouched: []
    func_position:
      end: 604
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 604
    functionName: ge_p3_add_p3_precomp_4
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fe4_sub
    - target
    - fe4_add
    - fe4_mul
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) __attribute__((always_inline))
      // 4% speedup with clang14 and zen2 static inline void ge_p3_add_p3_precomp_4(ge_p3_4
      *r, const ge_p3_4 *p, const ge_precomp_4 *q) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 14
      start: 11
    functionDepth: 0
    functionLinenumber: 11
    functionLinenumberEnd: 14
    functionName: fiat_value_barrier_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: 'static __inline__ uint64_t fiat_value_barrier_u64(uint64_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:19,1
    - Dst: fiat_curve25519_adx_square
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:20,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 2
    argNames:
    - out
    - x
    argTypes:
    - fe4
    - fe4
    constantsTouched: []
    func_position:
      end: 20
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 20
    functionName: fe4_sq
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - target
    - fiat_curve25519_adx_square
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static inline void fe4_sq(fe4
      out, const fe4 x) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:424,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:440,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:443,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:445,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:448,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:450,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:453,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:455,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:458,1
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:409,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:420,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:422,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:417,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:423,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:426,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:436,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:431,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:461,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:425,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:428,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:433,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:435,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:430,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:460,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:463,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:465,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:418,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:438,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:441,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:446,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:451,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:456,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 60
    argCount: 2
    argNames:
    - out
    - z
    argTypes:
    - fe4
    - fe4
    constantsTouched: []
    func_position:
      end: 466
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 466
    functionName: fe4_invert
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fe4_mul
    - target
    - fe4_sq
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static void fe4_invert(fe4 out,
      const fe4 z) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:560,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:565,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:568,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:566,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:567,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:569,1
    - Dst: fe4_sq
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:570,1
    - Dst: fe4_add
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:571,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:572,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:573,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:576,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:577,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:574,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:579,1
    - Dst: fe4_mul
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:575,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - r
    - p
    - skip_t
    argTypes:
    - ge_p3_4*
    - ge_p3_4*
    - bool
    constantsTouched: []
    func_position:
      end: 581
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 581
    functionName: inline_x25519_ge_dbl_4
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fe4_sq
    - fe4_sub
    - target
    - fe4_mul
    - fe4_add
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static void inline_x25519_ge_dbl_4(ge_p3_4
      *r, const ge_p3_4 *p, bool skip_t) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: constant_time_msb_w
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:609,1
    - Dst: constant_time_is_zero_w
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:613,1
    - Dst: constant_time_conditional_memxor
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:622,1
    - Dst: static_assert
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:620,1
    - Dst: constant_time_is_zero_w
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:614,1
    - Dst: constant_time_eq_w
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:624,1
    - Dst: static_assert
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:627,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:630,1
    - Dst: fe4_sub
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:633,1
    - Dst: constant_time_conditional_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:634,1
    - Dst: constant_time_conditional_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:638,1
    - Dst: constant_time_conditional_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:636,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 3
    argNames:
    - t
    - pos
    - b
    argTypes:
    - ge_precomp_4*
    - int
    - signed char
    constantsTouched: []
    func_position:
      end: 639
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 639
    functionName: table_select_4
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - constant_time_is_zero_w
    - OPENSSL_memcpy
    - fe4_sub
    - constant_time_msb_w
    - static_assert
    - constant_time_conditional_memxor
    - constant_time_eq_w
    - constant_time_conditional_memcpy
    linkageType: ''
    returnType: void
    signature: '__attribute__((always_inline)) // 25% speedup with clang14 and zen2
      static inline void table_select_4(ge_precomp_4 *t, const int pos, const signed
      char b) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:68,1
    - Dst: _addcarry_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:82,1
    - Dst: __has_builtin
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:72,1
    - Dst: addcarry64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:78,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_uint1*
    - fiat_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 93
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 93
    functionName: fiat_addcarryx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - addcarry64
    - target
    - __has_builtin
    - _addcarry_u64
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static inline void fiat_addcarryx_u64(uint64_t*
      out1, fiat_uint1* out2, fiat_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:145,1
    - Dst: fiat_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:152,1
    - Dst: fiat_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:152,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:151,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 154
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 154
    functionName: fiat_cmovznz_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - target
    - fiat_value_barrier_u64
    - UINT64_C
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static inline void fiat_cmovznz_u64(uint64_t*
      out1, fiat_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:163,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:188,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:186,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:187,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:185,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:189,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:189,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:190,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:191,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:192,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:194,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:195,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:194,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 200
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 200
    functionName: fe4_add
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fiat_addcarryx_u64
    - target
    - fiat_cmovznz_u64
    - UINT8_C
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static void fe4_add(uint64_t out1[4],
      const uint64_t arg1[4], const uint64_t arg2[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:263,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:294,1
    - Dst: fiat_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:293,1
    - Dst: fiat_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:295,1
    - Dst: fiat_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:292,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:296,1
    - Dst: fiat_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:297,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:298,1
    - Dst: fiat_mulx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:299,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:299,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:303,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:305,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:304,1
    - Dst: fiat_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:304,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:300,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:302,1
    - Dst: fiat_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - uint64_t
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 310
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 310
    functionName: fe4_scmul
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - fiat_mulx_u64
    - target
    - UINT8_C
    - fiat_cmovznz_u64
    - fiat_addcarryx_u64
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) static void fe4_scmul(uint64_t
      out1[4], const uint64_t arg1[4], uint64_t arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: target
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:647,1
    - Dst: table_select_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:672,1
    - Dst: ge_p3_add_p3_precomp_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:673,1
    - Dst: inline_x25519_ge_dbl_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:676,1
    - Dst: inline_x25519_ge_dbl_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:677,1
    - Dst: inline_x25519_ge_dbl_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:678,1
    - Dst: inline_x25519_ge_dbl_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:679,1
    - Dst: table_select_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:683,1
    - Dst: ge_p3_add_p3_precomp_4
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:684,1
    - Dst: fe4_canon
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:689,1
    - Dst: fe4_canon
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:690,1
    - Dst: static_assert
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:693,1
    - Dst: fe4_canon
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:692,1
    - Dst: fe4_canon
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:691,1
    - Dst: OPENSSL_memcpy
      Src: /src/boringssl/third_party/fiat/curve25519_64_adx.h:694,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 47
    argCount: 2
    argNames:
    - h
    - a
    argTypes:
    - uint8_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 695
      start: 647
    functionDepth: 0
    functionLinenumber: 647
    functionLinenumberEnd: 695
    functionName: x25519_ge_scalarmult_base_adx
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64_adx.h
    functionUses: []
    functionsReached:
    - inline_x25519_ge_dbl_4
    - OPENSSL_memcpy
    - table_select_4
    - fe4_canon
    - target
    - ge_p3_add_p3_precomp_4
    - static_assert
    linkageType: ''
    returnType: void
    signature: '__attribute__((target("adx,bmi2"))) void x25519_ge_scalarmult_base_adx(uint8_t
      h[4][32], const uint8_t a[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:144,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 147
      start: 138
    functionDepth: 0
    functionLinenumber: 138
    functionLinenumberEnd: 147
    functionName: fiat_25519_subborrowx_u25
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u25(uint32_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:65,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 69
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 69
    functionName: fiat_25519_addcarryx_u26
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u26(uint32_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:117,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 121
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 121
    functionName: fiat_25519_addcarryx_u25
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u25(uint32_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:689,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:732,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:701,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:707,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:710,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:725,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:722,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:726,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:729,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:716,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:614,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:626,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:623,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:617,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:620,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:704,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:713,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:719,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 320
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 744
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 744
    functionName: fiat_25519_carry_square
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT8_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_square(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:786,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:787,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:788,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:786,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:789,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:790,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:791,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:792,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:794,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:793,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:796,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:795,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:797,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 85
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 808
      start: 753
    functionDepth: 0
    functionLinenumber: 753
    functionLinenumberEnd: 808
    functionName: fiat_25519_carry
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT8_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:908,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:911,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:912,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:909,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:910,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:913,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:914,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:915,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:916,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 41
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 928
      start: 897
    functionDepth: 0
    functionLinenumber: 897
    functionLinenumberEnd: 928
    functionName: fiat_25519_opp
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_opp(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:956,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:957,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:960,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:959,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:958,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:961,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:962,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:963,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:964,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:965,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t
    - fiat_25519_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 976
      start: 945
    functionDepth: 0
    functionLinenumber: 945
    functionLinenumberEnd: 976
    functionName: fiat_25519_selectznz
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - fiat_25519_cmovznz_u32
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_selectznz(uint32_t out1[10],
      fiat_25519_uint1 arg1, const uint32_t arg2[10], const uint32_t arg3[10]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1360,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1383,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1370,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1375,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1365,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1388,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1393,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1398,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 173
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - uint8_t
    constantsTouched: []
    func_position:
      end: 1413
      start: 1246
    functionDepth: 0
    functionLinenumber: 1246
    functionLinenumberEnd: 1413
    functionName: fiat_25519_from_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_from_bytes(fiat_25519_tight_field_element
      out1, const uint8_t arg1[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 1455
      start: 1424
    functionDepth: 0
    functionLinenumber: 1424
    functionLinenumberEnd: 1455
    functionName: fiat_25519_relax
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_relax(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1516,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1518,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1522,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1539,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1545,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1555,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1513,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1519,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1542,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1548,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1524,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1530,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1514,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1520,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1527,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1533,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1551,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1552,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1558,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1515,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1517,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1521,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1536,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 130
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 1570
      start: 1465
    functionDepth: 0
    functionLinenumber: 1465
    functionLinenumberEnd: 1570
    functionName: fiat_25519_carry_scmul_121666
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT8_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_scmul_121666(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:92,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 95
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 95
    functionName: fiat_25519_subborrowx_u26
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u26(uint32_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_value_barrier_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:168,1
    - Dst: fiat_25519_value_barrier_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:168,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:167,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_25519_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 170
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 170
    functionName: fiat_25519_cmovznz_u32
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - fiat_25519_value_barrier_u32
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_cmovznz_u32(uint32_t*
      out1, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:330,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:336,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:342,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:346,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:348,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:352,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:358,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:364,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:368,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:370,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:444,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:469,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:472,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:429,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:456,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:366,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:329,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:335,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:339,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:345,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:341,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:347,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:351,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:357,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:361,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:362,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:462,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:441,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:453,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:367,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:328,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:332,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:334,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:338,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:344,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:340,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:350,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:354,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:356,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:360,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:363,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:459,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:371,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:450,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:327,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:331,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:333,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:337,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:343,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:349,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:353,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:355,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:359,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:365,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:369,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:447,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:465,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:466,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 499
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 484
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 484
    functionName: fiat_25519_carry_mul
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT8_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_mul(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1, const fiat_25519_loose_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 848
      start: 817
    functionDepth: 0
    functionLinenumber: 817
    functionLinenumberEnd: 848
    functionName: fiat_25519_add
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_add(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:868,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:870,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:871,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:869,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:872,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:873,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:874,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:875,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:876,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:877,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 51
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 888
      start: 857
    functionDepth: 0
    functionLinenumber: 857
    functionLinenumberEnd: 888
    functionName: fiat_25519_sub
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_sub(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_subborrowx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1113,1
    - Dst: fiat_25519_subborrowx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1112,1
    - Dst: fiat_25519_subborrowx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1115,1
    - Dst: fiat_25519_subborrowx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1114,1
    - Dst: fiat_25519_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1116,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1116,1
    - Dst: fiat_25519_addcarryx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1117,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1118,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1119,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1120,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1178,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1185,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1187,1
    - Dst: fiat_25519_addcarryx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1125,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1126,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1114,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1113,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1112,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1115,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1135,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1144,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1151,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1153,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1156,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1160,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1167,1
    - Dst: fiat_25519_addcarryx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1121,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1194,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1122,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1183,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1158,1
    - Dst: fiat_25519_addcarryx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1126,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1173,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1124,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1163,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1190,1
    - Dst: fiat_25519_subborrowx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1106,1
    - Dst: fiat_25519_subborrowx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1108,1
    - Dst: fiat_25519_subborrowx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1107,1
    - Dst: fiat_25519_subborrowx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1109,1
    - Dst: fiat_25519_subborrowx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1110,1
    - Dst: fiat_25519_subborrowx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1111,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1117,1
    - Dst: fiat_25519_addcarryx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1118,1
    - Dst: fiat_25519_addcarryx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1119,1
    - Dst: fiat_25519_addcarryx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1120,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1123,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1165,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1169,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1171,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1146,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1149,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1176,1
    - Dst: fiat_25519_addcarryx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1122,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1106,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1107,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1108,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1109,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1110,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1111,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1137,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1139,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1142,1
    - Dst: fiat_25519_addcarryx_u25
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1124,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1125,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1197,1
    - Dst: fiat_25519_addcarryx_u26
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1123,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1199,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1201,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1192,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1121,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_32.h:1180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 268
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint8_t
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 1235
      start: 988
    functionDepth: 0
    functionLinenumber: 988
    functionLinenumberEnd: 1235
    functionName: fiat_25519_to_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached:
    - fiat_25519_cmovznz_u32
    - fiat_25519_subborrowx_u26
    - fiat_25519_subborrowx_u25
    - UINT32_C
    - fiat_25519_addcarryx_u25
    - UINT8_C
    - fiat_25519_addcarryx_u26
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_to_bytes(uint8_t out1[32],
      const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: fiat_25519_value_barrier_u32
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static __inline__ uint32_t fiat_25519_value_barrier_u32(uint32_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:185,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:189,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:191,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:222,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:228,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:219,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:186,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:192,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:190,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:229,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:232,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:187,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:193,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:212,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:225,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:188,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:194,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:235,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 179
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 242
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 242
    functionName: fiat_25519_carry_mul
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - UINT8_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_mul(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1, const fiat_25519_loose_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:70,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: fiat_25519_addcarryx_u51
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u51(uint64_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:121,1
    - Dst: fiat_25519_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:121,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: fiat_25519_cmovznz_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - fiat_25519_value_barrier_u64
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_cmovznz_u64(uint64_t*
      out1, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 421
      start: 405
    functionDepth: 0
    functionLinenumber: 405
    functionLinenumberEnd: 421
    functionName: fiat_25519_add
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_add(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:436,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:440,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:438,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:437,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:439,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 446
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 446
    functionName: fiat_25519_sub
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_sub(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:494,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:496,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:495,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:498,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:497,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 504
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 504
    functionName: fiat_25519_selectznz
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - fiat_25519_cmovznz_u64
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_selectznz(uint64_t out1[5],
      fiat_25519_uint1 arg1, const uint64_t arg2[5], const uint64_t arg3[5]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:610,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:609,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:611,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:612,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:616,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:613,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:614,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:615,1
    - Dst: fiat_25519_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:613,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:617,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:677,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:679,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:681,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:618,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:608,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:623,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:629,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:633,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:636,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:640,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:642,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:646,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:649,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:653,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:683,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:685,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:687,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:672,1
    - Dst: fiat_25519_subborrowx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:608,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:615,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:617,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:616,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:614,1
    - Dst: fiat_25519_addcarryx_u51
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:618,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:655,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:674,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:609,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:610,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:611,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:612,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:625,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:627,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:631,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:638,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:644,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:651,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:657,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:659,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:661,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:664,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:666,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:668,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:670,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 232
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint8_t
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 721
      start: 516
    functionDepth: 0
    functionLinenumber: 516
    functionLinenumberEnd: 721
    functionName: fiat_25519_to_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - fiat_25519_cmovznz_u64
    - UINT8_C
    - fiat_25519_addcarryx_u51
    - fiat_25519_subborrowx_u51
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_to_bytes(uint8_t out1[32],
      const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 907
      start: 891
    functionDepth: 0
    functionLinenumber: 891
    functionLinenumberEnd: 907
    functionName: fiat_25519_relax
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_relax(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:97,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_25519_uint1*
    - fiat_25519_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 100
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 100
    functionName: fiat_25519_subborrowx_u51
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u51(uint64_t*
      out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t
      arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:334,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:340,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:347,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:327,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:305,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:350,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:302,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:337,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:343,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:344,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 137
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 357
      start: 251
    functionDepth: 0
    functionLinenumber: 251
    functionLinenumberEnd: 357
    functionName: fiat_25519_carry_square
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - UINT8_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_square(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:384,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:384,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:385,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:386,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:387,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:388,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:389,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 50
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 396
      start: 366
    functionDepth: 0
    functionLinenumber: 366
    functionLinenumberEnd: 396
    functionName: fiat_25519_carry
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT8_C
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:461,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:462,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:463,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:464,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_loose_field_element
    - fiat_25519_tight_field_element
    constantsTouched: []
    func_position:
      end: 471
      start: 455
    functionDepth: 0
    functionLinenumber: 455
    functionLinenumberEnd: 471
    functionName: fiat_25519_opp
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_opp(fiat_25519_loose_field_element
      out1, const fiat_25519_tight_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:842,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:867,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:859,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:850,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 151
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - uint8_t
    constantsTouched: []
    func_position:
      end: 880
      start: 732
    functionDepth: 0
    functionLinenumber: 732
    functionLinenumberEnd: 880
    functionName: fiat_25519_from_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_from_bytes(fiat_25519_tight_field_element
      out1, const uint8_t arg1[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:945,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:948,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:946,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:949,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:947,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:951,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:954,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:957,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:960,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:963,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:970,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:967,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/curve25519_64.h:964,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 75
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_25519_tight_field_element
    - fiat_25519_loose_field_element
    constantsTouched: []
    func_position:
      end: 977
      start: 917
    functionDepth: 0
    functionLinenumber: 917
    functionLinenumberEnd: 977
    functionName: fiat_25519_carry_scmul_121666
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - UINT8_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_25519_FIAT_INLINE
    signature: 'static FIAT_25519_FIAT_INLINE void fiat_25519_carry_scmul_121666(fiat_25519_tight_field_element
      out1, const fiat_25519_loose_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: fiat_25519_value_barrier_u64
    functionSourceFile: /src/boringssl/third_party/fiat/curve25519_64.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: 'static __inline__ uint64_t fiat_25519_value_barrier_u64(uint64_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _subborrow_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:90,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_p256_uint1*
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 95
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 95
    functionName: fiat_p256_subborrowx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - _subborrow_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_subborrowx_u64(uint64_t*
      out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:353,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:358,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:362,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:368,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:381,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:415,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:428,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:433,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:391,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:404,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:409,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:439,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:382,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:380,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:352,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:354,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:357,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:359,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:363,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:375,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:386,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:416,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:429,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:410,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:392,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:405,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:440,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:350,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:379,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:402,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:446,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:380,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:385,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:351,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:357,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:367,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:427,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:442,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:447,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:430,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:443,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:403,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:366,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:377,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:425,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:373,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:389,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:420,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:430,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:436,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:445,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:412,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:394,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:396,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:401,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:406,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:378,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:349,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:421,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:426,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:437,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:439,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:431,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:428,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:413,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:397,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:434,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:442,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:387,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:355,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:360,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:364,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:358,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:369,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:383,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:417,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:381,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:423,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:371,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:393,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:399,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:404,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:406,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:441,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:370,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:418,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:382,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:424,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:372,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:365,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:359,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:388,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:419,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:429,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:376,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:411,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:395,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:400,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:405,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:407,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:440,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:444,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:435,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 134
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 452
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 452
    functionName: fiat_p256_mul
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_mul(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:142,1
    - Dst: fiat_p256_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:142,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:141,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    functionName: fiat_p256_cmovznz_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_value_barrier_u64
    - UINT64_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_cmovznz_u64(uint64_t*
      out1, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint64_t*
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1349
      start: 1345
    functionDepth: 0
    functionLinenumber: 1345
    functionLinenumberEnd: 1349
    functionName: fiat_p256_nonzero
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_nonzero(uint64_t* out1,
      const uint64_t arg1[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _addcarry_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:62,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_p256_uint1*
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 71
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 71
    functionName: fiat_p256_addcarryx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - _addcarry_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_addcarryx_u64(uint64_t*
      out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _umul128
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:114,1
    - Dst: __umulh
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:117,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    argCount: 4
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    argTypes:
    - uint64_t*
    - uint64_t*
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 121
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 121
    functionName: fiat_p256_mulx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - _umul128
    - __umulh
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_mulx_u64(uint64_t* out1,
      uint64_t* out2, uint64_t arg1, uint64_t arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1245,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1250,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1252,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1258,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1297,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1278,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1281,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1241,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1255,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1262,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1288,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1269,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1301,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1308,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1317,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1277,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1298,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1279,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1246,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1253,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1257,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1259,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1282,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1289,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1263,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1268,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1270,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1302,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1309,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1325,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1250,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1249,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1276,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1287,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1260,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1267,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1306,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1313,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1317,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1323,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1296,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1277,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1244,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1251,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1257,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1316,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1324,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1280,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1254,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1261,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1268,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1300,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1307,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1249,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1295,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1299,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1315,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1319,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1322,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1285,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1242,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1265,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1292,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1290,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1304,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1310,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1311,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1320,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1248,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1256,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1318,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1273,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1286,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1293,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1243,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1266,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1305,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1312,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1247,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1258,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1274,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1278,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1297,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1294,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1299,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1283,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1242,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1241,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1264,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1288,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1269,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1290,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1271,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1308,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1320,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1279,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1248,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1259,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1275,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1298,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1314,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1318,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1272,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1289,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1291,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1243,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1270,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1284,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1303,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1309,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1310,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 135
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_non_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 1330
      start: 1066
    functionDepth: 0
    functionLinenumber: 1066
    functionLinenumberEnd: 1330
    functionName: fiat_p256_to_montgomery
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_to_montgomery(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_non_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1698,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1700,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1699,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - out1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 1701
      start: 1696
    functionDepth: 0
    functionLinenumber: 1696
    functionLinenumberEnd: 1701
    functionName: fiat_p256_set_one
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_set_one(fiat_p256_montgomery_domain_field_element
      out1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 121
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint64_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 1686
      start: 1561
    functionDepth: 0
    functionLinenumber: 1561
    functionLinenumberEnd: 1686
    functionName: fiat_p256_from_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_from_bytes(uint64_t out1[4],
      const uint8_t arg1[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1880,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1892,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1896,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1897,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1929,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1924,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1917,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1934,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1918,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1920,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1885,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1887,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1891,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1949,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1950,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1959,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1947,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1920,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1935,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1900,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1941,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1952,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1964,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1942,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1893,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1903,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1956,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1916,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1939,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1945,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1918,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1933,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1962,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1940,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1890,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1904,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1949,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1963,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1928,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1925,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1884,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1905,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1919,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1953,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1958,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1883,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1894,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1901,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1907,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1906,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1938,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1961,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1922,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1878,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1908,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1914,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1943,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1946,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1889,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1899,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1902,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1957,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1926,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1944,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1932,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1886,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1905,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1915,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1954,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1895,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1906,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1951,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1948,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1881,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1882,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1908,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1921,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1930,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1936,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1923,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1946,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1931,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1888,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1922,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1898,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1909,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1937,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1947,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1955,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1960,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 157
    argCount: 10
    argNames:
    - out1
    - out2
    - out3
    - out4
    - out5
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - uint64_t*
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1984
      start: 1751
    functionDepth: 0
    functionLinenumber: 1751
    functionLinenumberEnd: 1984
    functionName: fiat_p256_divstep
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_divstep(uint64_t* out1,
      uint64_t out2[5], uint64_t out3[5], uint64_t out4[4], uint64_t out5[4], uint64_t
      arg1, const uint64_t arg2[5], const uint64_t arg3[5], const uint64_t arg4[4],
      const uint64_t arg5[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1003,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1003,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1005,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1005,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1007,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1018,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1020,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1022,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1022,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1023,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1025,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1041,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1032,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1033,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1041,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1023,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1030,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1031,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1046,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1036,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1037,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1034,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1035,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1009,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1011,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1011,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1013,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1016,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1029,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1038,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1039,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1043,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1048,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1004,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1004,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1006,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1008,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1015,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1019,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1021,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1021,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1024,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1026,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1047,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1044,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1010,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1012,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1012,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1014,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1010,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1017,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1027,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1028,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1042,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1034,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1042,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1032,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1033,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1049,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1045,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1044,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 79
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_non_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 1054
      start: 911
    functionDepth: 0
    functionLinenumber: 911
    functionLinenumberEnd: 1054
    functionName: fiat_p256_from_montgomery
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_from_montgomery(fiat_p256_non_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1714,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1715,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1717,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - out1
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1719
      start: 1713
    functionDepth: 0
    functionLinenumber: 1713
    functionLinenumberEnd: 1719
    functionName: fiat_p256_msat
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_msat(uint64_t out1[5]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1997,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1999,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1998,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:2000,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - out1
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 2001
      start: 1996
    functionDepth: 0
    functionLinenumber: 1996
    functionLinenumberEnd: 2001
    functionName: fiat_p256_divstep_precomp
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_divstep_precomp(uint64_t
      out1[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:843,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:845,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:846,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:844,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:847,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:847,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:848,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:849,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:849,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:850,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:851,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:851,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 856
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 856
    functionName: fiat_p256_sub
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_sub(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:886,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:889,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:890,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:887,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:888,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:890,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:891,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:892,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:892,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:893,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:894,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:894,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 899
      start: 868
    functionDepth: 0
    functionLinenumber: 868
    functionLinenumberEnd: 899
    functionName: fiat_p256_opp
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_opp(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:795,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:798,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:797,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:799,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:796,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:799,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:800,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:800,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:801,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:802,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:805,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:807,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:802,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:804,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:803,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:806,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 812
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 812
    functionName: fiat_p256_add
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_add(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1457,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1461,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1465,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1487,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1491,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1495,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1473,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1477,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1481,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1499,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1503,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1507,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1511,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1463,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1459,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1467,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1469,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1489,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1485,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1493,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1497,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1471,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1475,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1479,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1483,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1501,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1505,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1509,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 177
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint8_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1545
      start: 1392
    functionDepth: 0
    functionLinenumber: 1392
    functionLinenumberEnd: 1545
    functionName: fiat_p256_to_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - UINT8_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_to_bytes(uint8_t out1[32],
      const uint64_t arg1[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:699,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:712,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:717,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:747,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:659,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:665,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:675,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:688,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:693,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:722,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:740,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:750,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:735,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:700,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:702,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:706,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:713,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:711,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:718,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:748,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:751,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:689,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:687,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:694,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:661,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:664,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:666,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:670,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:676,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:723,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:682,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:738,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:741,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:749,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:657,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:686,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:734,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:698,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:711,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:716,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:752,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:687,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:692,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:660,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:658,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:664,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:669,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:674,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:735,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:749,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:754,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:683,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:704,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:709,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:720,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:742,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:696,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:673,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:732,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:680,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:685,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:737,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:744,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:710,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:753,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:728,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:656,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:733,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:746,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:736,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:746,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:701,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:707,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:712,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:714,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:719,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:747,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:743,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:726,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:662,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:667,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:671,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:665,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:677,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:690,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:724,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:688,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:730,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:703,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:708,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:713,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:678,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:684,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:695,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:727,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:679,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:725,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:689,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:666,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:731,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:672,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:736,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:737,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 134
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 759
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 759
    functionName: fiat_p256_square
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_square(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1369,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1370,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1372,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64_msvc.h:1371,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1377
      start: 1364
    functionDepth: 0
    functionLinenumber: 1364
    functionLinenumberEnd: 1377
    functionName: fiat_p256_selectznz
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64_msvc.h
    functionUses: []
    functionsReached:
    - fiat_p256_cmovznz_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_selectznz(uint64_t out1[4],
      fiat_p256_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:136,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 4
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    argTypes:
    - uint64_t*
    - uint64_t*
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 140
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 140
    functionName: fiat_p256_mulx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_mulx_u64(uint64_t* out1,
      uint64_t* out2, uint64_t arg1, uint64_t arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1042,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1046,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1047,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1044,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1044,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1049,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1071,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1072,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1076,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1081,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1036,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1036,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1038,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1038,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1041,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1048,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1051,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1053,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1054,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1054,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1058,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1067,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1066,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1074,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1056,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1074,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1068,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1056,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1063,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1065,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1082,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1064,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1065,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1067,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1045,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1043,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1043,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1045,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1050,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1060,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1061,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1066,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1075,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1075,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1078,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1077,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1077,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1037,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1037,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1039,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1040,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1052,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1055,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1055,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1057,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1059,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1062,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1069,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1070,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1080,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1079,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 79
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_non_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 1087
      start: 944
    functionDepth: 0
    functionLinenumber: 944
    functionLinenumberEnd: 1087
    functionName: fiat_p256_from_montgomery
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_from_montgomery(fiat_p256_non_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1747,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1750,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - out1
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1752
      start: 1746
    functionDepth: 0
    functionLinenumber: 1746
    functionLinenumberEnd: 1752
    functionName: fiat_p256_msat
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_msat(uint64_t out1[5]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:2030,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:2033,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:2031,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:2032,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - out1
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 2034
      start: 2029
    functionDepth: 0
    functionLinenumber: 2029
    functionLinenumberEnd: 2034
    functionName: fiat_p256_divstep_precomp
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_divstep_precomp(uint64_t
      out1[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:876,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:878,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:880,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:879,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:877,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:880,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:881,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:882,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:882,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:883,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:884,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:884,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 889
      start: 858
    functionDepth: 0
    functionLinenumber: 858
    functionLinenumberEnd: 889
    functionName: fiat_p256_sub
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_sub(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:919,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:920,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:923,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:922,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:921,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:923,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:924,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:925,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:925,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:926,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:927,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:927,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 932
      start: 901
    functionDepth: 0
    functionLinenumber: 901
    functionLinenumberEnd: 932
    functionName: fiat_p256_opp
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_opp(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - uint64_t
    constantsTouched: []
    func_position:
      end: 59
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 59
    functionName: fiat_p256_value_barrier_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: 'static __inline__ uint64_t fiat_p256_value_barrier_u64(uint64_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:85,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_p256_uint1*
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 89
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 89
    functionName: fiat_p256_addcarryx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_addcarryx_u64(uint64_t*
      out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 121
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint64_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 1719
      start: 1594
    functionDepth: 0
    functionLinenumber: 1594
    functionLinenumberEnd: 1719
    functionName: fiat_p256_from_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_from_bytes(uint64_t out1[4],
      const uint8_t arg1[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:161,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:160,1
    - Dst: fiat_p256_value_barrier_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:161,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 163
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 163
    functionName: fiat_p256_cmovznz_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_value_barrier_u64
    - UINT64_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_cmovznz_u64(uint64_t*
      out1, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1938,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1948,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1965,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1972,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1978,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1951,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1995,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1936,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1926,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1932,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1989,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1990,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1959,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1977,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1919,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1987,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1979,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1922,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1935,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1939,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1917,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1950,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1967,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1951,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1953,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1991,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1962,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1913,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1923,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1925,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1929,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1930,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1982,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1966,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1938,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1949,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1952,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1961,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1958,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1986,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1973,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1937,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1996,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1914,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1915,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1941,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1969,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1954,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1963,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1974,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1918,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1924,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1928,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1982,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1984,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1968,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1980,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1957,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1933,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1953,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1985,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1997,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1920,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1983,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1992,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1911,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1931,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1941,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1976,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1947,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1955,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1934,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1916,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1927,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1940,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1971,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1994,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1970,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1975,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1942,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1955,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1956,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1981,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1980,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1988,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1993,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1964,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1979,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1921,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1939,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 157
    argCount: 10
    argNames:
    - out1
    - out2
    - out3
    - out4
    - out5
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - uint64_t*
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 2017
      start: 1784
    functionDepth: 0
    functionLinenumber: 1784
    functionLinenumberEnd: 2017
    functionName: fiat_p256_divstep
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_divstep(uint64_t* out1,
      uint64_t out2[5], uint64_t out3[5], uint64_t out4[4], uint64_t out5[4], uint64_t
      arg1, const uint64_t arg2[5], const uint64_t arg3[5], const uint64_t arg4[4],
      const uint64_t arg5[4]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:378,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:380,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:383,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:385,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:389,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:394,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:408,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:442,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:401,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:406,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:425,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:430,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:436,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:432,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:467,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:461,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:407,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:441,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:379,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:384,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:388,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:411,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:454,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:459,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:456,1
    - Dst: CRYPTO_is_BMI1_capable
      Src: /src/boringssl/third_party/fiat/p256_64.h:178,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:418,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:431,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:466,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:449,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:460,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:468,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:385,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:386,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:398,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:396,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:445,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:391,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:408,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:414,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:450,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:455,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:420,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:422,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:432,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:438,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:397,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:395,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:409,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:443,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:402,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:384,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:381,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:390,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:407,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:413,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:431,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:437,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:419,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:421,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:426,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:433,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:466,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:470,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:375,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:404,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:447,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:463,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:465,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:465,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:428,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:472,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:403,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:399,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:392,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:444,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:415,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:446,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:451,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:456,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:462,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:471,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:455,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:457,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:439,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:423,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:427,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:377,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:383,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:406,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:393,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:453,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:468,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:473,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:435,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:417,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:430,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:469,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:454,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:405,1
    - Dst: fiat_p256_adx_mul
      Src: /src/boringssl/third_party/fiat/p256_64.h:180,1
    - Dst: CRYPTO_is_ADX_capable
      Src: /src/boringssl/third_party/fiat/p256_64.h:179,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:376,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:452,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:429,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/third_party/fiat/p256_64.h:178,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:412,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 144
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 478
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 478
    functionName: fiat_p256_mul
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_adx_mul
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    - CRYPTO_is_BMI2_capable
    - CRYPTO_is_BMI1_capable
    - CRYPTO_is_ADX_capable
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_mul(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint64_t*
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1382
      start: 1378
    functionDepth: 0
    functionLinenumber: 1378
    functionLinenumberEnd: 1382
    functionName: fiat_p256_nonzero
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_nonzero(uint64_t* out1,
      const uint64_t arg1[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:112,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t*
    - fiat_p256_uint1*
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 115
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 115
    functionName: fiat_p256_subborrowx_u64
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_subborrowx_u64(uint64_t*
      out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1293,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1300,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1326,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1319,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1339,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1346,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1350,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1283,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1281,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1289,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1309,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1276,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1299,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1306,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1338,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1343,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1345,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1282,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1351,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1295,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1302,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1321,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1314,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1350,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1278,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1285,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1283,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1291,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1330,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1349,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1357,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1320,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1287,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1294,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1301,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1313,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1333,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1340,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1356,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1329,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1310,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1277,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1284,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1282,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1290,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1354,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1275,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1296,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1302,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1321,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1323,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1316,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1335,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1342,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1353,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1358,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1312,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1280,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1291,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1307,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1330,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1332,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1303,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1301,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1274,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1288,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1322,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1315,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1334,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1341,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1311,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1310,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1279,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1286,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1290,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1292,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1331,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1275,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1298,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1305,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1323,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1325,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1318,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1337,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1342,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1344,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1353,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1312,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1281,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1328,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1332,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1348,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1352,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1355,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1322,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1303,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1276,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1274,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1297,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1324,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1304,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1317,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1336,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1341,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1343,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1327,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1308,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1311,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1292,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1331,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1347,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1351,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 135
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_non_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 1363
      start: 1099
    functionDepth: 0
    functionLinenumber: 1099
    functionLinenumberEnd: 1363
    functionName: fiat_p256_to_montgomery
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_to_montgomery(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_non_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1731,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1732,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1733,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - out1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 1734
      start: 1729
    functionDepth: 0
    functionLinenumber: 1729
    functionLinenumberEnd: 1734
    functionName: fiat_p256_set_one
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - UINT64_C
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_set_one(fiat_p256_montgomery_domain_field_element
      out1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:828,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:831,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:830,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:829,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:832,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:832,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:833,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:833,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:834,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:835,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:836,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:838,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:839,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:835,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:837,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:840,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 845
      start: 805
    functionDepth: 0
    functionLinenumber: 805
    functionLinenumberEnd: 845
    functionName: fiat_p256_add
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_subborrowx_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_add(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1506,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1510,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1516,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1532,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1536,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1540,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1490,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1494,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1500,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1524,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1520,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1530,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1504,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1508,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1512,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1514,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1534,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1538,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1542,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1544,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1498,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1496,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1492,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1502,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1522,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1526,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1518,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:1528,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 177
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint8_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1578
      start: 1425
    functionDepth: 0
    functionLinenumber: 1425
    functionLinenumberEnd: 1578
    functionName: fiat_p256_to_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - UINT8_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_to_bytes(uint8_t out1[32],
      const uint64_t arg1[4]) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:690,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:719,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:743,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:779,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:718,1
    - Dst: CRYPTO_is_BMI1_capable
      Src: /src/boringssl/third_party/fiat/p256_64.h:492,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:689,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:761,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:766,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:777,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:779,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:775,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:742,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:786,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:770,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:693,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:698,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:702,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:708,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:721,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:755,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:768,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:773,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:774,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:782,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:732,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:745,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:780,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:720,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:725,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:691,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:697,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:707,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:767,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:782,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:787,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:768,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:749,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:731,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:744,1
    - Dst: fiat_p256_adx_sqr
      Src: /src/boringssl/third_party/fiat/p256_64.h:494,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:698,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:695,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:704,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:721,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:727,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:711,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:709,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:723,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:757,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:747,1
    - Dst: CRYPTO_is_ADX_capable
      Src: /src/boringssl/third_party/fiat/p256_64.h:493,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:735,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:740,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:745,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:751,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:780,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:784,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:720,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:726,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:722,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:756,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:692,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:694,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:697,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:699,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:715,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:716,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:733,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:739,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:744,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:746,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:750,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:781,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:703,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:769,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:771,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:706,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:717,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:729,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:713,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:760,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:765,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:770,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:776,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:785,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:763,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:764,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:737,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:753,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:722,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:728,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:712,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:710,1
    - Dst: CRYPTO_is_BMI2_capable
      Src: /src/boringssl/third_party/fiat/p256_64.h:492,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:699,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:758,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:700,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:759,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:705,1
    - Dst: fiat_p256_subborrowx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:783,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:769,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:752,1
    - Dst: fiat_p256_mulx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:734,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:736,1
    - Dst: fiat_p256_addcarryx_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:741,1
    - Dst: UINT64_C
      Src: /src/boringssl/third_party/fiat/p256_64.h:746,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 144
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 792
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 792
    functionName: fiat_p256_square
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u64
    - fiat_p256_cmovznz_u64
    - UINT64_C
    - UINT32_C
    - fiat_p256_adx_sqr
    - fiat_p256_mulx_u64
    - fiat_p256_subborrowx_u64
    - CRYPTO_is_BMI2_capable
    - CRYPTO_is_BMI1_capable
    - CRYPTO_is_ADX_capable
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_square(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1402,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1405,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1403,1
    - Dst: fiat_p256_cmovznz_u64
      Src: /src/boringssl/third_party/fiat/p256_64.h:1404,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint64_t
    - fiat_p256_uint1
    - uint64_t
    - uint64_t
    constantsTouched: []
    func_position:
      end: 1410
      start: 1397
    functionDepth: 0
    functionLinenumber: 1397
    functionLinenumberEnd: 1410
    functionName: fiat_p256_selectznz
    functionSourceFile: /src/boringssl/third_party/fiat/p256_64.h
    functionUses: []
    functionsReached:
    - fiat_p256_cmovznz_u64
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_selectznz(uint64_t out1[4],
      fiat_p256_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1870,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1907,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1920,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1939,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1926,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2081,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2176,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2197,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1954,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2048,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2054,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2111,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2143,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1919,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1925,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1906,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1869,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1887,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1938,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2080,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2175,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2180,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2196,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2110,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1953,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1972,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2053,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2066,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2142,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1868,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1905,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1937,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2098,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2174,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2179,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1952,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1971,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2033,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2047,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2052,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2065,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2079,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1886,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1904,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1918,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1936,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1899,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2097,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2173,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2178,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2192,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1951,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1970,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2032,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2046,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2051,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2064,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2204,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2096,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1885,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1903,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1917,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1935,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1898,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2078,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2159,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2172,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2177,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2045,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1969,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2077,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2158,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1916,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1884,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1897,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2171,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2190,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1950,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1968,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2031,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2044,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2063,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2076,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2157,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1896,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1902,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1934,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2095,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2170,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2189,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2062,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1967,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2030,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2043,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2156,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2094,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1895,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1901,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1933,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2169,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2188,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2196,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2029,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2042,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2061,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2195,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1900,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1932,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2093,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2155,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2187,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1966,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2028,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2060,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1894,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2154,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1998,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2092,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2168,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2186,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2205,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1965,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1970,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2027,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2059,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2210,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2096,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2153,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1893,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1997,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2091,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2185,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2058,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1964,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1969,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2026,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1996,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1892,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2090,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1963,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1968,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1982,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2124,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2089,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1882,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1891,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2014,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2095,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2152,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1995,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2108,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2184,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2191,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2123,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1949,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1962,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1967,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1981,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2013,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2094,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1881,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1994,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2075,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2107,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2088,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1948,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1961,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1980,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2122,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2195,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2106,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2012,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2093,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1993,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2074,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1880,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2140,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1947,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1960,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1979,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2121,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2105,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1992,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2073,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2087,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2011,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1879,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2120,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1946,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1959,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1978,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2139,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2010,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2086,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1945,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1977,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2138,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2206,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2072,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1878,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2085,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2009,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2104,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2119,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1944,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1958,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1976,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2137,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2008,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1877,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1914,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2071,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2103,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2084,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2194,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2118,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2070,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2102,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1876,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1913,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2194,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2136,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1943,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1975,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1912,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2007,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2012,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2069,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2101,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1942,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1974,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2040,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2135,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2006,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1930,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1911,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2011,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2068,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2100,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2024,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2134,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2005,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2166,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2010,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1929,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2207,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2138,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2133,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2039,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2202,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2009,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2023,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2004,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2165,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1910,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1928,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1991,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2132,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2137,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2038,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2056,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2201,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1909,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1927,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1990,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2022,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2003,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2164,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2209,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2037,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2150,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2131,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1989,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2021,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1908,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1889,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2002,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2163,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2182,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2055,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2136,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2036,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2117,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2149,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2130,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2001,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2162,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1875,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1888,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1926,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1988,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2020,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2181,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2116,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2148,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2035,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2054,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2129,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2135,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1925,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1874,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1987,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2019,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1887,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2000,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2161,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2180,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2147,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2034,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2053,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2115,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1986,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2018,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1873,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1924,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2179,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2203,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2128,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2052,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2146,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2114,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1985,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2017,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2160,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1928,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1872,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1886,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1923,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2178,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2200,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2113,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2127,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2051,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2145,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2201,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2208,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2016,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1871,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1885,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1927,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1922,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1984,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2177,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2199,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2126,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1956,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2050,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1940,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1884,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1921,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2082,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2198,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2112,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1955,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2049,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 419
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 2219
      start: 1196
    functionDepth: 0
    functionLinenumber: 1196
    functionLinenumberEnd: 2219
    functionName: fiat_p256_square
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - fiat_p256_mulx_u32
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_square(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3591,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3619,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3668,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3686,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3729,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3869,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3595,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3601,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3624,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3792,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3774,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3835,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3874,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3590,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3618,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3647,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3667,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3672,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3728,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3817,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3685,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3623,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3600,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3773,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3791,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3712,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3834,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3589,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3646,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3666,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3727,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3829,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3857,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3594,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3599,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3622,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3711,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3772,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3724,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3752,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3790,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3833,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3816,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3617,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3588,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3645,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3665,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3671,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3718,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3726,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3828,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3856,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3723,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3777,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3613,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3621,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3593,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3751,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3710,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3771,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3832,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3827,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3587,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3616,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3644,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3664,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3670,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3725,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3815,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3855,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3860,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3722,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3776,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3750,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3620,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3814,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3592,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3615,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3643,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3669,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3826,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3868,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3749,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3770,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3823,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3709,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3721,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3775,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3831,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3861,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3813,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3825,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3591,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3614,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3619,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3663,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3854,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3875,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3708,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3769,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3720,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3774,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3748,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3830,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3870,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3812,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3824,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3590,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3618,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3662,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3853,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3707,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3768,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3719,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3589,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3612,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3661,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3811,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3829,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3724,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3706,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3767,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3617,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3588,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3611,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3660,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3810,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3828,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3705,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3766,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3723,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3809,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3610,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3616,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3659,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3827,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3860,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3704,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3765,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3722,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3859,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3615,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3658,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3826,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3703,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3764,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3642,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3721,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3787,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3825,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3609,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3657,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3747,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3808,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3759,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3871,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3720,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3641,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3654,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3682,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3702,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3763,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3746,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3807,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3608,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3648,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3656,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3758,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3812,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3786,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3653,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3681,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3707,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3852,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3745,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3806,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3757,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3811,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3762,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3640,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3652,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3680,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3701,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3706,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3851,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3756,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3785,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3805,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3744,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3810,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3655,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3858,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3753,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3761,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3705,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3700,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3639,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3651,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3679,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3850,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3784,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3743,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3804,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3638,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3650,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3699,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3704,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3760,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3849,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3859,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3809,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3742,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3803,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3783,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3755,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3637,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3649,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3678,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3698,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3848,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3741,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3802,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3754,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3759,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3636,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3654,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3697,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3758,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3867,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3635,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3607,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3653,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3696,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3847,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3872,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3757,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3740,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3801,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3866,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3606,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3634,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3652,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3695,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3846,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3800,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3739,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3756,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3605,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3651,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3845,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3799,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3738,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3677,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3689,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3633,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3604,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3650,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3694,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3844,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3742,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3755,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3737,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3798,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3676,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3688,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3717,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3782,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3794,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3632,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3637,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3603,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3693,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3843,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3675,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3687,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3716,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3736,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3797,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3741,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3631,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3636,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3692,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3822,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3781,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3842,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3715,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3674,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3735,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3788,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3796,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3873,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3793,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3630,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3635,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3602,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3683,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3691,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3821,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3780,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3841,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3847,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3734,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3795,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3673,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3686,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3714,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3740,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3866,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3820,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3629,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3601,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3634,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3690,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3779,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3792,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3840,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3846,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3865,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3672,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3685,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3713,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3733,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3739,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3628,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3600,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3791,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3819,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3845,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3864,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3684,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3689,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3778,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3790,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3627,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3599,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3818,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3839,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3844,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3863,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3732,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3671,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3688,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3789,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3794,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3777,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3626,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3598,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3838,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3862,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3670,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3687,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3731,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3776,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3597,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3837,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3592,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3669,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3730,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3775,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3793,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3625,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3596,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:3602,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3836,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3861,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 412
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_non_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 3884
      start: 3000
    functionDepth: 0
    functionLinenumber: 3000
    functionLinenumberEnd: 3884
    functionName: fiat_p256_to_montgomery
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - fiat_p256_mulx_u32
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_to_montgomery(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_non_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:850,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:882,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:868,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:863,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1124,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1061,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1043,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:900,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1137,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1142,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:915,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:934,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:996,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1010,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1028,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:862,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:849,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:867,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:881,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:899,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1060,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1123,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1042,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1136,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1155,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:933,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1009,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:861,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1041,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1122,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1135,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1154,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:932,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:995,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1008,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1027,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1059,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1121,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:860,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:866,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:898,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1134,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1153,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1161,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1026,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:931,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:994,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1007,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1160,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1120,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:963,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:859,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:865,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:897,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1058,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1133,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1152,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1025,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:993,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1057,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1119,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1151,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1170,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:930,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:935,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:992,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1024,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1175,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1056,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1061,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1118,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:858,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:962,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1150,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1023,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:929,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:934,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:947,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:991,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1055,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:979,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1060,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1117,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:961,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:857,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1149,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1089,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:928,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:933,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:847,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:856,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:960,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1073,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1054,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1159,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:914,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:927,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:932,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:946,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1088,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:846,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1053,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:978,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1059,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:959,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1040,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1072,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:913,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:926,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:945,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1087,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1160,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1052,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:845,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:977,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1058,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:958,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1039,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1071,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1086,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:912,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:925,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:944,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1105,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:976,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:844,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:957,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1038,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1070,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1085,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:911,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:924,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:943,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1104,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1037,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1069,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:843,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1051,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:975,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1103,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:910,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:923,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:942,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1084,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1171,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1050,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:842,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:974,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1036,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1068,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:909,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:941,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1102,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1049,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:973,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:879,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1159,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1083,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:908,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:940,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1101,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:972,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1035,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1067,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:841,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:878,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1100,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:907,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:939,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:877,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1066,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:977,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1034,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1005,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:876,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:895,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:989,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:971,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:976,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1033,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1065,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1004,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1099,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:988,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:875,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:894,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:956,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:970,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1131,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:975,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1172,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1098,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1103,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1167,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:969,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1130,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:893,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:974,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1021,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1102,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1003,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1097,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1166,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:874,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:892,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:955,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:987,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:968,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1129,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1096,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1002,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1020,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1101,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1115,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1174,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:954,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:986,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:854,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:873,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:891,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:967,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1128,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1147,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1095,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1001,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1082,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1114,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:985,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:966,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1127,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:840,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:853,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:953,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1146,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1094,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1019,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1100,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1000,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1081,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1113,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:965,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1126,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:952,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:984,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:852,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:890,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:839,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1145,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1080,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1112,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1093,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1018,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:999,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:838,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:851,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:889,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:951,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:983,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1125,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1144,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1165,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1168,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1017,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1079,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1111,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:888,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:837,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:893,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:950,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:982,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1143,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1156,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1092,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1016,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1078,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1110,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1166,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1173,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:981,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:836,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:850,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:887,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:892,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:949,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1142,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1164,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:921,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1015,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1077,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1109,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1091,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:886,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:835,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:849,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:905,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:891,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1047,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1141,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1163,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:920,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1014,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1046,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:885,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:904,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:872,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1162,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1076,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1108,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:919,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1013,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1019,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1045,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:890,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:852,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:884,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:834,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:903,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:871,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1140,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1145,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1161,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1031,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1107,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1018,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1075,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:918,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:937,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1012,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1063,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1044,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:833,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:851,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:883,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:902,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:870,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1139,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1144,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1157,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1017,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:998,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1030,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:917,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:936,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:901,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:864,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:869,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1062,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1138,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1143,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:1016,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1029,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1011,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:916,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:935,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:997,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:1169,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 419
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 1184
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 1184
    functionName: fiat_p256_mul
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - fiat_p256_mulx_u32
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_mul(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4029,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4033,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4041,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4057,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4045,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4053,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4069,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4023,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4027,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4037,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4039,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4049,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4061,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4031,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4055,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4043,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4065,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4067,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4025,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4035,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4051,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4047,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4059,1
    - Dst: UINT8_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4063,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 161
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint8_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 4103
      start: 3958
    functionDepth: 0
    functionLinenumber: 3958
    functionLinenumberEnd: 4103
    functionName: fiat_p256_to_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT8_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_to_bytes(uint8_t out1[32],
      const uint32_t arg1[8]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 1
    argNames:
    - a
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: fiat_p256_value_barrier_u32
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: 'static __inline__ uint32_t fiat_p256_value_barrier_u32(uint32_t a) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 113
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint32_t
    - uint8_t
    constantsTouched: []
    func_position:
      end: 4240
      start: 4119
    functionDepth: 0
    functionLinenumber: 4119
    functionLinenumberEnd: 4240
    functionName: fiat_p256_from_bytes
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_from_bytes(uint32_t out1[8],
      const uint8_t arg1[32]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4272,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4273,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4274,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - out1
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 4281
      start: 4271
    functionDepth: 0
    functionLinenumber: 4271
    functionLinenumberEnd: 4281
    functionName: fiat_p256_msat
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_msat(uint32_t out1[9]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - uint32_t*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 3903
      start: 3899
    functionDepth: 0
    functionLinenumber: 3899
    functionLinenumberEnd: 3903
    functionName: fiat_p256_nonzero
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_nonzero(uint32_t* out1,
      const uint32_t arg1[8]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:145,1
    - Dst: fiat_p256_value_barrier_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:146,1
    - Dst: fiat_p256_value_barrier_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:146,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_p256_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 148
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 148
    functionName: fiat_p256_cmovznz_u32
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - fiat_p256_value_barrier_u32
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_cmovznz_u32(uint32_t*
      out1, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2355,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2356,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2359,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2357,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2358,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2369,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2367,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2370,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2366,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2364,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2360,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2361,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2362,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2363,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2363,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2368,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2365,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2371,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 2380
      start: 2321
    functionDepth: 0
    functionLinenumber: 2321
    functionLinenumberEnd: 2380
    functionName: fiat_p256_sub
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_sub(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2427,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2431,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2434,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2434,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2438,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2436,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2440,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2441,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2442,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2430,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2429,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2433,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2437,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2439,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2435,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2426,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2428,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2432,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 2451
      start: 2392
    functionDepth: 0
    functionLinenumber: 2392
    functionLinenumberEnd: 2451
    functionName: fiat_p256_opp
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_opp(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:121,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 4
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    argTypes:
    - uint32_t*
    - uint32_t*
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 125
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 125
    functionName: fiat_p256_mulx_u32
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_mulx_u32(uint32_t* out1,
      uint32_t* out2, uint32_t arg1, uint32_t arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2275,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2277,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2276,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2286,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2288,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2292,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2296,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2290,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2290,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2291,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2295,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2299,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2298,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2278,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2279,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2280,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2281,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2282,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2283,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2283,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2285,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2285,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2289,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2287,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2284,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2284,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2293,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2297,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2294,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 38
    argCount: 3
    argNames:
    - out1
    - arg1
    - arg2
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 2308
      start: 2232
    functionDepth: 0
    functionLinenumber: 2232
    functionLinenumberEnd: 2308
    functionName: fiat_p256_add
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_add(fiat_p256_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element
      arg2) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4254,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4255,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4256,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - out1
    argTypes:
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 4259
      start: 4250
    functionDepth: 0
    functionLinenumber: 4250
    functionLinenumberEnd: 4259
    functionName: fiat_p256_set_one
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_set_one(fiat_p256_montgomery_domain_field_element
      out1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4550,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4556,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4576,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4582,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4596,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4654,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4666,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4685,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4662,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4686,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4661,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4553,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4568,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4592,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4617,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4598,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4572,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4615,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4649,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4655,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4691,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4669,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4641,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4668,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4681,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4690,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4700,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4677,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4676,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4659,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4587,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4599,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4562,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4573,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4579,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4614,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4616,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4625,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4629,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4630,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4640,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4552,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4593,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4595,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4635,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4658,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4674,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4694,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4586,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4558,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4565,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4569,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4592,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4598,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4613,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4647,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4653,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4665,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4669,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4651,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4687,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4697,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4578,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4594,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4652,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4673,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4678,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4682,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4675,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4585,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4574,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4575,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4549,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4555,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4561,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4581,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4612,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4622,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4626,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4695,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4701,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4646,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4544,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4593,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4639,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4667,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4670,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4672,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4683,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4688,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4664,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4698,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4660,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4584,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4557,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4566,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4570,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4621,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4611,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4634,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4645,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4657,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4663,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4636,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4547,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4548,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4554,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4591,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4656,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4671,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4679,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4692,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4702,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4675,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4693,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4689,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4699,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4583,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4610,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4560,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4564,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4620,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4590,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4623,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4627,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4631,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4644,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4580,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4670,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4684,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4551,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4567,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4571,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4577,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4609,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4619,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4589,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4632,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4638,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4650,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4597,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4591,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4637,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4668,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4680,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4696,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4588,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4608,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4546,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4559,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4563,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4618,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4616,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4624,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4628,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4642,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4648,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:4643,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 269
    argCount: 10
    argNames:
    - out1
    - out2
    - out3
    - out4
    - out5
    - arg1
    - arg2
    - arg3
    - arg4
    - arg5
    argTypes:
    - uint32_t*
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 4738
      start: 4313
    functionDepth: 0
    functionLinenumber: 4313
    functionLinenumberEnd: 4738
    functionName: fiat_p256_divstep
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_divstep(uint32_t* out1,
      uint32_t out2[9], uint32_t out3[9], uint32_t out4[8], uint32_t out5[8], uint32_t
      arg1, const uint32_t arg2[9], const uint32_t arg3[9], const uint32_t arg4[8],
      const uint32_t arg5[8]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:97,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_p256_uint1*
    - fiat_p256_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 100
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 100
    functionName: fiat_p256_subborrowx_u32
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_subborrowx_u32(uint32_t*
      out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3927,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3930,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3931,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3929,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3928,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3932,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3933,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:3934,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 4
    argNames:
    - out1
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t
    - fiat_p256_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 3943
      start: 3918
    functionDepth: 0
    functionLinenumber: 3918
    functionLinenumberEnd: 3943
    functionName: fiat_p256_selectznz
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - fiat_p256_cmovznz_u32
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_selectznz(uint32_t out1[8],
      fiat_p256_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4751,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4754,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4755,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4752,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4753,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4756,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4757,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:4758,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - out1
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 4759
      start: 4750
    functionDepth: 0
    functionLinenumber: 4750
    functionLinenumberEnd: 4759
    functionName: fiat_p256_divstep_precomp
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_divstep_precomp(uint32_t
      out1[8]) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:70,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 5
    argNames:
    - out1
    - out2
    - arg1
    - arg2
    - arg3
    argTypes:
    - uint32_t*
    - fiat_p256_uint1*
    - fiat_p256_uint1
    - uint32_t
    - uint32_t
    constantsTouched: []
    func_position:
      end: 74
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 74
    functionName: fiat_p256_addcarryx_u32
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_addcarryx_u32(uint32_t*
      out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2852,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2865,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2892,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2912,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2938,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2958,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2931,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2930,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2976,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2862,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2809,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2811,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2817,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2835,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2855,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2824,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2837,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2881,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2895,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2910,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2921,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2904,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2903,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2956,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2953,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2899,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2952,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2845,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2851,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2891,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2911,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2937,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2957,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2946,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2979,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2945,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2928,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2925,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2924,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2969,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2822,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2861,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2834,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2808,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2810,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2823,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2836,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2875,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2880,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2882,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2918,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2919,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2967,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2897,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2950,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2844,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2848,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2850,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2870,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2916,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2936,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2962,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2943,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2922,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2940,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2821,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2809,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2842,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2847,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2859,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2835,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2874,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2879,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2881,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2900,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2926,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2927,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2905,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2902,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2843,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2849,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2869,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2890,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2973,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2951,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2948,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2894,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2820,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2841,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2822,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2860,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2858,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2807,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2808,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2834,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2871,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2873,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2907,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2908,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2965,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2887,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2917,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2886,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2830,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2868,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2889,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2915,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2928,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2935,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2961,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2977,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2880,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2933,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2932,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2963,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2929,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2972,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2806,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2819,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2821,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2840,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2831,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2859,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2857,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2833,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2872,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2879,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2905,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2902,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2955,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2901,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2954,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2898,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2951,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2829,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2854,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2888,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2914,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2934,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2947,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2948,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2960,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2964,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2970,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2944,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2927,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2926,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2923,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2968,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2839,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2858,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2856,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2807,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2814,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2820,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2827,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2832,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2878,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2885,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2920,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2965,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2974,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2828,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2853,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2867,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2893,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2896,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2939,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2949,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2959,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2971,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2942,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2941,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2806,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2819,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2813,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2838,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2864,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2857,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2826,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2837,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2877,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2884,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2925,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2978,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2904,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2903,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2963,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2815,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2846,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2866,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2913,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2964,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2970,1
    - Dst: fiat_p256_cmovznz_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2975,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2950,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2949,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2836,1
    - Dst: fiat_p256_mulx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2856,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2812,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2816,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2818,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2863,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2825,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2876,1
    - Dst: UINT32_C
      Src: /src/boringssl/third_party/fiat/p256_32.h:2882,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2883,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2906,1
    - Dst: fiat_p256_addcarryx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2909,1
    - Dst: fiat_p256_subborrowx_u32
      Src: /src/boringssl/third_party/fiat/p256_32.h:2966,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 236
    argCount: 2
    argNames:
    - out1
    - arg1
    argTypes:
    - fiat_p256_non_montgomery_domain_field_element
    - fiat_p256_montgomery_domain_field_element
    constantsTouched: []
    func_position:
      end: 2988
      start: 2463
    functionDepth: 0
    functionLinenumber: 2463
    functionLinenumberEnd: 2988
    functionName: fiat_p256_from_montgomery
    functionSourceFile: /src/boringssl/third_party/fiat/p256_32.h
    functionUses: []
    functionsReached:
    - UINT32_C
    - fiat_p256_addcarryx_u32
    - fiat_p256_cmovznz_u32
    - fiat_p256_subborrowx_u32
    - fiat_p256_mulx_u32
    linkageType: ''
    returnType: FIAT_P256_FIAT_INLINE
    signature: 'static FIAT_P256_FIAT_INLINE void fiat_p256_from_montgomery(fiat_p256_non_montgomery_domain_field_element
      out1, const fiat_p256_montgomery_domain_field_element arg1) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_GET_FUNC
      Src: /src/boringssl/rust/bssl-sys/rust_wrapper.c:26,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - packed_error
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 27
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 27
    functionName: ERR_GET_FUNC_RUST
    functionSourceFile: /src/boringssl/rust/bssl-sys/rust_wrapper.c
    functionUses: []
    functionsReached:
    - ERR_GET_FUNC
    linkageType: ''
    returnType: int
    signature: 'int ERR_GET_FUNC_RUST(uint32_t packed_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_GET_LIB
      Src: /src/boringssl/rust/bssl-sys/rust_wrapper.c:18,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - packed_error
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 19
      start: 17
    functionDepth: 0
    functionLinenumber: 17
    functionLinenumberEnd: 19
    functionName: ERR_GET_LIB_RUST
    functionSourceFile: /src/boringssl/rust/bssl-sys/rust_wrapper.c
    functionUses: []
    functionsReached:
    - ERR_GET_LIB
    linkageType: ''
    returnType: int
    signature: 'int ERR_GET_LIB_RUST(uint32_t packed_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CBS_init
      Src: /src/boringssl/rust/bssl-sys/rust_wrapper.c:30,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 3
    argNames:
    - cbs
    - data
    - len
    argTypes:
    - CBS*
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 31
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 31
    functionName: CBS_init_RUST
    functionSourceFile: /src/boringssl/rust/bssl-sys/rust_wrapper.c
    functionUses: []
    functionsReached:
    - CBS_init
    linkageType: ''
    returnType: void
    signature: 'void CBS_init_RUST(CBS *cbs, const uint8_t *data, size_t len) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ERR_GET_REASON
      Src: /src/boringssl/rust/bssl-sys/rust_wrapper.c:22,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - packed_error
    argTypes:
    - uint32_t
    constantsTouched: []
    func_position:
      end: 23
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 23
    functionName: ERR_GET_REASON_RUST
    functionSourceFile: /src/boringssl/rust/bssl-sys/rust_wrapper.c
    functionUses: []
    functionsReached:
    - ERR_GET_REASON
    linkageType: ''
    returnType: int
    signature: 'int ERR_GET_REASON_RUST(uint32_t packed_error) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CBS_len
      Src: /src/boringssl/rust/bssl-sys/rust_wrapper.c:34,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - cbs
    argTypes:
    - CBS*
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: CBS_len_RUST
    functionSourceFile: /src/boringssl/rust/bssl-sys/rust_wrapper.c
    functionUses: []
    functionsReached:
    - CBS_len
    linkageType: ''
    returnType: size_t
    signature: 'size_t CBS_len_RUST(const CBS *cbs) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: cipher_ctx_mode_aead
      Src: /src/fuzz_crypto.c:37,1
    - Dst: ASSERT
      Src: /src/fuzz_crypto.c:39,1
    - Dst: ASSERT
      Src: /src/fuzz_crypto.c:41,1
    - Dst: cipher_kt_iv_size
      Src: /src/fuzz_crypto.c:39,1
    - Dst: cipher_kt_iv_size
      Src: /src/fuzz_crypto.c:40,1
    - Dst: ASSERT
      Src: /src/fuzz_crypto.c:42,1
    - Dst: memcpy
      Src: /src/fuzz_crypto.c:43,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 3
    argNames:
    - ctx
    - key
    - key_len
    argTypes:
    - struct key_ctx*
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 46
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 46
    functionName: key_ctx_update_implicit_iv
    functionSourceFile: /src/fuzz_crypto.c
    functionUses: []
    functionsReached:
    - cipher_ctx_mode_aead
    - cipher_kt_iv_size
    - memcpy
    - ASSERT
    linkageType: ''
    returnType: void
    signature: 'static void key_ctx_update_implicit_iv(struct key_ctx *ctx, uint8_t
      *key, size_t key_len) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_crypto.c:49,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_crypto.c:50,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_crypto.c:51,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_crypto.c:52,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_crypto.c:53,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_crypto.c:54,1
    - Dst: TUN_MTU_SIZE
      Src: /src/fuzz_crypto.c:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - frame
    argTypes:
    - struct frame*
    constantsTouched: []
    func_position:
      end: 61
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 61
    functionName: init_frame
    functionSourceFile: /src/fuzz_crypto.c
    functionUses: []
    functionsReached:
    - fuzz_randomizer_get_int
    - TUN_MTU_SIZE
    linkageType: ''
    returnType: int
    signature: 'static int init_frame(struct frame *frame) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_malloc_init
      Src: /src/fuzz_crypto.c:64,1
    - Dst: OpenSSL_add_ssl_algorithms
      Src: /src/fuzz_crypto.c:69,1
    - Dst: SSL_library_init
      Src: /src/fuzz_crypto.c:65,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/fuzz_crypto.c:68,1
    - Dst: ERR_load_crypto_strings
      Src: /src/fuzz_crypto.c:66,1
    - Dst: SSL_load_error_strings
      Src: /src/fuzz_crypto.c:71,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int*
    - char***
    constantsTouched: []
    func_position:
      end: 73
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 73
    functionName: LLVMFuzzerInitialize
    functionSourceFile: /src/fuzz_crypto.c
    functionUses: []
    functionsReached:
    - SSL_load_error_strings
    - OpenSSL_add_ssl_algorithms
    - OpenSSL_add_all_algorithms
    - OPENSSL_malloc_init
    - SSL_library_init
    - ERR_load_crypto_strings
    linkageType: ''
    returnType: int
    signature: 'int LLVMFuzzerInitialize(int *argc, char ***argv) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: update_time
      Src: /src/fuzz_packet_id.c:31,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_packet_id.c:33,1
    - Dst: packet_id_test
      Src: /src/fuzz_packet_id.c:36,1
    - Dst: memcmp
      Src: /src/fuzz_packet_id.c:47,1
    - Dst: packet_id_write
      Src: /src/fuzz_packet_id.c:55,1
    - Dst: gc_free
      Src: /src/fuzz_packet_id.c:71,1
    - Dst: fopen
      Src: /src/fuzz_packet_id.c:76,1
    - Dst: fclose
      Src: /src/fuzz_packet_id.c:81,1
    - Dst: packet_id_persist_init
      Src: /src/fuzz_packet_id.c:85,1
    - Dst: localtime
      Src: /src/fuzz_packet_id.c:91,1
    - Dst: packet_id_persist_load
      Src: /src/fuzz_packet_id.c:86,1
    - Dst: packet_id_reap_test
      Src: /src/fuzz_packet_id.c:35,1
    - Dst: packet_id_free
      Src: /src/fuzz_packet_id.c:41,1
    - Dst: get_random_string
      Src: /src/fuzz_packet_id.c:44,1
    - Dst: localtime
      Src: /src/fuzz_packet_id.c:52,1
    - Dst: strlen
      Src: /src/fuzz_packet_id.c:45,1
    - Dst: packet_id_write
      Src: /src/fuzz_packet_id.c:56,1
    - Dst: string_alloc_buf
      Src: /src/fuzz_packet_id.c:67,1
    - Dst: packet_id_read
      Src: /src/fuzz_packet_id.c:69,1
    - Dst: packet_id_read
      Src: /src/fuzz_packet_id.c:70,1
    - Dst: memset
      Src: /src/fuzz_packet_id.c:84,1
    - Dst: fuzz_random_destroy
      Src: /src/fuzz_packet_id.c:101,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_packet_id.c:93,1
    - Dst: packet_id_write
      Src: /src/fuzz_packet_id.c:57,1
    - Dst: get_random_string
      Src: /src/fuzz_packet_id.c:66,1
    - Dst: free
      Src: /src/fuzz_packet_id.c:68,1
    - Dst: sprintf
      Src: /src/fuzz_packet_id.c:74,1
    - Dst: getpid
      Src: /src/fuzz_packet_id.c:74,1
    - Dst: fwrite
      Src: /src/fuzz_packet_id.c:80,1
    - Dst: gc_new
      Src: /src/fuzz_packet_id.c:92,1
    - Dst: packet_id_persist_save
      Src: /src/fuzz_packet_id.c:95,1
    - Dst: gc_free
      Src: /src/fuzz_packet_id.c:96,1
    - Dst: packet_id_persist_close
      Src: /src/fuzz_packet_id.c:99,1
    - Dst: fuzz_random_init
      Src: /src/fuzz_packet_id.c:20,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_packet_id.c:32,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_packet_id.c:29,1
    - Dst: packet_id_init
      Src: /src/fuzz_packet_id.c:27,1
    - Dst: packet_id_add
      Src: /src/fuzz_packet_id.c:38,1
    - Dst: buf_set_write
      Src: /src/fuzz_packet_id.c:54,1
    - Dst: strlen
      Src: /src/fuzz_packet_id.c:54,1
    - Dst: packet_id_write
      Src: /src/fuzz_packet_id.c:58,1
    - Dst: free
      Src: /src/fuzz_packet_id.c:61,1
    - Dst: gc_new
      Src: /src/fuzz_packet_id.c:64,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 64
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 103
      start: 19
    functionDepth: 0
    functionLinenumber: 19
    functionLinenumberEnd: 103
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/fuzz_packet_id.c
    functionUses: []
    functionsReached:
    - packet_id_persist_init
    - packet_id_read
    - packet_id_init
    - free
    - fuzz_randomizer_get_int
    - fwrite
    - packet_id_persist_close
    - fuzz_random_destroy
    - packet_id_persist_save
    - packet_id_test
    - fuzz_random_init
    - string_alloc_buf
    - gc_new
    - gc_free
    - buf_set_write
    - memset
    - get_random_string
    - localtime
    - packet_id_add
    - sprintf
    - fclose
    - packet_id_free
    - fopen
    - update_time
    - memcmp
    - strlen
    - packet_id_reap_test
    - getpid
    - packet_id_persist_load
    - packet_id_write
    linkageType: ''
    returnType: int
    signature: 'int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_malloc_init
      Src: /src/fuzz_proxy.c:24,1
    - Dst: SSL_library_init
      Src: /src/fuzz_proxy.c:25,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/fuzz_proxy.c:28,1
    - Dst: OpenSSL_add_ssl_algorithms
      Src: /src/fuzz_proxy.c:29,1
    - Dst: ERR_load_crypto_strings
      Src: /src/fuzz_proxy.c:26,1
    - Dst: OpenSSL_add_all_digests
      Src: /src/fuzz_proxy.c:30,1
    - Dst: SSL_load_error_strings
      Src: /src/fuzz_proxy.c:32,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int*
    - char***
    constantsTouched: []
    func_position:
      end: 34
      start: 22
    functionDepth: 0
    functionLinenumber: 22
    functionLinenumberEnd: 34
    functionName: LLVMFuzzerInitialize
    functionSourceFile: /src/fuzz_proxy.c
    functionUses: []
    functionsReached:
    - SSL_load_error_strings
    - OpenSSL_add_all_digests
    - OpenSSL_add_ssl_algorithms
    - OpenSSL_add_all_algorithms
    - OPENSSL_malloc_init
    - SSL_library_init
    - ERR_load_crypto_strings
    linkageType: ''
    returnType: int
    signature: 'int LLVMFuzzerInitialize(int *argc, char ***argv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: hash_func
      Src: /src/fuzz_list.c:22,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 2
    argNames:
    - key
    - iv
    argTypes:
    - void*
    - uint32_t
    constantsTouched: []
    func_position:
      end: 23
      start: 21
    functionDepth: 0
    functionLinenumber: 21
    functionLinenumberEnd: 23
    functionName: word_hash_function
    functionSourceFile: /src/fuzz_list.c
    functionUses: []
    functionsReached:
    - hash_func
    linkageType: ''
    returnType: uint32_t
    signature: 'static uint32_t word_hash_function(const void *key, uint32_t iv) '
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 4
    argCount: 2
    argNames:
    - key1
    - key2
    argTypes:
    - void*
    - void*
    constantsTouched: []
    func_position:
      end: 28
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 28
    functionName: word_compare_function
    functionSourceFile: /src/fuzz_list.c
    functionUses: []
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: 'static bool word_compare_function(const void *key1, const void *key2) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: d2i_X509
      Src: /src/fuzz_verify_cert.c:32,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 5
    argCount: 3
    argNames:
    - data
    - size
    - out
    argTypes:
    - uint8_t*
    - size_t
    - X509**
    constantsTouched: []
    func_position:
      end: 38
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 38
    functionName: parse_x509
    functionSourceFile: /src/fuzz_verify_cert.c
    functionUses: []
    functionsReached:
    - d2i_X509
    linkageType: ''
    returnType: int
    signature: 'static int parse_x509(const uint8_t *data, size_t size, X509 **out) '
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/fuzz_verify_cert.c:60,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_verify_cert.c:87,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_verify_cert.c:85,1
    - Dst: env_set_create
      Src: /src/fuzz_verify_cert.c:69,1
    - Dst: memset
      Src: /src/fuzz_verify_cert.c:67,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_verify_cert.c:94,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_verify_cert.c:104,1
    - Dst: get_random_string
      Src: /src/fuzz_verify_cert.c:108,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 39
    argCount: 2
    argNames:
    - _opt
    - gc
    argTypes:
    - struct tls_options**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 111
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 111
    functionName: init_session_opt
    functionSourceFile: /src/fuzz_verify_cert.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - env_set_create
    - fuzz_randomizer_get_int
    - memset
    - get_random_string
    linkageType: ''
    returnType: int
    signature: 'static int init_session_opt(struct tls_options **_opt, struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ALLOC_OBJ_GC
      Src: /src/fuzz_verify_cert.c:117,1
    - Dst: init_session_opt
      Src: /src/fuzz_verify_cert.c:129,1
    - Dst: free
      Src: /src/fuzz_verify_cert.c:130,1
    - Dst: memset
      Src: /src/fuzz_verify_cert.c:123,1
    - Dst: get_random_string
      Src: /src/fuzz_verify_cert.c:126,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 13
    argCount: 2
    argNames:
    - _session
    - gc
    argTypes:
    - struct tls_session**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 138
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 138
    functionName: init_session
    functionSourceFile: /src/fuzz_verify_cert.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - free
    - memset
    - get_random_string
    - init_session_opt
    linkageType: ''
    returnType: int
    signature: 'static int init_session(struct tls_session **_session, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: OPENSSL_malloc_init
      Src: /src/fuzz_verify_cert.c:42,1
    - Dst: OpenSSL_add_ssl_algorithms
      Src: /src/fuzz_verify_cert.c:47,1
    - Dst: ERR_load_crypto_strings
      Src: /src/fuzz_verify_cert.c:44,1
    - Dst: OpenSSL_add_all_algorithms
      Src: /src/fuzz_verify_cert.c:46,1
    - Dst: SSL_library_init
      Src: /src/fuzz_verify_cert.c:43,1
    - Dst: SSL_load_error_strings
      Src: /src/fuzz_verify_cert.c:49,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 7
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int*
    - char***
    constantsTouched: []
    func_position:
      end: 51
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 51
    functionName: LLVMFuzzerInitialize
    functionSourceFile: /src/fuzz_verify_cert.c
    functionUses: []
    functionsReached:
    - SSL_load_error_strings
    - OpenSSL_add_ssl_algorithms
    - OpenSSL_add_all_algorithms
    - OPENSSL_malloc_init
    - SSL_library_init
    - ERR_load_crypto_strings
    linkageType: ''
    returnType: int
    signature: 'int LLVMFuzzerInitialize(int *argc, char ***argv) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: gc_new
      Src: /src/fuzz_forward.c:75,1
    - Dst: process_outgoing_link
      Src: /src/fuzz_forward.c:79,1
    - Dst: memset
      Src: /src/fuzz_forward.c:76,1
    - Dst: init_c2_outgoing_link
      Src: /src/fuzz_forward.c:78,1
    - Dst: gc_free
      Src: /src/fuzz_forward.c:82,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 83
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 83
    functionName: fuzz_process_outgoing_link
    functionSourceFile: /src/fuzz_forward.c
    functionUses: []
    functionsReached:
    - gc_new
    - process_outgoing_link
    - gc_free
    - memset
    - init_c2_outgoing_link
    linkageType: ''
    returnType: void
    signature: 'void fuzz_process_outgoing_link(const uint8_t *data, size_t size) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/fuzz_forward.c:108,1
    - Dst: env_set_create
      Src: /src/fuzz_forward.c:120,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/fuzz_forward.c:111,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/fuzz_forward.c:114,1
    - Dst: ALLOC_OBJ_GC
      Src: /src/fuzz_forward.c:115,1
    - Dst: get_random_string
      Src: /src/fuzz_forward.c:127,1
    - Dst: alloc_buf
      Src: /src/fuzz_forward.c:128,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:128,1
    - Dst: buf_write
      Src: /src/fuzz_forward.c:129,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:129,1
    - Dst: init_context_buffers
      Src: /src/fuzz_forward.c:141,1
    - Dst: free
      Src: /src/fuzz_forward.c:138,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:132,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 2
    argNames:
    - c2
    - gc
    argTypes:
    - struct context_2*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 145
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 145
    functionName: init_c2_incoming_tun
    functionSourceFile: /src/fuzz_forward.c
    functionUses: []
    functionsReached:
    - ALLOC_OBJ_GC
    - buf_write
    - strlen
    - free
    - init_context_buffers
    - env_set_create
    - alloc_buf
    - memset
    - get_random_string
    - ALLOC_ARRAY_GC
    linkageType: ''
    returnType: int
    signature: 'static int init_c2_incoming_tun(struct context_2 *c2, struct gc_arena
      *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:181,1
    - Dst: get_random_string
      Src: /src/fuzz_forward.c:185,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:183,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:182,1
    - Dst: alloc_buf_gc
      Src: /src/fuzz_forward.c:186,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:186,1
    - Dst: buf_write
      Src: /src/fuzz_forward.c:187,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:187,1
    - Dst: free
      Src: /src/fuzz_forward.c:188,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 2
    argNames:
    - c2
    - gc
    argTypes:
    - struct context_2*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 192
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 192
    functionName: init_c2_outgoing_tun
    functionSourceFile: /src/fuzz_forward.c
    functionUses: []
    functionsReached:
    - buf_write
    - free
    - fuzz_randomizer_get_int
    - strlen
    - get_random_string
    - alloc_buf_gc
    linkageType: ''
    returnType: int
    signature: 'static int init_c2_outgoing_tun(struct context_2 *c2, struct gc_arena
      *gc) '
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/fuzz_forward.c:42,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:60,1
    - Dst: free
      Src: /src/fuzz_forward.c:62,1
    - Dst: BLEN
      Src: /src/fuzz_forward.c:64,1
    - Dst: memset
      Src: /src/fuzz_forward.c:31,1
    - Dst: memset
      Src: /src/fuzz_forward.c:51,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:58,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:60,1
    - Dst: alloc_buf_gc
      Src: /src/fuzz_forward.c:58,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:45,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:46,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:47,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:48,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/fuzz_forward.c:50,1
    - Dst: get_random_string
      Src: /src/fuzz_forward.c:57,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/fuzz_forward.c:30,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/fuzz_forward.c:41,1
    - Dst: fuzz_randomizer_get_int
      Src: /src/fuzz_forward.c:35,1
    - Dst: strlen
      Src: /src/fuzz_forward.c:59,1
    - Dst: buf_write
      Src: /src/fuzz_forward.c:59,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 42
    argCount: 2
    argNames:
    - c2
    - gc
    argTypes:
    - struct context_2*
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 71
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 71
    functionName: init_c2_outgoing_link
    functionSourceFile: /src/fuzz_forward.c
    functionUses: []
    functionsReached:
    - buf_write
    - BLEN
    - strlen
    - free
    - fuzz_randomizer_get_int
    - memset
    - get_random_string
    - alloc_buf_gc
    - ALLOC_ARRAY_GC
    linkageType: ''
    returnType: int
    signature: 'static int init_c2_outgoing_link(struct context_2 *c2, struct gc_arena
      *gc) '
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/fuzz_forward.c:153,1
    - Dst: gc_new
      Src: /src/fuzz_forward.c:156,1
    - Dst: memset
      Src: /src/fuzz_forward.c:154,1
    - Dst: init_c2_incoming_tun
      Src: /src/fuzz_forward.c:166,1
    - Dst: _init_options
      Src: /src/fuzz_forward.c:158,1
    - Dst: process_incoming_tun
      Src: /src/fuzz_forward.c:169,1
    - Dst: free
      Src: /src/fuzz_forward.c:172,1
    - Dst: free_context_buffers
      Src: /src/fuzz_forward.c:173,1
    - Dst: gc_free
      Src: /src/fuzz_forward.c:174,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 16
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 175
      start: 147
    functionDepth: 0
    functionLinenumber: 147
    functionLinenumberEnd: 175
    functionName: run_process_incoming_tun
    functionSourceFile: /src/fuzz_forward.c
    functionUses: []
    functionsReached:
    - free_context_buffers
    - _init_options
    - init_c2_incoming_tun
    - gc_new
    - gc_free
    - free
    - memset
    - process_incoming_tun
    linkageType: ''
    returnType: int
    signature: 'int run_process_incoming_tun(const uint8_t *data, size_t size) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: new_client_nat_list
      Src: /src/fuzz_forward.c:90,1
    - Dst: memset
      Src: /src/fuzz_forward.c:95,1
    - Dst: ALLOC_ARRAY_GC
      Src: /src/fuzz_forward.c:93,1
    - Dst: copy_client_nat_option_list
      Src: /src/fuzz_forward.c:100,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 13
    argCount: 3
    argNames:
    - options
    - cne
    - gc
    argTypes:
    - struct options*
    - struct client_nat_entry**
    - struct gc_arena*
    constantsTouched: []
    func_position:
      end: 104
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 104
    functionName: _init_options
    functionSourceFile: /src/fuzz_forward.c
    functionUses: []
    functionsReached:
    - memset
    - new_client_nat_list
    - copy_client_nat_option_list
    - ALLOC_ARRAY_GC
    linkageType: ''
    returnType: int
    signature: 'static int _init_options(struct options *options, struct client_nat_entry
      **cne, struct gc_arena *gc) '
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/fuzz_forward.c:199,1
    - Dst: process_outgoing_tun
      Src: /src/fuzz_forward.c:206,1
    - Dst: gc_new
      Src: /src/fuzz_forward.c:200,1
    - Dst: gc_free
      Src: /src/fuzz_forward.c:208,1
    - Dst: init_c2_outgoing_tun
      Src: /src/fuzz_forward.c:205,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    constantsTouched: []
    func_position:
      end: 209
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 209
    functionName: run_process_outgoing_tun
    functionSourceFile: /src/fuzz_forward.c
    functionUses: []
    functionsReached:
    - process_outgoing_tun
    - gc_new
    - init_c2_outgoing_tun
    - gc_free
    - memset
    linkageType: ''
    returnType: void
    signature: 'void run_process_outgoing_tun(uint8_t *data, size_t size) '
Fuzzer filename: /src/fuzz_packet_id.c
Fuzzing method: LLVMFuzzerTestOneInput
included-header-files:
- openssl/store.h
- re2/re2.h
- ovpn_dco_win.h
- minwindef.h
- mbuf.h
- gmock/gmock-function-mocker.h
- argv.h
- crypto_openssl.h
- fuzz_randomizer.h
- ranges
- ps.h
- any
- ../../internal.h
- route.h
- status.h
- openssl/base64.h
- cstdint
- gmock/internal/gmock-internal-utils.h
- absl/flags/flag.h
- inttypes.h
- mbedtls/error.h
- array
- lmaccess.h
- openssl/sha.h
- net/if_tun.h
- algorithm
- string
- general_names.h
- simple_path_builder_delegate.h
- x509.h
- openssl/posix_time.h
- net/route.h
- mbedtls/net.h
- bcrypt.h
- deque
- openssl/aead.h
- atomic
- aclapi.h
- set
- netlink/netlink.h
- socket.h
- openssl/cpu.h
- memory
- gtest/gtest-death-test.h
- psa/crypto.h
- lzo.h
- tuple
- gmock/internal/gmock-pp.h
- httpdigest.h
- forward.h
- ../tapctl/basic.h
- sddl.h
- newdev.h
- gtest/internal/gtest-filepath.h
- openssl/pool.h
- sys/ioctl.h
- compare
- cryptoapi.h
- gtest/gtest_prod.h
- sys/syscall.h
- mbedtls/net_sockets.h
- ../bcm_interface.h
- intrin.h
- gmock/gmock-cardinalities.h
- mbedtls/md.h
- openssl/provider.h
- direct.h
- init.h
- openssl/bio.h
- openssl/ec_key.h
- resolv.h
- ssl_ncp.h
- openssl/thread.h
- openssl/err.h
- ./params.h
- openssl/digest.h
- openssl/trust_token.h
- dco_linux.h
- config-version.h
- openssl/opensslconf.h
- base.h
- pamdl.h
- gtest/internal/custom/gtest-port.h
- path_builder.h
- SupportDefs.h
- env_set.h
- gtest/internal/gtest-param-util.h
- openvpn.h
- regex.h
- linux/netlink.h
- test_common.h
- absl/flags/declare.h
- openssl_compat.h
- gtest/internal/gtest-type-util.h
- systemd/sd-daemon.h
- vector
- security/pam_appl.h
- ssl_verify_openssl.h
- openssl/mem.h
- ssl_verify_mbedtls.h
- openssl/pki/signature_verify_cache.h
- ifaddrs.h
- openssl/pkcs7.h
- ssl_common.h
- options.h
- gtest/internal/gtest-string.h
- mbedtls/oid.h
- libgen.h
- schedule.h
- iphlpapi.h
- sys/wait.h
- ../crypto/internal.h
- openssl/buf.h
- tun_afunix.h
- gtest/gtest-matchers.h
- service.h
- ssl_backend.h
- pkcs11-helper-1.0/pkcs11h-openssl.h
- test_helpers.h
- openssl/lhash.h
- sys/resource.h
- iosfwd
- mbedtls/debug.h
- ostream
- linux/if_tun.h
- parser.h
- parsed_certificate.h
- openssl/des.h
- openssl/bcm_public.h
- devguid.h
- multi_io.h
- setjmp.h
- sys/sockio.h
- manage.h
- sys/mman.h
- iterator
- mbedtls/dhm.h
- crypto_epoch.h
- mbedtls/ssl.h
- networking_sitnl.h
- openssl/experimental/kyber.h
- mstats.h
- linux/rtnetlink.h
- openssl/opensslv.h
- stddef.h
- openssl/ui.h
- ../asn1/internal.h
- ../crypto/spake2plus/internal.h
- openssl/tls1.h
- openvpn-msg.h
- versionhelpers.h
- internal.h
- poll.h
- comp.h
- openssl/md4.h
- signal.h
- gmock/gmock-spec-builders.h
- ping.h
- vlan.h
- fwpmtypes.h
- exception
- mss.h
- arpa/inet.h
- rust_wrapper.h
- stdio.h
- ssl_openssl.h
- ../bn/internal.h
- openssl/ecdsa.h
- settings_writer.h
- lladdr.h
- options_util.h
- mbedtls/asn1.h
- verify_certificate_chain.h
- openssl/params.h
- sys/socket.h
- openssl/cmac.h
- ctype.h
- tap.h
- mtu.h
- ws2tcpip.h
- in6addr.h
- winapifamily.h
- linux/errqueue.h
- setupapi.h
- bitset
- sys/time.h
- openssl/srtp.h
- errlevel.h
- TargetConditionals.h
- gtest/gtest-assertion-result.h
- openssl/core_dispatch.h
- mem.h
- shlwapi.h
- selinux/selinux.h
- syshead.h
- openssl/rsa.h
- condition_variable
- tap-windows.h
- pushlist.h
- proxy.h
- openssl/engine.h
- stdarg.h
- msica_arg.h
- openssl/slhdsa.h
- certificate_policies.h
- gtest/internal/custom/gtest-printers.h
- sys/epoll.h
- stdexcept
- dco_freebsd.h
- openssl/pki/ocsp.h
- multi.h
- ../../crypto/internal.h
- xkey_common.h
- absl/strings/has_absl_stringify.h
- ../aes/internal.h
- unordered_set
- functional
- ../fipsmodule/ec/internal.h
- openssl/mldsa.h
- initializer_list
- openssl/pkcs8.h
- openssl/obj_mac.h
- dhcp.h
- new
- gtest/internal/gtest-port-arch.h
- cert_error_id.h
- comp-lz4.h
- unistd.h
- shaper.h
- stdlib.h
- utils.h
- mudp.h
- interval.h
- shellapi.h
- gtest/gtest-message.h
- openssl/core_names.h
- mbedtls_compat.h
- ssl_ncp.c
- ../lhash/internal.h
- ws2def.h
- ntddndis.h
- ncrypt.h
- absl/strings/string_view.h
- event.h
- common.h
- openssl/base.h
- limits
- wincrypt.h
- openssl/kdf.h
- openssl/pem.h
- netinet/tcp.h
- cert_errors.h
- netlink/genl/genl.h
- acxx_demangle.h
- stdbool.h
- basic.h
- openssl/x509v3.h
- mbedtls/version.h
- helper.h
- buf.h
- ssl_verify.h
- ./fuzzer_tags.h
- sys/file.h
- openssl/bn.h
- crypto.h
- openssl/ctrdrbg.h
- openssl/obj.h
- gmock/gmock.h
- gtest/internal/gtest-internal.h
- cert_issuer_source.h
- parse_values.h
- gtest/gtest-test-part.h
- openssl/span.h
- pkcs11.h
- openssl/core_object.h
- openssl/ecdh.h
- ../crypto/lhash/internal.h
- assert.h
- session_id.h
- reflect_filter.h
- forward_list
- variant
- mbedtls/entropy.h
- fuzzer/FuzzedDataProvider.h
- openssl/poly1305.h
- lzo1x.h
- cert_data.h
- gmock/gmock-more-actions.h
- perf.h
- limits.h
- tls_crypt.h
- gmock/gmock-matchers.h
- mbedtls/sha1.h
- iostream
- mbedtls/pk.h
- packet_id.h
- openssl/chacha.h
- windef.h
- misc.c
- auth_token.c
- ../crypto/mem_internal.h
- mroute.h
- parse_certificate.h
- typeinfo
- openssl/hpke.h
- sys/utsname.h
- sys/un.h
- cxxabi.h
- ntlm.h
- openssl/blowfish.h
- run_command.h
- cet.h
- gtest/internal/gtest-death-test-internal.h
- initguid.h
- accctrl.h
- grp.h
- lzodefs.h
- net/if.h
- openssl/blake2.h
- memdbg.h
- AvailabilityMacros.h
- integer.h
- gtest/gtest-printers.h
- nid.h
- pkcs11-helper-1.0/pkcs11h-certificate.h
- netinet/ip.h
- fdmisc.h
- openssl/dh.h
- mbedtls/base64.h
- ios
- unordered_map
- openssl/rc4.h
- boringssl_prefix_symbols.h
- proto.h
- validate.h
- openssl/hmac.h
- buffer.h
- cryptoapi.c
- obj.h
- optional
- openvpn-plugin.h
- wchar.h
- lz4.h
- mtcp.h
- winioctl.h
- signature_algorithm.h
- absl/strings/str_cat.h
- ssl.h
- netinet/in.h
- list
- mutex
- pthread.h
- naptypes.h
- dco_internal.h
- openssl/ripemd.h
- openssl/safestack.h
- mstcpip.h
- win32-util.h
- otime.h
- wfp_block.h
- float.h
- tlhelp32.h
- userenv.h
- mbedtls/ctr_drbg.h
- winsock2.h
- sig.h
- stropts.h
- test_config.h
- mbedtls/md5.h
- netlink/genl/ctrl.h
- boringssl_prefix_symbols_asm.h
- span
- ws2ipdef.h
- crypto_mbedtls.h
- windows.h
- memory.h
- openssl/hrss.h
- lm.h
- openssl/target.h
- list.h
- mbedtls/x509_crt.h
- cap-ng.h
- cmath
- openssl/pkcs12.h
- ../internal.h
- openssl/stack.h
- openssl/ssl3.h
- config.h
- pool.h
- gmock/internal/custom/gmock-generated-actions.h
- netdb.h
- input.h
- cstddef
- pkcs8.h
- mbedtls/pem.h
- net/if_tap.h
- chrono
- ../tapctl/error.h
- asn1.h
- openssl/curve25519.h
- openssl/md5.h
- openssl/rand.h
- networking_iproute2.h
- version
- openssl/buffer.h
- ssl_pkt.h
- openssl/conf.h
- gmock/gmock-more-matchers.h
- base64.h
- openssl/dtls1.h
- malloc.h
- gtest/internal/gtest-port.h
- openssl/x509.h
- circ_list.h
- sys/nv.h
- openssl/ossl_typ.h
- error.h
- reliable.h
- gtest/gtest_pred_impl.h
- objbase.h
- process.h
- ../../bcm_support.h
- openvpnmsica.h
- gtest/gtest-param-test.h
- netlink/socket.h
- misc.h
- openssl/bytestring.h
- mbedtls/des.h
- openssl/evp.h
- ssl_mbedtls.h
- sys/prctl.h
- ../tapctl/tap.h
- gtest/gtest-spi.h
- err.h
- plugin.h
- strings.h
- fragment.h
- cassert
- ovpn_dco_linux.h
- fuzz_verify_cert.h
- auth_token.h
- openssl/pki/verify_error.h
- mock_quic_transport.h
- ovpn_dco_freebsd.h
- dlfcn.h
- sstream
- openssl/objects.h
- crypto_backend.h
- mbedtls/bignum.h
- openssl/evp_errors.h
- sys/sys_domain.h
- compat.h
- win32.h
- push.h
- openssl/crypto.h
- openssl/x509v3_errors.h
- cfgmgr32.h
- gmock/internal/custom/gmock-port.h
- platform.h
- mbedtls/x509.h
- openssl/siphash.h
- networking.h
- tls_crypt.c
- lzoconf.h
- cerrno
- syslog.h
- openssl/asn1t.h
- mock_msg.h
- ssl_verify_backend.h
- gtest/gtest.h
- dco_win.h
- msi.h
- utility
- openssl/ex_data.h
- string.h
- console.h
- socks.h
- openssl/cipher.h
- openssl/cast.h
- msiquery.h
- dco.h
- absl/flags/reflection.h
- ../ec/internal.h
- sys/types.h
- net/tun/if_tun.h
- sys/kern_control.h
- type_traits
- openssl/aes.h
- netlink/genl/family.h
- mbedtls/ecp.h
- openssl/asn1.h
- android/api-level.h
- openssl/mlkem.h
- stdint.h
- wininet.h
- gmock/gmock-nice-strict.h
- termios.h
- openssl/is_boringssl.h
- gremlin.h
- openssl/applink.c
- time.h
- sys/uio.h
- openssl/x509_vfy.h
- gtest/gtest-typed-test.h
- occ.h
- trust_store.h
- string_view
- clinat.h
- pwd.h
- ../crypto/err/internal.h
- map
- immintrin.h
- pkcs11_backend.h
- openssl/ec.h
- tun.h
- locale
- fcntl.h
- openssl/e_os2.h
- openssl/hkdf.h
- linux/sockios.h
- sys/linker.h
- sys/stat.h
- dns.h
- test_state.h
- ssl_util.h
- openssl/dsa.h
- valgrind/memcheck.h
- openssl/nid.h
- buffer.c
- net/if_utun.h
- gmock/internal/gmock-port.h
- lzo/lzo1x.h
- net/if_dl.h
- gmock/gmock-actions.h
- msiex.h
- sys/param.h
- io.h
- dmalloc.h
- linux/types.h
- openssl/ssl.h
- errno.h
- fwpmu.h
- cmocka.h
- mbedtls/cipher.h
- sys/inotify.h
report: name
sources:
- function_names:
  - key_ctx_update_implicit_iv
  - init_frame
  - LLVMFuzzerInitialize
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_crypto.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_packet_id.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_dhcp.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_buffer.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_base64.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerInitialize
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_proxy.c
  types:
    structs: []
    typedefs: []
- function_names:
  - word_hash_function
  - word_compare_function
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_list.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_mroute.c
  types:
    structs: []
    typedefs: []
- function_names:
  - parse_x509
  - init_session_opt
  - init_session
  - LLVMFuzzerTestOneInput
  - LLVMFuzzerInitialize
  source_file: /src/fuzz_verify_cert.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_misc.c
  types:
    structs: []
    typedefs: []
- function_names:
  - fuzz_process_outgoing_link
  - init_c2_incoming_tun
  - init_c2_outgoing_tun
  - init_c2_outgoing_link
  - run_process_incoming_tun
  - _init_options
  - run_process_outgoing_tun
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_forward.c
  types:
    structs: []
    typedefs: []
- function_names:
  - LLVMFuzzerTestOneInput
  source_file: /src/fuzz_route.c
  types:
    structs: []
    typedefs: []
