; LLVM IR from openssl/openssl :: crypto/ec (ec_asn1)

; 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"

%struct.ec_parameters_st = type { i32, ptr, ptr, ptr, ptr, ptr }
%struct.x9_62_fieldid_st = type { ptr, %union.anon.0 }
%union.anon.0 = type { ptr }
%struct.x9_62_curve_st = type { ptr, ptr, ptr }
%struct.asn1_string_st = type { i32, i32, ptr, i64 }
%struct.x9_62_characteristic_two_st = type { i32, ptr, %union.anon.1 }
%union.anon.1 = type { ptr }
%struct.x9_62_pentanomial_st = type { i32, i32, i32 }
%struct.ec_group_st = type { ptr, ptr, ptr, ptr, i32, i32, i32, i32, ptr, i64, ptr, [6 x i32], ptr, ptr, i32, ptr, ptr, ptr, ptr, i32, %union.anon.2, ptr, ptr }
%union.anon.2 = type { ptr }

@.str.2 = external hidden unnamed_addr constant [69 x i8], align 1
@__func__.EC_GROUP_new_from_ecparameters = external hidden unnamed_addr constant [31 x i8], align 1

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

declare void @ERR_new() #1

declare void @ERR_set_debug(ptr noundef, i32 noundef, ptr noundef) #1

declare void @ERR_set_error(i32 noundef, i32 noundef, ptr noundef, ...) #1

declare void @CRYPTO_free(ptr noundef, ptr noundef, i32 noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local ptr @EC_GROUP_new_from_ecparameters(ptr noundef %0) #2 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 0, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  store ptr null, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  store ptr null, ptr %14, align 8, !tbaa !5
  %20 = load ptr, ptr %3, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.ec_parameters_st, ptr %20, i32 0, i32 1
  %22 = load ptr, ptr %21, align 8, !tbaa !11
  %23 = icmp eq ptr %22, null
  br i1 %23, label %38, label %24

24:                                               ; preds = %1
  %25 = load ptr, ptr %3, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.ec_parameters_st, ptr %25, i32 0, i32 1
  %27 = load ptr, ptr %26, align 8, !tbaa !11
  %28 = getelementptr inbounds %struct.x9_62_fieldid_st, ptr %27, i32 0, i32 0
  %29 = load ptr, ptr %28, align 8, !tbaa !13
  %30 = icmp eq ptr %29, null
  br i1 %30, label %38, label %31

31:                                               ; preds = %24
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.ec_parameters_st, ptr %32, i32 0, i32 1
  %34 = load ptr, ptr %33, align 8, !tbaa !11
  %35 = getelementptr inbounds %struct.x9_62_fieldid_st, ptr %34, i32 0, i32 1
  %36 = load ptr, ptr %35, align 8, !tbaa !15
  %37 = icmp eq ptr %36, null
  br i1 %37, label %38, label %39

38:                                               ; preds = %31, %24, %1
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 533, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  br label %559

39:                                               ; preds = %31
  %40 = load ptr, ptr %3, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.ec_parameters_st, ptr %40, i32 0, i32 2
  %42 = load ptr, ptr %41, align 8, !tbaa !16
  %43 = icmp eq ptr %42, null
  br i1 %43, label %76, label %44

44:                                               ; preds = %39
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.ec_parameters_st, ptr %45, i32 0, i32 2
  %47 = load ptr, ptr %46, align 8, !tbaa !16
  %48 = getelementptr inbounds %struct.x9_62_curve_st, ptr %47, i32 0, i32 0
  %49 = load ptr, ptr %48, align 8, !tbaa !17
  %50 = icmp eq ptr %49, null
  br i1 %50, label %76, label %51

51:                                               ; preds = %44
  %52 = load ptr, ptr %3, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.ec_parameters_st, ptr %52, i32 0, i32 2
  %54 = load ptr, ptr %53, align 8, !tbaa !16
  %55 = getelementptr inbounds %struct.x9_62_curve_st, ptr %54, i32 0, i32 0
  %56 = load ptr, ptr %55, align 8, !tbaa !17
  %57 = getelementptr inbounds %struct.asn1_string_st, ptr %56, i32 0, i32 2
  %58 = load ptr, ptr %57, align 8, !tbaa !19
  %59 = icmp eq ptr %58, null
  br i1 %59, label %76, label %60

60:                                               ; preds = %51
  %61 = load ptr, ptr %3, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.ec_parameters_st, ptr %61, i32 0, i32 2
  %63 = load ptr, ptr %62, align 8, !tbaa !16
  %64 = getelementptr inbounds %struct.x9_62_curve_st, ptr %63, i32 0, i32 1
  %65 = load ptr, ptr %64, align 8, !tbaa !22
  %66 = icmp eq ptr %65, null
  br i1 %66, label %76, label %67

67:                                               ; preds = %60
  %68 = load ptr, ptr %3, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.ec_parameters_st, ptr %68, i32 0, i32 2
  %70 = load ptr, ptr %69, align 8, !tbaa !16
  %71 = getelementptr inbounds %struct.x9_62_curve_st, ptr %70, i32 0, i32 1
  %72 = load ptr, ptr %71, align 8, !tbaa !22
  %73 = getelementptr inbounds %struct.asn1_string_st, ptr %72, i32 0, i32 2
  %74 = load ptr, ptr %73, align 8, !tbaa !19
  %75 = icmp eq ptr %74, null
  br i1 %75, label %76, label %77

76:                                               ; preds = %67, %60, %51, %44, %39
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 546, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  br label %559

77:                                               ; preds = %67
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.ec_parameters_st, ptr %78, i32 0, i32 2
  %80 = load ptr, ptr %79, align 8, !tbaa !16
  %81 = getelementptr inbounds %struct.x9_62_curve_st, ptr %80, i32 0, i32 0
  %82 = load ptr, ptr %81, align 8, !tbaa !17
  %83 = getelementptr inbounds %struct.asn1_string_st, ptr %82, i32 0, i32 2
  %84 = load ptr, ptr %83, align 8, !tbaa !19
  %85 = load ptr, ptr %3, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.ec_parameters_st, ptr %85, i32 0, i32 2
  %87 = load ptr, ptr %86, align 8, !tbaa !16
  %88 = getelementptr inbounds %struct.x9_62_curve_st, ptr %87, i32 0, i32 0
  %89 = load ptr, ptr %88, align 8, !tbaa !17
  %90 = getelementptr inbounds %struct.asn1_string_st, ptr %89, i32 0, i32 0
  %91 = load i32, ptr %90, align 8, !tbaa !23
  %92 = call ptr @BN_bin2bn(ptr noundef %84, i32 noundef %91, ptr noundef null)
  store ptr %92, ptr %9, align 8, !tbaa !5
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = icmp eq ptr %93, null
  br i1 %94, label %95, label %96

95:                                               ; preds = %77
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 551, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524291, ptr noundef null)
  br label %559

96:                                               ; preds = %77
  %97 = load ptr, ptr %3, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.ec_parameters_st, ptr %97, i32 0, i32 2
  %99 = load ptr, ptr %98, align 8, !tbaa !16
  %100 = getelementptr inbounds %struct.x9_62_curve_st, ptr %99, i32 0, i32 1
  %101 = load ptr, ptr %100, align 8, !tbaa !22
  %102 = getelementptr inbounds %struct.asn1_string_st, ptr %101, i32 0, i32 2
  %103 = load ptr, ptr %102, align 8, !tbaa !19
  %104 = load ptr, ptr %3, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.ec_parameters_st, ptr %104, i32 0, i32 2
  %106 = load ptr, ptr %105, align 8, !tbaa !16
  %107 = getelementptr inbounds %struct.x9_62_curve_st, ptr %106, i32 0, i32 1
  %108 = load ptr, ptr %107, align 8, !tbaa !22
  %109 = getelementptr inbounds %struct.asn1_string_st, ptr %108, i32 0, i32 0
  %110 = load i32, ptr %109, align 8, !tbaa !23
  %111 = call ptr @BN_bin2bn(ptr noundef %103, i32 noundef %110, ptr noundef null)
  store ptr %111, ptr %10, align 8, !tbaa !5
  %112 = load ptr, ptr %10, align 8, !tbaa !5
  %113 = icmp eq ptr %112, null
  br i1 %113, label %114, label %115

114:                                              ; preds = %96
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 556, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524291, ptr noundef null)
  br label %559

115:                                              ; preds = %96
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.ec_parameters_st, ptr %116, i32 0, i32 1
  %118 = load ptr, ptr %117, align 8, !tbaa !11
  %119 = getelementptr inbounds %struct.x9_62_fieldid_st, ptr %118, i32 0, i32 0
  %120 = load ptr, ptr %119, align 8, !tbaa !13
  %121 = call i32 @OBJ_obj2nid(ptr noundef %120)
  store i32 %121, ptr %5, align 4, !tbaa !9
  %122 = load i32, ptr %5, align 4, !tbaa !9
  %123 = icmp eq i32 %122, 407
  br i1 %123, label %124, label %288

124:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %125 = load ptr, ptr %3, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.ec_parameters_st, ptr %125, i32 0, i32 1
  %127 = load ptr, ptr %126, align 8, !tbaa !11
  %128 = getelementptr inbounds %struct.x9_62_fieldid_st, ptr %127, i32 0, i32 1
  %129 = load ptr, ptr %128, align 8, !tbaa !15
  store ptr %129, ptr %15, align 8, !tbaa !5
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %130, i32 0, i32 0
  %132 = load i32, ptr %131, align 8, !tbaa !24
  %133 = sext i32 %132 to i64
  store i64 %133, ptr %12, align 8, !tbaa !26
  %134 = load i64, ptr %12, align 8, !tbaa !26
  %135 = icmp sgt i64 %134, 661
  br i1 %135, label %136, label %137

136:                                              ; preds = %124
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 576, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 143, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %285

137:                                              ; preds = %124
  %138 = call ptr @BN_new()
  store ptr %138, ptr %8, align 8, !tbaa !5
  %139 = icmp eq ptr %138, null
  br i1 %139, label %140, label %141

140:                                              ; preds = %137
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 581, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524291, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %285

141:                                              ; preds = %137
  %142 = load ptr, ptr %15, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %142, i32 0, i32 1
  %144 = load ptr, ptr %143, align 8, !tbaa !27
  %145 = call i32 @OBJ_obj2nid(ptr noundef %144)
  store i32 %145, ptr %5, align 4, !tbaa !9
  %146 = load i32, ptr %5, align 4, !tbaa !9
  %147 = icmp eq i32 %146, 682
  br i1 %147, label %148, label %193

148:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %149 = load ptr, ptr %15, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %149, i32 0, i32 2
  %151 = load ptr, ptr %150, align 8, !tbaa !15
  %152 = icmp ne ptr %151, null
  br i1 %152, label %154, label %153

153:                                              ; preds = %148
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 592, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %190

154:                                              ; preds = %148
  %155 = load ptr, ptr %15, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %155, i32 0, i32 2
  %157 = load ptr, ptr %156, align 8, !tbaa !15
  %158 = call i64 @ASN1_INTEGER_get(ptr noundef %157)
  store i64 %158, ptr %16, align 8, !tbaa !26
  %159 = load ptr, ptr %15, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %159, i32 0, i32 0
  %161 = load i32, ptr %160, align 8, !tbaa !24
  %162 = sext i32 %161 to i64
  %163 = load i64, ptr %16, align 8, !tbaa !26
  %164 = icmp sgt i64 %162, %163
  br i1 %164, label %165, label %168

165:                                              ; preds = %154
  %166 = load i64, ptr %16, align 8, !tbaa !26
  %167 = icmp sgt i64 %166, 0
  br i1 %167, label %169, label %168

168:                                              ; preds = %165, %154
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 599, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 137, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %190

169:                                              ; preds = %165
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = load ptr, ptr %15, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %171, i32 0, i32 0
  %173 = load i32, ptr %172, align 8, !tbaa !24
  %174 = call i32 @BN_set_bit(ptr noundef %170, i32 noundef %173)
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %177, label %176

176:                                              ; preds = %169
  store i32 2, ptr %17, align 4
  br label %190

177:                                              ; preds = %169
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = load i64, ptr %16, align 8, !tbaa !26
  %180 = trunc i64 %179 to i32
  %181 = call i32 @BN_set_bit(ptr noundef %178, i32 noundef %180)
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %184, label %183

183:                                              ; preds = %177
  store i32 2, ptr %17, align 4
  br label %190

184:                                              ; preds = %177
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = call i32 @BN_set_bit(ptr noundef %185, i32 noundef 0)
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %189, label %188

188:                                              ; preds = %184
  store i32 2, ptr %17, align 4
  br label %190

189:                                              ; preds = %184
  store i32 0, ptr %17, align 4
  br label %190

190:                                              ; preds = %189, %188, %183, %176, %168, %153
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  %191 = load i32, ptr %17, align 4
  switch i32 %191, label %285 [
    i32 0, label %192
  ]

192:                                              ; preds = %190
  br label %280

193:                                              ; preds = %141
  %194 = load i32, ptr %5, align 4, !tbaa !9
  %195 = icmp eq i32 %194, 683
  br i1 %195, label %196, label %274

196:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %197 = load ptr, ptr %15, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %197, i32 0, i32 2
  %199 = load ptr, ptr %198, align 8, !tbaa !15
  store ptr %199, ptr %18, align 8, !tbaa !5
  %200 = load ptr, ptr %18, align 8, !tbaa !5
  %201 = icmp eq ptr %200, null
  br i1 %201, label %202, label %203

202:                                              ; preds = %196
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 615, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %271

203:                                              ; preds = %196
  %204 = load ptr, ptr %15, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %204, i32 0, i32 0
  %206 = load i32, ptr %205, align 8, !tbaa !24
  %207 = load ptr, ptr %18, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %207, i32 0, i32 2
  %209 = load i32, ptr %208, align 4, !tbaa !28
  %210 = icmp sgt i32 %206, %209
  br i1 %210, label %211, label %232

211:                                              ; preds = %203
  %212 = load ptr, ptr %18, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %212, i32 0, i32 2
  %214 = load i32, ptr %213, align 4, !tbaa !28
  %215 = load ptr, ptr %18, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %215, i32 0, i32 1
  %217 = load i32, ptr %216, align 4, !tbaa !30
  %218 = icmp sgt i32 %214, %217
  br i1 %218, label %219, label %232

219:                                              ; preds = %211
  %220 = load ptr, ptr %18, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %220, i32 0, i32 1
  %222 = load i32, ptr %221, align 4, !tbaa !30
  %223 = load ptr, ptr %18, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %223, i32 0, i32 0
  %225 = load i32, ptr %224, align 4, !tbaa !31
  %226 = icmp sgt i32 %222, %225
  br i1 %226, label %227, label %232

227:                                              ; preds = %219
  %228 = load ptr, ptr %18, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %228, i32 0, i32 0
  %230 = load i32, ptr %229, align 4, !tbaa !31
  %231 = icmp sgt i32 %230, 0
  br i1 %231, label %233, label %232

232:                                              ; preds = %227, %219, %211, %203
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 622, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 132, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %271

233:                                              ; preds = %227
  %234 = load ptr, ptr %8, align 8, !tbaa !5
  %235 = load ptr, ptr %15, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.x9_62_characteristic_two_st, ptr %235, i32 0, i32 0
  %237 = load i32, ptr %236, align 8, !tbaa !24
  %238 = call i32 @BN_set_bit(ptr noundef %234, i32 noundef %237)
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %241, label %240

240:                                              ; preds = %233
  store i32 2, ptr %17, align 4
  br label %271

241:                                              ; preds = %233
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = load ptr, ptr %18, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %243, i32 0, i32 0
  %245 = load i32, ptr %244, align 4, !tbaa !31
  %246 = call i32 @BN_set_bit(ptr noundef %242, i32 noundef %245)
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %249, label %248

248:                                              ; preds = %241
  store i32 2, ptr %17, align 4
  br label %271

249:                                              ; preds = %241
  %250 = load ptr, ptr %8, align 8, !tbaa !5
  %251 = load ptr, ptr %18, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %251, i32 0, i32 1
  %253 = load i32, ptr %252, align 4, !tbaa !30
  %254 = call i32 @BN_set_bit(ptr noundef %250, i32 noundef %253)
  %255 = icmp ne i32 %254, 0
  br i1 %255, label %257, label %256

256:                                              ; preds = %249
  store i32 2, ptr %17, align 4
  br label %271

257:                                              ; preds = %249
  %258 = load ptr, ptr %8, align 8, !tbaa !5
  %259 = load ptr, ptr %18, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.x9_62_pentanomial_st, ptr %259, i32 0, i32 2
  %261 = load i32, ptr %260, align 4, !tbaa !28
  %262 = call i32 @BN_set_bit(ptr noundef %258, i32 noundef %261)
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %265, label %264

264:                                              ; preds = %257
  store i32 2, ptr %17, align 4
  br label %271

265:                                              ; preds = %257
  %266 = load ptr, ptr %8, align 8, !tbaa !5
  %267 = call i32 @BN_set_bit(ptr noundef %266, i32 noundef 0)
  %268 = icmp ne i32 %267, 0
  br i1 %268, label %270, label %269

269:                                              ; preds = %265
  store i32 2, ptr %17, align 4
  br label %271

270:                                              ; preds = %265
  store i32 0, ptr %17, align 4
  br label %271

271:                                              ; preds = %270, %269, %264, %256, %248, %240, %232, %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  %272 = load i32, ptr %17, align 4
  switch i32 %272, label %285 [
    i32 0, label %273
  ]

273:                                              ; preds = %271
  br label %279

274:                                              ; preds = %193
  %275 = load i32, ptr %5, align 4, !tbaa !9
  %276 = icmp eq i32 %275, 681
  br i1 %276, label %277, label %278

277:                                              ; preds = %274
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 638, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 126, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %285

278:                                              ; preds = %274
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 642, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %285

279:                                              ; preds = %273
  br label %280

280:                                              ; preds = %279, %192
  %281 = load ptr, ptr %8, align 8, !tbaa !5
  %282 = load ptr, ptr %9, align 8, !tbaa !5
  %283 = load ptr, ptr %10, align 8, !tbaa !5
  %284 = call ptr @EC_GROUP_new_curve_GF2m(ptr noundef %281, ptr noundef %282, ptr noundef %283, ptr noundef null)
  store ptr %284, ptr %6, align 8, !tbaa !5
  store i32 0, ptr %17, align 4
  br label %285

285:                                              ; preds = %280, %278, %277, %271, %190, %140, %136
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  %286 = load i32, ptr %17, align 4
  switch i32 %286, label %572 [
    i32 0, label %287
    i32 2, label %559
  ]

287:                                              ; preds = %285
  br label %332

288:                                              ; preds = %115
  %289 = load i32, ptr %5, align 4, !tbaa !9
  %290 = icmp eq i32 %289, 406
  br i1 %290, label %291, label %330

291:                                              ; preds = %288
  %292 = load ptr, ptr %3, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.ec_parameters_st, ptr %292, i32 0, i32 1
  %294 = load ptr, ptr %293, align 8, !tbaa !11
  %295 = getelementptr inbounds %struct.x9_62_fieldid_st, ptr %294, i32 0, i32 1
  %296 = load ptr, ptr %295, align 8, !tbaa !15
  %297 = icmp eq ptr %296, null
  br i1 %297, label %298, label %299

298:                                              ; preds = %291
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 654, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  br label %559

299:                                              ; preds = %291
  %300 = load ptr, ptr %3, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.ec_parameters_st, ptr %300, i32 0, i32 1
  %302 = load ptr, ptr %301, align 8, !tbaa !11
  %303 = getelementptr inbounds %struct.x9_62_fieldid_st, ptr %302, i32 0, i32 1
  %304 = load ptr, ptr %303, align 8, !tbaa !15
  %305 = call ptr @ASN1_INTEGER_to_BN(ptr noundef %304, ptr noundef null)
  store ptr %305, ptr %8, align 8, !tbaa !5
  %306 = load ptr, ptr %8, align 8, !tbaa !5
  %307 = icmp eq ptr %306, null
  br i1 %307, label %308, label %309

308:                                              ; preds = %299
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 659, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524301, ptr noundef null)
  br label %559

309:                                              ; preds = %299
  %310 = load ptr, ptr %8, align 8, !tbaa !5
  %311 = call i32 @BN_is_negative(ptr noundef %310)
  %312 = icmp ne i32 %311, 0
  br i1 %312, label %317, label %313

313:                                              ; preds = %309
  %314 = load ptr, ptr %8, align 8, !tbaa !5
  %315 = call i32 @BN_is_zero(ptr noundef %314)
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %318

317:                                              ; preds = %313, %309
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 664, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 103, ptr noundef null)
  br label %559

318:                                              ; preds = %313
  %319 = load ptr, ptr %8, align 8, !tbaa !5
  %320 = call i32 @BN_num_bits(ptr noundef %319)
  %321 = sext i32 %320 to i64
  store i64 %321, ptr %12, align 8, !tbaa !26
  %322 = load i64, ptr %12, align 8, !tbaa !26
  %323 = icmp sgt i64 %322, 661
  br i1 %323, label %324, label %325

324:                                              ; preds = %318
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 670, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 143, ptr noundef null)
  br label %559

325:                                              ; preds = %318
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = load ptr, ptr %9, align 8, !tbaa !5
  %328 = load ptr, ptr %10, align 8, !tbaa !5
  %329 = call ptr @EC_GROUP_new_curve_GFp(ptr noundef %326, ptr noundef %327, ptr noundef %328, ptr noundef null)
  store ptr %329, ptr %6, align 8, !tbaa !5
  br label %331

330:                                              ; preds = %288
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 677, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 103, ptr noundef null)
  br label %559

331:                                              ; preds = %325
  br label %332

332:                                              ; preds = %331, %287
  %333 = load ptr, ptr %6, align 8, !tbaa !5
  %334 = icmp eq ptr %333, null
  br i1 %334, label %335, label %336

335:                                              ; preds = %332
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 682, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524304, ptr noundef null)
  br label %559

336:                                              ; preds = %332
  %337 = load ptr, ptr %3, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.ec_parameters_st, ptr %337, i32 0, i32 2
  %339 = load ptr, ptr %338, align 8, !tbaa !16
  %340 = getelementptr inbounds %struct.x9_62_curve_st, ptr %339, i32 0, i32 2
  %341 = load ptr, ptr %340, align 8, !tbaa !32
  %342 = icmp ne ptr %341, null
  br i1 %342, label %343, label %399

343:                                              ; preds = %336
  %344 = load ptr, ptr %3, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.ec_parameters_st, ptr %344, i32 0, i32 2
  %346 = load ptr, ptr %345, align 8, !tbaa !16
  %347 = getelementptr inbounds %struct.x9_62_curve_st, ptr %346, i32 0, i32 2
  %348 = load ptr, ptr %347, align 8, !tbaa !32
  %349 = getelementptr inbounds %struct.asn1_string_st, ptr %348, i32 0, i32 0
  %350 = load i32, ptr %349, align 8, !tbaa !23
  %351 = icmp eq i32 %350, 0
  br i1 %351, label %352, label %353

352:                                              ; preds = %343
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 695, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  br label %559

353:                                              ; preds = %343
  %354 = load ptr, ptr %6, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.ec_group_st, ptr %354, i32 0, i32 8
  %356 = load ptr, ptr %355, align 8, !tbaa !33
  call void @CRYPTO_free(ptr noundef %356, ptr noundef @.str.2, i32 noundef 698)
  %357 = load ptr, ptr %3, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.ec_parameters_st, ptr %357, i32 0, i32 2
  %359 = load ptr, ptr %358, align 8, !tbaa !16
  %360 = getelementptr inbounds %struct.x9_62_curve_st, ptr %359, i32 0, i32 2
  %361 = load ptr, ptr %360, align 8, !tbaa !32
  %362 = getelementptr inbounds %struct.asn1_string_st, ptr %361, i32 0, i32 0
  %363 = load i32, ptr %362, align 8, !tbaa !23
  %364 = sext i32 %363 to i64
  %365 = call ptr @CRYPTO_malloc(i64 noundef %364, ptr noundef @.str.2, i32 noundef 699)
  %366 = load ptr, ptr %6, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.ec_group_st, ptr %366, i32 0, i32 8
  store ptr %365, ptr %367, align 8, !tbaa !33
  %368 = icmp eq ptr %365, null
  br i1 %368, label %369, label %370

369:                                              ; preds = %353
  br label %559

370:                                              ; preds = %353
  %371 = load ptr, ptr %6, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.ec_group_st, ptr %371, i32 0, i32 8
  %373 = load ptr, ptr %372, align 8, !tbaa !33
  %374 = load ptr, ptr %3, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.ec_parameters_st, ptr %374, i32 0, i32 2
  %376 = load ptr, ptr %375, align 8, !tbaa !16
  %377 = getelementptr inbounds %struct.x9_62_curve_st, ptr %376, i32 0, i32 2
  %378 = load ptr, ptr %377, align 8, !tbaa !32
  %379 = getelementptr inbounds %struct.asn1_string_st, ptr %378, i32 0, i32 2
  %380 = load ptr, ptr %379, align 8, !tbaa !19
  %381 = load ptr, ptr %3, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.ec_parameters_st, ptr %381, i32 0, i32 2
  %383 = load ptr, ptr %382, align 8, !tbaa !16
  %384 = getelementptr inbounds %struct.x9_62_curve_st, ptr %383, i32 0, i32 2
  %385 = load ptr, ptr %384, align 8, !tbaa !32
  %386 = getelementptr inbounds %struct.asn1_string_st, ptr %385, i32 0, i32 0
  %387 = load i32, ptr %386, align 8, !tbaa !23
  %388 = sext i32 %387 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %373, ptr align 1 %380, i64 %388, i1 false)
  %389 = load ptr, ptr %3, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.ec_parameters_st, ptr %389, i32 0, i32 2
  %391 = load ptr, ptr %390, align 8, !tbaa !16
  %392 = getelementptr inbounds %struct.x9_62_curve_st, ptr %391, i32 0, i32 2
  %393 = load ptr, ptr %392, align 8, !tbaa !32
  %394 = getelementptr inbounds %struct.asn1_string_st, ptr %393, i32 0, i32 0
  %395 = load i32, ptr %394, align 8, !tbaa !23
  %396 = sext i32 %395 to i64
  %397 = load ptr, ptr %6, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.ec_group_st, ptr %397, i32 0, i32 9
  store i64 %396, ptr %398, align 8, !tbaa !35
  br label %399

399:                                              ; preds = %370, %336
  %400 = load ptr, ptr %3, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.ec_parameters_st, ptr %400, i32 0, i32 4
  %402 = load ptr, ptr %401, align 8, !tbaa !36
  %403 = icmp eq ptr %402, null
  br i1 %403, label %423, label %404

404:                                              ; preds = %399
  %405 = load ptr, ptr %3, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.ec_parameters_st, ptr %405, i32 0, i32 3
  %407 = load ptr, ptr %406, align 8, !tbaa !37
  %408 = icmp eq ptr %407, null
  br i1 %408, label %423, label %409

409:                                              ; preds = %404
  %410 = load ptr, ptr %3, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.ec_parameters_st, ptr %410, i32 0, i32 3
  %412 = load ptr, ptr %411, align 8, !tbaa !37
  %413 = getelementptr inbounds %struct.asn1_string_st, ptr %412, i32 0, i32 2
  %414 = load ptr, ptr %413, align 8, !tbaa !19
  %415 = icmp eq ptr %414, null
  br i1 %415, label %423, label %416

416:                                              ; preds = %409
  %417 = load ptr, ptr %3, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.ec_parameters_st, ptr %417, i32 0, i32 3
  %419 = load ptr, ptr %418, align 8, !tbaa !37
  %420 = getelementptr inbounds %struct.asn1_string_st, ptr %419, i32 0, i32 0
  %421 = load i32, ptr %420, align 8, !tbaa !23
  %422 = icmp eq i32 %421, 0
  br i1 %422, label %423, label %424

423:                                              ; preds = %416, %409, %404, %399
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 710, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 115, ptr noundef null)
  br label %559

424:                                              ; preds = %416
  %425 = load ptr, ptr %6, align 8, !tbaa !5
  %426 = call ptr @EC_POINT_new(ptr noundef %425)
  store ptr %426, ptr %11, align 8, !tbaa !5
  %427 = icmp eq ptr %426, null
  br i1 %427, label %428, label %429

428:                                              ; preds = %424
  br label %559

429:                                              ; preds = %424
  %430 = load ptr, ptr %6, align 8, !tbaa !5
  %431 = load ptr, ptr %3, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.ec_parameters_st, ptr %431, i32 0, i32 3
  %433 = load ptr, ptr %432, align 8, !tbaa !37
  %434 = getelementptr inbounds %struct.asn1_string_st, ptr %433, i32 0, i32 2
  %435 = load ptr, ptr %434, align 8, !tbaa !19
  %436 = getelementptr inbounds i8, ptr %435, i64 0
  %437 = load i8, ptr %436, align 1, !tbaa !15
  %438 = zext i8 %437 to i32
  %439 = and i32 %438, -2
  call void @EC_GROUP_set_point_conversion_form(ptr noundef %430, i32 noundef %439)
  %440 = load ptr, ptr %6, align 8, !tbaa !5
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = load ptr, ptr %3, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.ec_parameters_st, ptr %442, i32 0, i32 3
  %444 = load ptr, ptr %443, align 8, !tbaa !37
  %445 = getelementptr inbounds %struct.asn1_string_st, ptr %444, i32 0, i32 2
  %446 = load ptr, ptr %445, align 8, !tbaa !19
  %447 = load ptr, ptr %3, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.ec_parameters_st, ptr %447, i32 0, i32 3
  %449 = load ptr, ptr %448, align 8, !tbaa !37
  %450 = getelementptr inbounds %struct.asn1_string_st, ptr %449, i32 0, i32 0
  %451 = load i32, ptr %450, align 8, !tbaa !23
  %452 = sext i32 %451 to i64
  %453 = call i32 @EC_POINT_oct2point(ptr noundef %440, ptr noundef %441, ptr noundef %446, i64 noundef %452, ptr noundef null)
  %454 = icmp ne i32 %453, 0
  br i1 %454, label %456, label %455

455:                                              ; preds = %429
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 724, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524304, ptr noundef null)
  br label %559

456:                                              ; preds = %429
  %457 = load ptr, ptr %3, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.ec_parameters_st, ptr %457, i32 0, i32 4
  %459 = load ptr, ptr %458, align 8, !tbaa !36
  %460 = load ptr, ptr %9, align 8, !tbaa !5
  %461 = call ptr @ASN1_INTEGER_to_BN(ptr noundef %459, ptr noundef %460)
  %462 = icmp eq ptr %461, null
  br i1 %462, label %463, label %464

463:                                              ; preds = %456
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 730, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524301, ptr noundef null)
  br label %559

464:                                              ; preds = %456
  %465 = load ptr, ptr %9, align 8, !tbaa !5
  %466 = call i32 @BN_is_negative(ptr noundef %465)
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %472, label %468

468:                                              ; preds = %464
  %469 = load ptr, ptr %9, align 8, !tbaa !5
  %470 = call i32 @BN_is_zero(ptr noundef %469)
  %471 = icmp ne i32 %470, 0
  br i1 %471, label %472, label %473

472:                                              ; preds = %468, %464
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 734, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 122, ptr noundef null)
  br label %559

473:                                              ; preds = %468
  %474 = load ptr, ptr %9, align 8, !tbaa !5
  %475 = call i32 @BN_num_bits(ptr noundef %474)
  %476 = load i64, ptr %12, align 8, !tbaa !26
  %477 = trunc i64 %476 to i32
  %478 = add nsw i32 %477, 1
  %479 = icmp sgt i32 %475, %478
  br i1 %479, label %480, label %481

480:                                              ; preds = %473
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 738, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 122, ptr noundef null)
  br label %559

481:                                              ; preds = %473
  %482 = load ptr, ptr %3, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.ec_parameters_st, ptr %482, i32 0, i32 5
  %484 = load ptr, ptr %483, align 8, !tbaa !38
  %485 = icmp eq ptr %484, null
  br i1 %485, label %486, label %488

486:                                              ; preds = %481
  %487 = load ptr, ptr %10, align 8, !tbaa !5
  call void @BN_free(ptr noundef %487)
  store ptr null, ptr %10, align 8, !tbaa !5
  br label %497

488:                                              ; preds = %481
  %489 = load ptr, ptr %3, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.ec_parameters_st, ptr %489, i32 0, i32 5
  %491 = load ptr, ptr %490, align 8, !tbaa !38
  %492 = load ptr, ptr %10, align 8, !tbaa !5
  %493 = call ptr @ASN1_INTEGER_to_BN(ptr noundef %491, ptr noundef %492)
  %494 = icmp eq ptr %493, null
  br i1 %494, label %495, label %496

495:                                              ; preds = %488
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 747, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524301, ptr noundef null)
  br label %559

496:                                              ; preds = %488
  br label %497

497:                                              ; preds = %496, %486
  %498 = load ptr, ptr %6, align 8, !tbaa !5
  %499 = load ptr, ptr %11, align 8, !tbaa !5
  %500 = load ptr, ptr %9, align 8, !tbaa !5
  %501 = load ptr, ptr %10, align 8, !tbaa !5
  %502 = call i32 @EC_GROUP_set_generator(ptr noundef %498, ptr noundef %499, ptr noundef %500, ptr noundef %501)
  %503 = icmp ne i32 %502, 0
  br i1 %503, label %505, label %504

504:                                              ; preds = %497
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 752, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524304, ptr noundef null)
  br label %559

505:                                              ; preds = %497
  %506 = call ptr @BN_CTX_new()
  store ptr %506, ptr %14, align 8, !tbaa !5
  %507 = icmp eq ptr %506, null
  br i1 %507, label %508, label %509

508:                                              ; preds = %505
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 769, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524291, ptr noundef null)
  br label %559

509:                                              ; preds = %505
  %510 = load ptr, ptr %6, align 8, !tbaa !5
  %511 = call ptr @EC_GROUP_dup(ptr noundef %510)
  store ptr %511, ptr %7, align 8, !tbaa !5
  %512 = icmp eq ptr %511, null
  br i1 %512, label %523, label %513

513:                                              ; preds = %509
  %514 = load ptr, ptr %7, align 8, !tbaa !5
  %515 = call i64 @EC_GROUP_set_seed(ptr noundef %514, ptr noundef null, i64 noundef 0)
  %516 = icmp ne i64 %515, 1
  br i1 %516, label %523, label %517

517:                                              ; preds = %513
  %518 = load ptr, ptr %7, align 8, !tbaa !5
  %519 = load ptr, ptr %11, align 8, !tbaa !5
  %520 = load ptr, ptr %9, align 8, !tbaa !5
  %521 = call i32 @EC_GROUP_set_generator(ptr noundef %518, ptr noundef %519, ptr noundef %520, ptr noundef null)
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %524, label %523

523:                                              ; preds = %517, %513, %509
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 775, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524304, ptr noundef null)
  br label %559

524:                                              ; preds = %517
  %525 = load ptr, ptr %7, align 8, !tbaa !5
  %526 = load ptr, ptr %14, align 8, !tbaa !5
  %527 = call i32 @ossl_ec_curve_nid_from_params(ptr noundef %525, ptr noundef %526)
  store i32 %527, ptr %13, align 4, !tbaa !9
  %528 = icmp ne i32 %527, 0
  br i1 %528, label %529, label %558

529:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  store ptr null, ptr %19, align 8, !tbaa !5
  %530 = load i32, ptr %13, align 4, !tbaa !9
  %531 = icmp eq i32 %530, 745
  br i1 %531, label %532, label %533

532:                                              ; preds = %529
  store i32 713, ptr %13, align 4, !tbaa !9
  br label %533

533:                                              ; preds = %532, %529
  %534 = load i32, ptr %13, align 4, !tbaa !9
  %535 = call ptr @EC_GROUP_new_by_curve_name(i32 noundef %534)
  store ptr %535, ptr %19, align 8, !tbaa !5
  %536 = icmp eq ptr %535, null
  br i1 %536, label %537, label %538

537:                                              ; preds = %533
  call void @ERR_new()
  call void @ERR_set_debug(ptr noundef @.str.2, i32 noundef 800, ptr noundef @__func__.EC_GROUP_new_from_ecparameters)
  call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef 524304, ptr noundef null)
  store i32 2, ptr %17, align 4
  br label %555

538:                                              ; preds = %533
  %539 = load ptr, ptr %6, align 8, !tbaa !5
  call void @EC_GROUP_free(ptr noundef %539)
  %540 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %540, ptr %6, align 8, !tbaa !5
  %541 = load ptr, ptr %6, align 8, !tbaa !5
  call void @EC_GROUP_set_asn1_flag(ptr noundef %541, i32 noundef 0)
  %542 = load ptr, ptr %3, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.ec_parameters_st, ptr %542, i32 0, i32 2
  %544 = load ptr, ptr %543, align 8, !tbaa !16
  %545 = getelementptr inbounds %struct.x9_62_curve_st, ptr %544, i32 0, i32 2
  %546 = load ptr, ptr %545, align 8, !tbaa !32
  %547 = icmp eq ptr %546, null
  br i1 %547, label %548, label %554

548:                                              ; preds = %538
  %549 = load ptr, ptr %6, align 8, !tbaa !5
  %550 = call i64 @EC_GROUP_set_seed(ptr noundef %549, ptr noundef null, i64 noundef 0)
  %551 = icmp ne i64 %550, 1
  br i1 %551, label %552, label %553

552:                                              ; preds = %548
  store i32 2, ptr %17, align 4
  br label %555

553:                                              ; preds = %548
  br label %554

554:                                              ; preds = %553, %538
  store i32 0, ptr %17, align 4
  br label %555

555:                                              ; preds = %554, %552, %537
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  %556 = load i32, ptr %17, align 4
  switch i32 %556, label %572 [
    i32 0, label %557
    i32 2, label %559
  ]

557:                                              ; preds = %555
  br label %558

558:                                              ; preds = %557, %524
  store i32 1, ptr %4, align 4, !tbaa !9
  br label %559

559:                                              ; preds = %558, %555, %523, %508, %504, %495, %480, %472, %463, %455, %428, %423, %369, %352, %335, %330, %324, %317, %308, %298, %285, %114, %95, %76, %38
  %560 = load i32, ptr %4, align 4, !tbaa !9
  %561 = icmp ne i32 %560, 0
  br i1 %561, label %564, label %562

562:                                              ; preds = %559
  %563 = load ptr, ptr %6, align 8, !tbaa !5
  call void @EC_GROUP_free(ptr noundef %563)
  store ptr null, ptr %6, align 8, !tbaa !5
  br label %564

564:                                              ; preds = %562, %559
  %565 = load ptr, ptr %7, align 8, !tbaa !5
  call void @EC_GROUP_free(ptr noundef %565)
  %566 = load ptr, ptr %8, align 8, !tbaa !5
  call void @BN_free(ptr noundef %566)
  %567 = load ptr, ptr %9, align 8, !tbaa !5
  call void @BN_free(ptr noundef %567)
  %568 = load ptr, ptr %10, align 8, !tbaa !5
  call void @BN_free(ptr noundef %568)
  %569 = load ptr, ptr %11, align 8, !tbaa !5
  call void @EC_POINT_free(ptr noundef %569)
  %570 = load ptr, ptr %14, align 8, !tbaa !5
  call void @BN_CTX_free(ptr noundef %570)
  %571 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %571, ptr %2, align 8
  store i32 1, ptr %17, align 4
  br label %572

572:                                              ; preds = %564, %555, %285
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  %573 = load ptr, ptr %2, align 8
  ret ptr %573
}

declare ptr @BN_bin2bn(ptr noundef, i32 noundef, ptr noundef) #1

declare i32 @OBJ_obj2nid(ptr noundef) #1

declare ptr @BN_new() #1

declare i64 @ASN1_INTEGER_get(ptr noundef) #1

declare i32 @BN_set_bit(ptr noundef, i32 noundef) #1

declare ptr @EC_GROUP_new_curve_GF2m(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @ASN1_INTEGER_to_BN(ptr noundef, ptr noundef) #1

declare i32 @BN_is_negative(ptr noundef) #1

declare i32 @BN_is_zero(ptr noundef) #1

declare i32 @BN_num_bits(ptr noundef) #1

declare ptr @EC_GROUP_new_curve_GFp(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @CRYPTO_malloc(i64 noundef, ptr noundef, i32 noundef) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare ptr @EC_POINT_new(ptr noundef) #1

declare void @EC_GROUP_set_point_conversion_form(ptr noundef, i32 noundef) #1

declare i32 @EC_POINT_oct2point(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) #1

declare void @BN_free(ptr noundef) #1

declare i32 @EC_GROUP_set_generator(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @BN_CTX_new() #1

declare ptr @EC_GROUP_dup(ptr noundef) #1

declare i64 @EC_GROUP_set_seed(ptr noundef, ptr noundef, i64 noundef) #1

declare i32 @ossl_ec_curve_nid_from_params(ptr noundef, ptr noundef) #1

declare ptr @EC_GROUP_new_by_curve_name(i32 noundef) #1

declare void @EC_GROUP_free(ptr noundef) #1

declare void @EC_GROUP_set_asn1_flag(ptr noundef, i32 noundef) #1

declare void @EC_POINT_free(ptr noundef) #1

declare void @BN_CTX_free(ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 8}
!12 = !{!"ec_parameters_st", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!13 = !{!14, !6, i64 0}
!14 = !{!"x9_62_fieldid_st", !6, i64 0, !7, i64 8}
!15 = !{!7, !7, i64 0}
!16 = !{!12, !6, i64 16}
!17 = !{!18, !6, i64 0}
!18 = !{!"x9_62_curve_st", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!20, !6, i64 8}
!20 = !{!"asn1_string_st", !10, i64 0, !10, i64 4, !6, i64 8, !21, i64 16}
!21 = !{!"long", !7, i64 0}
!22 = !{!18, !6, i64 8}
!23 = !{!20, !10, i64 0}
!24 = !{!25, !10, i64 0}
!25 = !{!"x9_62_characteristic_two_st", !10, i64 0, !6, i64 8, !7, i64 16}
!26 = !{!21, !21, i64 0}
!27 = !{!25, !6, i64 8}
!28 = !{!29, !10, i64 8}
!29 = !{!"x9_62_pentanomial_st", !10, i64 0, !10, i64 4, !10, i64 8}
!30 = !{!29, !10, i64 4}
!31 = !{!29, !10, i64 0}
!32 = !{!18, !6, i64 16}
!33 = !{!34, !6, i64 48}
!34 = !{!"ec_group_st", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !6, i64 48, !21, i64 56, !6, i64 64, !7, i64 72, !6, i64 96, !6, i64 104, !10, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !10, i64 152, !7, i64 160, !6, i64 168, !6, i64 176}
!35 = !{!34, !21, i64 56}
!36 = !{!12, !6, i64 32}
!37 = !{!12, !6, i64 24}
!38 = !{!12, !6, i64 40}


; 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"

@.str.2 = external hidden unnamed_addr constant [69 x i8], align 1
@__func__.EC_GROUP_new_from_ecparameters = external hidden unnamed_addr constant [31 x i8], align 1

declare void @ERR_new() local_unnamed_addr #0

declare void @ERR_set_debug(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

declare void @ERR_set_error(i32 noundef, i32 noundef, ptr noundef, ...) local_unnamed_addr #0

declare void @CRYPTO_free(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local ptr @EC_GROUP_new_from_ecparameters(ptr nocapture noundef readonly %0) local_unnamed_addr #1 {
  %2 = getelementptr inbounds i8, ptr %0, i64 8
  %3 = load ptr, ptr %2, align 8, !tbaa !5
  %4 = icmp eq ptr %3, null
  br i1 %4, label %.thread213.sink.split, label %5

5:                                                ; preds = %1
  %6 = load ptr, ptr %3, align 8, !tbaa !11
  %7 = icmp eq ptr %6, null
  br i1 %7, label %.thread213.sink.split, label %8

8:                                                ; preds = %5
  %9 = getelementptr inbounds i8, ptr %3, i64 8
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = icmp eq ptr %10, null
  br i1 %11, label %.thread213.sink.split, label %12

12:                                               ; preds = %8
  %13 = getelementptr inbounds i8, ptr %0, i64 16
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = icmp eq ptr %14, null
  br i1 %15, label %.thread213.sink.split, label %16

16:                                               ; preds = %12
  %17 = load ptr, ptr %14, align 8, !tbaa !15
  %18 = icmp eq ptr %17, null
  br i1 %18, label %.thread213.sink.split, label %19

19:                                               ; preds = %16
  %20 = getelementptr inbounds i8, ptr %17, i64 8
  %21 = load ptr, ptr %20, align 8, !tbaa !17
  %22 = icmp eq ptr %21, null
  br i1 %22, label %.thread213.sink.split, label %23

23:                                               ; preds = %19
  %24 = getelementptr inbounds i8, ptr %14, i64 8
  %25 = load ptr, ptr %24, align 8, !tbaa !20
  %26 = icmp eq ptr %25, null
  br i1 %26, label %.thread213.sink.split, label %27

27:                                               ; preds = %23
  %28 = getelementptr inbounds i8, ptr %25, i64 8
  %29 = load ptr, ptr %28, align 8, !tbaa !17
  %30 = icmp eq ptr %29, null
  br i1 %30, label %.thread213.sink.split, label %31

31:                                               ; preds = %27
  %32 = load i32, ptr %17, align 8, !tbaa !21
  %33 = tail call ptr @BN_bin2bn(ptr noundef nonnull %21, i32 noundef %32, ptr noundef null) #3
  %34 = icmp eq ptr %33, null
  br i1 %34, label %.thread213.sink.split, label %35

35:                                               ; preds = %31
  %36 = load ptr, ptr %13, align 8, !tbaa !14
  %37 = getelementptr inbounds i8, ptr %36, i64 8
  %38 = load ptr, ptr %37, align 8, !tbaa !20
  %39 = getelementptr inbounds i8, ptr %38, i64 8
  %40 = load ptr, ptr %39, align 8, !tbaa !17
  %41 = load i32, ptr %38, align 8, !tbaa !21
  %42 = tail call ptr @BN_bin2bn(ptr noundef %40, i32 noundef %41, ptr noundef null) #3
  %43 = icmp eq ptr %42, null
  br i1 %43, label %.thread213.sink.split, label %44

44:                                               ; preds = %35
  %45 = load ptr, ptr %2, align 8, !tbaa !5
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = tail call i32 @OBJ_obj2nid(ptr noundef %46) #3
  switch i32 %47, label %.thread213.sink.split [
    i32 407, label %48
    i32 406, label %109
  ]

48:                                               ; preds = %44
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %49, i64 8
  %51 = load ptr, ptr %50, align 8, !tbaa !13
  %52 = load i32, ptr %51, align 8, !tbaa !22
  %53 = icmp sgt i32 %52, 661
  br i1 %53, label %.thread213.sink.split, label %54

54:                                               ; preds = %48
  %55 = tail call ptr @BN_new() #3
  %56 = icmp eq ptr %55, null
  br i1 %56, label %.thread213.sink.split, label %57

57:                                               ; preds = %54
  %58 = getelementptr inbounds i8, ptr %51, i64 8
  %59 = load ptr, ptr %58, align 8, !tbaa !24
  %60 = tail call i32 @OBJ_obj2nid(ptr noundef %59) #3
  switch i32 %60, label %107 [
    i32 682, label %61
    i32 683, label %77
    i32 681, label %.thread213.sink.split
  ]

61:                                               ; preds = %57
  %62 = getelementptr inbounds i8, ptr %51, i64 16
  %63 = load ptr, ptr %62, align 8, !tbaa !13
  %.not187 = icmp eq ptr %63, null
  br i1 %.not187, label %.thread213.sink.split, label %64

64:                                               ; preds = %61
  %65 = tail call i64 @ASN1_INTEGER_get(ptr noundef nonnull %63) #3
  %66 = load i32, ptr %51, align 8, !tbaa !22
  %67 = sext i32 %66 to i64
  %68 = icmp slt i64 %65, %67
  %69 = icmp sgt i64 %65, 0
  %or.cond = and i1 %69, %68
  br i1 %or.cond, label %70, label %.thread213.sink.split

70:                                               ; preds = %64
  %71 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef %66) #3
  %.not188 = icmp eq i32 %71, 0
  br i1 %.not188, label %.thread213, label %72

72:                                               ; preds = %70
  %73 = trunc nuw nsw i64 %65 to i32
  %74 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef %73) #3
  %.not189 = icmp eq i32 %74, 0
  br i1 %.not189, label %.thread213, label %75

75:                                               ; preds = %72
  %76 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef 0) #3
  %.not190.not = icmp eq i32 %76, 0
  br i1 %.not190.not, label %.thread213, label %.thread217

77:                                               ; preds = %57
  %78 = getelementptr inbounds i8, ptr %51, i64 16
  %79 = load ptr, ptr %78, align 8, !tbaa !13
  %80 = icmp eq ptr %79, null
  br i1 %80, label %.thread213.sink.split, label %81

81:                                               ; preds = %77
  %82 = load i32, ptr %51, align 8, !tbaa !22
  %83 = getelementptr inbounds i8, ptr %79, i64 8
  %84 = load i32, ptr %83, align 4, !tbaa !25
  %85 = icmp sgt i32 %82, %84
  br i1 %85, label %86, label %.thread213.sink.split

86:                                               ; preds = %81
  %87 = getelementptr inbounds i8, ptr %79, i64 4
  %88 = load i32, ptr %87, align 4, !tbaa !27
  %89 = icmp sgt i32 %84, %88
  br i1 %89, label %90, label %.thread213.sink.split

90:                                               ; preds = %86
  %91 = load i32, ptr %79, align 4, !tbaa !28
  %92 = icmp sgt i32 %88, %91
  %93 = icmp sgt i32 %91, 0
  %or.cond202 = and i1 %92, %93
  br i1 %or.cond202, label %94, label %.thread213.sink.split

94:                                               ; preds = %90
  %95 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef %82) #3
  %.not182 = icmp eq i32 %95, 0
  br i1 %.not182, label %.thread213, label %96

96:                                               ; preds = %94
  %97 = load i32, ptr %79, align 4, !tbaa !28
  %98 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef %97) #3
  %.not183 = icmp eq i32 %98, 0
  br i1 %.not183, label %.thread213, label %99

99:                                               ; preds = %96
  %100 = load i32, ptr %87, align 4, !tbaa !27
  %101 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef %100) #3
  %.not184 = icmp eq i32 %101, 0
  br i1 %.not184, label %.thread213, label %102

102:                                              ; preds = %99
  %103 = load i32, ptr %83, align 4, !tbaa !25
  %104 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef %103) #3
  %.not185 = icmp eq i32 %104, 0
  br i1 %.not185, label %.thread213, label %105

105:                                              ; preds = %102
  %106 = tail call i32 @BN_set_bit(ptr noundef nonnull %55, i32 noundef 0) #3
  %.not186.not = icmp eq i32 %106, 0
  br i1 %.not186.not, label %.thread213, label %.thread217

107:                                              ; preds = %57
  br label %.thread213.sink.split

.thread217:                                       ; preds = %75, %105
  %108 = tail call ptr @EC_GROUP_new_curve_GF2m(ptr noundef nonnull %55, ptr noundef nonnull %33, ptr noundef nonnull %42, ptr noundef null) #3
  br label %126

109:                                              ; preds = %44
  %110 = load ptr, ptr %2, align 8, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %110, i64 8
  %112 = load ptr, ptr %111, align 8, !tbaa !13
  %113 = icmp eq ptr %112, null
  br i1 %113, label %.thread213.sink.split, label %114

114:                                              ; preds = %109
  %115 = tail call ptr @ASN1_INTEGER_to_BN(ptr noundef nonnull %112, ptr noundef null) #3
  %116 = icmp eq ptr %115, null
  br i1 %116, label %.thread213.sink.split, label %117

117:                                              ; preds = %114
  %118 = tail call i32 @BN_is_negative(ptr noundef nonnull %115) #3
  %.not = icmp eq i32 %118, 0
  br i1 %.not, label %119, label %.thread213.sink.split

119:                                              ; preds = %117
  %120 = tail call i32 @BN_is_zero(ptr noundef nonnull %115) #3
  %.not181 = icmp eq i32 %120, 0
  br i1 %.not181, label %121, label %.thread213.sink.split

121:                                              ; preds = %119
  %122 = tail call i32 @BN_num_bits(ptr noundef nonnull %115) #3
  %123 = icmp sgt i32 %122, 661
  br i1 %123, label %.thread213.sink.split, label %124

124:                                              ; preds = %121
  %125 = tail call ptr @EC_GROUP_new_curve_GFp(ptr noundef nonnull %115, ptr noundef nonnull %33, ptr noundef nonnull %42, ptr noundef null) #3
  br label %126

126:                                              ; preds = %.thread217, %124
  %.1143 = phi ptr [ %125, %124 ], [ %108, %.thread217 ]
  %.1139 = phi ptr [ %115, %124 ], [ %55, %.thread217 ]
  %.0133.in = phi i32 [ %122, %124 ], [ %52, %.thread217 ]
  %127 = icmp eq ptr %.1143, null
  br i1 %127, label %.thread213.sink.split, label %128

128:                                              ; preds = %126
  %129 = load ptr, ptr %13, align 8, !tbaa !14
  %130 = getelementptr inbounds i8, ptr %129, i64 16
  %131 = load ptr, ptr %130, align 8, !tbaa !29
  %.not191 = icmp eq ptr %131, null
  br i1 %.not191, label %159, label %132

132:                                              ; preds = %128
  %133 = load i32, ptr %131, align 8, !tbaa !21
  %134 = icmp eq i32 %133, 0
  br i1 %134, label %.thread213.sink.split, label %135

135:                                              ; preds = %132
  %136 = getelementptr inbounds i8, ptr %.1143, i64 48
  %137 = load ptr, ptr %136, align 8, !tbaa !30
  tail call void @CRYPTO_free(ptr noundef %137, ptr noundef nonnull @.str.2, i32 noundef 698) #3
  %138 = load ptr, ptr %13, align 8, !tbaa !14
  %139 = getelementptr inbounds i8, ptr %138, i64 16
  %140 = load ptr, ptr %139, align 8, !tbaa !29
  %141 = load i32, ptr %140, align 8, !tbaa !21
  %142 = sext i32 %141 to i64
  %143 = tail call ptr @CRYPTO_malloc(i64 noundef %142, ptr noundef nonnull @.str.2, i32 noundef 699) #3
  store ptr %143, ptr %136, align 8, !tbaa !30
  %144 = icmp eq ptr %143, null
  br i1 %144, label %.thread213, label %145

145:                                              ; preds = %135
  %146 = load ptr, ptr %13, align 8, !tbaa !14
  %147 = getelementptr inbounds i8, ptr %146, i64 16
  %148 = load ptr, ptr %147, align 8, !tbaa !29
  %149 = getelementptr inbounds i8, ptr %148, i64 8
  %150 = load ptr, ptr %149, align 8, !tbaa !17
  %151 = load i32, ptr %148, align 8, !tbaa !21
  %152 = sext i32 %151 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %143, ptr align 1 %150, i64 %152, i1 false)
  %153 = load ptr, ptr %13, align 8, !tbaa !14
  %154 = getelementptr inbounds i8, ptr %153, i64 16
  %155 = load ptr, ptr %154, align 8, !tbaa !29
  %156 = load i32, ptr %155, align 8, !tbaa !21
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds i8, ptr %.1143, i64 56
  store i64 %157, ptr %158, align 8, !tbaa !32
  br label %159

159:                                              ; preds = %145, %128
  %160 = getelementptr inbounds i8, ptr %0, i64 32
  %161 = load ptr, ptr %160, align 8, !tbaa !33
  %162 = icmp eq ptr %161, null
  br i1 %162, label %.thread213.sink.split, label %163

163:                                              ; preds = %159
  %164 = getelementptr inbounds i8, ptr %0, i64 24
  %165 = load ptr, ptr %164, align 8, !tbaa !34
  %166 = icmp eq ptr %165, null
  br i1 %166, label %.thread213.sink.split, label %167

167:                                              ; preds = %163
  %168 = getelementptr inbounds i8, ptr %165, i64 8
  %169 = load ptr, ptr %168, align 8, !tbaa !17
  %170 = icmp eq ptr %169, null
  br i1 %170, label %.thread213.sink.split, label %171

171:                                              ; preds = %167
  %172 = load i32, ptr %165, align 8, !tbaa !21
  %173 = icmp eq i32 %172, 0
  br i1 %173, label %.thread213.sink.split, label %174

174:                                              ; preds = %171
  %175 = tail call ptr @EC_POINT_new(ptr noundef nonnull %.1143) #3
  %176 = icmp eq ptr %175, null
  br i1 %176, label %.thread213, label %177

177:                                              ; preds = %174
  %178 = load ptr, ptr %164, align 8, !tbaa !34
  %179 = getelementptr inbounds i8, ptr %178, i64 8
  %180 = load ptr, ptr %179, align 8, !tbaa !17
  %181 = load i8, ptr %180, align 1, !tbaa !13
  %182 = and i8 %181, -2
  %183 = zext i8 %182 to i32
  tail call void @EC_GROUP_set_point_conversion_form(ptr noundef nonnull %.1143, i32 noundef %183) #3
  %184 = load ptr, ptr %164, align 8, !tbaa !34
  %185 = getelementptr inbounds i8, ptr %184, i64 8
  %186 = load ptr, ptr %185, align 8, !tbaa !17
  %187 = load i32, ptr %184, align 8, !tbaa !21
  %188 = sext i32 %187 to i64
  %189 = tail call i32 @EC_POINT_oct2point(ptr noundef nonnull %.1143, ptr noundef nonnull %175, ptr noundef %186, i64 noundef %188, ptr noundef null) #3
  %.not192 = icmp eq i32 %189, 0
  br i1 %.not192, label %.thread213.sink.split, label %190

190:                                              ; preds = %177
  %191 = load ptr, ptr %160, align 8, !tbaa !33
  %192 = tail call ptr @ASN1_INTEGER_to_BN(ptr noundef %191, ptr noundef nonnull %33) #3
  %193 = icmp eq ptr %192, null
  br i1 %193, label %.thread213.sink.split, label %194

194:                                              ; preds = %190
  %195 = tail call i32 @BN_is_negative(ptr noundef nonnull %33) #3
  %.not193 = icmp eq i32 %195, 0
  br i1 %.not193, label %196, label %.thread213.sink.split

196:                                              ; preds = %194
  %197 = tail call i32 @BN_is_zero(ptr noundef nonnull %33) #3
  %.not194 = icmp eq i32 %197, 0
  br i1 %.not194, label %198, label %.thread213.sink.split

198:                                              ; preds = %196
  %199 = tail call i32 @BN_num_bits(ptr noundef nonnull %33) #3
  %200 = add nsw i32 %.0133.in, 1
  %201 = icmp sgt i32 %199, %200
  br i1 %201, label %.thread213.sink.split, label %202

202:                                              ; preds = %198
  %203 = getelementptr inbounds i8, ptr %0, i64 40
  %204 = load ptr, ptr %203, align 8, !tbaa !35
  %205 = icmp eq ptr %204, null
  br i1 %205, label %206, label %207

206:                                              ; preds = %202
  tail call void @BN_free(ptr noundef nonnull %42) #3
  br label %210

207:                                              ; preds = %202
  %208 = tail call ptr @ASN1_INTEGER_to_BN(ptr noundef nonnull %204, ptr noundef nonnull %42) #3
  %209 = icmp eq ptr %208, null
  br i1 %209, label %.thread213.sink.split, label %210

210:                                              ; preds = %207, %206
  %.0135 = phi ptr [ null, %206 ], [ %42, %207 ]
  %211 = tail call i32 @EC_GROUP_set_generator(ptr noundef nonnull %.1143, ptr noundef nonnull %175, ptr noundef nonnull %33, ptr noundef %.0135) #3
  %.not195 = icmp eq i32 %211, 0
  br i1 %.not195, label %.thread213.sink.split, label %212

212:                                              ; preds = %210
  %213 = tail call ptr @BN_CTX_new() #3
  %214 = icmp eq ptr %213, null
  br i1 %214, label %.thread213.sink.split, label %215

215:                                              ; preds = %212
  %216 = tail call ptr @EC_GROUP_dup(ptr noundef nonnull %.1143) #3
  %217 = icmp eq ptr %216, null
  br i1 %217, label %.thread213.sink.split, label %218

218:                                              ; preds = %215
  %219 = tail call i64 @EC_GROUP_set_seed(ptr noundef nonnull %216, ptr noundef null, i64 noundef 0) #3
  %.not196 = icmp eq i64 %219, 1
  br i1 %.not196, label %220, label %.thread213.sink.split

220:                                              ; preds = %218
  %221 = tail call i32 @EC_GROUP_set_generator(ptr noundef nonnull %216, ptr noundef nonnull %175, ptr noundef nonnull %33, ptr noundef null) #3
  %.not197 = icmp eq i32 %221, 0
  br i1 %.not197, label %.thread213.sink.split, label %222

222:                                              ; preds = %220
  %223 = tail call i32 @ossl_ec_curve_nid_from_params(ptr noundef nonnull %216, ptr noundef nonnull %213) #3
  %.not198 = icmp eq i32 %223, 0
  br i1 %.not198, label %235, label %224

224:                                              ; preds = %222
  %225 = icmp eq i32 %223, 745
  %spec.store.select = select i1 %225, i32 713, i32 %223
  %226 = tail call ptr @EC_GROUP_new_by_curve_name(i32 noundef %spec.store.select) #3
  %227 = icmp eq ptr %226, null
  br i1 %227, label %.thread213.sink.split, label %228

228:                                              ; preds = %224
  tail call void @EC_GROUP_free(ptr noundef nonnull %.1143) #3
  tail call void @EC_GROUP_set_asn1_flag(ptr noundef nonnull %226, i32 noundef 0) #3
  %229 = load ptr, ptr %13, align 8, !tbaa !14
  %230 = getelementptr inbounds i8, ptr %229, i64 16
  %231 = load ptr, ptr %230, align 8, !tbaa !29
  %232 = icmp eq ptr %231, null
  br i1 %232, label %233, label %235

233:                                              ; preds = %228
  %234 = tail call i64 @EC_GROUP_set_seed(ptr noundef nonnull %226, ptr noundef null, i64 noundef 0) #3
  %.not199 = icmp eq i64 %234, 1
  br i1 %.not199, label %235, label %.thread213

.thread213.sink.split:                            ; preds = %224, %215, %218, %220, %212, %210, %207, %198, %194, %196, %190, %177, %159, %163, %167, %171, %132, %126, %44, %121, %117, %119, %114, %109, %57, %81, %86, %90, %77, %64, %61, %54, %48, %35, %31, %12, %16, %19, %23, %27, %1, %5, %8, %107
  %.sink256 = phi i32 [ 642, %107 ], [ 533, %8 ], [ 533, %5 ], [ 533, %1 ], [ 546, %27 ], [ 546, %23 ], [ 546, %19 ], [ 546, %16 ], [ 546, %12 ], [ 551, %31 ], [ 556, %35 ], [ 576, %48 ], [ 581, %54 ], [ 592, %61 ], [ 599, %64 ], [ 615, %77 ], [ 622, %90 ], [ 622, %86 ], [ 622, %81 ], [ 638, %57 ], [ 654, %109 ], [ 659, %114 ], [ 664, %119 ], [ 664, %117 ], [ 670, %121 ], [ 677, %44 ], [ 682, %126 ], [ 695, %132 ], [ 710, %171 ], [ 710, %167 ], [ 710, %163 ], [ 710, %159 ], [ 724, %177 ], [ 730, %190 ], [ 734, %196 ], [ 734, %194 ], [ 738, %198 ], [ 747, %207 ], [ 752, %210 ], [ 769, %212 ], [ 775, %220 ], [ 775, %218 ], [ 775, %215 ], [ 800, %224 ]
  %.sink = phi i32 [ 115, %107 ], [ 115, %8 ], [ 115, %5 ], [ 115, %1 ], [ 115, %27 ], [ 115, %23 ], [ 115, %19 ], [ 115, %16 ], [ 115, %12 ], [ 524291, %31 ], [ 524291, %35 ], [ 143, %48 ], [ 524291, %54 ], [ 115, %61 ], [ 137, %64 ], [ 115, %77 ], [ 132, %90 ], [ 132, %86 ], [ 132, %81 ], [ 126, %57 ], [ 115, %109 ], [ 524301, %114 ], [ 103, %119 ], [ 103, %117 ], [ 143, %121 ], [ 103, %44 ], [ 524304, %126 ], [ 115, %132 ], [ 115, %171 ], [ 115, %167 ], [ 115, %163 ], [ 115, %159 ], [ 524304, %177 ], [ 524301, %190 ], [ 122, %196 ], [ 122, %194 ], [ 122, %198 ], [ 524301, %207 ], [ 524304, %210 ], [ 524291, %212 ], [ 524304, %220 ], [ 524304, %218 ], [ 524304, %215 ], [ 524304, %224 ]
  %.4.ph.ph = phi ptr [ null, %107 ], [ null, %8 ], [ null, %5 ], [ null, %1 ], [ null, %27 ], [ null, %23 ], [ null, %19 ], [ null, %16 ], [ null, %12 ], [ null, %31 ], [ null, %35 ], [ null, %48 ], [ null, %54 ], [ null, %61 ], [ null, %64 ], [ null, %77 ], [ null, %90 ], [ null, %86 ], [ null, %81 ], [ null, %57 ], [ null, %109 ], [ null, %114 ], [ null, %119 ], [ null, %117 ], [ null, %121 ], [ null, %44 ], [ null, %126 ], [ %.1143, %132 ], [ %.1143, %171 ], [ %.1143, %167 ], [ %.1143, %163 ], [ %.1143, %159 ], [ %.1143, %177 ], [ %.1143, %190 ], [ %.1143, %196 ], [ %.1143, %194 ], [ %.1143, %198 ], [ %.1143, %207 ], [ %.1143, %210 ], [ %.1143, %212 ], [ %.1143, %220 ], [ %.1143, %218 ], [ %.1143, %215 ], [ %.1143, %224 ]
  %.0141.ph.ph = phi ptr [ null, %107 ], [ null, %8 ], [ null, %5 ], [ null, %1 ], [ null, %27 ], [ null, %23 ], [ null, %19 ], [ null, %16 ], [ null, %12 ], [ null, %31 ], [ null, %35 ], [ null, %48 ], [ null, %54 ], [ null, %61 ], [ null, %64 ], [ null, %77 ], [ null, %90 ], [ null, %86 ], [ null, %81 ], [ null, %57 ], [ null, %109 ], [ null, %114 ], [ null, %119 ], [ null, %117 ], [ null, %121 ], [ null, %44 ], [ null, %126 ], [ null, %132 ], [ null, %171 ], [ null, %167 ], [ null, %163 ], [ null, %159 ], [ null, %177 ], [ null, %190 ], [ null, %196 ], [ null, %194 ], [ null, %198 ], [ null, %207 ], [ null, %210 ], [ null, %212 ], [ %216, %220 ], [ %216, %218 ], [ %216, %215 ], [ %216, %224 ]
  %.2140.ph.ph = phi ptr [ %55, %107 ], [ null, %8 ], [ null, %5 ], [ null, %1 ], [ null, %27 ], [ null, %23 ], [ null, %19 ], [ null, %16 ], [ null, %12 ], [ null, %31 ], [ null, %35 ], [ null, %48 ], [ null, %54 ], [ %55, %61 ], [ %55, %64 ], [ %55, %77 ], [ %55, %90 ], [ %55, %86 ], [ %55, %81 ], [ %55, %57 ], [ null, %109 ], [ null, %114 ], [ %115, %119 ], [ %115, %117 ], [ %115, %121 ], [ null, %44 ], [ %.1139, %126 ], [ %.1139, %132 ], [ %.1139, %171 ], [ %.1139, %167 ], [ %.1139, %163 ], [ %.1139, %159 ], [ %.1139, %177 ], [ %.1139, %190 ], [ %.1139, %196 ], [ %.1139, %194 ], [ %.1139, %198 ], [ %.1139, %207 ], [ %.1139, %210 ], [ %.1139, %212 ], [ %.1139, %220 ], [ %.1139, %218 ], [ %.1139, %215 ], [ %.1139, %224 ]
  %.0137.ph.ph = phi ptr [ %33, %107 ], [ null, %8 ], [ null, %5 ], [ null, %1 ], [ null, %27 ], [ null, %23 ], [ null, %19 ], [ null, %16 ], [ null, %12 ], [ null, %31 ], [ %33, %35 ], [ %33, %48 ], [ %33, %54 ], [ %33, %61 ], [ %33, %64 ], [ %33, %77 ], [ %33, %90 ], [ %33, %86 ], [ %33, %81 ], [ %33, %57 ], [ %33, %109 ], [ %33, %114 ], [ %33, %119 ], [ %33, %117 ], [ %33, %121 ], [ %33, %44 ], [ %33, %126 ], [ %33, %132 ], [ %33, %171 ], [ %33, %167 ], [ %33, %163 ], [ %33, %159 ], [ %33, %177 ], [ %33, %190 ], [ %33, %196 ], [ %33, %194 ], [ %33, %198 ], [ %33, %207 ], [ %33, %210 ], [ %33, %212 ], [ %33, %220 ], [ %33, %218 ], [ %33, %215 ], [ %33, %224 ]
  %.1136.ph.ph = phi ptr [ %42, %107 ], [ null, %8 ], [ null, %5 ], [ null, %1 ], [ null, %27 ], [ null, %23 ], [ null, %19 ], [ null, %16 ], [ null, %12 ], [ null, %31 ], [ null, %35 ], [ %42, %48 ], [ %42, %54 ], [ %42, %61 ], [ %42, %64 ], [ %42, %77 ], [ %42, %90 ], [ %42, %86 ], [ %42, %81 ], [ %42, %57 ], [ %42, %109 ], [ %42, %114 ], [ %42, %119 ], [ %42, %117 ], [ %42, %121 ], [ %42, %44 ], [ %42, %126 ], [ %42, %132 ], [ %42, %171 ], [ %42, %167 ], [ %42, %163 ], [ %42, %159 ], [ %42, %177 ], [ %42, %190 ], [ %42, %196 ], [ %42, %194 ], [ %42, %198 ], [ %42, %207 ], [ %.0135, %210 ], [ %.0135, %212 ], [ %.0135, %220 ], [ %.0135, %218 ], [ %.0135, %215 ], [ %.0135, %224 ]
  %.0134.ph.ph = phi ptr [ null, %107 ], [ null, %8 ], [ null, %5 ], [ null, %1 ], [ null, %27 ], [ null, %23 ], [ null, %19 ], [ null, %16 ], [ null, %12 ], [ null, %31 ], [ null, %35 ], [ null, %48 ], [ null, %54 ], [ null, %61 ], [ null, %64 ], [ null, %77 ], [ null, %90 ], [ null, %86 ], [ null, %81 ], [ null, %57 ], [ null, %109 ], [ null, %114 ], [ null, %119 ], [ null, %117 ], [ null, %121 ], [ null, %44 ], [ null, %126 ], [ null, %132 ], [ null, %171 ], [ null, %167 ], [ null, %163 ], [ null, %159 ], [ %175, %177 ], [ %175, %190 ], [ %175, %196 ], [ %175, %194 ], [ %175, %198 ], [ %175, %207 ], [ %175, %210 ], [ %175, %212 ], [ %175, %220 ], [ %175, %218 ], [ %175, %215 ], [ %175, %224 ]
  %.0132.ph.ph = phi ptr [ null, %107 ], [ null, %8 ], [ null, %5 ], [ null, %1 ], [ null, %27 ], [ null, %23 ], [ null, %19 ], [ null, %16 ], [ null, %12 ], [ null, %31 ], [ null, %35 ], [ null, %48 ], [ null, %54 ], [ null, %61 ], [ null, %64 ], [ null, %77 ], [ null, %90 ], [ null, %86 ], [ null, %81 ], [ null, %57 ], [ null, %109 ], [ null, %114 ], [ null, %119 ], [ null, %117 ], [ null, %121 ], [ null, %44 ], [ null, %126 ], [ null, %132 ], [ null, %171 ], [ null, %167 ], [ null, %163 ], [ null, %159 ], [ null, %177 ], [ null, %190 ], [ null, %196 ], [ null, %194 ], [ null, %198 ], [ null, %207 ], [ null, %210 ], [ null, %212 ], [ %213, %220 ], [ %213, %218 ], [ %213, %215 ], [ %213, %224 ]
  tail call void @ERR_new() #3
  tail call void @ERR_set_debug(ptr noundef nonnull @.str.2, i32 noundef %.sink256, ptr noundef nonnull @__func__.EC_GROUP_new_from_ecparameters) #3
  tail call void (i32, i32, ptr, ...) @ERR_set_error(i32 noundef 16, i32 noundef %.sink, ptr noundef null) #3
  br label %.thread213

.thread213:                                       ; preds = %.thread213.sink.split, %105, %75, %233, %102, %99, %96, %94, %72, %70, %135, %174
  %.4.ph = phi ptr [ %.1143, %174 ], [ %.1143, %135 ], [ null, %70 ], [ null, %72 ], [ null, %94 ], [ null, %96 ], [ null, %99 ], [ null, %102 ], [ %226, %233 ], [ null, %75 ], [ null, %105 ], [ %.4.ph.ph, %.thread213.sink.split ]
  %.0141.ph = phi ptr [ null, %174 ], [ null, %135 ], [ null, %70 ], [ null, %72 ], [ null, %94 ], [ null, %96 ], [ null, %99 ], [ null, %102 ], [ %216, %233 ], [ null, %75 ], [ null, %105 ], [ %.0141.ph.ph, %.thread213.sink.split ]
  %.2140.ph = phi ptr [ %.1139, %174 ], [ %.1139, %135 ], [ %55, %70 ], [ %55, %72 ], [ %55, %94 ], [ %55, %96 ], [ %55, %99 ], [ %55, %102 ], [ %.1139, %233 ], [ %55, %75 ], [ %55, %105 ], [ %.2140.ph.ph, %.thread213.sink.split ]
  %.0137.ph = phi ptr [ %33, %174 ], [ %33, %135 ], [ %33, %70 ], [ %33, %72 ], [ %33, %94 ], [ %33, %96 ], [ %33, %99 ], [ %33, %102 ], [ %33, %233 ], [ %33, %75 ], [ %33, %105 ], [ %.0137.ph.ph, %.thread213.sink.split ]
  %.1136.ph = phi ptr [ %42, %174 ], [ %42, %135 ], [ %42, %70 ], [ %42, %72 ], [ %42, %94 ], [ %42, %96 ], [ %42, %99 ], [ %42, %102 ], [ %.0135, %233 ], [ %42, %75 ], [ %42, %105 ], [ %.1136.ph.ph, %.thread213.sink.split ]
  %.0134.ph = phi ptr [ null, %174 ], [ null, %135 ], [ null, %70 ], [ null, %72 ], [ null, %94 ], [ null, %96 ], [ null, %99 ], [ null, %102 ], [ %175, %233 ], [ null, %75 ], [ null, %105 ], [ %.0134.ph.ph, %.thread213.sink.split ]
  %.0132.ph = phi ptr [ null, %174 ], [ null, %135 ], [ null, %70 ], [ null, %72 ], [ null, %94 ], [ null, %96 ], [ null, %99 ], [ null, %102 ], [ %213, %233 ], [ null, %75 ], [ null, %105 ], [ %.0132.ph.ph, %.thread213.sink.split ]
  tail call void @EC_GROUP_free(ptr noundef %.4.ph) #3
  br label %235

235:                                              ; preds = %222, %228, %233, %.thread213
  %.0132253 = phi ptr [ %.0132.ph, %.thread213 ], [ %213, %222 ], [ %213, %228 ], [ %213, %233 ]
  %.0134251 = phi ptr [ %.0134.ph, %.thread213 ], [ %175, %222 ], [ %175, %228 ], [ %175, %233 ]
  %.1136249 = phi ptr [ %.1136.ph, %.thread213 ], [ %.0135, %222 ], [ %.0135, %228 ], [ %.0135, %233 ]
  %.0137247 = phi ptr [ %.0137.ph, %.thread213 ], [ %33, %222 ], [ %33, %228 ], [ %33, %233 ]
  %.2140245 = phi ptr [ %.2140.ph, %.thread213 ], [ %.1139, %222 ], [ %.1139, %228 ], [ %.1139, %233 ]
  %.0141243 = phi ptr [ %.0141.ph, %.thread213 ], [ %216, %222 ], [ %216, %228 ], [ %216, %233 ]
  %.5 = phi ptr [ null, %.thread213 ], [ %.1143, %222 ], [ %226, %228 ], [ %226, %233 ]
  tail call void @EC_GROUP_free(ptr noundef %.0141243) #3
  tail call void @BN_free(ptr noundef %.2140245) #3
  tail call void @BN_free(ptr noundef %.0137247) #3
  tail call void @BN_free(ptr noundef %.1136249) #3
  tail call void @EC_POINT_free(ptr noundef %.0134251) #3
  tail call void @BN_CTX_free(ptr noundef %.0132253) #3
  ret ptr %.5
}

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

declare i32 @OBJ_obj2nid(ptr noundef) local_unnamed_addr #0

declare ptr @BN_new() local_unnamed_addr #0

declare i64 @ASN1_INTEGER_get(ptr noundef) local_unnamed_addr #0

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

declare ptr @EC_GROUP_new_curve_GF2m(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @ASN1_INTEGER_to_BN(ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @BN_is_negative(ptr noundef) local_unnamed_addr #0

declare i32 @BN_is_zero(ptr noundef) local_unnamed_addr #0

declare i32 @BN_num_bits(ptr noundef) local_unnamed_addr #0

declare ptr @EC_GROUP_new_curve_GFp(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @CRYPTO_malloc(i64 noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

declare ptr @EC_POINT_new(ptr noundef) local_unnamed_addr #0

declare void @EC_GROUP_set_point_conversion_form(ptr noundef, i32 noundef) local_unnamed_addr #0

declare i32 @EC_POINT_oct2point(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

declare void @BN_free(ptr noundef) local_unnamed_addr #0

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

declare ptr @BN_CTX_new() local_unnamed_addr #0

declare ptr @EC_GROUP_dup(ptr noundef) local_unnamed_addr #0

declare i64 @EC_GROUP_set_seed(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #0

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

declare ptr @EC_GROUP_new_by_curve_name(i32 noundef) local_unnamed_addr #0

declare void @EC_GROUP_free(ptr noundef) local_unnamed_addr #0

declare void @EC_GROUP_set_asn1_flag(ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @EC_POINT_free(ptr noundef) local_unnamed_addr #0

declare void @BN_CTX_free(ptr noundef) 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 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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, !10, i64 8}
!6 = !{!"ec_parameters_st", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"x9_62_fieldid_st", !10, i64 0, !8, i64 8}
!13 = !{!8, !8, i64 0}
!14 = !{!6, !10, i64 16}
!15 = !{!16, !10, i64 0}
!16 = !{!"x9_62_curve_st", !10, i64 0, !10, i64 8, !10, i64 16}
!17 = !{!18, !10, i64 8}
!18 = !{!"asn1_string_st", !7, i64 0, !7, i64 4, !10, i64 8, !19, i64 16}
!19 = !{!"long", !8, i64 0}
!20 = !{!16, !10, i64 8}
!21 = !{!18, !7, i64 0}
!22 = !{!23, !7, i64 0}
!23 = !{!"x9_62_characteristic_two_st", !7, i64 0, !10, i64 8, !8, i64 16}
!24 = !{!23, !10, i64 8}
!25 = !{!26, !7, i64 8}
!26 = !{!"x9_62_pentanomial_st", !7, i64 0, !7, i64 4, !7, i64 8}
!27 = !{!26, !7, i64 4}
!28 = !{!26, !7, i64 0}
!29 = !{!16, !10, i64 16}
!30 = !{!31, !10, i64 48}
!31 = !{!"ec_group_st", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !10, i64 48, !19, i64 56, !10, i64 64, !8, i64 72, !10, i64 96, !10, i64 104, !7, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !7, i64 152, !8, i64 160, !10, i64 168, !10, i64 176}
!32 = !{!31, !19, i64 56}
!33 = !{!6, !10, i64 32}
!34 = !{!6, !10, i64 24}
!35 = !{!6, !10, i64 40}


; Effective O3 passes: ADCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass