; LLVM IR from albertobsd/keyhunt :: keyhunt_legacy.ll (Z19thread_process_bsgsPv)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Point = type { %class.Int, %class.Int, %class.Int }
%class.Int = type { [1 x %struct.__mpz_struct] }
%struct.__mpz_struct = type { i32, i32, ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.tothread = type { i32, ptr, ptr }
%class.Secp256K1 = type { %class.Point, %class.Int, %class.Int, [8192 x %class.Point] }
%struct.bloom = type { i64, i64, i64, i8, x86_fp80, i8, i8, i8, double, ptr }

@GSn = external dso_local global %"class.std::vector", align 8
@_2GSn = external dso_local global %class.Point, align 8
@THREADOUTPUT = external dso_local global i32, align 4
@write_keys = external dso_local global %union.pthread_mutex_t, align 8
@bsgs_thread = external dso_local global %union.pthread_mutex_t, align 8
@steps = external dso_local global ptr, align 8
@ends = external dso_local global ptr, align 8
@FLAGDEBUG = external dso_local global i32, align 4
@FLAGQUIET = external dso_local global i32, align 4
@FLAGMATRIX = external dso_local global i32, align 4
@bsgs_found = external dso_local global ptr, align 8
@OriginalPointsBSGS = external dso_local global %"class.std::vector", align 8
@OriginalPointsBSGScompressed = external dso_local global ptr, align 8
@bloom_bP = external dso_local global ptr, align 8
@bsgs_aux = external dso_local global i64, align 8
@bsgs_point_number = external dso_local global i32, align 4
@BSGS_CURRENT = external dso_local global %class.Int, align 8
@BSGS_N_double = external dso_local global %class.Int, align 8
@BSGS_M = external dso_local global %class.Int, align 8
@BSGS_M_double = external dso_local global %class.Int, align 8
@n_range_end = external dso_local global %class.Int, align 8
@secp = external dso_local global ptr, align 8
@stdout = external global ptr, align 8
@.str.228 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.234 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.235 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.236 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.237 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.238 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.239 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.240 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.241 = external hidden unnamed_addr constant [23 x i8], align 1

declare void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1

declare void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #4

declare i32 @printf(ptr noundef, ...) #0

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

declare void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16)) #0

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #5

; Function Attrs: nounwind
declare void @free(ptr noundef) #1

declare void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #0

declare noalias ptr @fopen(ptr noundef, ptr noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

declare i32 @fclose(ptr noundef) #0

declare i32 @fflush(ptr noundef) #0

declare void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef) #0

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

declare void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #0

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) #1

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_Z19thread_process_bsgsPv(ptr noundef %0) #7 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca [32 x i8], align 16
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %class.Int, align 8
  %10 = alloca %class.Int, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %class.Point, align 8
  %14 = alloca %class.Point, align 8
  %15 = alloca %class.Point, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %class.Point, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca [513 x %class.Int], align 16
  %28 = alloca [1024 x %class.Point], align 16
  %29 = alloca %class.Int, align 8
  %30 = alloca %class.Int, align 8
  %31 = alloca %class.Int, align 8
  %32 = alloca %class.Int, align 8
  %33 = alloca %class.Int, align 8
  %34 = alloca %class.Int, align 8
  %35 = alloca %class.Point, align 8
  %36 = alloca %class.Point, align 8
  %37 = alloca %class.Point, align 8
  %38 = alloca %class.Point, align 8
  %39 = alloca %class.Point, align 8
  %40 = alloca i32, align 4
  %41 = alloca %class.Point, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #8
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %9)
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %42 unwind label %91

42:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 48, ptr %13) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %43 unwind label %95

43:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 48, ptr %14) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %14)
          to label %44 unwind label %99

44:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 48, ptr %15) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %15)
          to label %45 unwind label %103

45:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %46 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 24) #9
          to label %47 unwind label %107

47:                                               ; preds = %45
  invoke void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20) %46, i32 noundef 513)
          to label %48 unwind label %111

48:                                               ; preds = %47
  store ptr %46, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %24) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %49 unwind label %115

49:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  store i32 511, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8208, ptr %27) #8
  %50 = getelementptr inbounds [513 x %class.Int], ptr %27, i32 0, i32 0
  %51 = getelementptr inbounds %class.Int, ptr %50, i64 513
  br label %52

52:                                               ; preds = %54, %49
  %53 = phi ptr [ %50, %49 ], [ %55, %54 ]
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %53)
          to label %54 unwind label %119

54:                                               ; preds = %52
  %55 = getelementptr inbounds %class.Int, ptr %53, i64 1
  %56 = icmp eq ptr %55, %51
  br i1 %56, label %57, label %52

57:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 49152, ptr %28) #8
  %58 = getelementptr inbounds [1024 x %class.Point], ptr %28, i32 0, i32 0
  %59 = getelementptr inbounds %class.Point, ptr %58, i64 1024
  br label %60

60:                                               ; preds = %62, %57
  %61 = phi ptr [ %58, %57 ], [ %63, %62 ]
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %61)
          to label %62 unwind label %129

62:                                               ; preds = %60
  %63 = getelementptr inbounds %class.Point, ptr %61, i64 1
  %64 = icmp eq ptr %63, %59
  br i1 %64, label %65, label %60

65:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %29)
          to label %66 unwind label %139

66:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %30)
          to label %67 unwind label %143

67:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %68 unwind label %147

68:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %32)
          to label %69 unwind label %151

69:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %33)
          to label %70 unwind label %155

70:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #8
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %34)
          to label %71 unwind label %159

71:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 48, ptr %35) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %35)
          to label %72 unwind label %163

72:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 48, ptr %36) #8
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %73 unwind label %167

73:                                               ; preds = %72
  %74 = load ptr, ptr %23, align 8, !tbaa !5
  %75 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 0
  invoke void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20) %74, ptr noundef %75)
          to label %76 unwind label %171

76:                                               ; preds = %73
  %77 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %77, ptr %5, align 8, !tbaa !5
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.tothread, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 8, !tbaa !11
  store i32 %80, ptr %21, align 4, !tbaa !9
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %81) #8
  %82 = load i64, ptr @bsgs_aux, align 8, !tbaa !13
  %83 = udiv i64 %82, 1024
  %84 = trunc i64 %83 to i32
  store i32 %84, ptr %22, align 4, !tbaa !9
  %85 = load i64, ptr @bsgs_aux, align 8, !tbaa !13
  %86 = urem i64 %85, 1024
  %87 = icmp ne i64 %86, 0
  br i1 %87, label %88, label %175

88:                                               ; preds = %76
  %89 = load i32, ptr %22, align 4, !tbaa !9
  %90 = add i32 %89, 1
  store i32 %90, ptr %22, align 4, !tbaa !9
  br label %175

91:                                               ; preds = %1
  %92 = landingpad { ptr, i32 }
          cleanup
  %93 = extractvalue { ptr, i32 } %92, 0
  store ptr %93, ptr %11, align 8
  %94 = extractvalue { ptr, i32 } %92, 1
  store i32 %94, ptr %12, align 4
  br label %663

95:                                               ; preds = %42
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %11, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %12, align 4
  br label %662

99:                                               ; preds = %43
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %11, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %12, align 4
  br label %661

103:                                              ; preds = %44
  %104 = landingpad { ptr, i32 }
          cleanup
  %105 = extractvalue { ptr, i32 } %104, 0
  store ptr %105, ptr %11, align 8
  %106 = extractvalue { ptr, i32 } %104, 1
  store i32 %106, ptr %12, align 4
  br label %660

107:                                              ; preds = %45
  %108 = landingpad { ptr, i32 }
          cleanup
  %109 = extractvalue { ptr, i32 } %108, 0
  store ptr %109, ptr %11, align 8
  %110 = extractvalue { ptr, i32 } %108, 1
  store i32 %110, ptr %12, align 4
  br label %659

111:                                              ; preds = %47
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %11, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %12, align 4
  call void @_ZdlPvm(ptr noundef %46, i64 noundef 24) #10
  br label %659

115:                                              ; preds = %48
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %11, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %12, align 4
  br label %658

119:                                              ; preds = %52
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %11, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %12, align 4
  %123 = icmp eq ptr %50, %53
  br i1 %123, label %128, label %124

124:                                              ; preds = %124, %119
  %125 = phi ptr [ %53, %119 ], [ %126, %124 ]
  %126 = getelementptr inbounds %class.Int, ptr %125, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %126) #8
  %127 = icmp eq ptr %126, %50
  br i1 %127, label %128, label %124

128:                                              ; preds = %124, %119
  br label %657

129:                                              ; preds = %60
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %11, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %12, align 4
  %133 = icmp eq ptr %58, %61
  br i1 %133, label %138, label %134

134:                                              ; preds = %134, %129
  %135 = phi ptr [ %61, %129 ], [ %136, %134 ]
  %136 = getelementptr inbounds %class.Point, ptr %135, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %136) #8
  %137 = icmp eq ptr %136, %58
  br i1 %137, label %138, label %134

138:                                              ; preds = %134, %129
  br label %643

139:                                              ; preds = %65
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %11, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %12, align 4
  br label %628

143:                                              ; preds = %66
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %11, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %12, align 4
  br label %627

147:                                              ; preds = %67
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %11, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %12, align 4
  br label %626

151:                                              ; preds = %68
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %11, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %12, align 4
  br label %625

155:                                              ; preds = %69
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %11, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %12, align 4
  br label %624

159:                                              ; preds = %70
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %11, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %12, align 4
  br label %623

163:                                              ; preds = %71
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %11, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %12, align 4
  br label %622

167:                                              ; preds = %72
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %11, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %12, align 4
  br label %621

171:                                              ; preds = %595, %593, %591, %588, %586, %584, %582, %581, %576, %574, %572, %422, %416, %414, %412, %411, %407, %405, %404, %399, %397, %386, %379, %373, %371, %369, %368, %364, %362, %361, %356, %350, %348, %346, %345, %341, %335, %333, %331, %323, %321, %315, %306, %266, %223, %220, %219, %218, %208, %205, %203, %195, %192, %190, %182, %181, %179, %177, %176, %175, %73
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %11, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %12, align 4
  br label %620

175:                                              ; preds = %88, %76
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %34, ptr noundef @BSGS_M_double)
          to label %176 unwind label %171

176:                                              ; preds = %175
  invoke void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16) %34, i64 noundef 512)
          to label %177 unwind label %171

177:                                              ; preds = %176
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %34, ptr noundef @BSGS_M)
          to label %178 unwind label %171

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %612, %178
  %180 = call i32 @pthread_mutex_lock(ptr noundef @bsgs_thread) #8
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef @BSGS_CURRENT)
          to label %181 unwind label %171

181:                                              ; preds = %179
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) @BSGS_CURRENT, ptr noundef @BSGS_N_double)
          to label %182 unwind label %171

182:                                              ; preds = %181
  %183 = call i32 @pthread_mutex_unlock(ptr noundef @bsgs_thread) #8
  %184 = invoke noundef zeroext i1 @_ZN3Int16IsGreaterOrEqualEPS_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef @n_range_end)
          to label %185 unwind label %171

185:                                              ; preds = %182
  br i1 %184, label %186, label %187

186:                                              ; preds = %185
  br label %613

187:                                              ; preds = %185
  %188 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !9
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %190, label %200

190:                                              ; preds = %187
  %191 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %192 unwind label %171

192:                                              ; preds = %190
  store ptr %191, ptr %7, align 8, !tbaa !5
  %193 = load ptr, ptr %7, align 8, !tbaa !5
  %194 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.234, ptr noundef %193)
          to label %195 unwind label %171

195:                                              ; preds = %192
  %196 = load ptr, ptr @stdout, align 8, !tbaa !5
  %197 = invoke i32 @fflush(ptr noundef %196)
          to label %198 unwind label %171

198:                                              ; preds = %195
  %199 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %199) #8
  br label %214

200:                                              ; preds = %187
  %201 = load i32, ptr @FLAGQUIET, align 4, !tbaa !9
  %202 = icmp eq i32 %201, 0
  br i1 %202, label %203, label %213

203:                                              ; preds = %200
  %204 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %205 unwind label %171

205:                                              ; preds = %203
  store ptr %204, ptr %7, align 8, !tbaa !5
  %206 = load ptr, ptr %7, align 8, !tbaa !5
  %207 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.235, ptr noundef %206)
          to label %208 unwind label %171

208:                                              ; preds = %205
  %209 = load ptr, ptr @stdout, align 8, !tbaa !5
  %210 = invoke i32 @fflush(ptr noundef %209)
          to label %211 unwind label %171

211:                                              ; preds = %208
  %212 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %212) #8
  store i32 1, ptr @THREADOUTPUT, align 4, !tbaa !9
  br label %213

213:                                              ; preds = %211, %200
  br label %214

214:                                              ; preds = %213, %198
  call void @llvm.lifetime.start.p0(i64 48, ptr %37) #8
  %215 = load ptr, ptr @secp, align 8, !tbaa !5
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8 %37, ptr noundef nonnull align 8 dereferenceable(393296) %215, ptr noundef %9)
          to label %216 unwind label %279

216:                                              ; preds = %214
  %217 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %13, ptr noundef nonnull align 8 dereferenceable(48) %37)
          to label %218 unwind label %283

218:                                              ; preds = %216
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %37) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %37) #8
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef %9)
          to label %219 unwind label %171

219:                                              ; preds = %218
  invoke void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16) %33)
          to label %220 unwind label %171

220:                                              ; preds = %219
  %221 = load ptr, ptr @secp, align 8, !tbaa !5
  %222 = getelementptr inbounds %class.Secp256K1, ptr %221, i32 0, i32 2
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef %222)
          to label %223 unwind label %171

223:                                              ; preds = %220
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef %34)
          to label %224 unwind label %171

224:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 48, ptr %38) #8
  %225 = load ptr, ptr @secp, align 8, !tbaa !5
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8 %38, ptr noundef nonnull align 8 dereferenceable(393296) %225, ptr noundef %33)
          to label %226 unwind label %288

226:                                              ; preds = %224
  %227 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %14, ptr noundef nonnull align 8 dereferenceable(48) %38)
          to label %228 unwind label %292

228:                                              ; preds = %226
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %38) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %38) #8
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %229

229:                                              ; preds = %602, %228
  %230 = load i32, ptr %17, align 4, !tbaa !9
  %231 = load i32, ptr @bsgs_point_number, align 4, !tbaa !9
  %232 = icmp ult i32 %230, %231
  br i1 %232, label %233, label %605

233:                                              ; preds = %229
  %234 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %235 = load i32, ptr %17, align 4, !tbaa !9
  %236 = zext i32 %235 to i64
  %237 = getelementptr inbounds i32, ptr %234, i64 %236
  %238 = load i32, ptr %237, align 4, !tbaa !9
  %239 = icmp eq i32 %238, 0
  br i1 %239, label %240, label %601

240:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 48, ptr %39) #8
  %241 = load ptr, ptr @secp, align 8, !tbaa !5
  %242 = load i32, ptr %17, align 4, !tbaa !9
  %243 = zext i32 %242 to i64
  %244 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %243) #8
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind writable sret(%class.Point) align 8 %39, ptr noundef nonnull align 8 dereferenceable(393296) %241, ptr noundef nonnull align 8 dereferenceable(48) %244, ptr noundef nonnull align 8 dereferenceable(48) %14)
          to label %245 unwind label %297

245:                                              ; preds = %240
  %246 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %24, ptr noundef nonnull align 8 dereferenceable(48) %39)
          to label %247 unwind label %301

247:                                              ; preds = %245
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %39) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %39) #8
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %248

248:                                              ; preds = %597, %247
  %249 = load i32, ptr %16, align 4, !tbaa !9
  %250 = load i32, ptr %22, align 4, !tbaa !9
  %251 = icmp ult i32 %249, %250
  br i1 %251, label %252, label %259

252:                                              ; preds = %248
  %253 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %254 = load i32, ptr %17, align 4, !tbaa !9
  %255 = zext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %253, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !9
  %258 = icmp eq i32 %257, 0
  br label %259

259:                                              ; preds = %252, %248
  %260 = phi i1 [ false, %248 ], [ %258, %252 ]
  br i1 %260, label %261, label %600

261:                                              ; preds = %259
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %262

262:                                              ; preds = %276, %261
  %263 = load i32, ptr %25, align 4, !tbaa !9
  %264 = load i32, ptr %26, align 4, !tbaa !9
  %265 = icmp slt i32 %263, %264
  br i1 %265, label %266, label %306

266:                                              ; preds = %262
  %267 = load i32, ptr %25, align 4, !tbaa !9
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 %268
  %270 = load i32, ptr %25, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %271) #8
  %273 = getelementptr inbounds %class.Point, ptr %272, i32 0, i32 0
  %274 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %269, ptr noundef %273, ptr noundef %274)
          to label %275 unwind label %171

275:                                              ; preds = %266
  br label %276

276:                                              ; preds = %275
  %277 = load i32, ptr %25, align 4, !tbaa !9
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %25, align 4, !tbaa !9
  br label %262, !llvm.loop !15

279:                                              ; preds = %214
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %11, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %12, align 4
  br label %287

283:                                              ; preds = %216
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %11, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %37) #8
  br label %287

287:                                              ; preds = %283, %279
  call void @llvm.lifetime.end.p0(i64 48, ptr %37) #8
  br label %620

288:                                              ; preds = %224
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %11, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %12, align 4
  br label %296

292:                                              ; preds = %226
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %11, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %38) #8
  br label %296

296:                                              ; preds = %292, %288
  call void @llvm.lifetime.end.p0(i64 48, ptr %38) #8
  br label %620

297:                                              ; preds = %240
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %11, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %12, align 4
  br label %305

301:                                              ; preds = %245
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %11, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %39) #8
  br label %305

305:                                              ; preds = %301, %297
  call void @llvm.lifetime.end.p0(i64 48, ptr %39) #8
  br label %620

306:                                              ; preds = %262
  %307 = load i32, ptr %25, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 %308
  %310 = load i32, ptr %25, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %311) #8
  %313 = getelementptr inbounds %class.Point, ptr %312, i32 0, i32 0
  %314 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %309, ptr noundef %313, ptr noundef %314)
          to label %315 unwind label %171

315:                                              ; preds = %306
  %316 = load i32, ptr %25, align 4, !tbaa !9
  %317 = add nsw i32 %316, 1
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 %318
  %320 = getelementptr inbounds %class.Point, ptr %24, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %319, ptr noundef @_2GSn, ptr noundef %320)
          to label %321 unwind label %171

321:                                              ; preds = %315
  %322 = load ptr, ptr %23, align 8, !tbaa !5
  invoke void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20) %322)
          to label %323 unwind label %171

323:                                              ; preds = %321
  %324 = getelementptr inbounds [1024 x %class.Point], ptr %28, i64 0, i64 512
  %325 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %324, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %326 unwind label %171

326:                                              ; preds = %323
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %327

327:                                              ; preds = %394, %326
  %328 = load i32, ptr %25, align 4, !tbaa !9
  %329 = load i32, ptr %26, align 4, !tbaa !9
  %330 = icmp slt i32 %328, %329
  br i1 %330, label %331, label %397

331:                                              ; preds = %327
  %332 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %35, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %333 unwind label %171

333:                                              ; preds = %331
  %334 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %36, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %335 unwind label %171

335:                                              ; preds = %333
  %336 = load i32, ptr %25, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %337) #8
  %339 = getelementptr inbounds %class.Point, ptr %338, i32 0, i32 1
  %340 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef %339, ptr noundef %340)
          to label %341 unwind label %171

341:                                              ; preds = %335
  %342 = load i32, ptr %25, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 %343
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %29, ptr noundef %344)
          to label %345 unwind label %171

345:                                              ; preds = %341
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %31)
          to label %346 unwind label %171

346:                                              ; preds = %345
  %347 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %347)
          to label %348 unwind label %171

348:                                              ; preds = %346
  %349 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %349, ptr noundef %32)
          to label %350 unwind label %171

350:                                              ; preds = %348
  %351 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  %352 = load i32, ptr %25, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %353) #8
  %355 = getelementptr inbounds %class.Point, ptr %354, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %351, ptr noundef %355)
          to label %356 unwind label %171

356:                                              ; preds = %350
  %357 = load i32, ptr %25, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %358) #8
  %360 = getelementptr inbounds %class.Point, ptr %359, i32 0, i32 1
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %360)
          to label %361 unwind label %171

361:                                              ; preds = %356
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %30)
          to label %362 unwind label %171

362:                                              ; preds = %361
  %363 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %363)
          to label %364 unwind label %171

364:                                              ; preds = %362
  %365 = load i32, ptr %25, align 4, !tbaa !9
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 %366
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %30, ptr noundef %367)
          to label %368 unwind label %171

368:                                              ; preds = %364
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %31)
          to label %369 unwind label %171

369:                                              ; preds = %368
  %370 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %370)
          to label %371 unwind label %171

371:                                              ; preds = %369
  %372 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %372, ptr noundef %32)
          to label %373 unwind label %171

373:                                              ; preds = %371
  %374 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 0
  %375 = load i32, ptr %25, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %376) #8
  %378 = getelementptr inbounds %class.Point, ptr %377, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %374, ptr noundef %378)
          to label %379 unwind label %171

379:                                              ; preds = %373
  %380 = load i32, ptr %25, align 4, !tbaa !9
  %381 = add nsw i32 %380, 1
  %382 = add nsw i32 512, %381
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds [1024 x %class.Point], ptr %28, i64 0, i64 %383
  %385 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %384, ptr noundef nonnull align 8 dereferenceable(48) %35)
          to label %386 unwind label %171

386:                                              ; preds = %379
  %387 = load i32, ptr %25, align 4, !tbaa !9
  %388 = add nsw i32 %387, 1
  %389 = sub nsw i32 512, %388
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds [1024 x %class.Point], ptr %28, i64 0, i64 %390
  %392 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %391, ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %393 unwind label %171

393:                                              ; preds = %386
  br label %394

394:                                              ; preds = %393
  %395 = load i32, ptr %25, align 4, !tbaa !9
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr %25, align 4, !tbaa !9
  br label %327, !llvm.loop !17

397:                                              ; preds = %327
  %398 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %36, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %399 unwind label %171

399:                                              ; preds = %397
  %400 = load i32, ptr %25, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %401) #8
  %403 = getelementptr inbounds %class.Point, ptr %402, i32 0, i32 1
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %403)
          to label %404 unwind label %171

404:                                              ; preds = %399
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %30)
          to label %405 unwind label %171

405:                                              ; preds = %404
  %406 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef %406)
          to label %407 unwind label %171

407:                                              ; preds = %405
  %408 = load i32, ptr %25, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 %409
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %30, ptr noundef %410)
          to label %411 unwind label %171

411:                                              ; preds = %407
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %31)
          to label %412 unwind label %171

412:                                              ; preds = %411
  %413 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %413)
          to label %414 unwind label %171

414:                                              ; preds = %412
  %415 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %415, ptr noundef %32)
          to label %416 unwind label %171

416:                                              ; preds = %414
  %417 = getelementptr inbounds %class.Point, ptr %36, i32 0, i32 0
  %418 = load i32, ptr %25, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %419) #8
  %421 = getelementptr inbounds %class.Point, ptr %420, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %417, ptr noundef %421)
          to label %422 unwind label %171

422:                                              ; preds = %416
  %423 = getelementptr inbounds [1024 x %class.Point], ptr %28, i64 0, i64 0
  %424 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %423, ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %425 unwind label %171

425:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %426

426:                                              ; preds = %568, %425
  %427 = load i32, ptr %40, align 4, !tbaa !9
  %428 = icmp slt i32 %427, 1024
  br i1 %428, label %429, label %436

429:                                              ; preds = %426
  %430 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %431 = load i32, ptr %17, align 4, !tbaa !9
  %432 = zext i32 %431 to i64
  %433 = getelementptr inbounds i32, ptr %430, i64 %432
  %434 = load i32, ptr %433, align 4, !tbaa !9
  %435 = icmp eq i32 %434, 0
  br label %436

436:                                              ; preds = %429, %426
  %437 = phi i1 [ false, %426 ], [ %435, %429 ]
  br i1 %437, label %439, label %438

438:                                              ; preds = %436
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %572

439:                                              ; preds = %436
  %440 = load i32, ptr %40, align 4, !tbaa !9
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds [1024 x %class.Point], ptr %28, i64 0, i64 %441
  %443 = getelementptr inbounds %class.Point, ptr %442, i32 0, i32 0
  %444 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  invoke void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %443, ptr noundef %444)
          to label %445 unwind label %473

445:                                              ; preds = %439
  %446 = load ptr, ptr @bloom_bP, align 8, !tbaa !5
  %447 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %448 = load i8, ptr %447, align 16, !tbaa !18
  %449 = zext i8 %448 to i64
  %450 = getelementptr inbounds %struct.bloom, ptr %446, i64 %449
  %451 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %452 = invoke i32 @bloom_check(ptr noundef %450, ptr noundef %451, i32 noundef 32)
          to label %453 unwind label %473

453:                                              ; preds = %445
  store i32 %452, ptr %19, align 4, !tbaa !9
  %454 = load i32, ptr %19, align 4, !tbaa !9
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %567

456:                                              ; preds = %453
  %457 = load i32, ptr @FLAGDEBUG, align 4, !tbaa !9
  %458 = icmp ne i32 %457, 0
  br i1 %458, label %459, label %477

459:                                              ; preds = %456
  %460 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %461 = invoke noundef ptr @_Z5tohexPci(ptr noundef %460, i32 noundef 32)
          to label %462 unwind label %473

462:                                              ; preds = %459
  store ptr %461, ptr %8, align 8, !tbaa !5
  %463 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %464 unwind label %473

464:                                              ; preds = %462
  store ptr %463, ptr %7, align 8, !tbaa !5
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  %466 = load i32, ptr %40, align 4, !tbaa !9
  %467 = load i32, ptr %16, align 4, !tbaa !9
  %468 = load ptr, ptr %7, align 8, !tbaa !5
  %469 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.236, ptr noundef %465, i32 noundef %466, i32 noundef %467, ptr noundef %468)
          to label %470 unwind label %473

470:                                              ; preds = %464
  %471 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free(ptr noundef %471) #8
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %472) #8
  br label %477

473:                                              ; preds = %562, %514, %508, %505, %496, %489, %487, %477, %464, %462, %459, %445, %439
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %11, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %12, align 4
  br label %571

477:                                              ; preds = %470, %456
  %478 = load i32, ptr %16, align 4, !tbaa !9
  %479 = mul i32 %478, 1024
  %480 = load i32, ptr %40, align 4, !tbaa !9
  %481 = add i32 %479, %480
  %482 = load i32, ptr %17, align 4, !tbaa !9
  %483 = invoke noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef %9, i32 noundef %481, i32 noundef %482, ptr noundef %10)
          to label %484 unwind label %473

484:                                              ; preds = %477
  store i32 %483, ptr %19, align 4, !tbaa !9
  %485 = load i32, ptr %19, align 4, !tbaa !9
  %486 = icmp ne i32 %485, 0
  br i1 %486, label %487, label %566

487:                                              ; preds = %484
  %488 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %489 unwind label %473

489:                                              ; preds = %487
  store ptr %488, ptr %8, align 8, !tbaa !5
  %490 = load ptr, ptr %8, align 8, !tbaa !5
  %491 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.237, ptr noundef %490)
          to label %492 unwind label %473

492:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 48, ptr %41) #8
  %493 = load ptr, ptr @secp, align 8, !tbaa !5
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8 %41, ptr noundef nonnull align 8 dereferenceable(393296) %493, ptr noundef %10)
          to label %494 unwind label %522

494:                                              ; preds = %492
  %495 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %15, ptr noundef nonnull align 8 dereferenceable(48) %41)
          to label %496 unwind label %526

496:                                              ; preds = %494
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %41) #8
  %497 = load ptr, ptr @secp, align 8, !tbaa !5
  %498 = load ptr, ptr @OriginalPointsBSGScompressed, align 8, !tbaa !5
  %499 = load i32, ptr %17, align 4, !tbaa !9
  %500 = zext i32 %499 to i64
  %501 = getelementptr inbounds i8, ptr %498, i64 %500
  %502 = load i8, ptr %501, align 1, !tbaa !19, !range !21, !noundef !22
  %503 = trunc i8 %502 to i1
  %504 = invoke noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296) %497, i1 noundef zeroext %503, ptr noundef nonnull align 8 dereferenceable(48) %15)
          to label %505 unwind label %473

505:                                              ; preds = %496
  store ptr %504, ptr %7, align 8, !tbaa !5
  %506 = load ptr, ptr %7, align 8, !tbaa !5
  %507 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.238, ptr noundef %506)
          to label %508 unwind label %473

508:                                              ; preds = %505
  %509 = call i32 @pthread_mutex_lock(ptr noundef @write_keys) #8
  %510 = invoke noalias ptr @fopen(ptr noundef @.str.228, ptr noundef @.str.239)
          to label %511 unwind label %473

511:                                              ; preds = %508
  store ptr %510, ptr %4, align 8, !tbaa !5
  %512 = load ptr, ptr %4, align 8, !tbaa !5
  %513 = icmp ne ptr %512, null
  br i1 %513, label %514, label %531

514:                                              ; preds = %511
  %515 = load ptr, ptr %4, align 8, !tbaa !5
  %516 = load ptr, ptr %8, align 8, !tbaa !5
  %517 = load ptr, ptr %7, align 8, !tbaa !5
  %518 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %515, ptr noundef @.str.240, ptr noundef %516, ptr noundef %517) #8
  %519 = load ptr, ptr %4, align 8, !tbaa !5
  %520 = invoke i32 @fclose(ptr noundef %519)
          to label %521 unwind label %473

521:                                              ; preds = %514
  br label %531

522:                                              ; preds = %492
  %523 = landingpad { ptr, i32 }
          cleanup
  %524 = extractvalue { ptr, i32 } %523, 0
  store ptr %524, ptr %11, align 8
  %525 = extractvalue { ptr, i32 } %523, 1
  store i32 %525, ptr %12, align 4
  br label %530

526:                                              ; preds = %494
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %11, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %12, align 4
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #8
  br label %530

530:                                              ; preds = %526, %522
  call void @llvm.lifetime.end.p0(i64 48, ptr %41) #8
  br label %571

531:                                              ; preds = %521, %511
  %532 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free(ptr noundef %532) #8
  %533 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %533) #8
  %534 = call i32 @pthread_mutex_unlock(ptr noundef @write_keys) #8
  %535 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %536 = load i32, ptr %17, align 4, !tbaa !9
  %537 = zext i32 %536 to i64
  %538 = getelementptr inbounds i32, ptr %535, i64 %537
  store i32 1, ptr %538, align 4, !tbaa !9
  store i32 1, ptr %20, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %539

539:                                              ; preds = %556, %531
  %540 = load i32, ptr %18, align 4, !tbaa !9
  %541 = load i32, ptr @bsgs_point_number, align 4, !tbaa !9
  %542 = icmp ult i32 %540, %541
  br i1 %542, label %543, label %546

543:                                              ; preds = %539
  %544 = load i32, ptr %20, align 4, !tbaa !9
  %545 = icmp ne i32 %544, 0
  br label %546

546:                                              ; preds = %543, %539
  %547 = phi i1 [ false, %539 ], [ %545, %543 ]
  br i1 %547, label %548, label %559

548:                                              ; preds = %546
  %549 = load ptr, ptr @bsgs_found, align 8, !tbaa !5
  %550 = load i32, ptr %18, align 4, !tbaa !9
  %551 = zext i32 %550 to i64
  %552 = getelementptr inbounds i32, ptr %549, i64 %551
  %553 = load i32, ptr %552, align 4, !tbaa !9
  %554 = load i32, ptr %20, align 4, !tbaa !9
  %555 = and i32 %554, %553
  store i32 %555, ptr %20, align 4, !tbaa !9
  br label %556

556:                                              ; preds = %548
  %557 = load i32, ptr %18, align 4, !tbaa !9
  %558 = add i32 %557, 1
  store i32 %558, ptr %18, align 4, !tbaa !9
  br label %539, !llvm.loop !23

559:                                              ; preds = %546
  %560 = load i32, ptr %20, align 4, !tbaa !9
  %561 = icmp ne i32 %560, 0
  br i1 %561, label %562, label %565

562:                                              ; preds = %559
  %563 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.241)
          to label %564 unwind label %473

564:                                              ; preds = %562
  call void @exit(i32 noundef 1) #11
  unreachable

565:                                              ; preds = %559
  br label %566

566:                                              ; preds = %565, %484
  br label %567

567:                                              ; preds = %566, %453
  br label %568

568:                                              ; preds = %567
  %569 = load i32, ptr %40, align 4, !tbaa !9
  %570 = add nsw i32 %569, 1
  store i32 %570, ptr %40, align 4, !tbaa !9
  br label %426, !llvm.loop !24

571:                                              ; preds = %530, %473
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %620

572:                                              ; preds = %438
  %573 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %35, ptr noundef nonnull align 8 dereferenceable(48) %24)
          to label %574 unwind label %171

574:                                              ; preds = %572
  %575 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef getelementptr inbounds (%class.Point, ptr @_2GSn, i32 0, i32 1), ptr noundef %575)
          to label %576 unwind label %171

576:                                              ; preds = %574
  %577 = load i32, ptr %25, align 4, !tbaa !9
  %578 = add nsw i32 %577, 1
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds [513 x %class.Int], ptr %27, i64 0, i64 %579
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef %29, ptr noundef %580)
          to label %581 unwind label %171

581:                                              ; preds = %576
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef %31)
          to label %582 unwind label %171

582:                                              ; preds = %581
  %583 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %583)
          to label %584 unwind label %171

584:                                              ; preds = %582
  %585 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %585, ptr noundef %32)
          to label %586 unwind label %171

586:                                              ; preds = %584
  %587 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %587, ptr noundef @_2GSn)
          to label %588 unwind label %171

588:                                              ; preds = %586
  %589 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  %590 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 0
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %589, ptr noundef @_2GSn, ptr noundef %590)
          to label %591 unwind label %171

591:                                              ; preds = %588
  %592 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %592, ptr noundef %31)
          to label %593 unwind label %171

593:                                              ; preds = %591
  %594 = getelementptr inbounds %class.Point, ptr %35, i32 0, i32 1
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %594, ptr noundef getelementptr inbounds (%class.Point, ptr @_2GSn, i32 0, i32 1))
          to label %595 unwind label %171

595:                                              ; preds = %593
  %596 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %24, ptr noundef nonnull align 8 dereferenceable(48) %35)
          to label %597 unwind label %171

597:                                              ; preds = %595
  %598 = load i32, ptr %16, align 4, !tbaa !9
  %599 = add i32 %598, 1
  store i32 %599, ptr %16, align 4, !tbaa !9
  br label %248, !llvm.loop !25

600:                                              ; preds = %259
  br label %601

601:                                              ; preds = %600, %233
  br label %602

602:                                              ; preds = %601
  %603 = load i32, ptr %17, align 4, !tbaa !9
  %604 = add i32 %603, 1
  store i32 %604, ptr %17, align 4, !tbaa !9
  br label %229, !llvm.loop !26

605:                                              ; preds = %229
  %606 = load ptr, ptr @steps, align 8, !tbaa !5
  %607 = load i32, ptr %21, align 4, !tbaa !9
  %608 = zext i32 %607 to i64
  %609 = getelementptr inbounds i64, ptr %606, i64 %608
  %610 = load i64, ptr %609, align 8, !tbaa !13
  %611 = add i64 %610, 2
  store i64 %611, ptr %609, align 8, !tbaa !13
  br label %612

612:                                              ; preds = %605
  br i1 true, label %179, label %613, !llvm.loop !27

613:                                              ; preds = %612, %186
  %614 = load ptr, ptr @ends, align 8, !tbaa !5
  %615 = load i32, ptr %21, align 4, !tbaa !9
  %616 = zext i32 %615 to i64
  %617 = getelementptr inbounds i32, ptr %614, i64 %616
  store i32 1, ptr %617, align 4, !tbaa !9
  store ptr null, ptr %2, align 8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %35) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %35) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  %618 = getelementptr inbounds [1024 x %class.Point], ptr %28, i32 0, i32 0
  %619 = getelementptr inbounds %class.Point, ptr %618, i64 1024
  br label %631

620:                                              ; preds = %571, %305, %296, %287, %171
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #8
  br label %621

621:                                              ; preds = %620, %167
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %35) #8
  br label %622

622:                                              ; preds = %621, %163
  call void @llvm.lifetime.end.p0(i64 48, ptr %35) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #8
  br label %623

623:                                              ; preds = %622, %159
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #8
  br label %624

624:                                              ; preds = %623, %155
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #8
  br label %625

625:                                              ; preds = %624, %151
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #8
  br label %626

626:                                              ; preds = %625, %147
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #8
  br label %627

627:                                              ; preds = %626, %143
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #8
  br label %628

628:                                              ; preds = %627, %139
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  %629 = getelementptr inbounds [1024 x %class.Point], ptr %28, i32 0, i32 0
  %630 = getelementptr inbounds %class.Point, ptr %629, i64 1024
  br label %638

631:                                              ; preds = %631, %613
  %632 = phi ptr [ %619, %613 ], [ %633, %631 ]
  %633 = getelementptr inbounds %class.Point, ptr %632, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %633) #8
  %634 = icmp eq ptr %633, %618
  br i1 %634, label %635, label %631

635:                                              ; preds = %631
  call void @llvm.lifetime.end.p0(i64 49152, ptr %28) #8
  %636 = getelementptr inbounds [513 x %class.Int], ptr %27, i32 0, i32 0
  %637 = getelementptr inbounds %class.Int, ptr %636, i64 513
  br label %646

638:                                              ; preds = %638, %628
  %639 = phi ptr [ %630, %628 ], [ %640, %638 ]
  %640 = getelementptr inbounds %class.Point, ptr %639, i64 -1
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %640) #8
  %641 = icmp eq ptr %640, %629
  br i1 %641, label %642, label %638

642:                                              ; preds = %638
  br label %643

643:                                              ; preds = %642, %138
  call void @llvm.lifetime.end.p0(i64 49152, ptr %28) #8
  %644 = getelementptr inbounds [513 x %class.Int], ptr %27, i32 0, i32 0
  %645 = getelementptr inbounds %class.Int, ptr %644, i64 513
  br label %652

646:                                              ; preds = %646, %635
  %647 = phi ptr [ %637, %635 ], [ %648, %646 ]
  %648 = getelementptr inbounds %class.Int, ptr %647, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %648) #8
  %649 = icmp eq ptr %648, %636
  br i1 %649, label %650, label %646

650:                                              ; preds = %646
  call void @llvm.lifetime.end.p0(i64 8208, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %24) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %14) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  %651 = load ptr, ptr %2, align 8
  ret ptr %651

652:                                              ; preds = %652, %643
  %653 = phi ptr [ %645, %643 ], [ %654, %652 ]
  %654 = getelementptr inbounds %class.Int, ptr %653, i64 -1
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %654) #8
  %655 = icmp eq ptr %654, %644
  br i1 %655, label %656, label %652

656:                                              ; preds = %652
  br label %657

657:                                              ; preds = %656, %128
  call void @llvm.lifetime.end.p0(i64 8208, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %24) #8
  br label %658

658:                                              ; preds = %657, %115
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #8
  br label %659

659:                                              ; preds = %658, %111, %107
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  br label %660

660:                                              ; preds = %659, %103
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  br label %661

661:                                              ; preds = %660, %99
  call void @llvm.lifetime.end.p0(i64 48, ptr %14) #8
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  br label %662

662:                                              ; preds = %661, %95
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #8
  br label %663

663:                                              ; preds = %662, %91
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #8
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  br label %664

664:                                              ; preds = %663
  %665 = load ptr, ptr %11, align 8
  %666 = load i32, ptr %12, align 4
  %667 = insertvalue { ptr, i32 } poison, ptr %665, 0
  %668 = insertvalue { ptr, i32 } %667, i32 %666, 1
  resume { ptr, i32 } %668
}

declare void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare i32 @bloom_check(ptr noundef, ptr noundef, i32 noundef) #0

declare void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef) unnamed_addr #0

declare void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef) #0

declare void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) #0

declare void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20)) #0

declare void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) #0

declare void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16)) #0

declare void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16)) #0

declare void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare noundef zeroext i1 @_ZN3Int16IsGreaterOrEqualEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #0

declare noundef ptr @_Z5tohexPci(ptr noundef, i32 noundef) #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #7

declare noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48)) #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin nounwind }
attributes #11 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTS8tothread", !10, i64 0, !6, i64 8, !6, i64 16}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"bool", !7, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl" = type { %"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Point, std::allocator<Point>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Point = type { %class.Int, %class.Int, %class.Int }
%class.Int = type { [1 x %struct.__mpz_struct] }
%struct.__mpz_struct = type { i32, i32, ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.bloom = type { i64, i64, i64, i8, x86_fp80, i8, i8, i8, double, ptr }

@GSn = external dso_local global %"class.std::vector", align 8
@_2GSn = external dso_local global %class.Point, align 8
@THREADOUTPUT = external dso_local local_unnamed_addr global i32, align 4
@write_keys = external dso_local global %union.pthread_mutex_t, align 8
@bsgs_thread = external dso_local global %union.pthread_mutex_t, align 8
@steps = external dso_local local_unnamed_addr global ptr, align 8
@ends = external dso_local local_unnamed_addr global ptr, align 8
@FLAGDEBUG = external dso_local local_unnamed_addr global i32, align 4
@FLAGQUIET = external dso_local local_unnamed_addr global i32, align 4
@FLAGMATRIX = external dso_local local_unnamed_addr global i32, align 4
@bsgs_found = external dso_local local_unnamed_addr global ptr, align 8
@OriginalPointsBSGS = external dso_local global %"class.std::vector", align 8
@OriginalPointsBSGScompressed = external dso_local local_unnamed_addr global ptr, align 8
@bloom_bP = external dso_local local_unnamed_addr global ptr, align 8
@bsgs_aux = external dso_local local_unnamed_addr global i64, align 8
@bsgs_point_number = external dso_local local_unnamed_addr global i32, align 4
@BSGS_CURRENT = external dso_local global %class.Int, align 8
@BSGS_N_double = external dso_local global %class.Int, align 8
@BSGS_M = external dso_local global %class.Int, align 8
@BSGS_M_double = external dso_local global %class.Int, align 8
@n_range_end = external dso_local global %class.Int, align 8
@secp = external dso_local local_unnamed_addr global ptr, align 8
@stdout = external local_unnamed_addr global ptr, align 8
@.str.228 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.234 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.235 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.236 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.237 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.238 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.239 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.240 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.241 = external hidden unnamed_addr constant [23 x i8], align 1

declare void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1

declare void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

declare void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #7

declare void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #8 align 2

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #5

declare void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef) local_unnamed_addr #0

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

declare void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind writable sret(%class.Point) align 8, ptr noundef nonnull align 8 dereferenceable(393296), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0

; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noalias noundef ptr @_Z19thread_process_bsgsPv(ptr nocapture noundef %0) local_unnamed_addr #9 personality ptr @__gxx_personality_v0 {
  %2 = alloca [32 x i8], align 16
  %3 = alloca %class.Int, align 8
  %4 = alloca %class.Int, align 8
  %5 = alloca %class.Point, align 8
  %6 = alloca %class.Point, align 8
  %7 = alloca %class.Point, align 8
  %8 = alloca %class.Point, align 8
  %9 = alloca [513 x %class.Int], align 16
  %10 = alloca [1024 x %class.Point], align 16
  %11 = alloca %class.Int, align 8
  %12 = alloca %class.Int, align 8
  %13 = alloca %class.Int, align 8
  %14 = alloca %class.Int, align 8
  %15 = alloca %class.Int, align 8
  %16 = alloca %class.Int, align 8
  %17 = alloca %class.Point, align 8
  %18 = alloca %class.Point, align 8
  %19 = alloca %class.Point, align 8
  %20 = alloca %class.Point, align 8
  %21 = alloca %class.Point, align 8
  %22 = alloca %class.Point, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #10
  call void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %23 unwind label %56

23:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %5)
          to label %24 unwind label %58

24:                                               ; preds = %23
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %6)
          to label %25 unwind label %60

25:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %7)
          to label %26 unwind label %62

26:                                               ; preds = %25
  %27 = invoke noalias noundef nonnull dereferenceable(24) ptr @_Znwm(i64 noundef 24) #11
          to label %28 unwind label %64

28:                                               ; preds = %26
  invoke void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20) %27, i32 noundef 513)
          to label %29 unwind label %66

29:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %30 unwind label %68

30:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 8208, ptr nonnull %9) #10
  %31 = getelementptr inbounds i8, ptr %9, i64 8208
  br label %32

32:                                               ; preds = %33, %30
  %.idx = phi i64 [ 0, %30 ], [ %.add, %33 ]
  %.ptr = getelementptr inbounds i8, ptr %9, i64 %.idx
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %.ptr)
          to label %33 unwind label %70

33:                                               ; preds = %32
  %.add = add nuw nsw i64 %.idx, 16
  %34 = icmp eq i64 %.add, 8208
  br i1 %34, label %35, label %32

35:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 49152, ptr nonnull %10) #10
  %36 = getelementptr inbounds i8, ptr %10, i64 49152
  br label %37

37:                                               ; preds = %38, %35
  %.idx119 = phi i64 [ 0, %35 ], [ %.add120, %38 ]
  %.ptr121 = getelementptr inbounds i8, ptr %10, i64 %.idx119
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %.ptr121)
          to label %38 unwind label %76

38:                                               ; preds = %37
  %.add120 = add nuw nsw i64 %.idx119, 48
  %39 = icmp eq i64 %.add120, 49152
  br i1 %39, label %40, label %37

40:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %11)
          to label %41 unwind label %82

41:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %42 unwind label %84

42:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %43 unwind label %86

43:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %44 unwind label %88

44:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %45 unwind label %90

45:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #10
  invoke void @_ZN3IntC1Ev(ptr noundef nonnull align 8 dereferenceable(16) %16)
          to label %46 unwind label %92

46:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %17) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %17)
          to label %47 unwind label %94

47:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %18) #10
  invoke void @_ZN5PointC1Ev(ptr noundef nonnull align 8 dereferenceable(48) %18)
          to label %48 unwind label %96

48:                                               ; preds = %47
  invoke void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20) %27, ptr noundef nonnull %9)
          to label %49 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

49:                                               ; preds = %48
  %50 = load i32, ptr %0, align 8, !tbaa !5
  call void @free(ptr noundef %0) #10
  %51 = load i64, ptr @bsgs_aux, align 8, !tbaa !11
  %52 = lshr i64 %51, 10
  %53 = trunc i64 %52 to i32
  %54 = and i64 %51, 1023
  %.not = icmp ne i64 %54, 0
  %55 = zext i1 %.not to i32
  %spec.select = add i32 %55, %53
  %spec.select.fr = freeze i32 %spec.select
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull @BSGS_M_double)
          to label %98 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

56:                                               ; preds = %1
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %372

58:                                               ; preds = %23
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %371

60:                                               ; preds = %24
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %370

62:                                               ; preds = %25
  %63 = landingpad { ptr, i32 }
          cleanup
  br label %369

64:                                               ; preds = %26
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %368

66:                                               ; preds = %28
  %67 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %27, i64 noundef 24) #12
  br label %368

68:                                               ; preds = %29
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %367

70:                                               ; preds = %32
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = icmp eq i64 %.idx, 0
  br i1 %72, label %.loopexit, label %.preheader170

.preheader170:                                    ; preds = %70, %.preheader170
  %73 = phi ptr [ %74, %.preheader170 ], [ %.ptr, %70 ]
  %74 = getelementptr inbounds i8, ptr %73, i64 -16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %74) #10
  %75 = icmp eq ptr %74, %9
  br i1 %75, label %.loopexit, label %.preheader170

76:                                               ; preds = %37
  %77 = landingpad { ptr, i32 }
          cleanup
  %78 = icmp eq i64 %.idx119, 0
  br i1 %78, label %.loopexit155, label %.preheader168

.preheader168:                                    ; preds = %76, %.preheader168
  %79 = phi ptr [ %80, %.preheader168 ], [ %.ptr121, %76 ]
  %80 = getelementptr inbounds i8, ptr %79, i64 -48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %80) #10
  %81 = icmp eq ptr %80, %10
  br i1 %81, label %.loopexit155, label %.preheader168

82:                                               ; preds = %40
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %348

84:                                               ; preds = %41
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %347

86:                                               ; preds = %42
  %87 = landingpad { ptr, i32 }
          cleanup
  br label %346

88:                                               ; preds = %43
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %345

90:                                               ; preds = %44
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %344

92:                                               ; preds = %45
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %343

94:                                               ; preds = %46
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %342

96:                                               ; preds = %47
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %341

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit: ; preds = %139, %136, %135, %134, %124, %115, %109, %108, %106
  %lpad.loopexit165 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp: ; preds = %99, %98, %49, %48
  %lpad.loopexit.split-lp166 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

98:                                               ; preds = %49
  invoke void @_ZN3Int4MultEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef 512)
          to label %99 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

99:                                               ; preds = %98
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull @BSGS_M)
          to label %.preheader164 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader164:                                    ; preds = %99
  %.not208 = icmp eq i32 %spec.select.fr, 0
  %100 = getelementptr inbounds i8, ptr %10, i64 24576
  %101 = getelementptr inbounds i8, ptr %17, i64 16
  %102 = getelementptr inbounds i8, ptr %18, i64 16
  %103 = zext i32 %50 to i64
  %wide.trip.count = zext i32 %spec.select.fr to i64
  %104 = getelementptr inbounds i8, ptr %9, i64 8176
  %105 = getelementptr inbounds i8, ptr %9, i64 8192
  br label %106

106:                                              ; preds = %.preheader164, %._crit_edge189
  %107 = call i32 @pthread_mutex_lock(ptr noundef nonnull @bsgs_thread) #10
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @BSGS_CURRENT)
          to label %108 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

108:                                              ; preds = %106
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) @BSGS_CURRENT, ptr noundef nonnull @BSGS_N_double)
          to label %109 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

109:                                              ; preds = %108
  %110 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @bsgs_thread) #10
  %111 = invoke noundef zeroext i1 @_ZN3Int16IsGreaterOrEqualEPS_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull @n_range_end)
          to label %112 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

112:                                              ; preds = %109
  br i1 %111, label %338, label %113

113:                                              ; preds = %112
  %114 = load i32, ptr @FLAGMATRIX, align 4, !tbaa !13
  %.not123 = icmp eq i32 %114, 0
  br i1 %.not123, label %121, label %115

115:                                              ; preds = %113
  %116 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %117 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

117:                                              ; preds = %115
  %118 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.234, ptr noundef %116)
  %119 = load ptr, ptr @stdout, align 8, !tbaa !14
  %120 = call i32 @fflush(ptr noundef %119)
  call void @free(ptr noundef %116) #10
  br label %130

121:                                              ; preds = %113
  %122 = load i32, ptr @FLAGQUIET, align 4, !tbaa !13
  %123 = icmp eq i32 %122, 0
  br i1 %123, label %124, label %130

124:                                              ; preds = %121
  %125 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %126 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

126:                                              ; preds = %124
  %127 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.235, ptr noundef %125)
  %128 = load ptr, ptr @stdout, align 8, !tbaa !14
  %129 = call i32 @fflush(ptr noundef %128)
  call void @free(ptr noundef %125) #10
  store i32 1, ptr @THREADOUTPUT, align 4, !tbaa !13
  br label %130

130:                                              ; preds = %121, %126, %117
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %19) #10
  %131 = load ptr, ptr @secp, align 8, !tbaa !14
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %19, ptr noundef nonnull align 8 dereferenceable(393296) %131, ptr noundef nonnull %3)
          to label %132 unwind label %314

132:                                              ; preds = %130
  %133 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %5, ptr noundef nonnull align 8 dereferenceable(48) %19)
          to label %134 unwind label %316

134:                                              ; preds = %132
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #10
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull %3)
          to label %135 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

135:                                              ; preds = %134
  invoke void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %136 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

136:                                              ; preds = %135
  %137 = load ptr, ptr @secp, align 8, !tbaa !14
  %138 = getelementptr inbounds i8, ptr %137, i64 64
  invoke void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull %138)
          to label %139 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

139:                                              ; preds = %136
  invoke void @_ZN3Int3SubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull %16)
          to label %140 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit

140:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %20) #10
  %141 = load ptr, ptr @secp, align 8, !tbaa !14
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %20, ptr noundef nonnull align 8 dereferenceable(393296) %141, ptr noundef nonnull %15)
          to label %142 unwind label %319

142:                                              ; preds = %140
  %143 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %6, ptr noundef nonnull align 8 dereferenceable(48) %20)
          to label %144 unwind label %321

144:                                              ; preds = %142
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #10
  %145 = load i32, ptr @bsgs_point_number, align 4, !tbaa !13
  %.not209 = icmp eq i32 %145, 0
  br i1 %.not209, label %._crit_edge189, label %.lr.ph188

.lr.ph188:                                        ; preds = %144
  br i1 %.not208, label %.lr.ph188.split.preheader, label %.lr.ph188.split.us

.lr.ph188.split.preheader:                        ; preds = %.lr.ph188
  %.pre244 = load ptr, ptr @bsgs_found, align 8, !tbaa !14
  br label %.lr.ph188.split

.lr.ph188.split.us:                               ; preds = %.lr.ph188, %.critedge.us
  %146 = phi i32 [ %162, %.critedge.us ], [ %145, %.lr.ph188 ]
  %indvars.iv237 = phi i64 [ %indvars.iv.next238, %.critedge.us ], [ 0, %.lr.ph188 ]
  %147 = load ptr, ptr @bsgs_found, align 8, !tbaa !14
  %148 = getelementptr inbounds i32, ptr %147, i64 %indvars.iv237
  %149 = load i32, ptr %148, align 4, !tbaa !13
  %150 = icmp eq i32 %149, 0
  br i1 %150, label %151, label %.critedge.us

151:                                              ; preds = %.lr.ph188.split.us
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %21) #10
  %152 = load ptr, ptr @secp, align 8, !tbaa !14
  %153 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %indvars.iv237) #10
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %21, ptr noundef nonnull align 8 dereferenceable(393296) %152, ptr noundef nonnull align 8 dereferenceable(48) %153, ptr noundef nonnull align 8 dereferenceable(48) %6)
          to label %154 unwind label %.split.us

154:                                              ; preds = %151
  %155 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull align 8 dereferenceable(48) %21)
          to label %.lr.ph183.us unwind label %.split191.us

.lr.ph183.us:                                     ; preds = %154
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  %156 = trunc nuw i64 %indvars.iv237 to i32
  br label %157

157:                                              ; preds = %.lr.ph183.us, %203
  %indvars.iv233 = phi i64 [ 0, %.lr.ph183.us ], [ %indvars.iv.next234, %203 ]
  %158 = load ptr, ptr @bsgs_found, align 8, !tbaa !14
  %159 = getelementptr inbounds i32, ptr %158, i64 %indvars.iv237
  %160 = load i32, ptr %159, align 4, !tbaa !13
  %161 = icmp eq i32 %160, 0
  br i1 %161, label %.preheader158.us, label %.critedge.us.loopexit

.critedge.us.loopexit:                            ; preds = %157, %203
  %.pre = load i32, ptr @bsgs_point_number, align 4, !tbaa !13
  br label %.critedge.us

.critedge.us:                                     ; preds = %.critedge.us.loopexit, %.lr.ph188.split.us
  %162 = phi i32 [ %.pre, %.critedge.us.loopexit ], [ %146, %.lr.ph188.split.us ]
  %indvars.iv.next238 = add nuw nsw i64 %indvars.iv237, 1
  %163 = zext i32 %162 to i64
  %164 = icmp ult i64 %indvars.iv.next238, %163
  br i1 %164, label %.lr.ph188.split.us, label %._crit_edge189, !llvm.loop !15

165:                                              ; preds = %296
  %166 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #10
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %104, ptr noundef nonnull %166, ptr noundef nonnull %8)
          to label %167 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

167:                                              ; preds = %165
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %105, ptr noundef nonnull @_2GSn, ptr noundef nonnull %8)
          to label %168 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

168:                                              ; preds = %167
  invoke void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20) %27)
          to label %169 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

169:                                              ; preds = %168
  %170 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %100, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %.preheader156.us unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

.preheader156.us:                                 ; preds = %169, %290
  %indvars.iv222 = phi i64 [ %indvars.iv.next223, %290 ], [ 0, %169 ]
  %exitcond225.not = icmp eq i64 %indvars.iv222, 511
  br i1 %exitcond225.not, label %171, label %261

171:                                              ; preds = %.preheader156.us
  %172 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %18, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %173 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

173:                                              ; preds = %171
  %174 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #10
  %175 = getelementptr inbounds i8, ptr %174, i64 16
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %175)
          to label %176 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

176:                                              ; preds = %173
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %177 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

177:                                              ; preds = %176
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %102)
          to label %178 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

178:                                              ; preds = %177
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %12, ptr noundef nonnull %104)
          to label %179 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

179:                                              ; preds = %178
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %180 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

180:                                              ; preds = %179
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %181 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

181:                                              ; preds = %180
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %14)
          to label %182 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

182:                                              ; preds = %181
  %183 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef 511) #10
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %183)
          to label %184 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

184:                                              ; preds = %182
  %185 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %10, ptr noundef nonnull align 8 dereferenceable(48) %18)
          to label %.preheader.us unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

186:                                              ; preds = %.preheader.us, %260
  %indvars.iv229 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next230, %260 ]
  %187 = load ptr, ptr @bsgs_found, align 8, !tbaa !14
  %188 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv237
  %189 = load i32, ptr %188, align 4, !tbaa !13
  %190 = icmp eq i32 %189, 0
  br i1 %190, label %204, label %.critedge2.us

.critedge2.us:                                    ; preds = %260, %186
  %191 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %17, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %192 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

192:                                              ; preds = %.critedge2.us
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull getelementptr inbounds (i8, ptr @_2GSn, i64 16), ptr noundef nonnull %101)
          to label %193 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

193:                                              ; preds = %192
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %11, ptr noundef nonnull %105)
          to label %194 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

194:                                              ; preds = %193
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %195 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

195:                                              ; preds = %194
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %196 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

196:                                              ; preds = %195
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull %14)
          to label %197 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

197:                                              ; preds = %196
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull @_2GSn)
          to label %198 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

198:                                              ; preds = %197
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull @_2GSn, ptr noundef nonnull %17)
          to label %199 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

199:                                              ; preds = %198
  invoke void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull %13)
          to label %200 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

200:                                              ; preds = %199
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %101, ptr noundef nonnull getelementptr inbounds (i8, ptr @_2GSn, i64 16))
          to label %201 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

201:                                              ; preds = %200
  %202 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull align 8 dereferenceable(48) %17)
          to label %203 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us

203:                                              ; preds = %201
  %indvars.iv.next234 = add nuw nsw i64 %indvars.iv233, 1
  %exitcond236.not = icmp eq i64 %indvars.iv.next234, %wide.trip.count
  br i1 %exitcond236.not, label %.critedge.us.loopexit, label %157, !llvm.loop !17

204:                                              ; preds = %186
  %205 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %indvars.iv229
  invoke void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16) %205, ptr noundef nonnull %2)
          to label %206 unwind label %.split195.us

206:                                              ; preds = %204
  %207 = load ptr, ptr @bloom_bP, align 8, !tbaa !14
  %208 = load i8, ptr %2, align 16, !tbaa !18
  %209 = zext i8 %208 to i64
  %210 = getelementptr inbounds %struct.bloom, ptr %207, i64 %209
  %211 = invoke i32 @bloom_check(ptr noundef %210, ptr noundef nonnull %2, i32 noundef 32)
          to label %212 unwind label %.split195.us

212:                                              ; preds = %206
  %.not129.us = icmp eq i32 %211, 0
  br i1 %.not129.us, label %260, label %213

213:                                              ; preds = %212
  %214 = load i32, ptr @FLAGDEBUG, align 4, !tbaa !13
  %.not130.us = icmp eq i32 %214, 0
  br i1 %.not130.us, label %222, label %215

215:                                              ; preds = %213
  %216 = invoke noundef ptr @_Z5tohexPci(ptr noundef nonnull %2, i32 noundef 32)
          to label %217 unwind label %.split195.us

217:                                              ; preds = %215
  %218 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %3)
          to label %219 unwind label %.split195.us

219:                                              ; preds = %217
  %220 = trunc nuw nsw i64 %indvars.iv229 to i32
  %221 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.236, ptr noundef %216, i32 noundef %220, i32 noundef %297, ptr noundef %218)
  call void @free(ptr noundef %216) #10
  call void @free(ptr noundef %218) #10
  br label %222

222:                                              ; preds = %219, %213
  %223 = add i64 %indvars.iv229, %298
  %224 = trunc i64 %223 to i32
  %225 = invoke noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef nonnull %3, i32 noundef %224, i32 noundef %156, ptr noundef nonnull %4)
          to label %226 unwind label %.split195.us

226:                                              ; preds = %222
  %.not131.us = icmp eq i32 %225, 0
  br i1 %.not131.us, label %260, label %227

227:                                              ; preds = %226
  %228 = invoke noundef ptr @_ZN3Int9GetBase16Ev(ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %229 unwind label %.split195.us

229:                                              ; preds = %227
  %230 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.237, ptr noundef %228)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %22) #10
  %231 = load ptr, ptr @secp, align 8, !tbaa !14
  invoke void @_ZN9Secp256K116ComputePublicKeyEP3Int(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %22, ptr noundef nonnull align 8 dereferenceable(393296) %231, ptr noundef nonnull %4)
          to label %232 unwind label %.split198.us

232:                                              ; preds = %229
  %233 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %7, ptr noundef nonnull align 8 dereferenceable(48) %22)
          to label %234 unwind label %.split201.us

234:                                              ; preds = %232
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %22) #10
  %235 = load ptr, ptr @secp, align 8, !tbaa !14
  %236 = load ptr, ptr @OriginalPointsBSGScompressed, align 8, !tbaa !14
  %237 = getelementptr inbounds i8, ptr %236, i64 %indvars.iv237
  %238 = load i8, ptr %237, align 1, !tbaa !19, !range !21, !noundef !22
  %239 = trunc nuw i8 %238 to i1
  %240 = invoke noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296) %235, i1 noundef zeroext %239, ptr noundef nonnull align 8 dereferenceable(48) %7)
          to label %241 unwind label %.split195.us

241:                                              ; preds = %234
  %242 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.238, ptr noundef %240)
  %243 = call i32 @pthread_mutex_lock(ptr noundef nonnull @write_keys) #10
  %244 = call noalias ptr @fopen(ptr noundef nonnull @.str.228, ptr noundef nonnull @.str.239)
  %.not136.us = icmp eq ptr %244, null
  br i1 %.not136.us, label %248, label %245

245:                                              ; preds = %241
  %246 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %244, ptr noundef nonnull @.str.240, ptr noundef %228, ptr noundef %240) #10
  %247 = call i32 @fclose(ptr noundef nonnull %244)
  br label %248

248:                                              ; preds = %245, %241
  call void @free(ptr noundef %228) #10
  call void @free(ptr noundef %240) #10
  %249 = call i32 @pthread_mutex_unlock(ptr noundef nonnull @write_keys) #10
  %250 = load ptr, ptr @bsgs_found, align 8, !tbaa !14
  %251 = getelementptr inbounds i32, ptr %250, i64 %indvars.iv237
  store i32 1, ptr %251, align 4, !tbaa !13
  %252 = load i32, ptr @bsgs_point_number, align 4, !tbaa !13
  %.not210 = icmp eq i32 %252, 0
  br i1 %.not210, label %.split204.us, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %248
  %253 = zext i32 %252 to i64
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %.lr.ph.us
  %indvars.iv226 = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvars.iv.next227, %.lr.ph.us ]
  %254 = getelementptr inbounds i32, ptr %250, i64 %indvars.iv226
  %255 = load i32, ptr %254, align 4, !tbaa !13
  %256 = and i32 %255, 1
  %indvars.iv.next227 = add nuw nsw i64 %indvars.iv226, 1
  %257 = icmp ult i64 %indvars.iv.next227, %253
  %258 = icmp ne i32 %256, 0
  %259 = select i1 %257, i1 %258, i1 false
  br i1 %259, label %.lr.ph.us, label %._crit_edge.us, !llvm.loop !23

260:                                              ; preds = %._crit_edge.us, %226, %212
  %indvars.iv.next230 = add nuw nsw i64 %indvars.iv229, 1
  %exitcond232.not = icmp eq i64 %indvars.iv.next230, 1024
  br i1 %exitcond232.not, label %.critedge2.us, label %186, !llvm.loop !24

261:                                              ; preds = %.preheader156.us
  %262 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %17, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %263 unwind label %.loopexit157.split.us

263:                                              ; preds = %261
  %264 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %18, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %265 unwind label %.loopexit157.split.us

265:                                              ; preds = %263
  %266 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  %267 = getelementptr inbounds i8, ptr %266, i64 16
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull %267, ptr noundef nonnull %101)
          to label %268 unwind label %.loopexit157.split.us

268:                                              ; preds = %265
  %269 = getelementptr inbounds [513 x %class.Int], ptr %9, i64 0, i64 %indvars.iv222
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %11, ptr noundef nonnull %269)
          to label %270 unwind label %.loopexit157.split.us

270:                                              ; preds = %268
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %271 unwind label %.loopexit157.split.us

271:                                              ; preds = %270
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %272 unwind label %.loopexit157.split.us

272:                                              ; preds = %271
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull %14)
          to label %273 unwind label %.loopexit157.split.us

273:                                              ; preds = %272
  %274 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull %274)
          to label %275 unwind label %.loopexit157.split.us

275:                                              ; preds = %273
  %276 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  %277 = getelementptr inbounds i8, ptr %276, i64 16
  invoke void @_ZN3Int3SetEPKS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %277)
          to label %278 unwind label %.loopexit157.split.us

278:                                              ; preds = %275
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %279 unwind label %.loopexit157.split.us

279:                                              ; preds = %278
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull %102)
          to label %280 unwind label %.loopexit157.split.us

280:                                              ; preds = %279
  invoke void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull %12, ptr noundef nonnull %269)
          to label %281 unwind label %.loopexit157.split.us

281:                                              ; preds = %280
  invoke void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull %13)
          to label %282 unwind label %.loopexit157.split.us

282:                                              ; preds = %281
  invoke void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %283 unwind label %.loopexit157.split.us

283:                                              ; preds = %282
  invoke void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %14)
          to label %284 unwind label %.loopexit157.split.us

284:                                              ; preds = %283
  %285 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv222) #10
  invoke void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull %285)
          to label %286 unwind label %.loopexit157.split.us

286:                                              ; preds = %284
  %287 = add nuw nsw i64 %indvars.iv222, 513
  %288 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %287
  %289 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %288, ptr noundef nonnull align 8 dereferenceable(48) %17)
          to label %290 unwind label %.loopexit157.split.us

290:                                              ; preds = %286
  %indvars.iv.next223 = add nuw nsw i64 %indvars.iv222, 1
  %291 = sub nuw nsw i64 511, %indvars.iv222
  %292 = getelementptr inbounds [1024 x %class.Point], ptr %10, i64 0, i64 %291
  %293 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %292, ptr noundef nonnull align 8 dereferenceable(48) %18)
          to label %.preheader156.us unwind label %.loopexit157.split.us, !llvm.loop !25

.preheader158.us:                                 ; preds = %157, %296
  %indvars.iv = phi i64 [ %indvars.iv.next, %296 ], [ 0, %157 ]
  %294 = getelementptr inbounds [513 x %class.Int], ptr %9, i64 0, i64 %indvars.iv
  %295 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @GSn, i64 noundef %indvars.iv) #10
  invoke void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16) %294, ptr noundef nonnull %295, ptr noundef nonnull %8)
          to label %296 unwind label %.loopexit.split-lp.loopexit.split.us

296:                                              ; preds = %.preheader158.us
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 511
  br i1 %exitcond.not, label %165, label %.preheader158.us, !llvm.loop !26

.preheader.us:                                    ; preds = %184
  %297 = trunc nuw i64 %indvars.iv233 to i32
  %298 = shl i64 %indvars.iv233, 10
  br label %186

._crit_edge.us:                                   ; preds = %.lr.ph.us
  br i1 %258, label %.split204.us, label %260

.split.us:                                        ; preds = %151
  %299 = landingpad { ptr, i32 }
          cleanup
  br label %327

.split191.us:                                     ; preds = %154
  %300 = landingpad { ptr, i32 }
          cleanup
  br label %326

.loopexit.split-lp.loopexit.split-lp.loopexit.split.us: ; preds = %201, %200, %199, %198, %197, %196, %195, %194, %193, %192, %.critedge2.us, %184, %182, %181, %180, %179, %178, %177, %176, %173, %171, %169, %168, %167, %165
  %lpad.loopexit162.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split195.us:                                     ; preds = %234, %227, %222, %217, %215, %206, %204
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.split198.us:                                     ; preds = %229
  %302 = landingpad { ptr, i32 }
          cleanup
  br label %328

.split201.us:                                     ; preds = %232
  %303 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #10
  br label %328

.loopexit157.split.us:                            ; preds = %290, %286, %284, %283, %282, %281, %280, %279, %278, %275, %273, %272, %271, %270, %268, %265, %263, %261
  %lpad.loopexit.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split.us:             ; preds = %.preheader158.us
  %lpad.loopexit159.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.lr.ph188.split:                                  ; preds = %.lr.ph188.split.preheader, %.critedge
  %304 = phi i32 [ %145, %.lr.ph188.split.preheader ], [ %330, %.critedge ]
  %305 = phi ptr [ %.pre244, %.lr.ph188.split.preheader ], [ %331, %.critedge ]
  %indvars.iv240 = phi i64 [ 0, %.lr.ph188.split.preheader ], [ %indvars.iv.next241, %.critedge ]
  %306 = getelementptr inbounds i32, ptr %305, i64 %indvars.iv240
  %307 = load i32, ptr %306, align 4, !tbaa !13
  %308 = icmp eq i32 %307, 0
  br i1 %308, label %309, label %.critedge

309:                                              ; preds = %.lr.ph188.split
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %21) #10
  %310 = load ptr, ptr @secp, align 8, !tbaa !14
  %311 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorI5PointSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) @OriginalPointsBSGS, i64 noundef %indvars.iv240) #10
  invoke void @_ZN9Secp256K19AddDirectER5PointS1_(ptr dead_on_unwind nonnull writable sret(%class.Point) align 8 %21, ptr noundef nonnull align 8 dereferenceable(393296) %310, ptr noundef nonnull align 8 dereferenceable(48) %311, ptr noundef nonnull align 8 dereferenceable(48) %6)
          to label %312 unwind label %.split

312:                                              ; preds = %309
  %313 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN5PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(48) %8, ptr noundef nonnull align 8 dereferenceable(48) %21)
          to label %.critedge.loopexit unwind label %.split191

.critedge.loopexit:                               ; preds = %312
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  %.pre243 = load ptr, ptr @bsgs_found, align 8, !tbaa !14
  %.pre245 = load i32, ptr @bsgs_point_number, align 4, !tbaa !13
  br label %.critedge

314:                                              ; preds = %130
  %315 = landingpad { ptr, i32 }
          cleanup
  br label %318

316:                                              ; preds = %132
  %317 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  br label %318

318:                                              ; preds = %316, %314
  %.pn = phi { ptr, i32 } [ %317, %316 ], [ %315, %314 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #10
  br label %.loopexit.split-lp

319:                                              ; preds = %140
  %320 = landingpad { ptr, i32 }
          cleanup
  br label %323

321:                                              ; preds = %142
  %322 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #10
  br label %323

323:                                              ; preds = %321, %319
  %.pn125 = phi { ptr, i32 } [ %322, %321 ], [ %320, %319 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #10
  br label %.loopexit.split-lp

.split:                                           ; preds = %309
  %324 = landingpad { ptr, i32 }
          cleanup
  br label %327

.split191:                                        ; preds = %312
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %326

326:                                              ; preds = %.split191.us, %.split191
  %.us-phi192 = phi { ptr, i32 } [ %325, %.split191 ], [ %300, %.split191.us ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  br label %327

327:                                              ; preds = %.split, %.split.us, %326
  %.pn127 = phi { ptr, i32 } [ %.us-phi192, %326 ], [ %324, %.split ], [ %299, %.split.us ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  br label %.loopexit.split-lp

328:                                              ; preds = %.split201.us, %.split198.us
  %.pn132 = phi { ptr, i32 } [ %303, %.split201.us ], [ %302, %.split198.us ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %22) #10
  br label %.loopexit.split-lp

.split204.us:                                     ; preds = %._crit_edge.us, %248
  %329 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.241)
  call void @exit(i32 noundef 1) #13
  unreachable

.critedge:                                        ; preds = %.critedge.loopexit, %.lr.ph188.split
  %330 = phi i32 [ %.pre245, %.critedge.loopexit ], [ %304, %.lr.ph188.split ]
  %331 = phi ptr [ %.pre243, %.critedge.loopexit ], [ %305, %.lr.ph188.split ]
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %332 = zext i32 %330 to i64
  %333 = icmp ult i64 %indvars.iv.next241, %332
  br i1 %333, label %.lr.ph188.split, label %._crit_edge189, !llvm.loop !15

._crit_edge189:                                   ; preds = %.critedge.us, %.critedge, %144
  %334 = load ptr, ptr @steps, align 8, !tbaa !14
  %335 = getelementptr inbounds i64, ptr %334, i64 %103
  %336 = load i64, ptr %335, align 8, !tbaa !11
  %337 = add i64 %336, 2
  store i64 %337, ptr %335, align 8, !tbaa !11
  br label %106, !llvm.loop !27

338:                                              ; preds = %112
  %339 = load ptr, ptr @ends, align 8, !tbaa !14
  %340 = getelementptr inbounds i32, ptr %339, i64 %103
  store i32 1, ptr %340, align 4, !tbaa !13
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %18) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %17) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  br label %349

.loopexit.split-lp:                               ; preds = %.loopexit157.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split.us, %.split195.us, %328, %327, %323, %318
  %.pn137 = phi { ptr, i32 } [ %.pn127, %327 ], [ %.pn125, %323 ], [ %.pn, %318 ], [ %301, %.split195.us ], [ %.pn132, %328 ], [ %lpad.loopexit.us, %.loopexit157.split.us ], [ %lpad.loopexit159.us, %.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit162.us, %.loopexit.split-lp.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit165, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp166, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #10
  br label %341

341:                                              ; preds = %.loopexit.split-lp, %96
  %.pn137.pn = phi { ptr, i32 } [ %.pn137, %.loopexit.split-lp ], [ %97, %96 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %18) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #10
  br label %342

342:                                              ; preds = %341, %94
  %.pn137.pn.pn = phi { ptr, i32 } [ %.pn137.pn, %341 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %17) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #10
  br label %343

343:                                              ; preds = %342, %92
  %.pn137.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn, %342 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #10
  br label %344

344:                                              ; preds = %343, %90
  %.pn137.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn, %343 ], [ %91, %90 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #10
  br label %345

345:                                              ; preds = %344, %88
  %.pn137.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn, %344 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #10
  br label %346

346:                                              ; preds = %345, %86
  %.pn137.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn, %345 ], [ %87, %86 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #10
  br label %347

347:                                              ; preds = %346, %84
  %.pn137.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn, %346 ], [ %85, %84 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #10
  br label %348

348:                                              ; preds = %347, %82
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn.pn, %347 ], [ %83, %82 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #10
  br label %354

349:                                              ; preds = %349, %338
  %350 = phi ptr [ %36, %338 ], [ %351, %349 ]
  %351 = getelementptr inbounds i8, ptr %350, i64 -48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %351) #10
  %352 = icmp eq ptr %351, %10
  br i1 %352, label %353, label %349

353:                                              ; preds = %349
  call void @llvm.lifetime.end.p0(i64 49152, ptr nonnull %10) #10
  br label %358

354:                                              ; preds = %354, %348
  %355 = phi ptr [ %36, %348 ], [ %356, %354 ]
  %356 = getelementptr inbounds i8, ptr %355, i64 -48
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %356) #10
  %357 = icmp eq ptr %356, %10
  br i1 %357, label %.loopexit155, label %354

.loopexit155:                                     ; preds = %.preheader168, %354, %76
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %77, %76 ], [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn, %354 ], [ %77, %.preheader168 ]
  call void @llvm.lifetime.end.p0(i64 49152, ptr nonnull %10) #10
  br label %363

358:                                              ; preds = %358, %353
  %359 = phi ptr [ %31, %353 ], [ %360, %358 ]
  %360 = getelementptr inbounds i8, ptr %359, i64 -16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %360) #10
  %361 = icmp eq ptr %360, %9
  br i1 %361, label %362, label %358

362:                                              ; preds = %358
  call void @llvm.lifetime.end.p0(i64 8208, ptr nonnull %9) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %5) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #10
  ret ptr null

363:                                              ; preds = %363, %.loopexit155
  %364 = phi ptr [ %31, %.loopexit155 ], [ %365, %363 ]
  %365 = getelementptr inbounds i8, ptr %364, i64 -16
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %365) #10
  %366 = icmp eq ptr %365, %9
  br i1 %366, label %.loopexit, label %363

.loopexit:                                        ; preds = %.preheader170, %363, %70
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %71, %70 ], [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn, %363 ], [ %71, %.preheader170 ]
  call void @llvm.lifetime.end.p0(i64 8208, ptr nonnull %9) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #10
  br label %367

367:                                              ; preds = %.loopexit, %68
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %.loopexit ], [ %69, %68 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #10
  br label %368

368:                                              ; preds = %367, %66, %64
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %367 ], [ %67, %66 ], [ %65, %64 ]
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #10
  br label %369

369:                                              ; preds = %368, %62
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %368 ], [ %63, %62 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #10
  br label %370

370:                                              ; preds = %369, %60
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %369 ], [ %61, %60 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #10
  call void @_ZN5PointD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %5) #10
  br label %371

371:                                              ; preds = %370, %58
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %370 ], [ %59, %58 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #10
  br label %372

372:                                              ; preds = %371, %56
  %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %371 ], [ %57, %56 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #10
  call void @_ZN3IntD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn137.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZN3Int3AddEPKS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare i32 @bloom_check(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @_ZN8IntGroupC1Ei(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef) unnamed_addr #0

declare void @_ZN8IntGroup3SetEP3Int(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int6ModSubEPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @_ZN8IntGroup6ModInvEv(ptr noundef nonnull align 8 dereferenceable(20)) local_unnamed_addr #0

declare void @_ZN3Int8ModMulK1EPS_S0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int11ModSquareK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int6ModNegEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

declare void @_ZN3Int6ModAddEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int6ModSubEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int8ModMulK1EPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare void @_ZN3Int3NegEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #0

declare void @_ZN3Int10Get32BytesEPh(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare noundef zeroext i1 @_ZN3Int16IsGreaterOrEqualEPS_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #0

declare noundef ptr @_Z5tohexPci(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z16bsgs_secondcheckP3IntjjS0_(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #9

declare noundef ptr @_ZN9Secp256K115GetPublicKeyHexEbR5Point(ptr noundef nonnull align 8 dereferenceable(393296), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin nounwind }
attributes #13 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTS8tothread", !7, i64 0, !10, i64 8, !10, i64 16}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!10, !10, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!8, !8, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"bool", !8, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass