; LLVM IR from wmcnamara/crynn :: lib/thirdparty/assimp/contrib/zlib/contrib/minizip (minizip)

; 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.zip_fileinfo = type { %struct.tm_zip_s, i64, i64, i64 }
%struct.tm_zip_s = type { i32, i32, i32, i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [21 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @filetime(ptr noundef, ptr noundef, ptr noundef) #0

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_exist_file(ptr noundef) #0

declare noalias ptr @fopen64(ptr noundef, ptr noundef) #4

declare i32 @fclose(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @do_banner() #0

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

; Function Attrs: nounwind uwtable
declare dso_local void @do_help() #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @getFileCrc(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #0

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @isLargeFile(ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @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 i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca [272 x i8], align 16
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i8, align 1
  %24 = alloca [128 x i8], align 16
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %struct.zip_fileinfo, align 8
  %33 = alloca i64, align 8
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  store i32 0, ptr %3, 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) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 -1, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 272, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  store i32 0, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  store i32 0, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  store ptr null, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  store ptr null, ptr %16, align 8, !tbaa !9
  call void @do_banner()
  %37 = load i32, ptr %4, align 4, !tbaa !5
  %38 = icmp eq i32 %37, 1
  br i1 %38, label %39, label %40

39:                                               ; preds = %2
  call void @do_help()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %591

40:                                               ; preds = %2
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %41

41:                                               ; preds = %139, %40
  %42 = load i32, ptr %6, align 4, !tbaa !5
  %43 = load i32, ptr %4, align 4, !tbaa !5
  %44 = icmp slt i32 %42, %43
  br i1 %44, label %45, label %142

45:                                               ; preds = %41
  %46 = load ptr, ptr %5, align 8, !tbaa !9
  %47 = load i32, ptr %6, align 4, !tbaa !5
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds ptr, ptr %46, i64 %48
  %50 = load ptr, ptr %49, align 8, !tbaa !9
  %51 = load i8, ptr %50, align 1, !tbaa !11
  %52 = sext i8 %51 to i32
  %53 = icmp eq i32 %52, 45
  br i1 %53, label %54, label %132

54:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %55 = load ptr, ptr %5, align 8, !tbaa !9
  %56 = load i32, ptr %6, align 4, !tbaa !5
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds ptr, ptr %55, i64 %57
  %59 = load ptr, ptr %58, align 8, !tbaa !9
  %60 = getelementptr inbounds i8, ptr %59, i64 1
  store ptr %60, ptr %18, align 8, !tbaa !9
  br label %61

61:                                               ; preds = %130, %54
  %62 = load ptr, ptr %18, align 8, !tbaa !9
  %63 = load i8, ptr %62, align 1, !tbaa !11
  %64 = sext i8 %63 to i32
  %65 = icmp ne i32 %64, 0
  br i1 %65, label %66, label %131

66:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #7
  %67 = load ptr, ptr %18, align 8, !tbaa !9
  %68 = getelementptr inbounds i8, ptr %67, i32 1
  store ptr %68, ptr %18, align 8, !tbaa !9
  %69 = load i8, ptr %67, align 1, !tbaa !11
  store i8 %69, ptr %19, align 1, !tbaa !11
  %70 = load i8, ptr %19, align 1, !tbaa !11
  %71 = sext i8 %70 to i32
  %72 = icmp eq i32 %71, 111
  br i1 %72, label %77, label %73

73:                                               ; preds = %66
  %74 = load i8, ptr %19, align 1, !tbaa !11
  %75 = sext i8 %74 to i32
  %76 = icmp eq i32 %75, 79
  br i1 %76, label %77, label %78

77:                                               ; preds = %73, %66
  store i32 1, ptr %7, align 4, !tbaa !5
  br label %78

78:                                               ; preds = %77, %73
  %79 = load i8, ptr %19, align 1, !tbaa !11
  %80 = sext i8 %79 to i32
  %81 = icmp eq i32 %80, 97
  br i1 %81, label %86, label %82

82:                                               ; preds = %78
  %83 = load i8, ptr %19, align 1, !tbaa !11
  %84 = sext i8 %83 to i32
  %85 = icmp eq i32 %84, 65
  br i1 %85, label %86, label %87

86:                                               ; preds = %82, %78
  store i32 2, ptr %7, align 4, !tbaa !5
  br label %87

87:                                               ; preds = %86, %82
  %88 = load i8, ptr %19, align 1, !tbaa !11
  %89 = sext i8 %88 to i32
  %90 = icmp sge i32 %89, 48
  br i1 %90, label %91, label %99

91:                                               ; preds = %87
  %92 = load i8, ptr %19, align 1, !tbaa !11
  %93 = sext i8 %92 to i32
  %94 = icmp sle i32 %93, 57
  br i1 %94, label %95, label %99

95:                                               ; preds = %91
  %96 = load i8, ptr %19, align 1, !tbaa !11
  %97 = sext i8 %96 to i32
  %98 = sub nsw i32 %97, 48
  store i32 %98, ptr %8, align 4, !tbaa !5
  br label %99

99:                                               ; preds = %95, %91, %87
  %100 = load i8, ptr %19, align 1, !tbaa !11
  %101 = sext i8 %100 to i32
  %102 = icmp eq i32 %101, 106
  br i1 %102, label %107, label %103

103:                                              ; preds = %99
  %104 = load i8, ptr %19, align 1, !tbaa !11
  %105 = sext i8 %104 to i32
  %106 = icmp eq i32 %105, 74
  br i1 %106, label %107, label %108

107:                                              ; preds = %103, %99
  store i32 1, ptr %9, align 4, !tbaa !5
  br label %108

108:                                              ; preds = %107, %103
  %109 = load i8, ptr %19, align 1, !tbaa !11
  %110 = sext i8 %109 to i32
  %111 = icmp eq i32 %110, 112
  br i1 %111, label %116, label %112

112:                                              ; preds = %108
  %113 = load i8, ptr %19, align 1, !tbaa !11
  %114 = sext i8 %113 to i32
  %115 = icmp eq i32 %114, 80
  br i1 %115, label %116, label %130

116:                                              ; preds = %112, %108
  %117 = load i32, ptr %6, align 4, !tbaa !5
  %118 = add nsw i32 %117, 1
  %119 = load i32, ptr %4, align 4, !tbaa !5
  %120 = icmp slt i32 %118, %119
  br i1 %120, label %121, label %130

121:                                              ; preds = %116
  %122 = load ptr, ptr %5, align 8, !tbaa !9
  %123 = load i32, ptr %6, align 4, !tbaa !5
  %124 = add nsw i32 %123, 1
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds ptr, ptr %122, i64 %125
  %127 = load ptr, ptr %126, align 8, !tbaa !9
  store ptr %127, ptr %16, align 8, !tbaa !9
  %128 = load i32, ptr %6, align 4, !tbaa !5
  %129 = add nsw i32 %128, 1
  store i32 %129, ptr %6, align 4, !tbaa !5
  br label %130

130:                                              ; preds = %121, %116, %112
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  br label %61, !llvm.loop !12

131:                                              ; preds = %61
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %138

132:                                              ; preds = %45
  %133 = load i32, ptr %10, align 4, !tbaa !5
  %134 = icmp eq i32 %133, 0
  br i1 %134, label %135, label %137

135:                                              ; preds = %132
  %136 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %136, ptr %10, align 4, !tbaa !5
  br label %137

137:                                              ; preds = %135, %132
  br label %138

138:                                              ; preds = %137, %131
  br label %139

139:                                              ; preds = %138
  %140 = load i32, ptr %6, align 4, !tbaa !5
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %6, align 4, !tbaa !5
  br label %41, !llvm.loop !14

142:                                              ; preds = %41
  br label %143

143:                                              ; preds = %142
  store i32 16384, ptr %14, align 4, !tbaa !5
  %144 = load i32, ptr %14, align 4, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = call noalias ptr @malloc(i64 noundef %145) #8
  store ptr %146, ptr %15, align 8, !tbaa !9
  %147 = load ptr, ptr %15, align 8, !tbaa !9
  %148 = icmp eq ptr %147, null
  br i1 %148, label %149, label %151

149:                                              ; preds = %143
  %150 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  store i32 -104, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %591

151:                                              ; preds = %143
  %152 = load i32, ptr %10, align 4, !tbaa !5
  %153 = icmp eq i32 %152, 0
  br i1 %153, label %154, label %155

154:                                              ; preds = %151
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %258

155:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !5
  store i32 1, ptr %12, align 4, !tbaa !5
  %156 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %157 = load ptr, ptr %5, align 8, !tbaa !9
  %158 = load i32, ptr %10, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds ptr, ptr %157, i64 %159
  %161 = load ptr, ptr %160, align 8, !tbaa !9
  %162 = call ptr @strncpy(ptr noundef %156, ptr noundef %161, i64 noundef 255) #7
  %163 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 256
  store i8 0, ptr %163, align 16, !tbaa !11
  %164 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %165 = call i64 @strlen(ptr noundef %164) #9
  %166 = trunc i64 %165 to i32
  store i32 %166, ptr %21, align 4, !tbaa !5
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %167

167:                                              ; preds = %180, %155
  %168 = load i32, ptr %20, align 4, !tbaa !5
  %169 = load i32, ptr %21, align 4, !tbaa !5
  %170 = icmp slt i32 %168, %169
  br i1 %170, label %171, label %183

171:                                              ; preds = %167
  %172 = load i32, ptr %20, align 4, !tbaa !5
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 %173
  %175 = load i8, ptr %174, align 1, !tbaa !11
  %176 = sext i8 %175 to i32
  %177 = icmp eq i32 %176, 46
  br i1 %177, label %178, label %179

178:                                              ; preds = %171
  store i32 1, ptr %22, align 4, !tbaa !5
  br label %179

179:                                              ; preds = %178, %171
  br label %180

180:                                              ; preds = %179
  %181 = load i32, ptr %20, align 4, !tbaa !5
  %182 = add nsw i32 %181, 1
  store i32 %182, ptr %20, align 4, !tbaa !5
  br label %167, !llvm.loop !15

183:                                              ; preds = %167
  %184 = load i32, ptr %22, align 4, !tbaa !5
  %185 = icmp eq i32 %184, 0
  br i1 %185, label %186, label %189

186:                                              ; preds = %183
  %187 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %188 = call ptr @strcat(ptr noundef %187, ptr noundef @.str.9) #7
  br label %189

189:                                              ; preds = %186, %183
  %190 = load i32, ptr %7, align 4, !tbaa !5
  %191 = icmp eq i32 %190, 2
  br i1 %191, label %192, label %198

192:                                              ; preds = %189
  %193 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %194 = call i32 @check_exist_file(ptr noundef %193)
  %195 = icmp eq i32 %194, 0
  br i1 %195, label %196, label %197

196:                                              ; preds = %192
  store i32 1, ptr %7, align 4, !tbaa !5
  br label %197

197:                                              ; preds = %196, %192
  br label %257

198:                                              ; preds = %189
  %199 = load i32, ptr %7, align 4, !tbaa !5
  %200 = icmp eq i32 %199, 0
  br i1 %200, label %201, label %256

201:                                              ; preds = %198
  %202 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %203 = call i32 @check_exist_file(ptr noundef %202)
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %205, label %255

205:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  store i8 0, ptr %23, align 1, !tbaa !11
  br label %206

206:                                              ; preds = %242, %205
  call void @llvm.lifetime.start.p0(i64 128, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %207 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %208 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, ptr noundef %207)
  %209 = getelementptr inbounds [128 x i8], ptr %24, i64 0, i64 0
  %210 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.11, ptr noundef %209)
  store i32 %210, ptr %25, align 4, !tbaa !5
  %211 = load i32, ptr %25, align 4, !tbaa !5
  %212 = icmp ne i32 %211, 1
  br i1 %212, label %213, label %214

213:                                              ; preds = %206
  call void @exit(i32 noundef 1) #10
  unreachable

214:                                              ; preds = %206
  %215 = getelementptr inbounds [128 x i8], ptr %24, i64 0, i64 0
  %216 = load i8, ptr %215, align 16, !tbaa !11
  store i8 %216, ptr %23, align 1, !tbaa !11
  %217 = load i8, ptr %23, align 1, !tbaa !11
  %218 = sext i8 %217 to i32
  %219 = icmp sge i32 %218, 97
  br i1 %219, label %220, label %229

220:                                              ; preds = %214
  %221 = load i8, ptr %23, align 1, !tbaa !11
  %222 = sext i8 %221 to i32
  %223 = icmp sle i32 %222, 122
  br i1 %223, label %224, label %229

224:                                              ; preds = %220
  %225 = load i8, ptr %23, align 1, !tbaa !11
  %226 = sext i8 %225 to i32
  %227 = sub nsw i32 %226, 32
  %228 = trunc i32 %227 to i8
  store i8 %228, ptr %23, align 1, !tbaa !11
  br label %229

229:                                              ; preds = %224, %220, %214
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr %24) #7
  br label %230

230:                                              ; preds = %229
  %231 = load i8, ptr %23, align 1, !tbaa !11
  %232 = sext i8 %231 to i32
  %233 = icmp ne i32 %232, 89
  br i1 %233, label %234, label %242

234:                                              ; preds = %230
  %235 = load i8, ptr %23, align 1, !tbaa !11
  %236 = sext i8 %235 to i32
  %237 = icmp ne i32 %236, 78
  br i1 %237, label %238, label %242

238:                                              ; preds = %234
  %239 = load i8, ptr %23, align 1, !tbaa !11
  %240 = sext i8 %239 to i32
  %241 = icmp ne i32 %240, 65
  br label %242

242:                                              ; preds = %238, %234, %230
  %243 = phi i1 [ false, %234 ], [ false, %230 ], [ %241, %238 ]
  br i1 %243, label %206, label %244, !llvm.loop !16

244:                                              ; preds = %242
  %245 = load i8, ptr %23, align 1, !tbaa !11
  %246 = sext i8 %245 to i32
  %247 = icmp eq i32 %246, 78
  br i1 %247, label %248, label %249

248:                                              ; preds = %244
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %249

249:                                              ; preds = %248, %244
  %250 = load i8, ptr %23, align 1, !tbaa !11
  %251 = sext i8 %250 to i32
  %252 = icmp eq i32 %251, 65
  br i1 %252, label %253, label %254

253:                                              ; preds = %249
  store i32 2, ptr %7, align 4, !tbaa !5
  br label %254

254:                                              ; preds = %253, %249
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  br label %255

255:                                              ; preds = %254, %201
  br label %256

256:                                              ; preds = %255, %198
  br label %257

257:                                              ; preds = %256, %197
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %258

258:                                              ; preds = %257, %154
  %259 = load i32, ptr %12, align 4, !tbaa !5
  %260 = icmp eq i32 %259, 1
  br i1 %260, label %261, label %588

261:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  %262 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %263 = load i32, ptr %7, align 4, !tbaa !5
  %264 = icmp eq i32 %263, 2
  %265 = zext i1 %264 to i64
  %266 = select i1 %264, i32 2, i32 0
  %267 = call ptr @zipOpen64(ptr noundef %262, i32 noundef %266)
  store ptr %267, ptr %26, align 8, !tbaa !9
  %268 = load ptr, ptr %26, align 8, !tbaa !9
  %269 = icmp eq ptr %268, null
  br i1 %269, label %270, label %273

270:                                              ; preds = %261
  %271 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %272 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, ptr noundef %271)
  store i32 -1, ptr %13, align 4, !tbaa !5
  br label %276

273:                                              ; preds = %261
  %274 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %275 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, ptr noundef %274)
  br label %276

276:                                              ; preds = %273, %270
  %277 = load i32, ptr %10, align 4, !tbaa !5
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %6, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %576, %276
  %280 = load i32, ptr %6, align 4, !tbaa !5
  %281 = load i32, ptr %4, align 4, !tbaa !5
  %282 = icmp slt i32 %280, %281
  br i1 %282, label %283, label %286

283:                                              ; preds = %279
  %284 = load i32, ptr %13, align 4, !tbaa !5
  %285 = icmp eq i32 %284, 0
  br label %286

286:                                              ; preds = %283, %279
  %287 = phi i1 [ false, %279 ], [ %285, %283 ]
  br i1 %287, label %288, label %579

288:                                              ; preds = %286
  %289 = load ptr, ptr %5, align 8, !tbaa !9
  %290 = load i32, ptr %6, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds ptr, ptr %289, i64 %291
  %293 = load ptr, ptr %292, align 8, !tbaa !9
  %294 = load i8, ptr %293, align 1, !tbaa !11
  %295 = sext i8 %294 to i32
  %296 = icmp eq i32 %295, 45
  br i1 %296, label %306, label %297

297:                                              ; preds = %288
  %298 = load ptr, ptr %5, align 8, !tbaa !9
  %299 = load i32, ptr %6, align 4, !tbaa !5
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds ptr, ptr %298, i64 %300
  %302 = load ptr, ptr %301, align 8, !tbaa !9
  %303 = load i8, ptr %302, align 1, !tbaa !11
  %304 = sext i8 %303 to i32
  %305 = icmp eq i32 %304, 47
  br i1 %305, label %306, label %394

306:                                              ; preds = %297, %288
  %307 = load ptr, ptr %5, align 8, !tbaa !9
  %308 = load i32, ptr %6, align 4, !tbaa !5
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds ptr, ptr %307, i64 %309
  %311 = load ptr, ptr %310, align 8, !tbaa !9
  %312 = getelementptr inbounds i8, ptr %311, i64 1
  %313 = load i8, ptr %312, align 1, !tbaa !11
  %314 = sext i8 %313 to i32
  %315 = icmp eq i32 %314, 111
  br i1 %315, label %386, label %316

316:                                              ; preds = %306
  %317 = load ptr, ptr %5, align 8, !tbaa !9
  %318 = load i32, ptr %6, align 4, !tbaa !5
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds ptr, ptr %317, i64 %319
  %321 = load ptr, ptr %320, align 8, !tbaa !9
  %322 = getelementptr inbounds i8, ptr %321, i64 1
  %323 = load i8, ptr %322, align 1, !tbaa !11
  %324 = sext i8 %323 to i32
  %325 = icmp eq i32 %324, 79
  br i1 %325, label %386, label %326

326:                                              ; preds = %316
  %327 = load ptr, ptr %5, align 8, !tbaa !9
  %328 = load i32, ptr %6, align 4, !tbaa !5
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds ptr, ptr %327, i64 %329
  %331 = load ptr, ptr %330, align 8, !tbaa !9
  %332 = getelementptr inbounds i8, ptr %331, i64 1
  %333 = load i8, ptr %332, align 1, !tbaa !11
  %334 = sext i8 %333 to i32
  %335 = icmp eq i32 %334, 97
  br i1 %335, label %386, label %336

336:                                              ; preds = %326
  %337 = load ptr, ptr %5, align 8, !tbaa !9
  %338 = load i32, ptr %6, align 4, !tbaa !5
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds ptr, ptr %337, i64 %339
  %341 = load ptr, ptr %340, align 8, !tbaa !9
  %342 = getelementptr inbounds i8, ptr %341, i64 1
  %343 = load i8, ptr %342, align 1, !tbaa !11
  %344 = sext i8 %343 to i32
  %345 = icmp eq i32 %344, 65
  br i1 %345, label %386, label %346

346:                                              ; preds = %336
  %347 = load ptr, ptr %5, align 8, !tbaa !9
  %348 = load i32, ptr %6, align 4, !tbaa !5
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds ptr, ptr %347, i64 %349
  %351 = load ptr, ptr %350, align 8, !tbaa !9
  %352 = getelementptr inbounds i8, ptr %351, i64 1
  %353 = load i8, ptr %352, align 1, !tbaa !11
  %354 = sext i8 %353 to i32
  %355 = icmp eq i32 %354, 112
  br i1 %355, label %386, label %356

356:                                              ; preds = %346
  %357 = load ptr, ptr %5, align 8, !tbaa !9
  %358 = load i32, ptr %6, align 4, !tbaa !5
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds ptr, ptr %357, i64 %359
  %361 = load ptr, ptr %360, align 8, !tbaa !9
  %362 = getelementptr inbounds i8, ptr %361, i64 1
  %363 = load i8, ptr %362, align 1, !tbaa !11
  %364 = sext i8 %363 to i32
  %365 = icmp eq i32 %364, 80
  br i1 %365, label %386, label %366

366:                                              ; preds = %356
  %367 = load ptr, ptr %5, align 8, !tbaa !9
  %368 = load i32, ptr %6, align 4, !tbaa !5
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds ptr, ptr %367, i64 %369
  %371 = load ptr, ptr %370, align 8, !tbaa !9
  %372 = getelementptr inbounds i8, ptr %371, i64 1
  %373 = load i8, ptr %372, align 1, !tbaa !11
  %374 = sext i8 %373 to i32
  %375 = icmp sge i32 %374, 48
  br i1 %375, label %386, label %376

376:                                              ; preds = %366
  %377 = load ptr, ptr %5, align 8, !tbaa !9
  %378 = load i32, ptr %6, align 4, !tbaa !5
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds ptr, ptr %377, i64 %379
  %381 = load ptr, ptr %380, align 8, !tbaa !9
  %382 = getelementptr inbounds i8, ptr %381, i64 1
  %383 = load i8, ptr %382, align 1, !tbaa !11
  %384 = sext i8 %383 to i32
  %385 = icmp sle i32 %384, 57
  br i1 %385, label %386, label %394

386:                                              ; preds = %376, %366, %356, %346, %336, %326, %316, %306
  %387 = load ptr, ptr %5, align 8, !tbaa !9
  %388 = load i32, ptr %6, align 4, !tbaa !5
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds ptr, ptr %387, i64 %389
  %391 = load ptr, ptr %390, align 8, !tbaa !9
  %392 = call i64 @strlen(ptr noundef %391) #9
  %393 = icmp eq i64 %392, 2
  br i1 %393, label %575, label %394

394:                                              ; preds = %386, %376, %297
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %395 = load ptr, ptr %5, align 8, !tbaa !9
  %396 = load i32, ptr %6, align 4, !tbaa !5
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds ptr, ptr %395, i64 %397
  %399 = load ptr, ptr %398, align 8, !tbaa !9
  store ptr %399, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  store i64 0, ptr %33, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  store i32 0, ptr %34, align 4, !tbaa !5
  %400 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 0
  %401 = getelementptr inbounds %struct.tm_zip_s, ptr %400, i32 0, i32 5
  store i32 0, ptr %401, align 4, !tbaa !19
  %402 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 0
  %403 = getelementptr inbounds %struct.tm_zip_s, ptr %402, i32 0, i32 4
  store i32 0, ptr %403, align 8, !tbaa !22
  %404 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 0
  %405 = getelementptr inbounds %struct.tm_zip_s, ptr %404, i32 0, i32 3
  store i32 0, ptr %405, align 4, !tbaa !23
  %406 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 0
  %407 = getelementptr inbounds %struct.tm_zip_s, ptr %406, i32 0, i32 2
  store i32 0, ptr %407, align 8, !tbaa !24
  %408 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 0
  %409 = getelementptr inbounds %struct.tm_zip_s, ptr %408, i32 0, i32 1
  store i32 0, ptr %409, align 4, !tbaa !25
  %410 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 0
  %411 = getelementptr inbounds %struct.tm_zip_s, ptr %410, i32 0, i32 0
  store i32 0, ptr %411, align 8, !tbaa !26
  %412 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 1
  store i64 0, ptr %412, align 8, !tbaa !27
  %413 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 2
  store i64 0, ptr %413, align 8, !tbaa !28
  %414 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 3
  store i64 0, ptr %414, align 8, !tbaa !29
  %415 = load ptr, ptr %30, align 8, !tbaa !9
  %416 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 0
  %417 = getelementptr inbounds %struct.zip_fileinfo, ptr %32, i32 0, i32 1
  %418 = call i64 @filetime(ptr noundef %415, ptr noundef %416, ptr noundef %417)
  %419 = load ptr, ptr %16, align 8, !tbaa !9
  %420 = icmp ne ptr %419, null
  br i1 %420, label %421, label %430

421:                                              ; preds = %394
  %422 = load i32, ptr %13, align 4, !tbaa !5
  %423 = icmp eq i32 %422, 0
  br i1 %423, label %424, label %430

424:                                              ; preds = %421
  %425 = load ptr, ptr %30, align 8, !tbaa !9
  %426 = load ptr, ptr %15, align 8, !tbaa !9
  %427 = load i32, ptr %14, align 4, !tbaa !5
  %428 = sext i32 %427 to i64
  %429 = call i32 @getFileCrc(ptr noundef %425, ptr noundef %426, i64 noundef %428, ptr noundef %33)
  store i32 %429, ptr %13, align 4, !tbaa !5
  br label %430

430:                                              ; preds = %424, %421, %394
  %431 = load ptr, ptr %30, align 8, !tbaa !9
  %432 = call i32 @isLargeFile(ptr noundef %431)
  store i32 %432, ptr %34, align 4, !tbaa !5
  %433 = load ptr, ptr %30, align 8, !tbaa !9
  store ptr %433, ptr %31, align 8, !tbaa !9
  br label %434

434:                                              ; preds = %448, %430
  %435 = load ptr, ptr %31, align 8, !tbaa !9
  %436 = getelementptr inbounds i8, ptr %435, i64 0
  %437 = load i8, ptr %436, align 1, !tbaa !11
  %438 = sext i8 %437 to i32
  %439 = icmp eq i32 %438, 92
  br i1 %439, label %446, label %440

440:                                              ; preds = %434
  %441 = load ptr, ptr %31, align 8, !tbaa !9
  %442 = getelementptr inbounds i8, ptr %441, i64 0
  %443 = load i8, ptr %442, align 1, !tbaa !11
  %444 = sext i8 %443 to i32
  %445 = icmp eq i32 %444, 47
  br label %446

446:                                              ; preds = %440, %434
  %447 = phi i1 [ true, %434 ], [ %445, %440 ]
  br i1 %447, label %448, label %451

448:                                              ; preds = %446
  %449 = load ptr, ptr %31, align 8, !tbaa !9
  %450 = getelementptr inbounds i8, ptr %449, i32 1
  store ptr %450, ptr %31, align 8, !tbaa !9
  br label %434, !llvm.loop !30

451:                                              ; preds = %446
  %452 = load i32, ptr %9, align 4, !tbaa !5
  %453 = icmp ne i32 %452, 0
  br i1 %453, label %454, label %483

454:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  store ptr null, ptr %36, align 8, !tbaa !9
  %455 = load ptr, ptr %31, align 8, !tbaa !9
  store ptr %455, ptr %35, align 8, !tbaa !9
  br label %456

456:                                              ; preds = %473, %454
  %457 = load ptr, ptr %35, align 8, !tbaa !9
  %458 = load i8, ptr %457, align 1, !tbaa !11
  %459 = icmp ne i8 %458, 0
  br i1 %459, label %460, label %476

460:                                              ; preds = %456
  %461 = load ptr, ptr %35, align 8, !tbaa !9
  %462 = load i8, ptr %461, align 1, !tbaa !11
  %463 = sext i8 %462 to i32
  %464 = icmp eq i32 %463, 92
  br i1 %464, label %470, label %465

465:                                              ; preds = %460
  %466 = load ptr, ptr %35, align 8, !tbaa !9
  %467 = load i8, ptr %466, align 1, !tbaa !11
  %468 = sext i8 %467 to i32
  %469 = icmp eq i32 %468, 47
  br i1 %469, label %470, label %472

470:                                              ; preds = %465, %460
  %471 = load ptr, ptr %35, align 8, !tbaa !9
  store ptr %471, ptr %36, align 8, !tbaa !9
  br label %472

472:                                              ; preds = %470, %465
  br label %473

473:                                              ; preds = %472
  %474 = load ptr, ptr %35, align 8, !tbaa !9
  %475 = getelementptr inbounds i8, ptr %474, i32 1
  store ptr %475, ptr %35, align 8, !tbaa !9
  br label %456, !llvm.loop !31

476:                                              ; preds = %456
  %477 = load ptr, ptr %36, align 8, !tbaa !9
  %478 = icmp ne ptr %477, null
  br i1 %478, label %479, label %482

479:                                              ; preds = %476
  %480 = load ptr, ptr %36, align 8, !tbaa !9
  %481 = getelementptr inbounds i8, ptr %480, i64 1
  store ptr %481, ptr %31, align 8, !tbaa !9
  br label %482

482:                                              ; preds = %479, %476
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %483

483:                                              ; preds = %482, %451
  %484 = load ptr, ptr %26, align 8, !tbaa !9
  %485 = load ptr, ptr %31, align 8, !tbaa !9
  %486 = load i32, ptr %8, align 4, !tbaa !5
  %487 = icmp ne i32 %486, 0
  %488 = zext i1 %487 to i64
  %489 = select i1 %487, i32 8, i32 0
  %490 = load i32, ptr %8, align 4, !tbaa !5
  %491 = load ptr, ptr %16, align 8, !tbaa !9
  %492 = load i64, ptr %33, align 8, !tbaa !17
  %493 = load i32, ptr %34, align 4, !tbaa !5
  %494 = call i32 @zipOpenNewFileInZip3_64(ptr noundef %484, ptr noundef %485, ptr noundef %32, ptr noundef null, i32 noundef 0, ptr noundef null, i32 noundef 0, ptr noundef null, i32 noundef %489, i32 noundef %490, i32 noundef 0, i32 noundef -15, i32 noundef 8, i32 noundef 0, ptr noundef %491, i64 noundef %492, i32 noundef %493)
  store i32 %494, ptr %13, align 4, !tbaa !5
  %495 = load i32, ptr %13, align 4, !tbaa !5
  %496 = icmp ne i32 %495, 0
  br i1 %496, label %497, label %500

497:                                              ; preds = %483
  %498 = load ptr, ptr %30, align 8, !tbaa !9
  %499 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, ptr noundef %498)
  br label %509

500:                                              ; preds = %483
  %501 = load ptr, ptr %30, align 8, !tbaa !9
  %502 = call noalias ptr @fopen64(ptr noundef %501, ptr noundef @.str.1)
  store ptr %502, ptr %28, align 8, !tbaa !9
  %503 = load ptr, ptr %28, align 8, !tbaa !9
  %504 = icmp eq ptr %503, null
  br i1 %504, label %505, label %508

505:                                              ; preds = %500
  store i32 -1, ptr %13, align 4, !tbaa !5
  %506 = load ptr, ptr %30, align 8, !tbaa !9
  %507 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, ptr noundef %506)
  br label %508

508:                                              ; preds = %505, %500
  br label %509

509:                                              ; preds = %508, %497
  %510 = load i32, ptr %13, align 4, !tbaa !5
  %511 = icmp eq i32 %510, 0
  br i1 %511, label %512, label %555

512:                                              ; preds = %509
  br label %513

513:                                              ; preds = %552, %512
  store i32 0, ptr %13, align 4, !tbaa !5
  %514 = load ptr, ptr %15, align 8, !tbaa !9
  %515 = load i32, ptr %14, align 4, !tbaa !5
  %516 = sext i32 %515 to i64
  %517 = load ptr, ptr %28, align 8, !tbaa !9
  %518 = call i64 @fread(ptr noundef %514, i64 noundef 1, i64 noundef %516, ptr noundef %517)
  %519 = trunc i64 %518 to i32
  store i32 %519, ptr %29, align 4, !tbaa !5
  %520 = load i32, ptr %29, align 4, !tbaa !5
  %521 = load i32, ptr %14, align 4, !tbaa !5
  %522 = icmp slt i32 %520, %521
  br i1 %522, label %523, label %531

523:                                              ; preds = %513
  %524 = load ptr, ptr %28, align 8, !tbaa !9
  %525 = call i32 @feof(ptr noundef %524) #7
  %526 = icmp eq i32 %525, 0
  br i1 %526, label %527, label %530

527:                                              ; preds = %523
  %528 = load ptr, ptr %30, align 8, !tbaa !9
  %529 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, ptr noundef %528)
  store i32 -1, ptr %13, align 4, !tbaa !5
  br label %530

530:                                              ; preds = %527, %523
  br label %531

531:                                              ; preds = %530, %513
  %532 = load i32, ptr %29, align 4, !tbaa !5
  %533 = icmp sgt i32 %532, 0
  br i1 %533, label %534, label %545

534:                                              ; preds = %531
  %535 = load ptr, ptr %26, align 8, !tbaa !9
  %536 = load ptr, ptr %15, align 8, !tbaa !9
  %537 = load i32, ptr %29, align 4, !tbaa !5
  %538 = call i32 @zipWriteInFileInZip(ptr noundef %535, ptr noundef %536, i32 noundef %537)
  store i32 %538, ptr %13, align 4, !tbaa !5
  %539 = load i32, ptr %13, align 4, !tbaa !5
  %540 = icmp slt i32 %539, 0
  br i1 %540, label %541, label %544

541:                                              ; preds = %534
  %542 = load ptr, ptr %30, align 8, !tbaa !9
  %543 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, ptr noundef %542)
  br label %544

544:                                              ; preds = %541, %534
  br label %545

545:                                              ; preds = %544, %531
  br label %546

546:                                              ; preds = %545
  %547 = load i32, ptr %13, align 4, !tbaa !5
  %548 = icmp eq i32 %547, 0
  br i1 %548, label %549, label %552

549:                                              ; preds = %546
  %550 = load i32, ptr %29, align 4, !tbaa !5
  %551 = icmp sgt i32 %550, 0
  br label %552

552:                                              ; preds = %549, %546
  %553 = phi i1 [ false, %546 ], [ %551, %549 ]
  br i1 %553, label %513, label %554, !llvm.loop !32

554:                                              ; preds = %552
  br label %555

555:                                              ; preds = %554, %509
  %556 = load ptr, ptr %28, align 8, !tbaa !9
  %557 = icmp ne ptr %556, null
  br i1 %557, label %558, label %561

558:                                              ; preds = %555
  %559 = load ptr, ptr %28, align 8, !tbaa !9
  %560 = call i32 @fclose(ptr noundef %559)
  br label %561

561:                                              ; preds = %558, %555
  %562 = load i32, ptr %13, align 4, !tbaa !5
  %563 = icmp slt i32 %562, 0
  br i1 %563, label %564, label %565

564:                                              ; preds = %561
  store i32 -1, ptr %13, align 4, !tbaa !5
  br label %574

565:                                              ; preds = %561
  %566 = load ptr, ptr %26, align 8, !tbaa !9
  %567 = call i32 @zipCloseFileInZip(ptr noundef %566)
  store i32 %567, ptr %13, align 4, !tbaa !5
  %568 = load i32, ptr %13, align 4, !tbaa !5
  %569 = icmp ne i32 %568, 0
  br i1 %569, label %570, label %573

570:                                              ; preds = %565
  %571 = load ptr, ptr %30, align 8, !tbaa !9
  %572 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, ptr noundef %571)
  br label %573

573:                                              ; preds = %570, %565
  br label %574

574:                                              ; preds = %573, %564
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  br label %575

575:                                              ; preds = %574, %386
  br label %576

576:                                              ; preds = %575
  %577 = load i32, ptr %6, align 4, !tbaa !5
  %578 = add nsw i32 %577, 1
  store i32 %578, ptr %6, align 4, !tbaa !5
  br label %279, !llvm.loop !33

579:                                              ; preds = %286
  %580 = load ptr, ptr %26, align 8, !tbaa !9
  %581 = call i32 @zipClose(ptr noundef %580, ptr noundef null)
  store i32 %581, ptr %27, align 4, !tbaa !5
  %582 = load i32, ptr %27, align 4, !tbaa !5
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %584, label %587

584:                                              ; preds = %579
  %585 = getelementptr inbounds [272 x i8], ptr %11, i64 0, i64 0
  %586 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, ptr noundef %585)
  br label %587

587:                                              ; preds = %584, %579
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %589

588:                                              ; preds = %258
  call void @do_help()
  br label %589

589:                                              ; preds = %588, %587
  %590 = load ptr, ptr %15, align 8, !tbaa !9
  call void @free(ptr noundef %590) #7
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %591

591:                                              ; preds = %589, %149, %39
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 272, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  %592 = load i32, ptr %3, align 4
  ret i32 %592
}

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

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

declare i32 @__isoc99_scanf(ptr noundef, ...) #4

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

declare ptr @zipOpen64(ptr noundef, i32 noundef) #4

declare i32 @zipOpenNewFileInZip3_64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i64 noundef, i32 noundef) #4

declare i32 @zipWriteInFileInZip(ptr noundef, ptr noundef, i32 noundef) #4

declare i32 @zipCloseFileInZip(ptr noundef) #4

declare i32 @zipClose(ptr noundef, ptr noundef) #4

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

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 = { 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 #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 = { "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 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 #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = !{!18, !18, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!20, !6, i64 20}
!20 = !{!"", !21, i64 0, !18, i64 24, !18, i64 32, !18, i64 40}
!21 = !{!"tm_zip_s", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20}
!22 = !{!20, !6, i64 16}
!23 = !{!20, !6, i64 12}
!24 = !{!20, !6, i64 8}
!25 = !{!20, !6, i64 4}
!26 = !{!20, !6, i64 0}
!27 = !{!20, !18, i64 24}
!28 = !{!20, !18, i64 32}
!29 = !{!20, !18, i64 40}
!30 = distinct !{!30, !13}
!31 = distinct !{!31, !13}
!32 = distinct !{!32, !13}
!33 = distinct !{!33, !13}


; 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.zip_fileinfo = type { %struct.tm_zip_s, i64, i64, i64 }
%struct.tm_zip_s = type { i32, i32, i32, i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [21 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @filetime(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; 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 nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #2

; 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 #3

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_exist_file(ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @do_banner() local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare dso_local void @do_help() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @getFileCrc(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #4

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @isLargeFile(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local range(i32 -104, 1) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca [272 x i8], align 16
  %4 = alloca [128 x i8], align 16
  %5 = alloca %struct.zip_fileinfo, align 8
  %6 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 272, ptr nonnull %3) #10
  tail call void @do_banner()
  %7 = icmp eq i32 %0, 1
  br i1 %7, label %9, label %.preheader286

.preheader286:                                    ; preds = %2
  %8 = icmp sgt i32 %0, 1
  br i1 %8, label %.lr.ph306, label %._crit_edge.thread

9:                                                ; preds = %2
  tail call void @do_help()
  br label %157

.lr.ph306:                                        ; preds = %.preheader286, %.loopexit
  %.0168305 = phi i32 [ %31, %.loopexit ], [ 1, %.preheader286 ]
  %.0174304 = phi i32 [ %.4178, %.loopexit ], [ 0, %.preheader286 ]
  %.0179303 = phi i32 [ %.3182, %.loopexit ], [ -1, %.preheader286 ]
  %.0183302 = phi i32 [ %.3186, %.loopexit ], [ 0, %.preheader286 ]
  %.0190301 = phi i32 [ %.1191, %.loopexit ], [ 0, %.preheader286 ]
  %.0197300 = phi ptr [ %.3200, %.loopexit ], [ null, %.preheader286 ]
  %10 = sext i32 %.0168305 to i64
  %11 = getelementptr inbounds ptr, ptr %1, i64 %10
  %12 = load ptr, ptr %11, align 8, !tbaa !5
  %13 = load i8, ptr %12, align 1, !tbaa !9
  %14 = icmp eq i8 %13, 45
  br i1 %14, label %.preheader285, label %29

.preheader285:                                    ; preds = %.lr.ph306
  %.0196288 = getelementptr inbounds i8, ptr %12, i64 1
  %15 = load i8, ptr %.0196288, align 1, !tbaa !9
  %.not238289 = icmp eq i8 %15, 0
  br i1 %.not238289, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader285, %27
  %16 = phi i8 [ %28, %27 ], [ %15, %.preheader285 ]
  %.0196295 = phi ptr [ %.0196, %27 ], [ %.0196288, %.preheader285 ]
  %.1169294 = phi i32 [ %.2170, %27 ], [ %.0168305, %.preheader285 ]
  %.1175293 = phi i32 [ %.3177, %27 ], [ %.0174304, %.preheader285 ]
  %.1180292 = phi i32 [ %.2181, %27 ], [ %.0179303, %.preheader285 ]
  %.1184291 = phi i32 [ %.2185, %27 ], [ %.0183302, %.preheader285 ]
  %.1198290 = phi ptr [ %.2199, %27 ], [ %.0197300, %.preheader285 ]
  %17 = and i8 %16, -33
  %or.cond = icmp eq i8 %17, 79
  %spec.select = select i1 %or.cond, i32 1, i32 %.1175293
  %or.cond5 = icmp eq i8 %17, 65
  %.3177 = select i1 %or.cond5, i32 2, i32 %spec.select
  %18 = add i8 %16, -48
  %or.cond8 = icmp ult i8 %18, 10
  %19 = zext nneg i8 %18 to i32
  %.2181 = select i1 %or.cond8, i32 %19, i32 %.1180292
  %or.cond11 = icmp eq i8 %17, 74
  %.2185 = select i1 %or.cond11, i32 1, i32 %.1184291
  %or.cond14 = icmp eq i8 %17, 80
  br i1 %or.cond14, label %20, label %27

20:                                               ; preds = %.lr.ph
  %21 = add nsw i32 %.1169294, 1
  %22 = icmp slt i32 %21, %0
  br i1 %22, label %23, label %27

23:                                               ; preds = %20
  %24 = sext i32 %21 to i64
  %25 = getelementptr inbounds ptr, ptr %1, i64 %24
  %26 = load ptr, ptr %25, align 8, !tbaa !5
  br label %27

27:                                               ; preds = %.lr.ph, %23, %20
  %.2199 = phi ptr [ %26, %23 ], [ %.1198290, %20 ], [ %.1198290, %.lr.ph ]
  %.2170 = phi i32 [ %21, %23 ], [ %.1169294, %20 ], [ %.1169294, %.lr.ph ]
  %.0196 = getelementptr inbounds i8, ptr %.0196295, i64 1
  %28 = load i8, ptr %.0196, align 1, !tbaa !9
  %.not238 = icmp eq i8 %28, 0
  br i1 %.not238, label %.loopexit, label %.lr.ph, !llvm.loop !10

29:                                               ; preds = %.lr.ph306
  %30 = icmp eq i32 %.0190301, 0
  %spec.select239 = select i1 %30, i32 %.0168305, i32 %.0190301
  br label %.loopexit

.loopexit:                                        ; preds = %27, %.preheader285, %29
  %.3200 = phi ptr [ %.0197300, %29 ], [ %.0197300, %.preheader285 ], [ %.2199, %27 ]
  %.1191 = phi i32 [ %spec.select239, %29 ], [ %.0190301, %.preheader285 ], [ %.0190301, %27 ]
  %.3186 = phi i32 [ %.0183302, %29 ], [ %.0183302, %.preheader285 ], [ %.2185, %27 ]
  %.3182 = phi i32 [ %.0179303, %29 ], [ %.0179303, %.preheader285 ], [ %.2181, %27 ]
  %.4178 = phi i32 [ %.0174304, %29 ], [ %.0174304, %.preheader285 ], [ %.3177, %27 ]
  %.3 = phi i32 [ %.0168305, %29 ], [ %.0168305, %.preheader285 ], [ %.2170, %27 ]
  %31 = add nsw i32 %.3, 1
  %32 = icmp slt i32 %31, %0
  br i1 %32, label %.lr.ph306, label %._crit_edge, !llvm.loop !12

._crit_edge:                                      ; preds = %.loopexit
  %33 = icmp eq i32 %.3186, 0
  %34 = tail call noalias dereferenceable_or_null(16384) ptr @malloc(i64 noundef 16384) #11
  %35 = icmp eq ptr %34, null
  br i1 %35, label %38, label %40

._crit_edge.thread:                               ; preds = %.preheader286
  %36 = tail call noalias dereferenceable_or_null(16384) ptr @malloc(i64 noundef 16384) #11
  %37 = icmp eq ptr %36, null
  br i1 %37, label %38, label %select.unfold

38:                                               ; preds = %._crit_edge.thread, %._crit_edge
  %39 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  br label %157

40:                                               ; preds = %._crit_edge
  %41 = icmp eq i32 %.1191, 0
  br i1 %41, label %select.unfold, label %42

42:                                               ; preds = %40
  %43 = sext i32 %.1191 to i64
  %44 = getelementptr inbounds ptr, ptr %1, i64 %43
  %45 = load ptr, ptr %44, align 8, !tbaa !5
  %46 = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) %3, ptr noundef nonnull dereferenceable(1) %45, i64 noundef 255) #10
  %47 = getelementptr inbounds i8, ptr %3, i64 256
  store i8 0, ptr %47, align 16, !tbaa !9
  %48 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %3) #12
  %49 = trunc i64 %48 to i32
  %50 = icmp sgt i32 %49, 0
  br i1 %50, label %.lr.ph315.preheader, label %._crit_edge316.thread

.lr.ph315.preheader:                              ; preds = %42
  %wide.trip.count = and i64 %48, 2147483647
  %min.iters.check = icmp ult i64 %wide.trip.count, 8
  br i1 %min.iters.check, label %.lr.ph315.preheader353, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph315.preheader
  %n.mod.vf = and i64 %48, 7
  %n.vec = sub nsw i64 %wide.trip.count, %n.mod.vf
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i1> [ zeroinitializer, %vector.ph ], [ %55, %vector.body ]
  %vec.phi349 = phi <4 x i1> [ zeroinitializer, %vector.ph ], [ %56, %vector.body ]
  %51 = getelementptr inbounds [272 x i8], ptr %3, i64 0, i64 %index
  %52 = getelementptr inbounds i8, ptr %51, i64 4
  %wide.load = load <4 x i8>, ptr %51, align 8, !tbaa !9
  %wide.load350 = load <4 x i8>, ptr %52, align 4, !tbaa !9
  %53 = icmp eq <4 x i8> %wide.load, <i8 46, i8 46, i8 46, i8 46>
  %54 = icmp eq <4 x i8> %wide.load350, <i8 46, i8 46, i8 46, i8 46>
  %55 = or <4 x i1> %vec.phi, %53
  %56 = or <4 x i1> %vec.phi349, %54
  %index.next = add nuw i64 %index, 8
  %57 = icmp eq i64 %index.next, %n.vec
  br i1 %57, label %middle.block, label %vector.body, !llvm.loop !13

middle.block:                                     ; preds = %vector.body
  %bin.rdx = or <4 x i1> %56, %55
  %bin.rdx.fr = freeze <4 x i1> %bin.rdx
  %58 = bitcast <4 x i1> %bin.rdx.fr to i4
  %.not351 = icmp ne i4 %58, 0
  %rdx.select = zext i1 %.not351 to i32
  %cmp.n = icmp eq i64 %n.mod.vf, 0
  br i1 %cmp.n, label %._crit_edge316, label %.lr.ph315.preheader353

.lr.ph315.preheader353:                           ; preds = %middle.block, %.lr.ph315.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph315.preheader ], [ %n.vec, %middle.block ]
  %.0188313.ph = phi i32 [ 0, %.lr.ph315.preheader ], [ %rdx.select, %middle.block ]
  br label %.lr.ph315

.lr.ph315:                                        ; preds = %.lr.ph315.preheader353, %.lr.ph315
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph315 ], [ %indvars.iv.ph, %.lr.ph315.preheader353 ]
  %.0188313 = phi i32 [ %spec.select240, %.lr.ph315 ], [ %.0188313.ph, %.lr.ph315.preheader353 ]
  %59 = getelementptr inbounds [272 x i8], ptr %3, i64 0, i64 %indvars.iv
  %60 = load i8, ptr %59, align 1, !tbaa !9
  %61 = icmp eq i8 %60, 46
  %spec.select240 = select i1 %61, i32 1, i32 %.0188313
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge316, label %.lr.ph315, !llvm.loop !16

._crit_edge316:                                   ; preds = %.lr.ph315, %middle.block
  %spec.select240.lcssa = phi i32 [ %rdx.select, %middle.block ], [ %spec.select240, %.lr.ph315 ]
  %62 = icmp eq i32 %spec.select240.lcssa, 0
  br i1 %62, label %._crit_edge316.thread, label %64

._crit_edge316.thread:                            ; preds = %42, %._crit_edge316
  %63 = call ptr @strcat(ptr noundef nonnull dereferenceable(1) %3, ptr noundef nonnull dereferenceable(1) @.str.9) #10
  br label %64

64:                                               ; preds = %._crit_edge316.thread, %._crit_edge316
  switch i32 %.4178, label %79 [
    i32 2, label %65
    i32 0, label %68
  ]

65:                                               ; preds = %64
  %66 = call i32 @check_exist_file(ptr noundef nonnull %3)
  %67 = icmp eq i32 %66, 0
  br i1 %67, label %.thread250, label %.thread253

68:                                               ; preds = %64
  %69 = call i32 @check_exist_file(ptr noundef nonnull %3)
  %.not = icmp eq i32 %69, 0
  br i1 %.not, label %.thread250, label %.preheader284

.preheader284:                                    ; preds = %68, %73
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %4) #10
  %70 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, ptr noundef nonnull %3)
  %71 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.11, ptr noundef nonnull %4)
  %.not228 = icmp eq i32 %71, 1
  br i1 %.not228, label %73, label %72

72:                                               ; preds = %.preheader284
  call void @exit(i32 noundef 1) #13
  unreachable

73:                                               ; preds = %.preheader284
  %74 = load i8, ptr %4, align 16, !tbaa !9
  %75 = add i8 %74, -97
  %or.cond17 = icmp ult i8 %75, 26
  %76 = add nsw i8 %74, -32
  %spec.select242 = select i1 %or.cond17, i8 %76, i8 %74
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %4) #10
  switch i8 %spec.select242, label %.preheader284 [
    i8 89, label %.critedge
    i8 78, label %.critedge
    i8 65, label %.critedge
  ]

.critedge:                                        ; preds = %73, %73, %73
  %77 = icmp eq i8 %spec.select242, 78
  %78 = icmp eq i8 %spec.select242, 65
  %.5 = select i1 %78, i32 2, i32 0
  br i1 %77, label %select.unfold, label %79

79:                                               ; preds = %.critedge, %64
  %.7.ph = phi i32 [ %.4178, %64 ], [ %.5, %.critedge ]
  %.7.ph.fr = freeze i32 %.7.ph
  %80 = icmp eq i32 %.7.ph.fr, 2
  br i1 %80, label %.thread253, label %.thread250

.thread253:                                       ; preds = %65, %79
  br label %.thread250

.thread250:                                       ; preds = %65, %68, %79, %.thread253
  %81 = phi i32 [ 2, %.thread253 ], [ 0, %79 ], [ 0, %68 ], [ 0, %65 ]
  %82 = call ptr @zipOpen64(ptr noundef nonnull %3, i32 noundef %81) #10
  %83 = icmp ne ptr %82, null
  br i1 %83, label %85, label %.thread345

.thread345:                                       ; preds = %.thread250
  %84 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, ptr noundef nonnull %3)
  br label %._crit_edge323

85:                                               ; preds = %.thread250
  %86 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, ptr noundef nonnull %3)
  %.4318 = add nsw i32 %.1191, 1
  %87 = icmp slt i32 %.4318, %0
  %88 = and i1 %83, %87
  br i1 %88, label %.lr.ph322, label %._crit_edge323

.lr.ph322:                                        ; preds = %85
  %89 = getelementptr inbounds i8, ptr %5, i64 24
  %.not230 = icmp eq ptr %.3200, null
  %.not234 = icmp eq i32 %.3182, 0
  %90 = select i1 %.not234, i32 0, i32 8
  %91 = sext i32 %.4318 to i64
  %92 = zext nneg i32 %0 to i64
  br label %93

93:                                               ; preds = %.lr.ph322, %147
  %indvars.iv326 = phi i64 [ %91, %.lr.ph322 ], [ %indvars.iv.next327, %147 ]
  %.0171319 = phi ptr [ undef, %.lr.ph322 ], [ %.2173, %147 ]
  %94 = getelementptr inbounds ptr, ptr %1, i64 %indvars.iv326
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  %96 = load i8, ptr %95, align 1, !tbaa !9
  switch i8 %96, label %100 [
    i8 45, label %97
    i8 47, label %97
  ]

97:                                               ; preds = %93, %93
  %98 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %95) #12
  %99 = icmp eq i64 %98, 2
  br i1 %99, label %147, label %100

100:                                              ; preds = %93, %97
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  store i64 0, ptr %6, align 8, !tbaa !17
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %5, i8 0, i64 48, i1 false)
  %101 = call i64 @filetime(ptr noundef nonnull %95, ptr noundef nonnull %5, ptr noundef nonnull %89)
  br i1 %.not230, label %104, label %102

102:                                              ; preds = %100
  %103 = call i32 @getFileCrc(ptr noundef nonnull %95, ptr noundef nonnull %34, i64 noundef 16384, ptr noundef nonnull %6)
  br label %104

104:                                              ; preds = %102, %100
  %105 = call i32 @isLargeFile(ptr noundef nonnull %95)
  br label %106

106:                                              ; preds = %.critedge24, %104
  %.0165 = phi ptr [ %95, %104 ], [ %108, %.critedge24 ]
  %107 = load i8, ptr %.0165, align 1, !tbaa !9
  switch i8 %107, label %109 [
    i8 92, label %.critedge24
    i8 47, label %.critedge24
  ]

.critedge24:                                      ; preds = %106, %106
  %108 = getelementptr inbounds i8, ptr %.0165, i64 1
  br label %106, !llvm.loop !19

109:                                              ; preds = %106
  br i1 %33, label %116, label %.preheader283

.preheader283:                                    ; preds = %109, %112
  %110 = phi i8 [ %.pr, %112 ], [ %107, %109 ]
  %.0164 = phi ptr [ %113, %112 ], [ %.0165, %109 ]
  %.0 = phi ptr [ %.1, %112 ], [ null, %109 ]
  switch i8 %110, label %112 [
    i8 0, label %114
    i8 92, label %111
    i8 47, label %111
  ]

111:                                              ; preds = %.preheader283, %.preheader283
  br label %112

112:                                              ; preds = %.preheader283, %111
  %.1 = phi ptr [ %.0164, %111 ], [ %.0, %.preheader283 ]
  %113 = getelementptr inbounds i8, ptr %.0164, i64 1
  %.pr = load i8, ptr %113, align 1, !tbaa !9
  br label %.preheader283, !llvm.loop !20

114:                                              ; preds = %.preheader283
  %.not233 = icmp eq ptr %.0, null
  %115 = getelementptr inbounds i8, ptr %.0, i64 1
  %spec.select244 = select i1 %.not233, ptr %.0165, ptr %115
  br label %116

116:                                              ; preds = %114, %109
  %.2 = phi ptr [ %spec.select244, %114 ], [ %.0165, %109 ]
  %117 = load i64, ptr %6, align 8, !tbaa !17
  %118 = call i32 @zipOpenNewFileInZip3_64(ptr noundef nonnull %82, ptr noundef %.2, ptr noundef nonnull %5, ptr noundef null, i32 noundef 0, ptr noundef null, i32 noundef 0, ptr noundef null, i32 noundef %90, i32 noundef %.3182, i32 noundef 0, i32 noundef -15, i32 noundef 8, i32 noundef 0, ptr noundef %.3200, i64 noundef %117, i32 noundef %105) #10
  %.not235 = icmp eq i32 %118, 0
  br i1 %.not235, label %119, label %138

119:                                              ; preds = %116
  %120 = call noalias ptr @fopen64(ptr noundef nonnull %95, ptr noundef nonnull @.str.1)
  %121 = icmp eq ptr %120, null
  br i1 %121, label %.sink.split, label %.preheader

.preheader:                                       ; preds = %119, %136
  %122 = call i64 @fread(ptr noundef nonnull %34, i64 noundef 1, i64 noundef 16384, ptr noundef nonnull %120)
  %123 = trunc i64 %122 to i32
  %124 = icmp slt i32 %123, 16384
  br i1 %124, label %125, label %.thread261

125:                                              ; preds = %.preheader
  %126 = call i32 @feof(ptr noundef nonnull %120) #10
  %127 = icmp eq i32 %126, 0
  br i1 %127, label %128, label %130

128:                                              ; preds = %125
  %129 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, ptr noundef nonnull %95)
  br label %130

130:                                              ; preds = %125, %128
  %.3204 = phi i32 [ -1, %128 ], [ 0, %125 ]
  %131 = icmp sgt i32 %123, 0
  br i1 %131, label %.thread261, label %.thread267

.thread261:                                       ; preds = %.preheader, %130
  %132 = call i32 @zipWriteInFileInZip(ptr noundef nonnull %82, ptr noundef nonnull %34, i32 noundef %123) #10
  %133 = icmp slt i32 %132, 0
  br i1 %133, label %134, label %136

134:                                              ; preds = %.thread261
  %135 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, ptr noundef nonnull %95)
  br label %.thread267

136:                                              ; preds = %.thread261
  %137 = icmp eq i32 %132, 0
  br i1 %137, label %.preheader, label %.thread267, !llvm.loop !21

138:                                              ; preds = %116
  %139 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, ptr noundef nonnull %95)
  %.not236 = icmp eq ptr %.0171319, null
  br i1 %.not236, label %141, label %.thread267

.thread267:                                       ; preds = %130, %136, %134, %138
  %.5206273 = phi i32 [ %118, %138 ], [ %132, %134 ], [ %.3204, %130 ], [ %132, %136 ]
  %.1172260271 = phi ptr [ %.0171319, %138 ], [ %120, %134 ], [ %120, %136 ], [ %120, %130 ]
  %140 = call i32 @fclose(ptr noundef nonnull %.1172260271)
  br label %141

141:                                              ; preds = %.thread267, %138
  %.5206274 = phi i32 [ %.5206273, %.thread267 ], [ %118, %138 ]
  %.1172260272 = phi ptr [ %.1172260271, %.thread267 ], [ null, %138 ]
  %142 = icmp slt i32 %.5206274, 0
  br i1 %142, label %146, label %143

143:                                              ; preds = %141
  %144 = call i32 @zipCloseFileInZip(ptr noundef nonnull %82) #10
  %.not237 = icmp eq i32 %144, 0
  br i1 %.not237, label %146, label %.sink.split

.sink.split:                                      ; preds = %143, %119
  %.str.15.sink = phi ptr [ @.str.15, %119 ], [ @.str.17, %143 ]
  %.1172260272282.ph = phi ptr [ null, %119 ], [ %.1172260272, %143 ]
  %.6207.ph = phi i32 [ -1, %119 ], [ %144, %143 ]
  %145 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.15.sink, ptr noundef nonnull %95)
  br label %146

146:                                              ; preds = %.sink.split, %141, %143
  %.1172260272282 = phi ptr [ %.1172260272, %143 ], [ %.1172260272, %141 ], [ %.1172260272282.ph, %.sink.split ]
  %.6207 = phi i32 [ 0, %143 ], [ -1, %141 ], [ %.6207.ph, %.sink.split ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #10
  br label %147

147:                                              ; preds = %97, %146
  %.7208 = phi i32 [ 0, %97 ], [ %.6207, %146 ]
  %.2173 = phi ptr [ %.0171319, %97 ], [ %.1172260272282, %146 ]
  %indvars.iv.next327 = add nsw i64 %indvars.iv326, 1
  %148 = icmp slt i64 %indvars.iv.next327, %92
  %149 = icmp eq i32 %.7208, 0
  %150 = and i1 %149, %148
  br i1 %150, label %93, label %._crit_edge323, !llvm.loop !22

._crit_edge323:                                   ; preds = %147, %.thread345, %85
  %151 = call i32 @zipClose(ptr noundef %82, ptr noundef null) #10
  %.not229 = icmp eq i32 %151, 0
  br i1 %.not229, label %155, label %152

152:                                              ; preds = %._crit_edge323
  %153 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull %3)
  br label %155

select.unfold:                                    ; preds = %._crit_edge.thread, %.critedge, %40
  %154 = phi ptr [ %34, %.critedge ], [ %34, %40 ], [ %36, %._crit_edge.thread ]
  call void @do_help()
  br label %155

155:                                              ; preds = %._crit_edge323, %152, %select.unfold
  %156 = phi ptr [ %34, %._crit_edge323 ], [ %34, %152 ], [ %154, %select.unfold ]
  call void @free(ptr noundef %156) #10
  br label %157

157:                                              ; preds = %155, %38, %9
  %.0167 = phi i32 [ 0, %9 ], [ -104, %38 ], [ 0, %155 ]
  call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %3) #10
  ret i32 %.0167
}

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

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

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

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

declare ptr @zipOpen64(ptr noundef, i32 noundef) local_unnamed_addr #7

declare i32 @zipOpenNewFileInZip3_64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #7

declare i32 @zipWriteInFileInZip(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #7

declare i32 @zipCloseFileInZip(ptr noundef) local_unnamed_addr #7

declare i32 @zipClose(ptr noundef, ptr noundef) local_unnamed_addr #7

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

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

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 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 #3 = { 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 #4 = { 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 #5 = { 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 #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nounwind 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 #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nounwind }
attributes #11 = { nounwind allocsize(0) }
attributes #12 = { nounwind willreturn memory(read) }
attributes #13 = { noreturn nounwind }

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass