; LLVM IR from guanzhi/GmSSL :: tools (reqsign)

; 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.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }

@stdin = external global ptr, align 8
@stdout = external global ptr, align 8
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [14 x i8], align 1
@options = external hidden global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@usage = external hidden global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [31 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @reqsign_main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca [512 x i8], align 16
  %12 = alloca i64, align 8
  %13 = alloca [8192 x i8], align 16
  %14 = alloca i64, align 8
  %15 = alloca [20 x i8], align 16
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca %struct.SM2_KEY, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %struct.SM2_KEY, align 8
  %28 = alloca [8192 x i8], align 16
  %29 = alloca i64, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca %struct.SM2_KEY, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i64, align 8
  %37 = alloca ptr, align 8
  %38 = alloca [4096 x i8], align 16
  %39 = alloca i64, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca [2048 x i8], align 16
  %44 = alloca i64, align 8
  %45 = alloca [512 x i8], align 16
  %46 = alloca i64, align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca [12 x i32], align 16
  %50 = alloca i64, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %57 = load ptr, ptr %5, align 8, !tbaa !9
  %58 = getelementptr inbounds ptr, ptr %57, i64 0
  %59 = load ptr, ptr %58, align 8, !tbaa !9
  store ptr %59, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  %60 = load ptr, ptr @stdin, align 8, !tbaa !9
  store ptr %60, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 512, ptr %11) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.start.p0(i64 8192, ptr %13) #9
  call void @llvm.memset.p0.i64(ptr align 16 %13, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  store i64 0, ptr %14, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 20, ptr %15) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 12, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 128, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  store ptr null, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  store ptr null, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  store ptr null, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 8192, ptr %28) #9
  call void @llvm.memset.p0.i64(ptr align 16 %28, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  store i64 0, ptr %29, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 128, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  store ptr null, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %61 = load ptr, ptr @stdout, align 8, !tbaa !9
  store ptr %61, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  store ptr null, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  store i64 0, ptr %36, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 4096, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  store i64 0, ptr %39, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  store i32 0, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store i32 0, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store i32 0, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2048, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  store i64 0, ptr %44, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 512, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  store i64 0, ptr %46, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  store i32 -1, ptr %47, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  store i32 -1, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  store i64 0, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  store ptr null, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  store ptr null, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  store i32 -1, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  store ptr null, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  store ptr null, ptr %55, align 8, !tbaa !9
  %62 = load i32, ptr %4, align 4, !tbaa !5
  %63 = add nsw i32 %62, -1
  store i32 %63, ptr %4, align 4, !tbaa !5
  %64 = load ptr, ptr %5, align 8, !tbaa !9
  %65 = getelementptr inbounds ptr, ptr %64, i32 1
  store ptr %65, ptr %5, align 8, !tbaa !9
  %66 = load i32, ptr %4, align 4, !tbaa !5
  %67 = icmp slt i32 %66, 1
  br i1 %67, label %68, label %73

68:                                               ; preds = %2
  %69 = load ptr, ptr @stderr, align 8, !tbaa !9
  %70 = load ptr, ptr %7, align 8, !tbaa !9
  %71 = load ptr, ptr @options, align 8, !tbaa !9
  %72 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef @.str, ptr noundef %70, ptr noundef %71) #9
  store i32 1, ptr %3, align 4
  store i32 1, ptr %56, align 4
  br label %1035

73:                                               ; preds = %2
  br label %74

74:                                               ; preds = %633, %73
  %75 = load i32, ptr %4, align 4, !tbaa !5
  %76 = icmp sge i32 %75, 1
  br i1 %76, label %77, label %638

77:                                               ; preds = %74
  %78 = load ptr, ptr %5, align 8, !tbaa !9
  %79 = load ptr, ptr %78, align 8, !tbaa !9
  %80 = call i32 @strcmp(ptr noundef %79, ptr noundef @.str.1) #10
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %88, label %82

82:                                               ; preds = %77
  %83 = load ptr, ptr %7, align 8, !tbaa !9
  %84 = load ptr, ptr @options, align 8, !tbaa !9
  %85 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %83, ptr noundef %84)
  %86 = load ptr, ptr @usage, align 8, !tbaa !9
  %87 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, ptr noundef %86)
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %1004

88:                                               ; preds = %77
  %89 = load ptr, ptr %5, align 8, !tbaa !9
  %90 = load ptr, ptr %89, align 8, !tbaa !9
  %91 = call i32 @strcmp(ptr noundef %90, ptr noundef @.str.4) #10
  %92 = icmp ne i32 %91, 0
  br i1 %92, label %114, label %93

93:                                               ; preds = %88
  %94 = load i32, ptr %4, align 4, !tbaa !5
  %95 = add nsw i32 %94, -1
  store i32 %95, ptr %4, align 4, !tbaa !5
  %96 = icmp slt i32 %95, 1
  br i1 %96, label %97, label %98

97:                                               ; preds = %93
  br label %603

98:                                               ; preds = %93
  %99 = load ptr, ptr %5, align 8, !tbaa !9
  %100 = getelementptr inbounds ptr, ptr %99, i32 1
  store ptr %100, ptr %5, align 8, !tbaa !9
  %101 = load ptr, ptr %100, align 8, !tbaa !9
  store ptr %101, ptr %9, align 8, !tbaa !9
  %102 = load ptr, ptr %9, align 8, !tbaa !9
  %103 = call noalias ptr @fopen(ptr noundef %102, ptr noundef @.str.5)
  store ptr %103, ptr %10, align 8, !tbaa !9
  %104 = icmp ne ptr %103, null
  br i1 %104, label %113, label %105

105:                                              ; preds = %98
  %106 = load ptr, ptr @stderr, align 8, !tbaa !9
  %107 = load ptr, ptr %7, align 8, !tbaa !9
  %108 = load ptr, ptr %9, align 8, !tbaa !9
  %109 = call ptr @__errno_location() #11
  %110 = load i32, ptr %109, align 4, !tbaa !5
  %111 = call ptr @strerror(i32 noundef %110) #9
  %112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %106, ptr noundef @.str.6, ptr noundef %107, ptr noundef %108, ptr noundef %111) #9
  br label %1004

113:                                              ; preds = %98
  br label %632

114:                                              ; preds = %88
  %115 = load ptr, ptr %5, align 8, !tbaa !9
  %116 = load ptr, ptr %115, align 8, !tbaa !9
  %117 = call i32 @strcmp(ptr noundef %116, ptr noundef @.str.7) #10
  %118 = icmp ne i32 %117, 0
  br i1 %118, label %141, label %119

119:                                              ; preds = %114
  %120 = load i32, ptr %4, align 4, !tbaa !5
  %121 = add nsw i32 %120, -1
  store i32 %121, ptr %4, align 4, !tbaa !5
  %122 = icmp slt i32 %121, 1
  br i1 %122, label %123, label %124

123:                                              ; preds = %119
  br label %603

124:                                              ; preds = %119
  %125 = load ptr, ptr %5, align 8, !tbaa !9
  %126 = getelementptr inbounds ptr, ptr %125, i32 1
  store ptr %126, ptr %5, align 8, !tbaa !9
  %127 = load ptr, ptr %126, align 8, !tbaa !9
  store ptr %127, ptr %8, align 8, !tbaa !9
  %128 = load ptr, ptr %8, align 8, !tbaa !9
  %129 = call i64 @strlen(ptr noundef %128) #10
  %130 = icmp ugt i64 %129, 8191
  br i1 %130, label %131, label %135

131:                                              ; preds = %124
  %132 = load ptr, ptr @stderr, align 8, !tbaa !9
  %133 = load ptr, ptr %7, align 8, !tbaa !9
  %134 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %132, ptr noundef @.str.8, ptr noundef %133) #9
  br label %1004

135:                                              ; preds = %124
  %136 = getelementptr inbounds [8192 x i8], ptr %13, i64 0, i64 0
  %137 = load ptr, ptr %8, align 8, !tbaa !9
  %138 = call ptr @strncpy(ptr noundef %136, ptr noundef %137, i64 noundef 8192) #9
  %139 = load ptr, ptr %8, align 8, !tbaa !9
  %140 = call i64 @strlen(ptr noundef %139) #10
  store i64 %140, ptr %14, align 8, !tbaa !11
  br label %631

141:                                              ; preds = %114
  %142 = load ptr, ptr %5, align 8, !tbaa !9
  %143 = load ptr, ptr %142, align 8, !tbaa !9
  %144 = call i32 @strcmp(ptr noundef %143, ptr noundef @.str.9) #10
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %174, label %146

146:                                              ; preds = %141
  %147 = load i32, ptr %4, align 4, !tbaa !5
  %148 = add nsw i32 %147, -1
  store i32 %148, ptr %4, align 4, !tbaa !5
  %149 = icmp slt i32 %148, 1
  br i1 %149, label %150, label %151

150:                                              ; preds = %146
  br label %603

151:                                              ; preds = %146
  %152 = load ptr, ptr %5, align 8, !tbaa !9
  %153 = getelementptr inbounds ptr, ptr %152, i32 1
  store ptr %153, ptr %5, align 8, !tbaa !9
  %154 = load ptr, ptr %153, align 8, !tbaa !9
  store ptr %154, ptr %8, align 8, !tbaa !9
  %155 = load ptr, ptr %8, align 8, !tbaa !9
  %156 = call i64 @strlen(ptr noundef %155) #10
  %157 = icmp ugt i64 %156, 16382
  br i1 %157, label %158, label %162

158:                                              ; preds = %151
  %159 = load ptr, ptr @stderr, align 8, !tbaa !9
  %160 = load ptr, ptr %7, align 8, !tbaa !9
  %161 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %159, ptr noundef @.str.10, ptr noundef %160) #9
  br label %1004

162:                                              ; preds = %151
  %163 = load ptr, ptr %8, align 8, !tbaa !9
  %164 = load ptr, ptr %8, align 8, !tbaa !9
  %165 = call i64 @strlen(ptr noundef %164) #10
  %166 = getelementptr inbounds [8192 x i8], ptr %13, i64 0, i64 0
  %167 = call i32 @hex_to_bytes(ptr noundef %163, i64 noundef %165, ptr noundef %166, ptr noundef %14)
  %168 = icmp ne i32 %167, 1
  br i1 %168, label %169, label %173

169:                                              ; preds = %162
  %170 = load ptr, ptr @stderr, align 8, !tbaa !9
  %171 = load ptr, ptr %7, align 8, !tbaa !9
  %172 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %170, ptr noundef @.str.11, ptr noundef %171) #9
  br label %1004

173:                                              ; preds = %162
  br label %630

174:                                              ; preds = %141
  %175 = load ptr, ptr %5, align 8, !tbaa !9
  %176 = load ptr, ptr %175, align 8, !tbaa !9
  %177 = call i32 @strcmp(ptr noundef %176, ptr noundef @.str.12) #10
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %200, label %179

179:                                              ; preds = %174
  %180 = load i32, ptr %4, align 4, !tbaa !5
  %181 = add nsw i32 %180, -1
  store i32 %181, ptr %4, align 4, !tbaa !5
  %182 = icmp slt i32 %181, 1
  br i1 %182, label %183, label %184

183:                                              ; preds = %179
  br label %603

184:                                              ; preds = %179
  %185 = load ptr, ptr %5, align 8, !tbaa !9
  %186 = getelementptr inbounds ptr, ptr %185, i32 1
  store ptr %186, ptr %5, align 8, !tbaa !9
  %187 = load ptr, ptr %186, align 8, !tbaa !9
  store ptr %187, ptr %33, align 8, !tbaa !9
  %188 = load ptr, ptr %33, align 8, !tbaa !9
  %189 = call noalias ptr @fopen(ptr noundef %188, ptr noundef @.str.13)
  store ptr %189, ptr %34, align 8, !tbaa !9
  %190 = icmp ne ptr %189, null
  br i1 %190, label %199, label %191

191:                                              ; preds = %184
  %192 = load ptr, ptr @stderr, align 8, !tbaa !9
  %193 = load ptr, ptr %7, align 8, !tbaa !9
  %194 = load ptr, ptr %33, align 8, !tbaa !9
  %195 = call ptr @__errno_location() #11
  %196 = load i32, ptr %195, align 4, !tbaa !5
  %197 = call ptr @strerror(i32 noundef %196) #9
  %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %192, ptr noundef @.str.6, ptr noundef %193, ptr noundef %194, ptr noundef %197) #9
  br label %1004

199:                                              ; preds = %184
  br label %629

200:                                              ; preds = %174
  %201 = load ptr, ptr %5, align 8, !tbaa !9
  %202 = load ptr, ptr %201, align 8, !tbaa !9
  %203 = call i32 @strcmp(ptr noundef %202, ptr noundef @.str.14) #10
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %226, label %205

205:                                              ; preds = %200
  %206 = load i32, ptr %4, align 4, !tbaa !5
  %207 = add nsw i32 %206, -1
  store i32 %207, ptr %4, align 4, !tbaa !5
  %208 = icmp slt i32 %207, 1
  br i1 %208, label %209, label %210

209:                                              ; preds = %205
  br label %603

210:                                              ; preds = %205
  %211 = load ptr, ptr %5, align 8, !tbaa !9
  %212 = getelementptr inbounds ptr, ptr %211, i32 1
  store ptr %212, ptr %5, align 8, !tbaa !9
  %213 = load ptr, ptr %212, align 8, !tbaa !9
  %214 = call i32 @atoi(ptr noundef %213) #10
  store i32 %214, ptr %16, align 4, !tbaa !5
  %215 = load i32, ptr %16, align 4, !tbaa !5
  %216 = icmp sle i32 %215, 0
  br i1 %216, label %221, label %217

217:                                              ; preds = %210
  %218 = load i32, ptr %16, align 4, !tbaa !5
  %219 = sext i32 %218 to i64
  %220 = icmp ugt i64 %219, 20
  br i1 %220, label %221, label %225

221:                                              ; preds = %217, %210
  %222 = load ptr, ptr @stderr, align 8, !tbaa !9
  %223 = load ptr, ptr %7, align 8, !tbaa !9
  %224 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %222, ptr noundef @.str.15, ptr noundef %223, i64 noundef 20) #9
  br label %1004

225:                                              ; preds = %217
  br label %628

226:                                              ; preds = %200
  %227 = load ptr, ptr %5, align 8, !tbaa !9
  %228 = load ptr, ptr %227, align 8, !tbaa !9
  %229 = call i32 @strcmp(ptr noundef %228, ptr noundef @.str.16) #10
  %230 = icmp ne i32 %229, 0
  br i1 %230, label %248, label %231

231:                                              ; preds = %226
  %232 = load i32, ptr %4, align 4, !tbaa !5
  %233 = add nsw i32 %232, -1
  store i32 %233, ptr %4, align 4, !tbaa !5
  %234 = icmp slt i32 %233, 1
  br i1 %234, label %235, label %236

235:                                              ; preds = %231
  br label %603

236:                                              ; preds = %231
  %237 = load ptr, ptr %5, align 8, !tbaa !9
  %238 = getelementptr inbounds ptr, ptr %237, i32 1
  store ptr %238, ptr %5, align 8, !tbaa !9
  %239 = load ptr, ptr %238, align 8, !tbaa !9
  %240 = call i32 @atoi(ptr noundef %239) #10
  store i32 %240, ptr %17, align 4, !tbaa !5
  %241 = load i32, ptr %17, align 4, !tbaa !5
  %242 = icmp sle i32 %241, 0
  br i1 %242, label %243, label %247

243:                                              ; preds = %236
  %244 = load ptr, ptr @stderr, align 8, !tbaa !9
  %245 = load ptr, ptr %7, align 8, !tbaa !9
  %246 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %244, ptr noundef @.str.17, ptr noundef %245) #9
  br label %1004

247:                                              ; preds = %236
  br label %627

248:                                              ; preds = %226
  %249 = load ptr, ptr %5, align 8, !tbaa !9
  %250 = load ptr, ptr %249, align 8, !tbaa !9
  %251 = call i32 @strcmp(ptr noundef %250, ptr noundef @.str.18) #10
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %271, label %253

253:                                              ; preds = %248
  %254 = load i32, ptr %4, align 4, !tbaa !5
  %255 = add nsw i32 %254, -1
  store i32 %255, ptr %4, align 4, !tbaa !5
  %256 = icmp slt i32 %255, 1
  br i1 %256, label %257, label %258

257:                                              ; preds = %253
  br label %603

258:                                              ; preds = %253
  %259 = load ptr, ptr %5, align 8, !tbaa !9
  %260 = getelementptr inbounds ptr, ptr %259, i32 1
  store ptr %260, ptr %5, align 8, !tbaa !9
  %261 = load ptr, ptr %260, align 8, !tbaa !9
  store ptr %261, ptr %8, align 8, !tbaa !9
  %262 = load ptr, ptr %8, align 8, !tbaa !9
  %263 = call i32 @x509_cert_new_from_file(ptr noundef %23, ptr noundef %24, ptr noundef %262)
  %264 = icmp ne i32 %263, 1
  br i1 %264, label %265, label %270

265:                                              ; preds = %258
  %266 = load ptr, ptr @stderr, align 8, !tbaa !9
  %267 = load ptr, ptr %7, align 8, !tbaa !9
  %268 = load ptr, ptr %8, align 8, !tbaa !9
  %269 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %266, ptr noundef @.str.19, ptr noundef %267, ptr noundef %268) #9
  br label %1004

270:                                              ; preds = %258
  br label %626

271:                                              ; preds = %248
  %272 = load ptr, ptr %5, align 8, !tbaa !9
  %273 = load ptr, ptr %272, align 8, !tbaa !9
  %274 = call i32 @strcmp(ptr noundef %273, ptr noundef @.str.20) #10
  %275 = icmp ne i32 %274, 0
  br i1 %275, label %297, label %276

276:                                              ; preds = %271
  %277 = load i32, ptr %4, align 4, !tbaa !5
  %278 = add nsw i32 %277, -1
  store i32 %278, ptr %4, align 4, !tbaa !5
  %279 = icmp slt i32 %278, 1
  br i1 %279, label %280, label %281

280:                                              ; preds = %276
  br label %603

281:                                              ; preds = %276
  %282 = load ptr, ptr %5, align 8, !tbaa !9
  %283 = getelementptr inbounds ptr, ptr %282, i32 1
  store ptr %283, ptr %5, align 8, !tbaa !9
  %284 = load ptr, ptr %283, align 8, !tbaa !9
  store ptr %284, ptr %8, align 8, !tbaa !9
  %285 = load ptr, ptr %8, align 8, !tbaa !9
  %286 = call noalias ptr @fopen(ptr noundef %285, ptr noundef @.str.5)
  store ptr %286, ptr %25, align 8, !tbaa !9
  %287 = icmp ne ptr %286, null
  br i1 %287, label %296, label %288

288:                                              ; preds = %281
  %289 = load ptr, ptr @stderr, align 8, !tbaa !9
  %290 = load ptr, ptr %7, align 8, !tbaa !9
  %291 = load ptr, ptr %8, align 8, !tbaa !9
  %292 = call ptr @__errno_location() #11
  %293 = load i32, ptr %292, align 4, !tbaa !5
  %294 = call ptr @strerror(i32 noundef %293) #9
  %295 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %289, ptr noundef @.str.6, ptr noundef %290, ptr noundef %291, ptr noundef %294) #9
  br label %1004

296:                                              ; preds = %281
  br label %625

297:                                              ; preds = %271
  %298 = load ptr, ptr %5, align 8, !tbaa !9
  %299 = load ptr, ptr %298, align 8, !tbaa !9
  %300 = call i32 @strcmp(ptr noundef %299, ptr noundef @.str.21) #10
  %301 = icmp ne i32 %300, 0
  br i1 %301, label %311, label %302

302:                                              ; preds = %297
  %303 = load i32, ptr %4, align 4, !tbaa !5
  %304 = add nsw i32 %303, -1
  store i32 %304, ptr %4, align 4, !tbaa !5
  %305 = icmp slt i32 %304, 1
  br i1 %305, label %306, label %307

306:                                              ; preds = %302
  br label %603

307:                                              ; preds = %302
  %308 = load ptr, ptr %5, align 8, !tbaa !9
  %309 = getelementptr inbounds ptr, ptr %308, i32 1
  store ptr %309, ptr %5, align 8, !tbaa !9
  %310 = load ptr, ptr %309, align 8, !tbaa !9
  store ptr %310, ptr %26, align 8, !tbaa !9
  br label %624

311:                                              ; preds = %297
  %312 = load ptr, ptr %5, align 8, !tbaa !9
  %313 = load ptr, ptr %312, align 8, !tbaa !9
  %314 = call i32 @strcmp(ptr noundef %313, ptr noundef @.str.22) #10
  %315 = icmp ne i32 %314, 0
  br i1 %315, label %338, label %316

316:                                              ; preds = %311
  %317 = load i32, ptr %4, align 4, !tbaa !5
  %318 = add nsw i32 %317, -1
  store i32 %318, ptr %4, align 4, !tbaa !5
  %319 = icmp slt i32 %318, 1
  br i1 %319, label %320, label %321

320:                                              ; preds = %316
  br label %603

321:                                              ; preds = %316
  %322 = load ptr, ptr %5, align 8, !tbaa !9
  %323 = getelementptr inbounds ptr, ptr %322, i32 1
  store ptr %323, ptr %5, align 8, !tbaa !9
  %324 = load ptr, ptr %323, align 8, !tbaa !9
  store ptr %324, ptr %8, align 8, !tbaa !9
  %325 = load ptr, ptr %8, align 8, !tbaa !9
  %326 = call i64 @strlen(ptr noundef %325) #10
  %327 = icmp ugt i64 %326, 8191
  br i1 %327, label %328, label %332

328:                                              ; preds = %321
  %329 = load ptr, ptr @stderr, align 8, !tbaa !9
  %330 = load ptr, ptr %7, align 8, !tbaa !9
  %331 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %329, ptr noundef @.str.23, ptr noundef %330) #9
  br label %1004

332:                                              ; preds = %321
  %333 = getelementptr inbounds [8192 x i8], ptr %28, i64 0, i64 0
  %334 = load ptr, ptr %8, align 8, !tbaa !9
  %335 = call ptr @strncpy(ptr noundef %333, ptr noundef %334, i64 noundef 8192) #9
  %336 = load ptr, ptr %8, align 8, !tbaa !9
  %337 = call i64 @strlen(ptr noundef %336) #10
  store i64 %337, ptr %29, align 8, !tbaa !11
  br label %623

338:                                              ; preds = %311
  %339 = load ptr, ptr %5, align 8, !tbaa !9
  %340 = load ptr, ptr %339, align 8, !tbaa !9
  %341 = call i32 @strcmp(ptr noundef %340, ptr noundef @.str.24) #10
  %342 = icmp ne i32 %341, 0
  br i1 %342, label %371, label %343

343:                                              ; preds = %338
  %344 = load i32, ptr %4, align 4, !tbaa !5
  %345 = add nsw i32 %344, -1
  store i32 %345, ptr %4, align 4, !tbaa !5
  %346 = icmp slt i32 %345, 1
  br i1 %346, label %347, label %348

347:                                              ; preds = %343
  br label %603

348:                                              ; preds = %343
  %349 = load ptr, ptr %5, align 8, !tbaa !9
  %350 = getelementptr inbounds ptr, ptr %349, i32 1
  store ptr %350, ptr %5, align 8, !tbaa !9
  %351 = load ptr, ptr %350, align 8, !tbaa !9
  store ptr %351, ptr %8, align 8, !tbaa !9
  %352 = load ptr, ptr %8, align 8, !tbaa !9
  %353 = call i64 @strlen(ptr noundef %352) #10
  %354 = icmp ugt i64 %353, 16382
  br i1 %354, label %355, label %359

355:                                              ; preds = %348
  %356 = load ptr, ptr @stderr, align 8, !tbaa !9
  %357 = load ptr, ptr %7, align 8, !tbaa !9
  %358 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %356, ptr noundef @.str.25, ptr noundef %357) #9
  br label %1004

359:                                              ; preds = %348
  %360 = load ptr, ptr %8, align 8, !tbaa !9
  %361 = load ptr, ptr %8, align 8, !tbaa !9
  %362 = call i64 @strlen(ptr noundef %361) #10
  %363 = getelementptr inbounds [8192 x i8], ptr %28, i64 0, i64 0
  %364 = call i32 @hex_to_bytes(ptr noundef %360, i64 noundef %362, ptr noundef %363, ptr noundef %29)
  %365 = icmp ne i32 %364, 1
  br i1 %365, label %366, label %370

366:                                              ; preds = %359
  %367 = load ptr, ptr @stderr, align 8, !tbaa !9
  %368 = load ptr, ptr %7, align 8, !tbaa !9
  %369 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %367, ptr noundef @.str.26, ptr noundef %368) #9
  br label %1004

370:                                              ; preds = %359
  br label %622

371:                                              ; preds = %338
  %372 = load ptr, ptr %5, align 8, !tbaa !9
  %373 = load ptr, ptr %372, align 8, !tbaa !9
  %374 = call i32 @strcmp(ptr noundef %373, ptr noundef @.str.27) #10
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %377, label %376

376:                                              ; preds = %371
  store i32 1, ptr %40, align 4, !tbaa !5
  br label %621

377:                                              ; preds = %371
  %378 = load ptr, ptr %5, align 8, !tbaa !9
  %379 = load ptr, ptr %378, align 8, !tbaa !9
  %380 = call i32 @strcmp(ptr noundef %379, ptr noundef @.str.28) #10
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %383, label %382

382:                                              ; preds = %377
  store i32 1, ptr %41, align 4, !tbaa !5
  br label %620

383:                                              ; preds = %377
  %384 = load ptr, ptr %5, align 8, !tbaa !9
  %385 = load ptr, ptr %384, align 8, !tbaa !9
  %386 = call i32 @strcmp(ptr noundef %385, ptr noundef @.str.29) #10
  %387 = icmp ne i32 %386, 0
  br i1 %387, label %406, label %388

388:                                              ; preds = %383
  %389 = load i32, ptr %4, align 4, !tbaa !5
  %390 = add nsw i32 %389, -1
  store i32 %390, ptr %4, align 4, !tbaa !5
  %391 = icmp slt i32 %390, 1
  br i1 %391, label %392, label %393

392:                                              ; preds = %388
  br label %603

393:                                              ; preds = %388
  %394 = load ptr, ptr %5, align 8, !tbaa !9
  %395 = getelementptr inbounds ptr, ptr %394, i32 1
  store ptr %395, ptr %5, align 8, !tbaa !9
  %396 = load ptr, ptr %395, align 8, !tbaa !9
  store ptr %396, ptr %8, align 8, !tbaa !9
  %397 = load ptr, ptr %8, align 8, !tbaa !9
  %398 = call i32 @ext_key_usage_set(ptr noundef %42, ptr noundef %397)
  %399 = icmp ne i32 %398, 1
  br i1 %399, label %400, label %405

400:                                              ; preds = %393
  %401 = load ptr, ptr @stderr, align 8, !tbaa !9
  %402 = load ptr, ptr %7, align 8, !tbaa !9
  %403 = load ptr, ptr %8, align 8, !tbaa !9
  %404 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %401, ptr noundef @.str.30, ptr noundef %402, ptr noundef %403) #9
  br label %1004

405:                                              ; preds = %393
  br label %619

406:                                              ; preds = %383
  %407 = load ptr, ptr %5, align 8, !tbaa !9
  %408 = load ptr, ptr %407, align 8, !tbaa !9
  %409 = call i32 @strcmp(ptr noundef %408, ptr noundef @.str.31) #10
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %431, label %411

411:                                              ; preds = %406
  %412 = load i32, ptr %4, align 4, !tbaa !5
  %413 = add nsw i32 %412, -1
  store i32 %413, ptr %4, align 4, !tbaa !5
  %414 = icmp slt i32 %413, 1
  br i1 %414, label %415, label %416

415:                                              ; preds = %411
  br label %603

416:                                              ; preds = %411
  %417 = load ptr, ptr %5, align 8, !tbaa !9
  %418 = getelementptr inbounds ptr, ptr %417, i32 1
  store ptr %418, ptr %5, align 8, !tbaa !9
  %419 = load ptr, ptr %418, align 8, !tbaa !9
  store ptr %419, ptr %8, align 8, !tbaa !9
  %420 = getelementptr inbounds [2048 x i8], ptr %43, i64 0, i64 0
  %421 = load ptr, ptr %8, align 8, !tbaa !9
  %422 = load ptr, ptr %8, align 8, !tbaa !9
  %423 = call i64 @strlen(ptr noundef %422) #10
  %424 = call i32 @x509_general_names_add_general_name(ptr noundef %420, ptr noundef %44, i64 noundef 2048, i32 noundef 2, ptr noundef %421, i64 noundef %423)
  %425 = icmp ne i32 %424, 1
  br i1 %425, label %426, label %430

426:                                              ; preds = %416
  %427 = load ptr, ptr @stderr, align 8, !tbaa !9
  %428 = load ptr, ptr %7, align 8, !tbaa !9
  %429 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %427, ptr noundef @.str.32, ptr noundef %428) #9
  br label %1004

430:                                              ; preds = %416
  br label %618

431:                                              ; preds = %406
  %432 = load ptr, ptr %5, align 8, !tbaa !9
  %433 = load ptr, ptr %432, align 8, !tbaa !9
  %434 = call i32 @strcmp(ptr noundef %433, ptr noundef @.str.33) #10
  %435 = icmp ne i32 %434, 0
  br i1 %435, label %456, label %436

436:                                              ; preds = %431
  %437 = load i32, ptr %4, align 4, !tbaa !5
  %438 = add nsw i32 %437, -1
  store i32 %438, ptr %4, align 4, !tbaa !5
  %439 = icmp slt i32 %438, 1
  br i1 %439, label %440, label %441

440:                                              ; preds = %436
  br label %603

441:                                              ; preds = %436
  %442 = load ptr, ptr %5, align 8, !tbaa !9
  %443 = getelementptr inbounds ptr, ptr %442, i32 1
  store ptr %443, ptr %5, align 8, !tbaa !9
  %444 = load ptr, ptr %443, align 8, !tbaa !9
  store ptr %444, ptr %8, align 8, !tbaa !9
  %445 = getelementptr inbounds [512 x i8], ptr %45, i64 0, i64 0
  %446 = load ptr, ptr %8, align 8, !tbaa !9
  %447 = load ptr, ptr %8, align 8, !tbaa !9
  %448 = call i64 @strlen(ptr noundef %447) #10
  %449 = call i32 @x509_general_names_add_general_name(ptr noundef %445, ptr noundef %46, i64 noundef 512, i32 noundef 2, ptr noundef %446, i64 noundef %448)
  %450 = icmp ne i32 %449, 1
  br i1 %450, label %451, label %455

451:                                              ; preds = %441
  %452 = load ptr, ptr @stderr, align 8, !tbaa !9
  %453 = load ptr, ptr %7, align 8, !tbaa !9
  %454 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %452, ptr noundef @.str.34, ptr noundef %453) #9
  br label %1004

455:                                              ; preds = %441
  br label %617

456:                                              ; preds = %431
  %457 = load ptr, ptr %5, align 8, !tbaa !9
  %458 = load ptr, ptr %457, align 8, !tbaa !9
  %459 = call i32 @strcmp(ptr noundef %458, ptr noundef @.str.35) #10
  %460 = icmp ne i32 %459, 0
  br i1 %460, label %462, label %461

461:                                              ; preds = %456
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %616

462:                                              ; preds = %456
  %463 = load ptr, ptr %5, align 8, !tbaa !9
  %464 = load ptr, ptr %463, align 8, !tbaa !9
  %465 = call i32 @strcmp(ptr noundef %464, ptr noundef @.str.36) #10
  %466 = icmp ne i32 %465, 0
  br i1 %466, label %484, label %467

467:                                              ; preds = %462
  %468 = load i32, ptr %4, align 4, !tbaa !5
  %469 = add nsw i32 %468, -1
  store i32 %469, ptr %4, align 4, !tbaa !5
  %470 = icmp slt i32 %469, 1
  br i1 %470, label %471, label %472

471:                                              ; preds = %467
  br label %603

472:                                              ; preds = %467
  %473 = load ptr, ptr %5, align 8, !tbaa !9
  %474 = getelementptr inbounds ptr, ptr %473, i32 1
  store ptr %474, ptr %5, align 8, !tbaa !9
  %475 = load ptr, ptr %474, align 8, !tbaa !9
  %476 = call i32 @atoi(ptr noundef %475) #10
  store i32 %476, ptr %48, align 4, !tbaa !5
  %477 = load i32, ptr %48, align 4, !tbaa !5
  %478 = icmp slt i32 %477, 0
  br i1 %478, label %479, label %483

479:                                              ; preds = %472
  %480 = load ptr, ptr @stderr, align 8, !tbaa !9
  %481 = load ptr, ptr %7, align 8, !tbaa !9
  %482 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %480, ptr noundef @.str.37, ptr noundef %481) #9
  br label %1004

483:                                              ; preds = %472
  br label %615

484:                                              ; preds = %462
  %485 = load ptr, ptr %5, align 8, !tbaa !9
  %486 = load ptr, ptr %485, align 8, !tbaa !9
  %487 = call i32 @strcmp(ptr noundef %486, ptr noundef @.str.38) #10
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %519, label %489

489:                                              ; preds = %484
  %490 = load i32, ptr %4, align 4, !tbaa !5
  %491 = add nsw i32 %490, -1
  store i32 %491, ptr %4, align 4, !tbaa !5
  %492 = icmp slt i32 %491, 1
  br i1 %492, label %493, label %494

493:                                              ; preds = %489
  br label %603

494:                                              ; preds = %489
  %495 = load ptr, ptr %5, align 8, !tbaa !9
  %496 = getelementptr inbounds ptr, ptr %495, i32 1
  store ptr %496, ptr %5, align 8, !tbaa !9
  %497 = load ptr, ptr %496, align 8, !tbaa !9
  store ptr %497, ptr %8, align 8, !tbaa !9
  %498 = load ptr, ptr %8, align 8, !tbaa !9
  %499 = call i32 @x509_key_purpose_from_name(ptr noundef %498)
  %500 = icmp sle i32 %499, 0
  br i1 %500, label %501, label %506

501:                                              ; preds = %494
  %502 = load ptr, ptr @stderr, align 8, !tbaa !9
  %503 = load ptr, ptr %7, align 8, !tbaa !9
  %504 = load ptr, ptr %8, align 8, !tbaa !9
  %505 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %502, ptr noundef @.str.39, ptr noundef %503, ptr noundef %504) #9
  br label %1004

506:                                              ; preds = %494
  %507 = load i64, ptr %50, align 8, !tbaa !11
  %508 = icmp uge i64 %507, 12
  br i1 %508, label %509, label %513

509:                                              ; preds = %506
  %510 = load ptr, ptr @stderr, align 8, !tbaa !9
  %511 = load ptr, ptr %7, align 8, !tbaa !9
  %512 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %510, ptr noundef @.str.40, ptr noundef %511) #9
  br label %1004

513:                                              ; preds = %506
  %514 = load ptr, ptr %8, align 8, !tbaa !9
  %515 = call i32 @x509_key_purpose_from_name(ptr noundef %514)
  %516 = load i64, ptr %50, align 8, !tbaa !11
  %517 = add i64 %516, 1
  store i64 %517, ptr %50, align 8, !tbaa !11
  %518 = getelementptr inbounds [12 x i32], ptr %49, i64 0, i64 %516
  store i32 %515, ptr %518, align 4, !tbaa !5
  br label %614

519:                                              ; preds = %484
  %520 = load ptr, ptr %5, align 8, !tbaa !9
  %521 = load ptr, ptr %520, align 8, !tbaa !9
  %522 = call i32 @strcmp(ptr noundef %521, ptr noundef @.str.41) #10
  %523 = icmp ne i32 %522, 0
  br i1 %523, label %533, label %524

524:                                              ; preds = %519
  %525 = load i32, ptr %4, align 4, !tbaa !5
  %526 = add nsw i32 %525, -1
  store i32 %526, ptr %4, align 4, !tbaa !5
  %527 = icmp slt i32 %526, 1
  br i1 %527, label %528, label %529

528:                                              ; preds = %524
  br label %603

529:                                              ; preds = %524
  %530 = load ptr, ptr %5, align 8, !tbaa !9
  %531 = getelementptr inbounds ptr, ptr %530, i32 1
  store ptr %531, ptr %5, align 8, !tbaa !9
  %532 = load ptr, ptr %531, align 8, !tbaa !9
  store ptr %532, ptr %51, align 8, !tbaa !9
  br label %613

533:                                              ; preds = %519
  %534 = load ptr, ptr %5, align 8, !tbaa !9
  %535 = load ptr, ptr %534, align 8, !tbaa !9
  %536 = call i32 @strcmp(ptr noundef %535, ptr noundef @.str.42) #10
  %537 = icmp ne i32 %536, 0
  br i1 %537, label %547, label %538

538:                                              ; preds = %533
  %539 = load i32, ptr %4, align 4, !tbaa !5
  %540 = add nsw i32 %539, -1
  store i32 %540, ptr %4, align 4, !tbaa !5
  %541 = icmp slt i32 %540, 1
  br i1 %541, label %542, label %543

542:                                              ; preds = %538
  br label %603

543:                                              ; preds = %538
  %544 = load ptr, ptr %5, align 8, !tbaa !9
  %545 = getelementptr inbounds ptr, ptr %544, i32 1
  store ptr %545, ptr %5, align 8, !tbaa !9
  %546 = load ptr, ptr %545, align 8, !tbaa !9
  store ptr %546, ptr %52, align 8, !tbaa !9
  br label %612

547:                                              ; preds = %533
  %548 = load ptr, ptr %5, align 8, !tbaa !9
  %549 = load ptr, ptr %548, align 8, !tbaa !9
  %550 = call i32 @strcmp(ptr noundef %549, ptr noundef @.str.43) #10
  %551 = icmp ne i32 %550, 0
  br i1 %551, label %569, label %552

552:                                              ; preds = %547
  %553 = load i32, ptr %4, align 4, !tbaa !5
  %554 = add nsw i32 %553, -1
  store i32 %554, ptr %4, align 4, !tbaa !5
  %555 = icmp slt i32 %554, 1
  br i1 %555, label %556, label %557

556:                                              ; preds = %552
  br label %603

557:                                              ; preds = %552
  %558 = load ptr, ptr %5, align 8, !tbaa !9
  %559 = getelementptr inbounds ptr, ptr %558, i32 1
  store ptr %559, ptr %5, align 8, !tbaa !9
  %560 = load ptr, ptr %559, align 8, !tbaa !9
  %561 = call i32 @atoi(ptr noundef %560) #10
  store i32 %561, ptr %53, align 4, !tbaa !5
  %562 = load i32, ptr %53, align 4, !tbaa !5
  %563 = icmp slt i32 %562, 0
  br i1 %563, label %564, label %568

564:                                              ; preds = %557
  %565 = load ptr, ptr @stderr, align 8, !tbaa !9
  %566 = load ptr, ptr %7, align 8, !tbaa !9
  %567 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %565, ptr noundef @.str.44, ptr noundef %566) #9
  br label %1004

568:                                              ; preds = %557
  br label %611

569:                                              ; preds = %547
  %570 = load ptr, ptr %5, align 8, !tbaa !9
  %571 = load ptr, ptr %570, align 8, !tbaa !9
  %572 = call i32 @strcmp(ptr noundef %571, ptr noundef @.str.45) #10
  %573 = icmp ne i32 %572, 0
  br i1 %573, label %583, label %574

574:                                              ; preds = %569
  %575 = load i32, ptr %4, align 4, !tbaa !5
  %576 = add nsw i32 %575, -1
  store i32 %576, ptr %4, align 4, !tbaa !5
  %577 = icmp slt i32 %576, 1
  br i1 %577, label %578, label %579

578:                                              ; preds = %574
  br label %603

579:                                              ; preds = %574
  %580 = load ptr, ptr %5, align 8, !tbaa !9
  %581 = getelementptr inbounds ptr, ptr %580, i32 1
  store ptr %581, ptr %5, align 8, !tbaa !9
  %582 = load ptr, ptr %581, align 8, !tbaa !9
  store ptr %582, ptr %54, align 8, !tbaa !9
  br label %610

583:                                              ; preds = %569
  %584 = load ptr, ptr %5, align 8, !tbaa !9
  %585 = load ptr, ptr %584, align 8, !tbaa !9
  %586 = call i32 @strcmp(ptr noundef %585, ptr noundef @.str.46) #10
  %587 = icmp ne i32 %586, 0
  br i1 %587, label %597, label %588

588:                                              ; preds = %583
  %589 = load i32, ptr %4, align 4, !tbaa !5
  %590 = add nsw i32 %589, -1
  store i32 %590, ptr %4, align 4, !tbaa !5
  %591 = icmp slt i32 %590, 1
  br i1 %591, label %592, label %593

592:                                              ; preds = %588
  br label %603

593:                                              ; preds = %588
  %594 = load ptr, ptr %5, align 8, !tbaa !9
  %595 = getelementptr inbounds ptr, ptr %594, i32 1
  store ptr %595, ptr %5, align 8, !tbaa !9
  %596 = load ptr, ptr %595, align 8, !tbaa !9
  store ptr %596, ptr %55, align 8, !tbaa !9
  br label %609

597:                                              ; preds = %583
  %598 = load ptr, ptr @stderr, align 8, !tbaa !9
  %599 = load ptr, ptr %7, align 8, !tbaa !9
  %600 = load ptr, ptr %5, align 8, !tbaa !9
  %601 = load ptr, ptr %600, align 8, !tbaa !9
  %602 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %598, ptr noundef @.str.47, ptr noundef %599, ptr noundef %601) #9
  br label %1004

603:                                              ; preds = %592, %578, %556, %542, %528, %493, %471, %440, %415, %392, %347, %320, %306, %280, %257, %235, %209, %183, %150, %123, %97
  %604 = load ptr, ptr @stderr, align 8, !tbaa !9
  %605 = load ptr, ptr %7, align 8, !tbaa !9
  %606 = load ptr, ptr %5, align 8, !tbaa !9
  %607 = load ptr, ptr %606, align 8, !tbaa !9
  %608 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %604, ptr noundef @.str.48, ptr noundef %605, ptr noundef %607) #9
  br label %1004

609:                                              ; preds = %593
  br label %610

610:                                              ; preds = %609, %579
  br label %611

611:                                              ; preds = %610, %568
  br label %612

612:                                              ; preds = %611, %543
  br label %613

613:                                              ; preds = %612, %529
  br label %614

614:                                              ; preds = %613, %513
  br label %615

615:                                              ; preds = %614, %483
  br label %616

616:                                              ; preds = %615, %461
  br label %617

617:                                              ; preds = %616, %455
  br label %618

618:                                              ; preds = %617, %430
  br label %619

619:                                              ; preds = %618, %405
  br label %620

620:                                              ; preds = %619, %382
  br label %621

621:                                              ; preds = %620, %376
  br label %622

622:                                              ; preds = %621, %370
  br label %623

623:                                              ; preds = %622, %332
  br label %624

624:                                              ; preds = %623, %307
  br label %625

625:                                              ; preds = %624, %296
  br label %626

626:                                              ; preds = %625, %270
  br label %627

627:                                              ; preds = %626, %247
  br label %628

628:                                              ; preds = %627, %225
  br label %629

629:                                              ; preds = %628, %199
  br label %630

630:                                              ; preds = %629, %173
  br label %631

631:                                              ; preds = %630, %135
  br label %632

632:                                              ; preds = %631, %113
  br label %633

633:                                              ; preds = %632
  %634 = load i32, ptr %4, align 4, !tbaa !5
  %635 = add nsw i32 %634, -1
  store i32 %635, ptr %4, align 4, !tbaa !5
  %636 = load ptr, ptr %5, align 8, !tbaa !9
  %637 = getelementptr inbounds ptr, ptr %636, i32 1
  store ptr %637, ptr %5, align 8, !tbaa !9
  br label %74, !llvm.loop !13

638:                                              ; preds = %74
  %639 = load i32, ptr %17, align 4, !tbaa !5
  %640 = icmp ne i32 %639, 0
  br i1 %640, label %648, label %641

641:                                              ; preds = %638
  %642 = load ptr, ptr @stderr, align 8, !tbaa !9
  %643 = load ptr, ptr %7, align 8, !tbaa !9
  %644 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %642, ptr noundef @.str.49, ptr noundef %643) #9
  %645 = load ptr, ptr %7, align 8, !tbaa !9
  %646 = load ptr, ptr @options, align 8, !tbaa !9
  %647 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %645, ptr noundef %646)
  br label %1004

648:                                              ; preds = %638
  %649 = load ptr, ptr %23, align 8, !tbaa !9
  %650 = icmp ne ptr %649, null
  br i1 %650, label %658, label %651

651:                                              ; preds = %648
  %652 = load ptr, ptr @stderr, align 8, !tbaa !9
  %653 = load ptr, ptr %7, align 8, !tbaa !9
  %654 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %652, ptr noundef @.str.50, ptr noundef %653) #9
  %655 = load ptr, ptr %7, align 8, !tbaa !9
  %656 = load ptr, ptr @options, align 8, !tbaa !9
  %657 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %655, ptr noundef %656)
  br label %1004

658:                                              ; preds = %648
  %659 = load ptr, ptr %25, align 8, !tbaa !9
  %660 = icmp ne ptr %659, null
  br i1 %660, label %668, label %661

661:                                              ; preds = %658
  %662 = load ptr, ptr @stderr, align 8, !tbaa !9
  %663 = load ptr, ptr %7, align 8, !tbaa !9
  %664 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %662, ptr noundef @.str.51, ptr noundef %663) #9
  %665 = load ptr, ptr %7, align 8, !tbaa !9
  %666 = load ptr, ptr @options, align 8, !tbaa !9
  %667 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %665, ptr noundef %666)
  br label %1004

668:                                              ; preds = %658
  %669 = load ptr, ptr %26, align 8, !tbaa !9
  %670 = icmp ne ptr %669, null
  br i1 %670, label %678, label %671

671:                                              ; preds = %668
  %672 = load ptr, ptr @stderr, align 8, !tbaa !9
  %673 = load ptr, ptr %7, align 8, !tbaa !9
  %674 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %672, ptr noundef @.str.52, ptr noundef %673) #9
  %675 = load ptr, ptr %7, align 8, !tbaa !9
  %676 = load ptr, ptr @options, align 8, !tbaa !9
  %677 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %675, ptr noundef %676)
  br label %1004

678:                                              ; preds = %668
  %679 = getelementptr inbounds [512 x i8], ptr %11, i64 0, i64 0
  %680 = load ptr, ptr %10, align 8, !tbaa !9
  %681 = call i32 @x509_req_from_pem(ptr noundef %679, ptr noundef %12, i64 noundef 512, ptr noundef %680)
  %682 = icmp ne i32 %681, 1
  br i1 %682, label %683, label %687

683:                                              ; preds = %678
  %684 = load ptr, ptr @stderr, align 8, !tbaa !9
  %685 = load ptr, ptr %7, align 8, !tbaa !9
  %686 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %684, ptr noundef @.str.53, ptr noundef %685) #9
  br label %1004

687:                                              ; preds = %678
  %688 = load i64, ptr %14, align 8, !tbaa !11
  %689 = icmp ne i64 %688, 0
  br i1 %689, label %693, label %690

690:                                              ; preds = %687
  %691 = getelementptr inbounds [8192 x i8], ptr %13, i64 0, i64 0
  %692 = call ptr @strcpy(ptr noundef %691, ptr noundef @.str.54) #9
  store i64 16, ptr %14, align 8, !tbaa !11
  br label %693

693:                                              ; preds = %690, %687
  %694 = getelementptr inbounds [512 x i8], ptr %11, i64 0, i64 0
  %695 = load i64, ptr %12, align 8, !tbaa !11
  %696 = getelementptr inbounds [8192 x i8], ptr %13, i64 0, i64 0
  %697 = load i64, ptr %14, align 8, !tbaa !11
  %698 = call i32 @x509_req_verify(ptr noundef %694, i64 noundef %695, ptr noundef %696, i64 noundef %697)
  %699 = icmp ne i32 %698, 1
  br i1 %699, label %700, label %704

700:                                              ; preds = %693
  %701 = load ptr, ptr @stderr, align 8, !tbaa !9
  %702 = load ptr, ptr %7, align 8, !tbaa !9
  %703 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %701, ptr noundef @.str.55, ptr noundef %702) #9
  br label %1004

704:                                              ; preds = %693
  %705 = getelementptr inbounds [512 x i8], ptr %11, i64 0, i64 0
  %706 = load i64, ptr %12, align 8, !tbaa !11
  %707 = call i32 @x509_req_get_details(ptr noundef %705, i64 noundef %706, ptr noundef null, ptr noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null)
  %708 = icmp ne i32 %707, 1
  br i1 %708, label %709, label %713

709:                                              ; preds = %704
  %710 = load ptr, ptr @stderr, align 8, !tbaa !9
  %711 = load ptr, ptr %7, align 8, !tbaa !9
  %712 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %710, ptr noundef @.str.53, ptr noundef %711) #9
  br label %1004

713:                                              ; preds = %704
  %714 = load ptr, ptr %23, align 8, !tbaa !9
  %715 = load i64, ptr %24, align 8, !tbaa !11
  %716 = call i32 @x509_cert_get_subject(ptr noundef %714, i64 noundef %715, ptr noundef %30, ptr noundef %31)
  %717 = icmp ne i32 %716, 1
  br i1 %717, label %723, label %718

718:                                              ; preds = %713
  %719 = load ptr, ptr %23, align 8, !tbaa !9
  %720 = load i64, ptr %24, align 8, !tbaa !11
  %721 = call i32 @x509_cert_get_subject_public_key(ptr noundef %719, i64 noundef %720, ptr noundef %32)
  %722 = icmp ne i32 %721, 1
  br i1 %722, label %723, label %727

723:                                              ; preds = %718, %713
  %724 = load ptr, ptr @stderr, align 8, !tbaa !9
  %725 = load ptr, ptr %7, align 8, !tbaa !9
  %726 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %724, ptr noundef @.str.56, ptr noundef %725) #9
  br label %1004

727:                                              ; preds = %718
  %728 = load ptr, ptr %26, align 8, !tbaa !9
  %729 = load ptr, ptr %25, align 8, !tbaa !9
  %730 = call i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef %27, ptr noundef %728, ptr noundef %729)
  %731 = icmp ne i32 %730, 1
  br i1 %731, label %732, label %736

732:                                              ; preds = %727
  %733 = load ptr, ptr @stderr, align 8, !tbaa !9
  %734 = load ptr, ptr %7, align 8, !tbaa !9
  %735 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %733, ptr noundef @.str.57, ptr noundef %734) #9
  br label %1004

736:                                              ; preds = %727
  %737 = call i32 @sm2_public_key_equ(ptr noundef %27, ptr noundef %32)
  %738 = icmp ne i32 %737, 1
  br i1 %738, label %739, label %743

739:                                              ; preds = %736
  %740 = load ptr, ptr @stderr, align 8, !tbaa !9
  %741 = load ptr, ptr %7, align 8, !tbaa !9
  %742 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %740, ptr noundef @.str.58, ptr noundef %741) #9
  br label %1004

743:                                              ; preds = %736
  %744 = load i64, ptr %29, align 8, !tbaa !11
  %745 = icmp ne i64 %744, 0
  br i1 %745, label %749, label %746

746:                                              ; preds = %743
  %747 = getelementptr inbounds [8192 x i8], ptr %28, i64 0, i64 0
  %748 = call ptr @strcpy(ptr noundef %747, ptr noundef @.str.54) #9
  store i64 16, ptr %29, align 8, !tbaa !11
  br label %749

749:                                              ; preds = %746, %743
  %750 = getelementptr inbounds [20 x i8], ptr %15, i64 0, i64 0
  %751 = load i32, ptr %16, align 4, !tbaa !5
  %752 = sext i32 %751 to i64
  %753 = call i32 @rand_bytes(ptr noundef %750, i64 noundef %752)
  %754 = icmp ne i32 %753, 1
  br i1 %754, label %755, label %759

755:                                              ; preds = %749
  %756 = load ptr, ptr @stderr, align 8, !tbaa !9
  %757 = load ptr, ptr %7, align 8, !tbaa !9
  %758 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %756, ptr noundef @.str.59, ptr noundef %757) #9
  br label %1004

759:                                              ; preds = %749
  %760 = call i64 @time(ptr noundef %18) #9
  %761 = load i64, ptr %18, align 8, !tbaa !11
  %762 = load i32, ptr %17, align 4, !tbaa !5
  %763 = call i32 @x509_validity_add_days(ptr noundef %19, i64 noundef %761, i32 noundef %762)
  %764 = icmp ne i32 %763, 1
  br i1 %764, label %765, label %769

765:                                              ; preds = %759
  %766 = load ptr, ptr @stderr, align 8, !tbaa !9
  %767 = load ptr, ptr %7, align 8, !tbaa !9
  %768 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %766, ptr noundef @.str.60, ptr noundef %767) #9
  br label %1004

769:                                              ; preds = %759
  %770 = load i32, ptr %40, align 4, !tbaa !5
  %771 = icmp ne i32 %770, 0
  br i1 %771, label %772, label %781

772:                                              ; preds = %769
  %773 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %774 = call i32 @x509_exts_add_default_authority_key_identifier(ptr noundef %773, ptr noundef %39, i64 noundef 4096, ptr noundef %27)
  %775 = icmp ne i32 %774, 1
  br i1 %775, label %776, label %780

776:                                              ; preds = %772
  %777 = load ptr, ptr @stderr, align 8, !tbaa !9
  %778 = load ptr, ptr %7, align 8, !tbaa !9
  %779 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %777, ptr noundef @.str.61, ptr noundef %778) #9
  br label %1004

780:                                              ; preds = %772
  br label %781

781:                                              ; preds = %780, %769
  %782 = load i32, ptr %41, align 4, !tbaa !5
  %783 = icmp ne i32 %782, 0
  br i1 %783, label %784, label %793

784:                                              ; preds = %781
  %785 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %786 = call i32 @x509_exts_add_subject_key_identifier_ex(ptr noundef %785, ptr noundef %39, i64 noundef 4096, i32 noundef -1, ptr noundef %27)
  %787 = icmp ne i32 %786, 1
  br i1 %787, label %788, label %792

788:                                              ; preds = %784
  %789 = load ptr, ptr @stderr, align 8, !tbaa !9
  %790 = load ptr, ptr %7, align 8, !tbaa !9
  %791 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %789, ptr noundef @.str.62, ptr noundef %790) #9
  br label %1004

792:                                              ; preds = %784
  br label %793

793:                                              ; preds = %792, %781
  %794 = load i32, ptr %42, align 4, !tbaa !5
  %795 = icmp ne i32 %794, 0
  br i1 %795, label %796, label %806

796:                                              ; preds = %793
  %797 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %798 = load i32, ptr %42, align 4, !tbaa !5
  %799 = call i32 @x509_exts_add_key_usage(ptr noundef %797, ptr noundef %39, i64 noundef 4096, i32 noundef 1, i32 noundef %798)
  %800 = icmp ne i32 %799, 1
  br i1 %800, label %801, label %805

801:                                              ; preds = %796
  %802 = load ptr, ptr @stderr, align 8, !tbaa !9
  %803 = load ptr, ptr %7, align 8, !tbaa !9
  %804 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %802, ptr noundef @.str.63, ptr noundef %803) #9
  br label %1004

805:                                              ; preds = %796
  br label %806

806:                                              ; preds = %805, %793
  %807 = load i64, ptr %44, align 8, !tbaa !11
  %808 = icmp ne i64 %807, 0
  br i1 %808, label %809, label %820

809:                                              ; preds = %806
  %810 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %811 = getelementptr inbounds [2048 x i8], ptr %43, i64 0, i64 0
  %812 = load i64, ptr %44, align 8, !tbaa !11
  %813 = call i32 @x509_exts_add_subject_alt_name(ptr noundef %810, ptr noundef %39, i64 noundef 4096, i32 noundef -1, ptr noundef %811, i64 noundef %812)
  %814 = icmp ne i32 %813, 1
  br i1 %814, label %815, label %819

815:                                              ; preds = %809
  %816 = load ptr, ptr @stderr, align 8, !tbaa !9
  %817 = load ptr, ptr %7, align 8, !tbaa !9
  %818 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %816, ptr noundef @.str.64, ptr noundef %817) #9
  br label %1004

819:                                              ; preds = %809
  br label %820

820:                                              ; preds = %819, %806
  %821 = load i64, ptr %46, align 8, !tbaa !11
  %822 = icmp ne i64 %821, 0
  br i1 %822, label %823, label %834

823:                                              ; preds = %820
  %824 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %825 = getelementptr inbounds [512 x i8], ptr %45, i64 0, i64 0
  %826 = load i64, ptr %46, align 8, !tbaa !11
  %827 = call i32 @x509_exts_add_issuer_alt_name(ptr noundef %824, ptr noundef %39, i64 noundef 4096, i32 noundef -1, ptr noundef %825, i64 noundef %826)
  %828 = icmp ne i32 %827, 1
  br i1 %828, label %829, label %833

829:                                              ; preds = %823
  %830 = load ptr, ptr @stderr, align 8, !tbaa !9
  %831 = load ptr, ptr %7, align 8, !tbaa !9
  %832 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %830, ptr noundef @.str.65, ptr noundef %831) #9
  br label %1004

833:                                              ; preds = %823
  br label %834

834:                                              ; preds = %833, %820
  %835 = load i32, ptr %47, align 4, !tbaa !5
  %836 = icmp sge i32 %835, 0
  br i1 %836, label %840, label %837

837:                                              ; preds = %834
  %838 = load i32, ptr %48, align 4, !tbaa !5
  %839 = icmp sge i32 %838, 0
  br i1 %839, label %840, label %851

840:                                              ; preds = %837, %834
  %841 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %842 = load i32, ptr %47, align 4, !tbaa !5
  %843 = load i32, ptr %48, align 4, !tbaa !5
  %844 = call i32 @x509_exts_add_basic_constraints(ptr noundef %841, ptr noundef %39, i64 noundef 4096, i32 noundef 1, i32 noundef %842, i32 noundef %843)
  %845 = icmp ne i32 %844, 1
  br i1 %845, label %846, label %850

846:                                              ; preds = %840
  %847 = load ptr, ptr @stderr, align 8, !tbaa !9
  %848 = load ptr, ptr %7, align 8, !tbaa !9
  %849 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %847, ptr noundef @.str.66, ptr noundef %848) #9
  br label %1004

850:                                              ; preds = %840
  br label %851

851:                                              ; preds = %850, %837
  %852 = load i64, ptr %50, align 8, !tbaa !11
  %853 = icmp ne i64 %852, 0
  br i1 %853, label %854, label %865

854:                                              ; preds = %851
  %855 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %856 = getelementptr inbounds [12 x i32], ptr %49, i64 0, i64 0
  %857 = load i64, ptr %50, align 8, !tbaa !11
  %858 = call i32 @x509_exts_add_ext_key_usage(ptr noundef %855, ptr noundef %39, i64 noundef 4096, i32 noundef -1, ptr noundef %856, i64 noundef %857)
  %859 = icmp ne i32 %858, 1
  br i1 %859, label %860, label %864

860:                                              ; preds = %854
  %861 = load ptr, ptr @stderr, align 8, !tbaa !9
  %862 = load ptr, ptr %7, align 8, !tbaa !9
  %863 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %861, ptr noundef @.str.67, ptr noundef %862) #9
  br label %1004

864:                                              ; preds = %854
  br label %865

865:                                              ; preds = %864, %851
  %866 = load ptr, ptr %51, align 8, !tbaa !9
  %867 = icmp ne ptr %866, null
  br i1 %867, label %871, label %868

868:                                              ; preds = %865
  %869 = load ptr, ptr %52, align 8, !tbaa !9
  %870 = icmp ne ptr %869, null
  br i1 %870, label %871, label %898

871:                                              ; preds = %868, %865
  %872 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %873 = load ptr, ptr %51, align 8, !tbaa !9
  %874 = load ptr, ptr %51, align 8, !tbaa !9
  %875 = icmp ne ptr %874, null
  br i1 %875, label %876, label %879

876:                                              ; preds = %871
  %877 = load ptr, ptr %51, align 8, !tbaa !9
  %878 = call i64 @strlen(ptr noundef %877) #10
  br label %880

879:                                              ; preds = %871
  br label %880

880:                                              ; preds = %879, %876
  %881 = phi i64 [ %878, %876 ], [ 0, %879 ]
  %882 = load ptr, ptr %52, align 8, !tbaa !9
  %883 = load ptr, ptr %52, align 8, !tbaa !9
  %884 = icmp ne ptr %883, null
  br i1 %884, label %885, label %888

885:                                              ; preds = %880
  %886 = load ptr, ptr %52, align 8, !tbaa !9
  %887 = call i64 @strlen(ptr noundef %886) #10
  br label %889

888:                                              ; preds = %880
  br label %889

889:                                              ; preds = %888, %885
  %890 = phi i64 [ %887, %885 ], [ 0, %888 ]
  %891 = call i32 @x509_exts_add_crl_distribution_points(ptr noundef %872, ptr noundef %39, i64 noundef 4096, i32 noundef -1, ptr noundef %873, i64 noundef %881, ptr noundef %882, i64 noundef %890)
  %892 = icmp ne i32 %891, 1
  br i1 %892, label %893, label %897

893:                                              ; preds = %889
  %894 = load ptr, ptr @stderr, align 8, !tbaa !9
  %895 = load ptr, ptr %7, align 8, !tbaa !9
  %896 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %894, ptr noundef @.str.68, ptr noundef %895) #9
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %56, align 4
  br label %1035

897:                                              ; preds = %889
  br label %898

898:                                              ; preds = %897, %868
  %899 = load i32, ptr %53, align 4, !tbaa !5
  %900 = icmp sge i32 %899, 0
  br i1 %900, label %901, label %911

901:                                              ; preds = %898
  %902 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %903 = load i32, ptr %53, align 4, !tbaa !5
  %904 = call i32 @x509_exts_add_inhibit_any_policy(ptr noundef %902, ptr noundef %39, i64 noundef 4096, i32 noundef 1, i32 noundef %903)
  %905 = icmp ne i32 %904, 1
  br i1 %905, label %906, label %910

906:                                              ; preds = %901
  %907 = load ptr, ptr @stderr, align 8, !tbaa !9
  %908 = load ptr, ptr %7, align 8, !tbaa !9
  %909 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %907, ptr noundef @.str.69, ptr noundef %908) #9
  br label %1004

910:                                              ; preds = %901
  br label %911

911:                                              ; preds = %910, %898
  %912 = load ptr, ptr %54, align 8, !tbaa !9
  %913 = icmp ne ptr %912, null
  br i1 %913, label %917, label %914

914:                                              ; preds = %911
  %915 = load ptr, ptr %55, align 8, !tbaa !9
  %916 = icmp ne ptr %915, null
  br i1 %916, label %917, label %944

917:                                              ; preds = %914, %911
  %918 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %919 = load ptr, ptr %54, align 8, !tbaa !9
  %920 = load ptr, ptr %54, align 8, !tbaa !9
  %921 = icmp ne ptr %920, null
  br i1 %921, label %922, label %925

922:                                              ; preds = %917
  %923 = load ptr, ptr %54, align 8, !tbaa !9
  %924 = call i64 @strlen(ptr noundef %923) #10
  br label %926

925:                                              ; preds = %917
  br label %926

926:                                              ; preds = %925, %922
  %927 = phi i64 [ %924, %922 ], [ 0, %925 ]
  %928 = load ptr, ptr %55, align 8, !tbaa !9
  %929 = load ptr, ptr %55, align 8, !tbaa !9
  %930 = icmp ne ptr %929, null
  br i1 %930, label %931, label %934

931:                                              ; preds = %926
  %932 = load ptr, ptr %55, align 8, !tbaa !9
  %933 = call i64 @strlen(ptr noundef %932) #10
  br label %935

934:                                              ; preds = %926
  br label %935

935:                                              ; preds = %934, %931
  %936 = phi i64 [ %933, %931 ], [ 0, %934 ]
  %937 = call i32 @x509_exts_add_authority_info_access(ptr noundef %918, ptr noundef %39, i64 noundef 4096, i32 noundef 0, ptr noundef %919, i64 noundef %927, ptr noundef %928, i64 noundef %936)
  %938 = icmp ne i32 %937, 1
  br i1 %938, label %939, label %943

939:                                              ; preds = %935
  %940 = load ptr, ptr @stderr, align 8, !tbaa !9
  %941 = load ptr, ptr %7, align 8, !tbaa !9
  %942 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %940, ptr noundef @.str.70, ptr noundef %941) #9
  br label %1004

943:                                              ; preds = %935
  br label %944

944:                                              ; preds = %943, %914
  %945 = getelementptr inbounds [20 x i8], ptr %15, i64 0, i64 0
  %946 = load i32, ptr %16, align 4, !tbaa !5
  %947 = sext i32 %946 to i64
  %948 = load ptr, ptr %30, align 8, !tbaa !9
  %949 = load i64, ptr %31, align 8, !tbaa !11
  %950 = load i64, ptr %18, align 8, !tbaa !11
  %951 = load i64, ptr %19, align 8, !tbaa !11
  %952 = load ptr, ptr %20, align 8, !tbaa !9
  %953 = load i64, ptr %21, align 8, !tbaa !11
  %954 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %955 = load i64, ptr %39, align 8, !tbaa !11
  %956 = getelementptr inbounds [8192 x i8], ptr %28, i64 0, i64 0
  %957 = load i64, ptr %29, align 8, !tbaa !11
  %958 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef %945, i64 noundef %947, i32 noundef 16, ptr noundef %948, i64 noundef %949, i64 noundef %950, i64 noundef %951, ptr noundef %952, i64 noundef %953, ptr noundef %22, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef %954, i64 noundef %955, ptr noundef %27, ptr noundef %956, i64 noundef %957, ptr noundef null, ptr noundef %36)
  %959 = icmp ne i32 %958, 1
  br i1 %959, label %960, label %964

960:                                              ; preds = %944
  %961 = load ptr, ptr @stderr, align 8, !tbaa !9
  %962 = load ptr, ptr %7, align 8, !tbaa !9
  %963 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %961, ptr noundef @.str.71, ptr noundef %962) #9
  br label %1004

964:                                              ; preds = %944
  %965 = load i64, ptr %36, align 8, !tbaa !11
  %966 = call noalias ptr @malloc(i64 noundef %965) #12
  store ptr %966, ptr %35, align 8, !tbaa !9
  %967 = icmp ne ptr %966, null
  br i1 %967, label %972, label %968

968:                                              ; preds = %964
  %969 = load ptr, ptr @stderr, align 8, !tbaa !9
  %970 = load ptr, ptr %7, align 8, !tbaa !9
  %971 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %969, ptr noundef @.str.72, ptr noundef %970) #9
  br label %1004

972:                                              ; preds = %964
  %973 = load ptr, ptr %35, align 8, !tbaa !9
  store ptr %973, ptr %37, align 8, !tbaa !9
  store i64 0, ptr %36, align 8, !tbaa !11
  %974 = getelementptr inbounds [20 x i8], ptr %15, i64 0, i64 0
  %975 = load i32, ptr %16, align 4, !tbaa !5
  %976 = sext i32 %975 to i64
  %977 = load ptr, ptr %30, align 8, !tbaa !9
  %978 = load i64, ptr %31, align 8, !tbaa !11
  %979 = load i64, ptr %18, align 8, !tbaa !11
  %980 = load i64, ptr %19, align 8, !tbaa !11
  %981 = load ptr, ptr %20, align 8, !tbaa !9
  %982 = load i64, ptr %21, align 8, !tbaa !11
  %983 = getelementptr inbounds [4096 x i8], ptr %38, i64 0, i64 0
  %984 = load i64, ptr %39, align 8, !tbaa !11
  %985 = getelementptr inbounds [8192 x i8], ptr %28, i64 0, i64 0
  %986 = load i64, ptr %29, align 8, !tbaa !11
  %987 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef %974, i64 noundef %976, i32 noundef 16, ptr noundef %977, i64 noundef %978, i64 noundef %979, i64 noundef %980, ptr noundef %981, i64 noundef %982, ptr noundef %22, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef %983, i64 noundef %984, ptr noundef %27, ptr noundef %985, i64 noundef %986, ptr noundef %37, ptr noundef %36)
  %988 = icmp ne i32 %987, 1
  br i1 %988, label %989, label %993

989:                                              ; preds = %972
  %990 = load ptr, ptr @stderr, align 8, !tbaa !9
  %991 = load ptr, ptr %7, align 8, !tbaa !9
  %992 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %990, ptr noundef @.str.71, ptr noundef %991) #9
  br label %1004

993:                                              ; preds = %972
  %994 = load ptr, ptr %35, align 8, !tbaa !9
  %995 = load i64, ptr %36, align 8, !tbaa !11
  %996 = load ptr, ptr %34, align 8, !tbaa !9
  %997 = call i32 @x509_cert_to_pem(ptr noundef %994, i64 noundef %995, ptr noundef %996)
  %998 = icmp ne i32 %997, 1
  br i1 %998, label %999, label %1003

999:                                              ; preds = %993
  %1000 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1001 = load ptr, ptr %7, align 8, !tbaa !9
  %1002 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1000, ptr noundef @.str.73, ptr noundef %1001) #9
  br label %1004

1003:                                             ; preds = %993
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %1004

1004:                                             ; preds = %1003, %999, %989, %968, %960, %939, %906, %860, %846, %829, %815, %801, %788, %776, %765, %755, %739, %732, %723, %709, %700, %683, %671, %661, %651, %641, %603, %597, %564, %509, %501, %479, %451, %426, %400, %366, %355, %328, %288, %265, %243, %221, %191, %169, %158, %131, %105, %82
  call void @gmssl_secure_clear(ptr noundef %27, i64 noundef 128)
  %1005 = load ptr, ptr %35, align 8, !tbaa !9
  %1006 = icmp ne ptr %1005, null
  br i1 %1006, label %1007, label %1009

1007:                                             ; preds = %1004
  %1008 = load ptr, ptr %35, align 8, !tbaa !9
  call void @free(ptr noundef %1008) #9
  br label %1009

1009:                                             ; preds = %1007, %1004
  %1010 = load ptr, ptr %25, align 8, !tbaa !9
  %1011 = icmp ne ptr %1010, null
  br i1 %1011, label %1012, label %1015

1012:                                             ; preds = %1009
  %1013 = load ptr, ptr %25, align 8, !tbaa !9
  %1014 = call i32 @fclose(ptr noundef %1013)
  br label %1015

1015:                                             ; preds = %1012, %1009
  %1016 = load ptr, ptr %9, align 8, !tbaa !9
  %1017 = icmp ne ptr %1016, null
  br i1 %1017, label %1018, label %1024

1018:                                             ; preds = %1015
  %1019 = load ptr, ptr %10, align 8, !tbaa !9
  %1020 = icmp ne ptr %1019, null
  br i1 %1020, label %1021, label %1024

1021:                                             ; preds = %1018
  %1022 = load ptr, ptr %10, align 8, !tbaa !9
  %1023 = call i32 @fclose(ptr noundef %1022)
  br label %1024

1024:                                             ; preds = %1021, %1018, %1015
  %1025 = load ptr, ptr %33, align 8, !tbaa !9
  %1026 = icmp ne ptr %1025, null
  br i1 %1026, label %1027, label %1033

1027:                                             ; preds = %1024
  %1028 = load ptr, ptr %34, align 8, !tbaa !9
  %1029 = icmp ne ptr %1028, null
  br i1 %1029, label %1030, label %1033

1030:                                             ; preds = %1027
  %1031 = load ptr, ptr %34, align 8, !tbaa !9
  %1032 = call i32 @fclose(ptr noundef %1031)
  br label %1033

1033:                                             ; preds = %1030, %1027, %1024
  %1034 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %1034, ptr %3, align 4
  store i32 1, ptr %56, align 4
  br label %1035

1035:                                             ; preds = %1033, %893, %68
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 512, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 4096, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8192, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 20, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8192, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 512, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  %1036 = load i32, ptr %3, align 4
  ret i32 %1036
}

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

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

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

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) #3

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #6

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #4

; Function Attrs: nounwind
declare ptr @strncpy(ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @hex_to_bytes(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #5

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #7

declare i32 @x509_cert_new_from_file(ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i32 @ext_key_usage_set(ptr noundef, ptr noundef) #0

declare i32 @x509_general_names_add_general_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_key_purpose_from_name(ptr noundef) #5

declare i32 @x509_req_from_pem(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #5

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #3

declare i32 @x509_req_verify(ptr noundef, i64 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_req_get_details(ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @x509_cert_get_subject(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #5

declare i32 @x509_cert_get_subject_public_key(ptr noundef, i64 noundef, ptr noundef) #5

declare i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @sm2_public_key_equ(ptr noundef, ptr noundef) #5

declare i32 @rand_bytes(ptr noundef, i64 noundef) #5

; Function Attrs: nounwind
declare i64 @time(ptr noundef) #3

declare i32 @x509_validity_add_days(ptr noundef, i64 noundef, i32 noundef) #5

declare i32 @x509_exts_add_default_authority_key_identifier(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #5

declare i32 @x509_exts_add_subject_key_identifier_ex(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef) #5

declare i32 @x509_exts_add_key_usage(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) #5

declare i32 @x509_exts_add_subject_alt_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_exts_add_issuer_alt_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_exts_add_basic_constraints(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef) #5

declare i32 @x509_exts_add_ext_key_usage(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_exts_add_crl_distribution_points(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_exts_add_inhibit_any_policy(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) #5

declare i32 @x509_exts_add_authority_info_access(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #5

declare i32 @x509_cert_sign_to_der(i32 noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #8

declare i32 @x509_cert_to_pem(ptr noundef, i64 noundef, ptr noundef) #5

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) #5

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

declare i32 @fclose(ptr noundef) #5

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { nounwind willreturn memory(read) "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 = { "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 = { nounwind willreturn memory(none) "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 = { inlinehint nounwind willreturn memory(read) 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 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 #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { nounwind willreturn memory(none) }
attributes #12 = { nounwind allocsize(0) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}


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

%struct.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }

@stdin = external local_unnamed_addr global ptr, align 8
@stdout = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [14 x i8], align 1
@options = external hidden local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@usage = external hidden local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [31 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 2) i32 @reqsign_main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca [512 x i8], align 16
  %4 = alloca i64, align 8
  %5 = alloca [8192 x i8], align 16
  %6 = alloca i64, align 8
  %7 = alloca [20 x i8], align 16
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca %struct.SM2_KEY, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca %struct.SM2_KEY, align 8
  %16 = alloca [8192 x i8], align 16
  %17 = alloca i64, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca %struct.SM2_KEY, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca [4096 x i8], align 16
  %24 = alloca i64, align 8
  %25 = alloca i32, align 4
  %26 = alloca [2048 x i8], align 16
  %27 = alloca i64, align 8
  %28 = alloca [512 x i8], align 16
  %29 = alloca i64, align 8
  %30 = alloca [12 x i32], align 16
  %31 = load ptr, ptr %1, align 8, !tbaa !5
  %32 = load ptr, ptr @stdin, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %3) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #12
  call void @llvm.lifetime.start.p0(i64 8192, ptr nonnull %5) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(8192) %5, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #12
  store i64 0, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %7) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #12
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %12) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #12
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #12
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %15) #12
  call void @llvm.lifetime.start.p0(i64 8192, ptr nonnull %16) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(8192) %16, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #12
  store i64 0, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #12
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %20) #12
  %33 = load ptr, ptr @stdout, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #12
  store i64 0, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #12
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %23) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #12
  store i64 0, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #12
  store i32 0, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %26) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #12
  store i64 0, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %28) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #12
  store i64 0, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %30) #12
  %34 = icmp slt i32 %0, 2
  br i1 %34, label %35, label %.preheader

35:                                               ; preds = %2
  %36 = load ptr, ptr @stderr, align 8, !tbaa !5
  %37 = load ptr, ptr @options, align 8, !tbaa !5
  %38 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %36, ptr noundef nonnull @.str, ptr noundef %31, ptr noundef %37) #13
  br label %555

.preheader:                                       ; preds = %2, %335
  %.0887 = phi ptr [ %.1, %335 ], [ null, %2 ]
  %.0227886 = phi ptr [ %.1228, %335 ], [ null, %2 ]
  %.0229885 = phi i32 [ %.1230, %335 ], [ -1, %2 ]
  %.0231884 = phi ptr [ %.1232, %335 ], [ null, %2 ]
  %.0233883 = phi ptr [ %.1234, %335 ], [ null, %2 ]
  %.0235882 = phi i64 [ %.1236, %335 ], [ 0, %2 ]
  %.0237881 = phi i32 [ %.1238, %335 ], [ -1, %2 ]
  %.0239880 = phi i32 [ %.1240, %335 ], [ -1, %2 ]
  %.0241879 = phi i32 [ %.1242, %335 ], [ 0, %2 ]
  %.0243878 = phi i32 [ %.1244, %335 ], [ 0, %2 ]
  %.0246877 = phi ptr [ %.1247, %335 ], [ %33, %2 ]
  %.0248876 = phi ptr [ %.1249, %335 ], [ null, %2 ]
  %.0251875 = phi ptr [ %.1252, %335 ], [ null, %2 ]
  %.0253874 = phi ptr [ %.1254, %335 ], [ null, %2 ]
  %.0256873 = phi i32 [ %.1257, %335 ], [ 0, %2 ]
  %.0258872 = phi i32 [ %.1259, %335 ], [ 12, %2 ]
  %.0260871 = phi ptr [ %.1261, %335 ], [ %32, %2 ]
  %.0263870 = phi ptr [ %.1264, %335 ], [ null, %2 ]
  %.pn869 = phi ptr [ %.1269, %335 ], [ %1, %2 ]
  %.0270.in868 = phi i32 [ %.1271, %335 ], [ %0, %2 ]
  %.0268888 = getelementptr inbounds i8, ptr %.pn869, i64 8
  %.0270889 = add nsw i32 %.0270.in868, -1
  %39 = load ptr, ptr %.0268888, align 8, !tbaa !5
  %40 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.1) #14
  %.not345 = icmp eq i32 %40, 0
  br i1 %.not345, label %41, label %46

41:                                               ; preds = %.preheader
  %42 = load ptr, ptr @options, align 8, !tbaa !5
  %43 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %31, ptr noundef %42)
  %44 = load ptr, ptr @usage, align 8, !tbaa !5
  %45 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef %44)
  br label %542

46:                                               ; preds = %.preheader
  %47 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.4) #14
  %.not346 = icmp eq i32 %47, 0
  br i1 %.not346, label %48, label %61

48:                                               ; preds = %46
  %49 = icmp eq i32 %.0270.in868, 2
  br i1 %49, label %332, label %50

50:                                               ; preds = %48
  %51 = add nsw i32 %.0270.in868, -2
  %52 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %53 = load ptr, ptr %52, align 8, !tbaa !5
  %54 = call noalias ptr @fopen(ptr noundef %53, ptr noundef nonnull @.str.5)
  %.not347 = icmp eq ptr %54, null
  br i1 %.not347, label %55, label %335

55:                                               ; preds = %50
  %56 = load ptr, ptr @stderr, align 8, !tbaa !5
  %57 = tail call ptr @__errno_location() #15
  %58 = load i32, ptr %57, align 4, !tbaa !11
  %59 = call ptr @strerror(i32 noundef %58) #12
  %60 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef nonnull @.str.6, ptr noundef %31, ptr noundef %53, ptr noundef %59) #13
  br label %542

61:                                               ; preds = %46
  %62 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.7) #14
  %.not348 = icmp eq i32 %62, 0
  br i1 %.not348, label %63, label %77

63:                                               ; preds = %61
  %64 = add nsw i32 %.0270.in868, -2
  %65 = icmp eq i32 %.0270.in868, 2
  br i1 %65, label %332, label %66

66:                                               ; preds = %63
  %67 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %68 = load ptr, ptr %67, align 8, !tbaa !5
  %69 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %68) #14
  %70 = icmp ugt i64 %69, 8191
  br i1 %70, label %71, label %74

71:                                               ; preds = %66
  %72 = load ptr, ptr @stderr, align 8, !tbaa !5
  %73 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef nonnull @.str.8, ptr noundef %31) #13
  br label %542

74:                                               ; preds = %66
  %75 = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) %68, i64 noundef 8192) #12
  %76 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %68) #14
  store i64 %76, ptr %6, align 8, !tbaa !9
  br label %335

77:                                               ; preds = %61
  %78 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.9) #14
  %.not349 = icmp eq i32 %78, 0
  br i1 %.not349, label %79, label %95

79:                                               ; preds = %77
  %80 = add nsw i32 %.0270.in868, -2
  %81 = icmp eq i32 %.0270.in868, 2
  br i1 %81, label %332, label %82

82:                                               ; preds = %79
  %83 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %84 = load ptr, ptr %83, align 8, !tbaa !5
  %85 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %84) #14
  %86 = icmp ugt i64 %85, 16382
  br i1 %86, label %87, label %90

87:                                               ; preds = %82
  %88 = load ptr, ptr @stderr, align 8, !tbaa !5
  %89 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %88, ptr noundef nonnull @.str.10, ptr noundef %31) #13
  br label %542

90:                                               ; preds = %82
  %91 = call i32 @hex_to_bytes(ptr noundef %84, i64 noundef %85, ptr noundef nonnull %5, ptr noundef nonnull %6) #12
  %.not350 = icmp eq i32 %91, 1
  br i1 %.not350, label %335, label %92

92:                                               ; preds = %90
  %93 = load ptr, ptr @stderr, align 8, !tbaa !5
  %94 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %93, ptr noundef nonnull @.str.11, ptr noundef %31) #13
  br label %542

95:                                               ; preds = %77
  %96 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.12) #14
  %.not351 = icmp eq i32 %96, 0
  br i1 %.not351, label %97, label %110

97:                                               ; preds = %95
  %98 = icmp eq i32 %.0270.in868, 2
  br i1 %98, label %332, label %99

99:                                               ; preds = %97
  %100 = add nsw i32 %.0270.in868, -2
  %101 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %102 = load ptr, ptr %101, align 8, !tbaa !5
  %103 = call noalias ptr @fopen(ptr noundef %102, ptr noundef nonnull @.str.13)
  %.not352 = icmp eq ptr %103, null
  br i1 %.not352, label %104, label %335

104:                                              ; preds = %99
  %105 = load ptr, ptr @stderr, align 8, !tbaa !5
  %106 = tail call ptr @__errno_location() #15
  %107 = load i32, ptr %106, align 4, !tbaa !11
  %108 = call ptr @strerror(i32 noundef %107) #12
  %109 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %105, ptr noundef nonnull @.str.6, ptr noundef %31, ptr noundef %102, ptr noundef %108) #13
  br label %542

110:                                              ; preds = %95
  %111 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.14) #14
  %.not353 = icmp eq i32 %111, 0
  br i1 %.not353, label %112, label %123

112:                                              ; preds = %110
  %113 = icmp eq i32 %.0270.in868, 2
  br i1 %113, label %332, label %114

114:                                              ; preds = %112
  %115 = add nsw i32 %.0270.in868, -2
  %116 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  %118 = call i32 @atoi(ptr nocapture noundef %117) #14
  %119 = add i32 %118, -21
  %or.cond = icmp ult i32 %119, -20
  br i1 %or.cond, label %120, label %335

120:                                              ; preds = %114
  %121 = load ptr, ptr @stderr, align 8, !tbaa !5
  %122 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %121, ptr noundef nonnull @.str.15, ptr noundef %31, i64 noundef 20) #13
  br label %542

123:                                              ; preds = %110
  %124 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.16) #14
  %.not354 = icmp eq i32 %124, 0
  br i1 %.not354, label %125, label %136

125:                                              ; preds = %123
  %126 = icmp eq i32 %.0270.in868, 2
  br i1 %126, label %332, label %127

127:                                              ; preds = %125
  %128 = add nsw i32 %.0270.in868, -2
  %129 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %130 = load ptr, ptr %129, align 8, !tbaa !5
  %131 = call i32 @atoi(ptr nocapture noundef %130) #14
  %132 = icmp slt i32 %131, 1
  br i1 %132, label %133, label %335

133:                                              ; preds = %127
  %134 = load ptr, ptr @stderr, align 8, !tbaa !5
  %135 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %134, ptr noundef nonnull @.str.17, ptr noundef %31) #13
  br label %542

136:                                              ; preds = %123
  %137 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.18) #14
  %.not355 = icmp eq i32 %137, 0
  br i1 %.not355, label %138, label %148

138:                                              ; preds = %136
  %139 = icmp eq i32 %.0270.in868, 2
  br i1 %139, label %332, label %140

140:                                              ; preds = %138
  %141 = add nsw i32 %.0270.in868, -2
  %142 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  %144 = call i32 @x509_cert_new_from_file(ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef %143) #12
  %.not356 = icmp eq i32 %144, 1
  br i1 %.not356, label %335, label %145

145:                                              ; preds = %140
  %146 = load ptr, ptr @stderr, align 8, !tbaa !5
  %147 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %146, ptr noundef nonnull @.str.19, ptr noundef %31, ptr noundef %143) #13
  br label %542

148:                                              ; preds = %136
  %149 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.20) #14
  %.not357 = icmp eq i32 %149, 0
  br i1 %.not357, label %150, label %163

150:                                              ; preds = %148
  %151 = icmp eq i32 %.0270.in868, 2
  br i1 %151, label %332, label %152

152:                                              ; preds = %150
  %153 = add nsw i32 %.0270.in868, -2
  %154 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %155 = load ptr, ptr %154, align 8, !tbaa !5
  %156 = call noalias ptr @fopen(ptr noundef %155, ptr noundef nonnull @.str.5)
  %.not358 = icmp eq ptr %156, null
  br i1 %.not358, label %157, label %335

157:                                              ; preds = %152
  %158 = load ptr, ptr @stderr, align 8, !tbaa !5
  %159 = tail call ptr @__errno_location() #15
  %160 = load i32, ptr %159, align 4, !tbaa !11
  %161 = call ptr @strerror(i32 noundef %160) #12
  %162 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %158, ptr noundef nonnull @.str.6, ptr noundef %31, ptr noundef %155, ptr noundef %161) #13
  br label %.thread424

163:                                              ; preds = %148
  %164 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.21) #14
  %.not359 = icmp eq i32 %164, 0
  br i1 %.not359, label %165, label %171

165:                                              ; preds = %163
  %166 = icmp eq i32 %.0270.in868, 2
  br i1 %166, label %332, label %167

167:                                              ; preds = %165
  %168 = add nsw i32 %.0270.in868, -2
  %169 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %170 = load ptr, ptr %169, align 8, !tbaa !5
  br label %335

171:                                              ; preds = %163
  %172 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.22) #14
  %.not360 = icmp eq i32 %172, 0
  br i1 %.not360, label %173, label %187

173:                                              ; preds = %171
  %174 = add nsw i32 %.0270.in868, -2
  %175 = icmp eq i32 %.0270.in868, 2
  br i1 %175, label %332, label %176

176:                                              ; preds = %173
  %177 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %178 = load ptr, ptr %177, align 8, !tbaa !5
  %179 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %178) #14
  %180 = icmp ugt i64 %179, 8191
  br i1 %180, label %181, label %184

181:                                              ; preds = %176
  %182 = load ptr, ptr @stderr, align 8, !tbaa !5
  %183 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %182, ptr noundef nonnull @.str.23, ptr noundef %31) #13
  br label %542

184:                                              ; preds = %176
  %185 = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) %16, ptr noundef nonnull dereferenceable(1) %178, i64 noundef 8192) #12
  %186 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %178) #14
  store i64 %186, ptr %17, align 8, !tbaa !9
  br label %335

187:                                              ; preds = %171
  %188 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.24) #14
  %.not361 = icmp eq i32 %188, 0
  br i1 %.not361, label %189, label %205

189:                                              ; preds = %187
  %190 = add nsw i32 %.0270.in868, -2
  %191 = icmp eq i32 %.0270.in868, 2
  br i1 %191, label %332, label %192

192:                                              ; preds = %189
  %193 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %194 = load ptr, ptr %193, align 8, !tbaa !5
  %195 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %194) #14
  %196 = icmp ugt i64 %195, 16382
  br i1 %196, label %197, label %200

197:                                              ; preds = %192
  %198 = load ptr, ptr @stderr, align 8, !tbaa !5
  %199 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %198, ptr noundef nonnull @.str.25, ptr noundef %31) #13
  br label %542

200:                                              ; preds = %192
  %201 = call i32 @hex_to_bytes(ptr noundef %194, i64 noundef %195, ptr noundef nonnull %16, ptr noundef nonnull %17) #12
  %.not362 = icmp eq i32 %201, 1
  br i1 %.not362, label %335, label %202

202:                                              ; preds = %200
  %203 = load ptr, ptr @stderr, align 8, !tbaa !5
  %204 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %203, ptr noundef nonnull @.str.26, ptr noundef %31) #13
  br label %542

205:                                              ; preds = %187
  %206 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.27) #14
  %.not363 = icmp eq i32 %206, 0
  br i1 %.not363, label %335, label %207

207:                                              ; preds = %205
  %208 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.28) #14
  %.not364 = icmp eq i32 %208, 0
  br i1 %.not364, label %335, label %209

209:                                              ; preds = %207
  %210 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.29) #14
  %.not365 = icmp eq i32 %210, 0
  br i1 %.not365, label %211, label %221

211:                                              ; preds = %209
  %212 = icmp eq i32 %.0270.in868, 2
  br i1 %212, label %332, label %213

213:                                              ; preds = %211
  %214 = add nsw i32 %.0270.in868, -2
  %215 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %216 = load ptr, ptr %215, align 8, !tbaa !5
  %217 = call i32 @ext_key_usage_set(ptr noundef nonnull %25, ptr noundef %216)
  %.not366 = icmp eq i32 %217, 1
  br i1 %.not366, label %335, label %218

218:                                              ; preds = %213
  %219 = load ptr, ptr @stderr, align 8, !tbaa !5
  %220 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %219, ptr noundef nonnull @.str.30, ptr noundef %31, ptr noundef %216) #13
  br label %542

221:                                              ; preds = %209
  %222 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.31) #14
  %.not367 = icmp eq i32 %222, 0
  br i1 %.not367, label %223, label %234

223:                                              ; preds = %221
  %224 = icmp eq i32 %.0270.in868, 2
  br i1 %224, label %332, label %225

225:                                              ; preds = %223
  %226 = add nsw i32 %.0270.in868, -2
  %227 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %228 = load ptr, ptr %227, align 8, !tbaa !5
  %229 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %228) #14
  %230 = call i32 @x509_general_names_add_general_name(ptr noundef nonnull %26, ptr noundef nonnull %27, i64 noundef 2048, i32 noundef 2, ptr noundef %228, i64 noundef %229) #12
  %.not368 = icmp eq i32 %230, 1
  br i1 %.not368, label %335, label %231

231:                                              ; preds = %225
  %232 = load ptr, ptr @stderr, align 8, !tbaa !5
  %233 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %232, ptr noundef nonnull @.str.32, ptr noundef %31) #13
  br label %542

234:                                              ; preds = %221
  %235 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.33) #14
  %.not369 = icmp eq i32 %235, 0
  br i1 %.not369, label %236, label %247

236:                                              ; preds = %234
  %237 = icmp eq i32 %.0270.in868, 2
  br i1 %237, label %332, label %238

238:                                              ; preds = %236
  %239 = add nsw i32 %.0270.in868, -2
  %240 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %241 = load ptr, ptr %240, align 8, !tbaa !5
  %242 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %241) #14
  %243 = call i32 @x509_general_names_add_general_name(ptr noundef nonnull %28, ptr noundef nonnull %29, i64 noundef 512, i32 noundef 2, ptr noundef %241, i64 noundef %242) #12
  %.not370 = icmp eq i32 %243, 1
  br i1 %.not370, label %335, label %244

244:                                              ; preds = %238
  %245 = load ptr, ptr @stderr, align 8, !tbaa !5
  %246 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %245, ptr noundef nonnull @.str.34, ptr noundef %31) #13
  br label %542

247:                                              ; preds = %234
  %248 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.35) #14
  %.not371 = icmp eq i32 %248, 0
  br i1 %.not371, label %335, label %249

249:                                              ; preds = %247
  %250 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.36) #14
  %.not372 = icmp eq i32 %250, 0
  br i1 %.not372, label %251, label %262

251:                                              ; preds = %249
  %252 = icmp eq i32 %.0270.in868, 2
  br i1 %252, label %332, label %253

253:                                              ; preds = %251
  %254 = add nsw i32 %.0270.in868, -2
  %255 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %256 = load ptr, ptr %255, align 8, !tbaa !5
  %257 = call i32 @atoi(ptr nocapture noundef %256) #14
  %258 = icmp slt i32 %257, 0
  br i1 %258, label %259, label %335

259:                                              ; preds = %253
  %260 = load ptr, ptr @stderr, align 8, !tbaa !5
  %261 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %260, ptr noundef nonnull @.str.37, ptr noundef %31) #13
  br label %542

262:                                              ; preds = %249
  %263 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.38) #14
  %.not373 = icmp eq i32 %263, 0
  br i1 %.not373, label %264, label %284

264:                                              ; preds = %262
  %265 = add nsw i32 %.0270.in868, -2
  %266 = icmp eq i32 %.0270.in868, 2
  br i1 %266, label %332, label %267

267:                                              ; preds = %264
  %268 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %269 = load ptr, ptr %268, align 8, !tbaa !5
  %270 = call i32 @x509_key_purpose_from_name(ptr noundef %269) #12
  %271 = icmp slt i32 %270, 1
  br i1 %271, label %272, label %275

272:                                              ; preds = %267
  %273 = load ptr, ptr @stderr, align 8, !tbaa !5
  %274 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %273, ptr noundef nonnull @.str.39, ptr noundef %31, ptr noundef %269) #13
  br label %542

275:                                              ; preds = %267
  %276 = icmp ugt i64 %.0235882, 11
  br i1 %276, label %277, label %280

277:                                              ; preds = %275
  %278 = load ptr, ptr @stderr, align 8, !tbaa !5
  %279 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %278, ptr noundef nonnull @.str.40, ptr noundef %31) #13
  br label %542

280:                                              ; preds = %275
  %281 = call i32 @x509_key_purpose_from_name(ptr noundef %269) #12
  %282 = add nuw nsw i64 %.0235882, 1
  %283 = getelementptr inbounds [12 x i32], ptr %30, i64 0, i64 %.0235882
  store i32 %281, ptr %283, align 4, !tbaa !11
  br label %335

284:                                              ; preds = %262
  %285 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.41) #14
  %.not374 = icmp eq i32 %285, 0
  br i1 %.not374, label %286, label %292

286:                                              ; preds = %284
  %287 = icmp eq i32 %.0270.in868, 2
  br i1 %287, label %332, label %288

288:                                              ; preds = %286
  %289 = add nsw i32 %.0270.in868, -2
  %290 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %291 = load ptr, ptr %290, align 8, !tbaa !5
  br label %335

292:                                              ; preds = %284
  %293 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.42) #14
  %.not375 = icmp eq i32 %293, 0
  br i1 %.not375, label %294, label %300

294:                                              ; preds = %292
  %295 = icmp eq i32 %.0270.in868, 2
  br i1 %295, label %332, label %296

296:                                              ; preds = %294
  %297 = add nsw i32 %.0270.in868, -2
  %298 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %299 = load ptr, ptr %298, align 8, !tbaa !5
  br label %335

300:                                              ; preds = %292
  %301 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.43) #14
  %.not376 = icmp eq i32 %301, 0
  br i1 %.not376, label %302, label %313

302:                                              ; preds = %300
  %303 = icmp eq i32 %.0270.in868, 2
  br i1 %303, label %332, label %304

304:                                              ; preds = %302
  %305 = add nsw i32 %.0270.in868, -2
  %306 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %307 = load ptr, ptr %306, align 8, !tbaa !5
  %308 = call i32 @atoi(ptr nocapture noundef %307) #14
  %309 = icmp slt i32 %308, 0
  br i1 %309, label %310, label %335

310:                                              ; preds = %304
  %311 = load ptr, ptr @stderr, align 8, !tbaa !5
  %312 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %311, ptr noundef nonnull @.str.44, ptr noundef %31) #13
  br label %542

313:                                              ; preds = %300
  %314 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.45) #14
  %.not377 = icmp eq i32 %314, 0
  br i1 %.not377, label %315, label %321

315:                                              ; preds = %313
  %316 = icmp eq i32 %.0270.in868, 2
  br i1 %316, label %332, label %317

317:                                              ; preds = %315
  %318 = add nsw i32 %.0270.in868, -2
  %319 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %320 = load ptr, ptr %319, align 8, !tbaa !5
  br label %335

321:                                              ; preds = %313
  %322 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.46) #14
  %.not378 = icmp eq i32 %322, 0
  br i1 %.not378, label %323, label %329

323:                                              ; preds = %321
  %324 = icmp eq i32 %.0270.in868, 2
  br i1 %324, label %332, label %325

325:                                              ; preds = %323
  %326 = add nsw i32 %.0270.in868, -2
  %327 = getelementptr inbounds i8, ptr %.pn869, i64 16
  %328 = load ptr, ptr %327, align 8, !tbaa !5
  br label %335

329:                                              ; preds = %321
  %330 = load ptr, ptr @stderr, align 8, !tbaa !5
  %331 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %330, ptr noundef nonnull @.str.47, ptr noundef %31, ptr noundef %39) #13
  br label %542

332:                                              ; preds = %323, %315, %302, %294, %286, %264, %251, %236, %223, %211, %189, %173, %165, %150, %138, %125, %112, %97, %79, %63, %48
  %333 = load ptr, ptr @stderr, align 8, !tbaa !5
  %334 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %333, ptr noundef nonnull @.str.48, ptr noundef %31, ptr noundef %39) #13
  br label %542

335:                                              ; preds = %247, %207, %205, %50, %90, %114, %140, %167, %200, %225, %280, %296, %317, %325, %304, %288, %253, %238, %213, %184, %152, %127, %99, %74
  %.1271 = phi i32 [ %326, %325 ], [ %318, %317 ], [ %305, %304 ], [ %297, %296 ], [ %289, %288 ], [ %265, %280 ], [ %254, %253 ], [ %239, %238 ], [ %226, %225 ], [ %214, %213 ], [ %190, %200 ], [ %174, %184 ], [ %168, %167 ], [ %153, %152 ], [ %141, %140 ], [ %128, %127 ], [ %115, %114 ], [ %100, %99 ], [ %80, %90 ], [ %64, %74 ], [ %51, %50 ], [ %.0270889, %205 ], [ %.0270889, %207 ], [ %.0270889, %247 ]
  %.1269 = phi ptr [ %327, %325 ], [ %319, %317 ], [ %306, %304 ], [ %298, %296 ], [ %290, %288 ], [ %268, %280 ], [ %255, %253 ], [ %240, %238 ], [ %227, %225 ], [ %215, %213 ], [ %193, %200 ], [ %177, %184 ], [ %169, %167 ], [ %154, %152 ], [ %142, %140 ], [ %129, %127 ], [ %116, %114 ], [ %101, %99 ], [ %83, %90 ], [ %67, %74 ], [ %52, %50 ], [ %.0268888, %205 ], [ %.0268888, %207 ], [ %.0268888, %247 ]
  %.1264 = phi ptr [ %.0263870, %325 ], [ %.0263870, %317 ], [ %.0263870, %304 ], [ %.0263870, %296 ], [ %.0263870, %288 ], [ %.0263870, %280 ], [ %.0263870, %253 ], [ %.0263870, %238 ], [ %.0263870, %225 ], [ %.0263870, %213 ], [ %.0263870, %200 ], [ %.0263870, %184 ], [ %.0263870, %167 ], [ %.0263870, %152 ], [ %.0263870, %140 ], [ %.0263870, %127 ], [ %.0263870, %114 ], [ %.0263870, %99 ], [ %.0263870, %90 ], [ %.0263870, %74 ], [ %53, %50 ], [ %.0263870, %205 ], [ %.0263870, %207 ], [ %.0263870, %247 ]
  %.1261 = phi ptr [ %.0260871, %325 ], [ %.0260871, %317 ], [ %.0260871, %304 ], [ %.0260871, %296 ], [ %.0260871, %288 ], [ %.0260871, %280 ], [ %.0260871, %253 ], [ %.0260871, %238 ], [ %.0260871, %225 ], [ %.0260871, %213 ], [ %.0260871, %200 ], [ %.0260871, %184 ], [ %.0260871, %167 ], [ %.0260871, %152 ], [ %.0260871, %140 ], [ %.0260871, %127 ], [ %.0260871, %114 ], [ %.0260871, %99 ], [ %.0260871, %90 ], [ %.0260871, %74 ], [ %54, %50 ], [ %.0260871, %205 ], [ %.0260871, %207 ], [ %.0260871, %247 ]
  %.1259 = phi i32 [ %.0258872, %325 ], [ %.0258872, %317 ], [ %.0258872, %304 ], [ %.0258872, %296 ], [ %.0258872, %288 ], [ %.0258872, %280 ], [ %.0258872, %253 ], [ %.0258872, %238 ], [ %.0258872, %225 ], [ %.0258872, %213 ], [ %.0258872, %200 ], [ %.0258872, %184 ], [ %.0258872, %167 ], [ %.0258872, %152 ], [ %.0258872, %140 ], [ %.0258872, %127 ], [ %118, %114 ], [ %.0258872, %99 ], [ %.0258872, %90 ], [ %.0258872, %74 ], [ %.0258872, %50 ], [ %.0258872, %205 ], [ %.0258872, %207 ], [ %.0258872, %247 ]
  %.1257 = phi i32 [ %.0256873, %325 ], [ %.0256873, %317 ], [ %.0256873, %304 ], [ %.0256873, %296 ], [ %.0256873, %288 ], [ %.0256873, %280 ], [ %.0256873, %253 ], [ %.0256873, %238 ], [ %.0256873, %225 ], [ %.0256873, %213 ], [ %.0256873, %200 ], [ %.0256873, %184 ], [ %.0256873, %167 ], [ %.0256873, %152 ], [ %.0256873, %140 ], [ %131, %127 ], [ %.0256873, %114 ], [ %.0256873, %99 ], [ %.0256873, %90 ], [ %.0256873, %74 ], [ %.0256873, %50 ], [ %.0256873, %205 ], [ %.0256873, %207 ], [ %.0256873, %247 ]
  %.1254 = phi ptr [ %.0253874, %325 ], [ %.0253874, %317 ], [ %.0253874, %304 ], [ %.0253874, %296 ], [ %.0253874, %288 ], [ %.0253874, %280 ], [ %.0253874, %253 ], [ %.0253874, %238 ], [ %.0253874, %225 ], [ %.0253874, %213 ], [ %.0253874, %200 ], [ %.0253874, %184 ], [ %.0253874, %167 ], [ %156, %152 ], [ %.0253874, %140 ], [ %.0253874, %127 ], [ %.0253874, %114 ], [ %.0253874, %99 ], [ %.0253874, %90 ], [ %.0253874, %74 ], [ %.0253874, %50 ], [ %.0253874, %205 ], [ %.0253874, %207 ], [ %.0253874, %247 ]
  %.1252 = phi ptr [ %.0251875, %325 ], [ %.0251875, %317 ], [ %.0251875, %304 ], [ %.0251875, %296 ], [ %.0251875, %288 ], [ %.0251875, %280 ], [ %.0251875, %253 ], [ %.0251875, %238 ], [ %.0251875, %225 ], [ %.0251875, %213 ], [ %.0251875, %200 ], [ %.0251875, %184 ], [ %170, %167 ], [ %.0251875, %152 ], [ %.0251875, %140 ], [ %.0251875, %127 ], [ %.0251875, %114 ], [ %.0251875, %99 ], [ %.0251875, %90 ], [ %.0251875, %74 ], [ %.0251875, %50 ], [ %.0251875, %205 ], [ %.0251875, %207 ], [ %.0251875, %247 ]
  %.1249 = phi ptr [ %.0248876, %325 ], [ %.0248876, %317 ], [ %.0248876, %304 ], [ %.0248876, %296 ], [ %.0248876, %288 ], [ %.0248876, %280 ], [ %.0248876, %253 ], [ %.0248876, %238 ], [ %.0248876, %225 ], [ %.0248876, %213 ], [ %.0248876, %200 ], [ %.0248876, %184 ], [ %.0248876, %167 ], [ %.0248876, %152 ], [ %.0248876, %140 ], [ %.0248876, %127 ], [ %.0248876, %114 ], [ %102, %99 ], [ %.0248876, %90 ], [ %.0248876, %74 ], [ %.0248876, %50 ], [ %.0248876, %205 ], [ %.0248876, %207 ], [ %.0248876, %247 ]
  %.1247 = phi ptr [ %.0246877, %325 ], [ %.0246877, %317 ], [ %.0246877, %304 ], [ %.0246877, %296 ], [ %.0246877, %288 ], [ %.0246877, %280 ], [ %.0246877, %253 ], [ %.0246877, %238 ], [ %.0246877, %225 ], [ %.0246877, %213 ], [ %.0246877, %200 ], [ %.0246877, %184 ], [ %.0246877, %167 ], [ %.0246877, %152 ], [ %.0246877, %140 ], [ %.0246877, %127 ], [ %.0246877, %114 ], [ %103, %99 ], [ %.0246877, %90 ], [ %.0246877, %74 ], [ %.0246877, %50 ], [ %.0246877, %205 ], [ %.0246877, %207 ], [ %.0246877, %247 ]
  %.1244 = phi i32 [ %.0243878, %325 ], [ %.0243878, %317 ], [ %.0243878, %304 ], [ %.0243878, %296 ], [ %.0243878, %288 ], [ %.0243878, %280 ], [ %.0243878, %253 ], [ %.0243878, %238 ], [ %.0243878, %225 ], [ %.0243878, %213 ], [ %.0243878, %200 ], [ %.0243878, %184 ], [ %.0243878, %167 ], [ %.0243878, %152 ], [ %.0243878, %140 ], [ %.0243878, %127 ], [ %.0243878, %114 ], [ %.0243878, %99 ], [ %.0243878, %90 ], [ %.0243878, %74 ], [ %.0243878, %50 ], [ 1, %205 ], [ %.0243878, %207 ], [ %.0243878, %247 ]
  %.1242 = phi i32 [ %.0241879, %325 ], [ %.0241879, %317 ], [ %.0241879, %304 ], [ %.0241879, %296 ], [ %.0241879, %288 ], [ %.0241879, %280 ], [ %.0241879, %253 ], [ %.0241879, %238 ], [ %.0241879, %225 ], [ %.0241879, %213 ], [ %.0241879, %200 ], [ %.0241879, %184 ], [ %.0241879, %167 ], [ %.0241879, %152 ], [ %.0241879, %140 ], [ %.0241879, %127 ], [ %.0241879, %114 ], [ %.0241879, %99 ], [ %.0241879, %90 ], [ %.0241879, %74 ], [ %.0241879, %50 ], [ %.0241879, %205 ], [ 1, %207 ], [ %.0241879, %247 ]
  %.1240 = phi i32 [ %.0239880, %325 ], [ %.0239880, %317 ], [ %.0239880, %304 ], [ %.0239880, %296 ], [ %.0239880, %288 ], [ %.0239880, %280 ], [ %.0239880, %253 ], [ %.0239880, %238 ], [ %.0239880, %225 ], [ %.0239880, %213 ], [ %.0239880, %200 ], [ %.0239880, %184 ], [ %.0239880, %167 ], [ %.0239880, %152 ], [ %.0239880, %140 ], [ %.0239880, %127 ], [ %.0239880, %114 ], [ %.0239880, %99 ], [ %.0239880, %90 ], [ %.0239880, %74 ], [ %.0239880, %50 ], [ %.0239880, %205 ], [ %.0239880, %207 ], [ 1, %247 ]
  %.1238 = phi i32 [ %.0237881, %325 ], [ %.0237881, %317 ], [ %.0237881, %304 ], [ %.0237881, %296 ], [ %.0237881, %288 ], [ %.0237881, %280 ], [ %257, %253 ], [ %.0237881, %238 ], [ %.0237881, %225 ], [ %.0237881, %213 ], [ %.0237881, %200 ], [ %.0237881, %184 ], [ %.0237881, %167 ], [ %.0237881, %152 ], [ %.0237881, %140 ], [ %.0237881, %127 ], [ %.0237881, %114 ], [ %.0237881, %99 ], [ %.0237881, %90 ], [ %.0237881, %74 ], [ %.0237881, %50 ], [ %.0237881, %205 ], [ %.0237881, %207 ], [ %.0237881, %247 ]
  %.1236 = phi i64 [ %.0235882, %325 ], [ %.0235882, %317 ], [ %.0235882, %304 ], [ %.0235882, %296 ], [ %.0235882, %288 ], [ %282, %280 ], [ %.0235882, %253 ], [ %.0235882, %238 ], [ %.0235882, %225 ], [ %.0235882, %213 ], [ %.0235882, %200 ], [ %.0235882, %184 ], [ %.0235882, %167 ], [ %.0235882, %152 ], [ %.0235882, %140 ], [ %.0235882, %127 ], [ %.0235882, %114 ], [ %.0235882, %99 ], [ %.0235882, %90 ], [ %.0235882, %74 ], [ %.0235882, %50 ], [ %.0235882, %205 ], [ %.0235882, %207 ], [ %.0235882, %247 ]
  %.1234 = phi ptr [ %.0233883, %325 ], [ %.0233883, %317 ], [ %.0233883, %304 ], [ %.0233883, %296 ], [ %291, %288 ], [ %.0233883, %280 ], [ %.0233883, %253 ], [ %.0233883, %238 ], [ %.0233883, %225 ], [ %.0233883, %213 ], [ %.0233883, %200 ], [ %.0233883, %184 ], [ %.0233883, %167 ], [ %.0233883, %152 ], [ %.0233883, %140 ], [ %.0233883, %127 ], [ %.0233883, %114 ], [ %.0233883, %99 ], [ %.0233883, %90 ], [ %.0233883, %74 ], [ %.0233883, %50 ], [ %.0233883, %205 ], [ %.0233883, %207 ], [ %.0233883, %247 ]
  %.1232 = phi ptr [ %.0231884, %325 ], [ %.0231884, %317 ], [ %.0231884, %304 ], [ %299, %296 ], [ %.0231884, %288 ], [ %.0231884, %280 ], [ %.0231884, %253 ], [ %.0231884, %238 ], [ %.0231884, %225 ], [ %.0231884, %213 ], [ %.0231884, %200 ], [ %.0231884, %184 ], [ %.0231884, %167 ], [ %.0231884, %152 ], [ %.0231884, %140 ], [ %.0231884, %127 ], [ %.0231884, %114 ], [ %.0231884, %99 ], [ %.0231884, %90 ], [ %.0231884, %74 ], [ %.0231884, %50 ], [ %.0231884, %205 ], [ %.0231884, %207 ], [ %.0231884, %247 ]
  %.1230 = phi i32 [ %.0229885, %325 ], [ %.0229885, %317 ], [ %308, %304 ], [ %.0229885, %296 ], [ %.0229885, %288 ], [ %.0229885, %280 ], [ %.0229885, %253 ], [ %.0229885, %238 ], [ %.0229885, %225 ], [ %.0229885, %213 ], [ %.0229885, %200 ], [ %.0229885, %184 ], [ %.0229885, %167 ], [ %.0229885, %152 ], [ %.0229885, %140 ], [ %.0229885, %127 ], [ %.0229885, %114 ], [ %.0229885, %99 ], [ %.0229885, %90 ], [ %.0229885, %74 ], [ %.0229885, %50 ], [ %.0229885, %205 ], [ %.0229885, %207 ], [ %.0229885, %247 ]
  %.1228 = phi ptr [ %.0227886, %325 ], [ %320, %317 ], [ %.0227886, %304 ], [ %.0227886, %296 ], [ %.0227886, %288 ], [ %.0227886, %280 ], [ %.0227886, %253 ], [ %.0227886, %238 ], [ %.0227886, %225 ], [ %.0227886, %213 ], [ %.0227886, %200 ], [ %.0227886, %184 ], [ %.0227886, %167 ], [ %.0227886, %152 ], [ %.0227886, %140 ], [ %.0227886, %127 ], [ %.0227886, %114 ], [ %.0227886, %99 ], [ %.0227886, %90 ], [ %.0227886, %74 ], [ %.0227886, %50 ], [ %.0227886, %205 ], [ %.0227886, %207 ], [ %.0227886, %247 ]
  %.1 = phi ptr [ %328, %325 ], [ %.0887, %317 ], [ %.0887, %304 ], [ %.0887, %296 ], [ %.0887, %288 ], [ %.0887, %280 ], [ %.0887, %253 ], [ %.0887, %238 ], [ %.0887, %225 ], [ %.0887, %213 ], [ %.0887, %200 ], [ %.0887, %184 ], [ %.0887, %167 ], [ %.0887, %152 ], [ %.0887, %140 ], [ %.0887, %127 ], [ %.0887, %114 ], [ %.0887, %99 ], [ %.0887, %90 ], [ %.0887, %74 ], [ %.0887, %50 ], [ %.0887, %205 ], [ %.0887, %207 ], [ %.0887, %247 ]
  %336 = icmp sgt i32 %.1271, 1
  br i1 %336, label %.preheader, label %337, !llvm.loop !13

337:                                              ; preds = %335
  %.not = icmp eq i32 %.1257, 0
  br i1 %.not, label %338, label %343

338:                                              ; preds = %337
  %339 = load ptr, ptr @stderr, align 8, !tbaa !5
  %340 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %339, ptr noundef nonnull @.str.49, ptr noundef %31) #13
  %341 = load ptr, ptr @options, align 8, !tbaa !5
  %342 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %31, ptr noundef %341)
  br label %542

343:                                              ; preds = %337
  %344 = load ptr, ptr %13, align 8, !tbaa !5
  %.not311 = icmp eq ptr %344, null
  br i1 %.not311, label %345, label %350

345:                                              ; preds = %343
  %346 = load ptr, ptr @stderr, align 8, !tbaa !5
  %347 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %346, ptr noundef nonnull @.str.50, ptr noundef %31) #13
  %348 = load ptr, ptr @options, align 8, !tbaa !5
  %349 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %31, ptr noundef %348)
  br label %542

350:                                              ; preds = %343
  %.not312 = icmp eq ptr %.1254, null
  br i1 %.not312, label %351, label %356

351:                                              ; preds = %350
  %352 = load ptr, ptr @stderr, align 8, !tbaa !5
  %353 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %352, ptr noundef nonnull @.str.51, ptr noundef %31) #13
  %354 = load ptr, ptr @options, align 8, !tbaa !5
  %355 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %31, ptr noundef %354)
  br label %.thread424

356:                                              ; preds = %350
  %.not313 = icmp eq ptr %.1252, null
  br i1 %.not313, label %357, label %362

357:                                              ; preds = %356
  %358 = load ptr, ptr @stderr, align 8, !tbaa !5
  %359 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %358, ptr noundef nonnull @.str.52, ptr noundef %31) #13
  %360 = load ptr, ptr @options, align 8, !tbaa !5
  %361 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %31, ptr noundef %360)
  br label %.thread415

362:                                              ; preds = %356
  %363 = call i32 @x509_req_from_pem(ptr noundef nonnull %3, ptr noundef nonnull %4, i64 noundef 512, ptr noundef %.1261) #12
  %.not314 = icmp eq i32 %363, 1
  br i1 %.not314, label %367, label %364

364:                                              ; preds = %362
  %365 = load ptr, ptr @stderr, align 8, !tbaa !5
  %366 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %365, ptr noundef nonnull @.str.53, ptr noundef %31) #13
  br label %.thread415

367:                                              ; preds = %362
  %368 = load i64, ptr %6, align 8, !tbaa !9
  %.not315 = icmp eq i64 %368, 0
  br i1 %.not315, label %369, label %371

369:                                              ; preds = %367
  %370 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.54) #12
  store i64 16, ptr %6, align 8, !tbaa !9
  br label %371

371:                                              ; preds = %369, %367
  %372 = phi i64 [ 16, %369 ], [ %368, %367 ]
  %373 = load i64, ptr %4, align 8, !tbaa !9
  %374 = call i32 @x509_req_verify(ptr noundef nonnull %3, i64 noundef %373, ptr noundef nonnull %5, i64 noundef %372) #12
  %.not316 = icmp eq i32 %374, 1
  br i1 %.not316, label %378, label %375

375:                                              ; preds = %371
  %376 = load ptr, ptr @stderr, align 8, !tbaa !5
  %377 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %376, ptr noundef nonnull @.str.55, ptr noundef %31) #13
  br label %.thread415

378:                                              ; preds = %371
  %379 = load i64, ptr %4, align 8, !tbaa !9
  %380 = call i32 @x509_req_get_details(ptr noundef nonnull %3, i64 noundef %379, ptr noundef null, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef null) #12
  %.not317 = icmp eq i32 %380, 1
  br i1 %.not317, label %384, label %381

381:                                              ; preds = %378
  %382 = load ptr, ptr @stderr, align 8, !tbaa !5
  %383 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %382, ptr noundef nonnull @.str.53, ptr noundef %31) #13
  br label %.thread415

384:                                              ; preds = %378
  %385 = load ptr, ptr %13, align 8, !tbaa !5
  %386 = load i64, ptr %14, align 8, !tbaa !9
  %387 = call i32 @x509_cert_get_subject(ptr noundef %385, i64 noundef %386, ptr noundef nonnull %18, ptr noundef nonnull %19) #12
  %.not318 = icmp eq i32 %387, 1
  br i1 %.not318, label %388, label %392

388:                                              ; preds = %384
  %389 = load ptr, ptr %13, align 8, !tbaa !5
  %390 = load i64, ptr %14, align 8, !tbaa !9
  %391 = call i32 @x509_cert_get_subject_public_key(ptr noundef %389, i64 noundef %390, ptr noundef nonnull %20) #12
  %.not319 = icmp eq i32 %391, 1
  br i1 %.not319, label %395, label %392

392:                                              ; preds = %388, %384
  %393 = load ptr, ptr @stderr, align 8, !tbaa !5
  %394 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %393, ptr noundef nonnull @.str.56, ptr noundef %31) #13
  br label %.thread415

395:                                              ; preds = %388
  %396 = call i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef nonnull %15, ptr noundef nonnull %.1252, ptr noundef nonnull %.1254) #12
  %.not320 = icmp eq i32 %396, 1
  br i1 %.not320, label %400, label %397

397:                                              ; preds = %395
  %398 = load ptr, ptr @stderr, align 8, !tbaa !5
  %399 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %398, ptr noundef nonnull @.str.57, ptr noundef %31) #13
  br label %.thread415

400:                                              ; preds = %395
  %401 = call i32 @sm2_public_key_equ(ptr noundef nonnull %15, ptr noundef nonnull %20) #12
  %.not321 = icmp eq i32 %401, 1
  br i1 %.not321, label %405, label %402

402:                                              ; preds = %400
  %403 = load ptr, ptr @stderr, align 8, !tbaa !5
  %404 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %403, ptr noundef nonnull @.str.58, ptr noundef %31) #13
  br label %.thread415

405:                                              ; preds = %400
  %406 = load i64, ptr %17, align 8, !tbaa !9
  %.not322 = icmp eq i64 %406, 0
  br i1 %.not322, label %407, label %409

407:                                              ; preds = %405
  %408 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %16, ptr noundef nonnull dereferenceable(1) @.str.54) #12
  store i64 16, ptr %17, align 8, !tbaa !9
  br label %409

409:                                              ; preds = %407, %405
  %410 = zext nneg i32 %.1259 to i64
  %411 = call i32 @rand_bytes(ptr noundef nonnull %7, i64 noundef %410) #12
  %.not323 = icmp eq i32 %411, 1
  br i1 %.not323, label %415, label %412

412:                                              ; preds = %409
  %413 = load ptr, ptr @stderr, align 8, !tbaa !5
  %414 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %413, ptr noundef nonnull @.str.59, ptr noundef %31) #13
  br label %.thread415

415:                                              ; preds = %409
  %416 = call i64 @time(ptr noundef nonnull %8) #12
  %417 = load i64, ptr %8, align 8, !tbaa !9
  %418 = call i32 @x509_validity_add_days(ptr noundef nonnull %9, i64 noundef %417, i32 noundef %.1257) #12
  %.not324 = icmp eq i32 %418, 1
  br i1 %.not324, label %422, label %419

419:                                              ; preds = %415
  %420 = load ptr, ptr @stderr, align 8, !tbaa !5
  %421 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %420, ptr noundef nonnull @.str.60, ptr noundef %31) #13
  br label %.thread415

422:                                              ; preds = %415
  %.not325 = icmp eq i32 %.1244, 0
  br i1 %.not325, label %428, label %423

423:                                              ; preds = %422
  %424 = call i32 @x509_exts_add_default_authority_key_identifier(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, ptr noundef nonnull %15) #12
  %.not326 = icmp eq i32 %424, 1
  br i1 %.not326, label %428, label %425

425:                                              ; preds = %423
  %426 = load ptr, ptr @stderr, align 8, !tbaa !5
  %427 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %426, ptr noundef nonnull @.str.61, ptr noundef %31) #13
  br label %.thread415

428:                                              ; preds = %423, %422
  %.not327 = icmp eq i32 %.1242, 0
  br i1 %.not327, label %434, label %429

429:                                              ; preds = %428
  %430 = call i32 @x509_exts_add_subject_key_identifier_ex(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %15) #12
  %.not328 = icmp eq i32 %430, 1
  br i1 %.not328, label %434, label %431

431:                                              ; preds = %429
  %432 = load ptr, ptr @stderr, align 8, !tbaa !5
  %433 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %432, ptr noundef nonnull @.str.62, ptr noundef %31) #13
  br label %.thread415

434:                                              ; preds = %429, %428
  %435 = load i32, ptr %25, align 4, !tbaa !11
  %.not329 = icmp eq i32 %435, 0
  br i1 %.not329, label %441, label %436

436:                                              ; preds = %434
  %437 = call i32 @x509_exts_add_key_usage(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef 1, i32 noundef %435) #12
  %.not330 = icmp eq i32 %437, 1
  br i1 %.not330, label %441, label %438

438:                                              ; preds = %436
  %439 = load ptr, ptr @stderr, align 8, !tbaa !5
  %440 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %439, ptr noundef nonnull @.str.63, ptr noundef %31) #13
  br label %.thread415

441:                                              ; preds = %436, %434
  %442 = load i64, ptr %27, align 8, !tbaa !9
  %.not331 = icmp eq i64 %442, 0
  br i1 %.not331, label %448, label %443

443:                                              ; preds = %441
  %444 = call i32 @x509_exts_add_subject_alt_name(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %26, i64 noundef %442) #12
  %.not332 = icmp eq i32 %444, 1
  br i1 %.not332, label %448, label %445

445:                                              ; preds = %443
  %446 = load ptr, ptr @stderr, align 8, !tbaa !5
  %447 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %446, ptr noundef nonnull @.str.64, ptr noundef %31) #13
  br label %.thread415

448:                                              ; preds = %443, %441
  %449 = load i64, ptr %29, align 8, !tbaa !9
  %.not333 = icmp eq i64 %449, 0
  br i1 %.not333, label %455, label %450

450:                                              ; preds = %448
  %451 = call i32 @x509_exts_add_issuer_alt_name(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %28, i64 noundef %449) #12
  %.not334 = icmp eq i32 %451, 1
  br i1 %.not334, label %455, label %452

452:                                              ; preds = %450
  %453 = load ptr, ptr @stderr, align 8, !tbaa !5
  %454 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %453, ptr noundef nonnull @.str.65, ptr noundef %31) #13
  br label %.thread415

455:                                              ; preds = %450, %448
  %456 = icmp sgt i32 %.1240, -1
  %457 = icmp sgt i32 %.1238, -1
  %or.cond4 = select i1 %456, i1 true, i1 %457
  br i1 %or.cond4, label %458, label %463

458:                                              ; preds = %455
  %459 = call i32 @x509_exts_add_basic_constraints(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef 1, i32 noundef %.1240, i32 noundef %.1238) #12
  %.not335 = icmp eq i32 %459, 1
  br i1 %.not335, label %463, label %460

460:                                              ; preds = %458
  %461 = load ptr, ptr @stderr, align 8, !tbaa !5
  %462 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %461, ptr noundef nonnull @.str.66, ptr noundef %31) #13
  br label %.thread415

463:                                              ; preds = %458, %455
  %.not336 = icmp eq i64 %.1236, 0
  br i1 %.not336, label %469, label %464

464:                                              ; preds = %463
  %465 = call i32 @x509_exts_add_ext_key_usage(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %30, i64 noundef %.1236) #12
  %.not337 = icmp eq i32 %465, 1
  br i1 %.not337, label %469, label %466

466:                                              ; preds = %464
  %467 = load ptr, ptr @stderr, align 8, !tbaa !5
  %468 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %467, ptr noundef nonnull @.str.67, ptr noundef %31) #13
  br label %.thread415

469:                                              ; preds = %464, %463
  %470 = icmp ne ptr %.1234, null
  %471 = icmp ne ptr %.1232, null
  %or.cond6 = select i1 %470, i1 true, i1 %471
  br i1 %or.cond6, label %472, label %485

472:                                              ; preds = %469
  br i1 %470, label %473, label %475

473:                                              ; preds = %472
  %474 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1234) #14
  br label %475

475:                                              ; preds = %472, %473
  %476 = phi i64 [ %474, %473 ], [ 0, %472 ]
  br i1 %471, label %477, label %479

477:                                              ; preds = %475
  %478 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1232) #14
  br label %479

479:                                              ; preds = %475, %477
  %480 = phi i64 [ %478, %477 ], [ 0, %475 ]
  %481 = call i32 @x509_exts_add_crl_distribution_points(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef -1, ptr noundef %.1234, i64 noundef %476, ptr noundef %.1232, i64 noundef %480) #12
  %.not338 = icmp eq i32 %481, 1
  br i1 %.not338, label %485, label %482

482:                                              ; preds = %479
  %483 = load ptr, ptr @stderr, align 8, !tbaa !5
  %484 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %483, ptr noundef nonnull @.str.68, ptr noundef %31) #13
  br label %555

485:                                              ; preds = %479, %469
  %486 = icmp sgt i32 %.1230, -1
  br i1 %486, label %487, label %492

487:                                              ; preds = %485
  %488 = call i32 @x509_exts_add_inhibit_any_policy(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef 1, i32 noundef %.1230) #12
  %.not339 = icmp eq i32 %488, 1
  br i1 %.not339, label %492, label %489

489:                                              ; preds = %487
  %490 = load ptr, ptr @stderr, align 8, !tbaa !5
  %491 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %490, ptr noundef nonnull @.str.69, ptr noundef %31) #13
  br label %.thread415

492:                                              ; preds = %487, %485
  %493 = icmp ne ptr %.1228, null
  %494 = icmp ne ptr %.1, null
  %or.cond8 = select i1 %493, i1 true, i1 %494
  br i1 %or.cond8, label %495, label %508

495:                                              ; preds = %492
  br i1 %493, label %496, label %498

496:                                              ; preds = %495
  %497 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1228) #14
  br label %498

498:                                              ; preds = %495, %496
  %499 = phi i64 [ %497, %496 ], [ 0, %495 ]
  br i1 %494, label %500, label %502

500:                                              ; preds = %498
  %501 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1) #14
  br label %502

502:                                              ; preds = %498, %500
  %503 = phi i64 [ %501, %500 ], [ 0, %498 ]
  %504 = call i32 @x509_exts_add_authority_info_access(ptr noundef nonnull %23, ptr noundef nonnull %24, i64 noundef 4096, i32 noundef 0, ptr noundef %.1228, i64 noundef %499, ptr noundef %.1, i64 noundef %503) #12
  %.not340 = icmp eq i32 %504, 1
  br i1 %.not340, label %508, label %505

505:                                              ; preds = %502
  %506 = load ptr, ptr @stderr, align 8, !tbaa !5
  %507 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %506, ptr noundef nonnull @.str.70, ptr noundef %31) #13
  br label %.thread415

508:                                              ; preds = %502, %492
  %509 = load ptr, ptr %18, align 8, !tbaa !5
  %510 = load i64, ptr %19, align 8, !tbaa !9
  %511 = load i64, ptr %8, align 8, !tbaa !9
  %512 = load i64, ptr %9, align 8, !tbaa !9
  %513 = load ptr, ptr %10, align 8, !tbaa !5
  %514 = load i64, ptr %11, align 8, !tbaa !9
  %515 = load i64, ptr %24, align 8, !tbaa !9
  %516 = load i64, ptr %17, align 8, !tbaa !9
  %517 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef nonnull %7, i64 noundef %410, i32 noundef 16, ptr noundef %509, i64 noundef %510, i64 noundef %511, i64 noundef %512, ptr noundef %513, i64 noundef %514, ptr noundef nonnull %12, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef nonnull %23, i64 noundef %515, ptr noundef nonnull %15, ptr noundef nonnull %16, i64 noundef %516, ptr noundef null, ptr noundef nonnull %21) #12
  %.not341 = icmp eq i32 %517, 1
  br i1 %.not341, label %521, label %518

518:                                              ; preds = %508
  %519 = load ptr, ptr @stderr, align 8, !tbaa !5
  %520 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %519, ptr noundef nonnull @.str.71, ptr noundef %31) #13
  br label %.thread415

521:                                              ; preds = %508
  %522 = load i64, ptr %21, align 8, !tbaa !9
  %523 = call noalias ptr @malloc(i64 noundef %522) #16
  %.not342 = icmp eq ptr %523, null
  br i1 %.not342, label %524, label %527

524:                                              ; preds = %521
  %525 = load ptr, ptr @stderr, align 8, !tbaa !5
  %526 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %525, ptr noundef nonnull @.str.72, ptr noundef %31) #13
  br label %.thread415

527:                                              ; preds = %521
  store ptr %523, ptr %22, align 8, !tbaa !5
  store i64 0, ptr %21, align 8, !tbaa !9
  %528 = load ptr, ptr %18, align 8, !tbaa !5
  %529 = load i64, ptr %19, align 8, !tbaa !9
  %530 = load i64, ptr %8, align 8, !tbaa !9
  %531 = load i64, ptr %9, align 8, !tbaa !9
  %532 = load ptr, ptr %10, align 8, !tbaa !5
  %533 = load i64, ptr %11, align 8, !tbaa !9
  %534 = load i64, ptr %24, align 8, !tbaa !9
  %535 = load i64, ptr %17, align 8, !tbaa !9
  %536 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef nonnull %7, i64 noundef %410, i32 noundef 16, ptr noundef %528, i64 noundef %529, i64 noundef %530, i64 noundef %531, ptr noundef %532, i64 noundef %533, ptr noundef nonnull %12, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef nonnull %23, i64 noundef %534, ptr noundef nonnull %15, ptr noundef nonnull %16, i64 noundef %535, ptr noundef nonnull %22, ptr noundef nonnull %21) #12
  %.not343 = icmp eq i32 %536, 1
  br i1 %.not343, label %537, label %.thread395.sink.split

537:                                              ; preds = %527
  %538 = load i64, ptr %21, align 8, !tbaa !9
  %539 = call i32 @x509_cert_to_pem(ptr noundef nonnull %523, i64 noundef %538, ptr noundef %.1247) #12
  %.not344 = icmp eq i32 %539, 1
  br i1 %.not344, label %.thread395, label %.thread395.sink.split

.thread395.sink.split:                            ; preds = %537, %527
  %.str.73.sink = phi ptr [ @.str.71, %527 ], [ @.str.73, %537 ]
  %540 = load ptr, ptr @stderr, align 8, !tbaa !5
  %541 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %540, ptr noundef nonnull %.str.73.sink, ptr noundef %31) #13
  br label %.thread395

.thread395:                                       ; preds = %.thread395.sink.split, %537
  %.0267 = phi i32 [ 0, %537 ], [ 1, %.thread395.sink.split ]
  call void @gmssl_secure_clear(ptr noundef nonnull %15, i64 noundef 128) #12
  call void @free(ptr noundef nonnull %523) #12
  br label %543

.thread415:                                       ; preds = %357, %524, %518, %505, %489, %466, %460, %452, %445, %438, %431, %425, %419, %412, %402, %397, %392, %381, %375, %364
  call void @gmssl_secure_clear(ptr noundef nonnull %15, i64 noundef 128) #12
  br label %543

.thread424:                                       ; preds = %351, %157
  %.0263841 = phi ptr [ %.1264, %351 ], [ %.0263870, %157 ]
  %.0260817 = phi ptr [ %.1261, %351 ], [ %.0260871, %157 ]
  %.0248703 = phi ptr [ %.1249, %351 ], [ %.0248876, %157 ]
  %.0246679 = phi ptr [ %.1247, %351 ], [ %.0246877, %157 ]
  call void @gmssl_secure_clear(ptr noundef nonnull %15, i64 noundef 128) #12
  br label %545

542:                                              ; preds = %329, %332, %310, %272, %277, %259, %244, %231, %218, %197, %202, %181, %145, %133, %120, %104, %87, %92, %71, %55, %41, %345, %338
  %.0253750 = phi ptr [ %.1254, %338 ], [ %.1254, %345 ], [ %.0253874, %41 ], [ %.0253874, %55 ], [ %.0253874, %71 ], [ %.0253874, %92 ], [ %.0253874, %87 ], [ %.0253874, %104 ], [ %.0253874, %120 ], [ %.0253874, %133 ], [ %.0253874, %145 ], [ %.0253874, %181 ], [ %.0253874, %202 ], [ %.0253874, %197 ], [ %.0253874, %218 ], [ %.0253874, %231 ], [ %.0253874, %244 ], [ %.0253874, %259 ], [ %.0253874, %277 ], [ %.0253874, %272 ], [ %.0253874, %310 ], [ %.0253874, %332 ], [ %.0253874, %329 ]
  %.0267.ph = phi i32 [ 1, %338 ], [ 1, %345 ], [ 0, %41 ], [ 1, %55 ], [ 1, %71 ], [ 1, %92 ], [ 1, %87 ], [ 1, %104 ], [ 1, %120 ], [ 1, %133 ], [ 1, %145 ], [ 1, %181 ], [ 1, %202 ], [ 1, %197 ], [ 1, %218 ], [ 1, %231 ], [ 1, %244 ], [ 1, %259 ], [ 1, %277 ], [ 1, %272 ], [ 1, %310 ], [ 1, %332 ], [ 1, %329 ]
  %.2265.ph = phi ptr [ %.1264, %338 ], [ %.1264, %345 ], [ %.0263870, %41 ], [ %53, %55 ], [ %.0263870, %71 ], [ %.0263870, %92 ], [ %.0263870, %87 ], [ %.0263870, %104 ], [ %.0263870, %120 ], [ %.0263870, %133 ], [ %.0263870, %145 ], [ %.0263870, %181 ], [ %.0263870, %202 ], [ %.0263870, %197 ], [ %.0263870, %218 ], [ %.0263870, %231 ], [ %.0263870, %244 ], [ %.0263870, %259 ], [ %.0263870, %277 ], [ %.0263870, %272 ], [ %.0263870, %310 ], [ %.0263870, %332 ], [ %.0263870, %329 ]
  %.2262.ph = phi ptr [ %.1261, %338 ], [ %.1261, %345 ], [ %.0260871, %41 ], [ null, %55 ], [ %.0260871, %71 ], [ %.0260871, %92 ], [ %.0260871, %87 ], [ %.0260871, %104 ], [ %.0260871, %120 ], [ %.0260871, %133 ], [ %.0260871, %145 ], [ %.0260871, %181 ], [ %.0260871, %202 ], [ %.0260871, %197 ], [ %.0260871, %218 ], [ %.0260871, %231 ], [ %.0260871, %244 ], [ %.0260871, %259 ], [ %.0260871, %277 ], [ %.0260871, %272 ], [ %.0260871, %310 ], [ %.0260871, %332 ], [ %.0260871, %329 ]
  %.2250.ph = phi ptr [ %.1249, %338 ], [ %.1249, %345 ], [ %.0248876, %41 ], [ %.0248876, %55 ], [ %.0248876, %71 ], [ %.0248876, %92 ], [ %.0248876, %87 ], [ %102, %104 ], [ %.0248876, %120 ], [ %.0248876, %133 ], [ %.0248876, %145 ], [ %.0248876, %181 ], [ %.0248876, %202 ], [ %.0248876, %197 ], [ %.0248876, %218 ], [ %.0248876, %231 ], [ %.0248876, %244 ], [ %.0248876, %259 ], [ %.0248876, %277 ], [ %.0248876, %272 ], [ %.0248876, %310 ], [ %.0248876, %332 ], [ %.0248876, %329 ]
  %.2.ph = phi ptr [ %.1247, %338 ], [ %.1247, %345 ], [ %.0246877, %41 ], [ %.0246877, %55 ], [ %.0246877, %71 ], [ %.0246877, %92 ], [ %.0246877, %87 ], [ null, %104 ], [ %.0246877, %120 ], [ %.0246877, %133 ], [ %.0246877, %145 ], [ %.0246877, %181 ], [ %.0246877, %202 ], [ %.0246877, %197 ], [ %.0246877, %218 ], [ %.0246877, %231 ], [ %.0246877, %244 ], [ %.0246877, %259 ], [ %.0246877, %277 ], [ %.0246877, %272 ], [ %.0246877, %310 ], [ %.0246877, %332 ], [ %.0246877, %329 ]
  call void @gmssl_secure_clear(ptr noundef nonnull %15, i64 noundef 128) #12
  %.not380 = icmp eq ptr %.0253750, null
  br i1 %.not380, label %545, label %543

543:                                              ; preds = %.thread415, %.thread395, %542
  %.0253749 = phi ptr [ %.1254, %.thread395 ], [ %.0253750, %542 ], [ %.1254, %.thread415 ]
  %.0267389412 = phi i32 [ %.0267, %.thread395 ], [ %.0267.ph, %542 ], [ 1, %.thread415 ]
  %.2265390410 = phi ptr [ %.1264, %.thread395 ], [ %.2265.ph, %542 ], [ %.1264, %.thread415 ]
  %.2262391408 = phi ptr [ %.1261, %.thread395 ], [ %.2262.ph, %542 ], [ %.1261, %.thread415 ]
  %.2250393405 = phi ptr [ %.1249, %.thread395 ], [ %.2250.ph, %542 ], [ %.1249, %.thread415 ]
  %.2394403 = phi ptr [ %.1247, %.thread395 ], [ %.2.ph, %542 ], [ %.1247, %.thread415 ]
  %544 = call i32 @fclose(ptr noundef nonnull %.0253749)
  br label %545

545:                                              ; preds = %.thread424, %543, %542
  %.0267389413 = phi i32 [ %.0267389412, %543 ], [ %.0267.ph, %542 ], [ 1, %.thread424 ]
  %.2265390411 = phi ptr [ %.2265390410, %543 ], [ %.2265.ph, %542 ], [ %.0263841, %.thread424 ]
  %.2262391409 = phi ptr [ %.2262391408, %543 ], [ %.2262.ph, %542 ], [ %.0260817, %.thread424 ]
  %.2250393406 = phi ptr [ %.2250393405, %543 ], [ %.2250.ph, %542 ], [ %.0248703, %.thread424 ]
  %.2394404 = phi ptr [ %.2394403, %543 ], [ %.2.ph, %542 ], [ %.0246679, %.thread424 ]
  %546 = icmp ne ptr %.2265390411, null
  %547 = icmp ne ptr %.2262391409, null
  %or.cond10 = select i1 %546, i1 %547, i1 false
  br i1 %or.cond10, label %548, label %550

548:                                              ; preds = %545
  %549 = call i32 @fclose(ptr noundef nonnull %.2262391409)
  br label %550

550:                                              ; preds = %548, %545
  %551 = icmp ne ptr %.2250393406, null
  %552 = icmp ne ptr %.2394404, null
  %or.cond12 = select i1 %551, i1 %552, i1 false
  br i1 %or.cond12, label %553, label %555

553:                                              ; preds = %550
  %554 = call i32 @fclose(ptr noundef nonnull %.2394404)
  br label %555

555:                                              ; preds = %550, %553, %482, %35
  %.0266 = phi i32 [ 1, %35 ], [ -1, %482 ], [ %.0267389413, %553 ], [ %.0267389413, %550 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #12
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %28) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #12
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %26) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #12
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #12
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 8192, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #12
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #12
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %7) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #12
  call void @llvm.lifetime.end.p0(i64 8192, ptr nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #12
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %3) #12
  ret i32 %.0266
}

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

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

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

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strncpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly, i64 noundef) local_unnamed_addr #7

declare i32 @hex_to_bytes(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #9

declare i32 @x509_cert_new_from_file(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #8

; Function Attrs: nounwind uwtable
declare hidden i32 @ext_key_usage_set(ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @x509_general_names_add_general_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

declare i32 @x509_key_purpose_from_name(ptr noundef) local_unnamed_addr #8

declare i32 @x509_req_from_pem(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #8

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #7

declare i32 @x509_req_verify(ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

declare i32 @x509_req_get_details(ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #8

declare i32 @x509_cert_get_subject(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #8

declare i32 @x509_cert_get_subject_public_key(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #8

declare i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #8

declare i32 @sm2_public_key_equ(ptr noundef, ptr noundef) local_unnamed_addr #8

declare i32 @rand_bytes(ptr noundef, i64 noundef) local_unnamed_addr #8

; Function Attrs: nounwind
declare i64 @time(ptr noundef) local_unnamed_addr #5

declare i32 @x509_validity_add_days(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_default_authority_key_identifier(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_subject_key_identifier_ex(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_key_usage(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_subject_alt_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_issuer_alt_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_basic_constraints(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_ext_key_usage(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_crl_distribution_points(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_inhibit_any_policy(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) local_unnamed_addr #8

declare i32 @x509_exts_add_authority_info_access(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

declare i32 @x509_cert_sign_to_der(i32 noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #8

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #10

declare i32 @x509_cert_to_pem(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #8

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) local_unnamed_addr #8

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

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 = { 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 nofree nosync nounwind willreturn memory(none) "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 nofree nounwind willreturn memory(argmem: readwrite) "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 = { "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 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(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 #11 = { 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 #12 = { nounwind }
attributes #13 = { cold nounwind }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { nounwind willreturn memory(none) }
attributes #16 = { nounwind allocsize(0) }

!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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass