ExitCode::exception /redex/libredex/ControlFlow.h:1375
koftnt opened this issue · 2 comments
run on commit id:739e743d44d0b5472f3b3a73ccda93fa83f59791
apk: https://dl.pddpic.com/android_dev/e0b787ea-2302-479b-b095-f80be7b809f9/douyin_kol/pinduoduo.apk
ExitCode::exception /redex/libredex/ControlFlow.h:1375: cfg::InstructionIteratorImpl<is_const>::InstructionIteratorImpl(cfg::InstructionIteratorImpl<is_const>::Cfg&, bool) [with bool is_const = false; cfg::InstructionIteratorImpl<is_const>::Cfg = cfg::ControlFlowGraph]: assertion `m_cfg->editable()' failed.
more detail :
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
1 mariana-trench-binary 0x00000001029a0c90 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1376
2 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
3 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
4 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSet0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
ISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
5 mariana-trench-binary 0x00000001029a05a8 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 484
1 mariana-trench-binary 0x00000001029a0c90 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1376
6 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQue0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
1 mariana-trench-binary 0x0000000102848eb4 _ZNK3cfg23InstructionIteratorImplILb0EE14assert_not_endEv + 0
2 mariana-trench-binary 0x00000001029a0434 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 112
3 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
ueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
1 mariana-trench-binary 0x00000001029a0c90 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1376
2 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
2 mariana-trench-binary 0x00000001029a05a8 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 484
3 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
4 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
1 mariana-trench-binary 0x00000001029a0c90 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1376
2 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
3 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
1 mariana-trench-binary 0x0000000102848eb4 _ZNK3cfg23InstructionIteratorImplILb0EE14assert_not_endEv + 0
3 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
4 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
5 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
1 mariana-trench-binary 0x0000000102848eb4 _ZNK3cfg23InstructionIteratorImplILb0EE14assert_not_endEv + 0
2 mariana-trench-binary 0x00000001029a0434 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 112
3 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
4 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
5 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
1 mariana-trench-binary 0x0000000102848eb4 _ZNK3cfg23InstructionIteratorImplILb0EE14assert_not_endEv + 0
2 mariana-trench-binary 0x00000001029a0434 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 112
3 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
4 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
2 mariana-trench-binary 0x00000001029a0434 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 112
4 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
6 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
5 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
5 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
7 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
8 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
5 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
7 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
8 mariana-trench-binary 0x00000001029a05a8 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 484
9 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
10 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
11 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
4 mariana-trench-binary 0x00000001029a05a8 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 484
3 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
0 mariana-trench-binary 0x00000001027c75e8 _Z11assert_failPKcS0_jS0_10RedexErrorS0_z + 220
4 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
5 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
5 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
6 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
1 mariana-trench-binary 0x00000001029a0c90 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1376
7 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
1 mariana-trench-binary 0x00000001029a0c90 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1376
2 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
2 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
3 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
4 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
3 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
5 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
4 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
6 mariana-trench-binary 0x00000001029a0b80 _ZN12_GLOBAL__N_124scan_any_init_reachablesERKN10call_graph5GraphERKN21method_override_graph5GraphEPK9DexMethodbR13ConcurrentSetISA_NSt3__14hashISA_EENSC_8equal_toISA_EELm31EE + 1104
5 mariana-trench-binary 0x00000001029a05a8 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 484
6 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
7 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
7 mariana-trench-binary 0x00000001029a05a8 _ZZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKNSt3__16vectorIP8DexClassNS6_9allocatorIS9_EEEERKN10call_graph5GraphEENK3$_0clEP9DexMethod + 484
8 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
8 mariana-trench-binary 0x000000010299ffdc _ZNSt3__114__thread_proxyB6v15006INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN6sparta15SpartaWorkQueueIP8DexClassN20redex_workqueue_impl22NoStateWorkQueueHelperISA_ZN4walk8parallel7methodsINS_6vectorISA_NS_9allocatorISA_EEEEZN13type_analyzer6global18GlobalTypeAnalysis24find_any_init_reachablesERKN21method_override_graph5GraphERKSJ_RKN10call_graph5GraphEE3$0EEvRKT_RKT0_mEUlSA_E_EEE7run_allEvEUlPNS7_17SpartaWorkerStateISA_EEmE_S19_mEEEEEPvS1C + 588
9 libsystem_pthread.dylib 0x00000001ab8d906c _pthread_start + 148
10 libsystem_pthread.dylib 0x00000001ab8d3e2c thread_start + 8
2023-06-19 14:51:04 INFO ExitCode::exception /Users/volcanosj/Downloads/mariana-trench/redex/libredex/ControlFlow.h:1375: cfg::InstructionIteratorImpl::InstructionIteratorImpl(cfg::InstructionIteratorImpl::Cfg &, bool) [is_const = false]: assertion `m_cfg->editable()' failed.
MarianaTrench error: /Users/volcanosj/Downloads/mariana-trench/redex/libredex/ControlFlow.h:1375: cfg::InstructionIteratorImpl::InstructionIteratorImpl(cfg::InstructionIteratorImpl::Cfg &, bool) [is_const = false]: assertion `m_cfg->editable()' failed.
This looks like an issue with Mariana Trench rather than Redex. Are you running a version of Mariana Trench that is built after this commit?
facebook/mariana-trench@e4b04cb
If not, a temporary workaround would be to run it with the --disable-global-type-analysis flag. However, type information will be less precise which generally translates to more false positives.