; LLVM IR from eugenebokhan/awesome-ml :: Awesome ML/Utils/Zip/minizip (zip)

; 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.zip64_internal = type { %struct.zlib_filefunc64_32_def_s, ptr, ptr, %struct.linkedlist_data_s, i32, i32, %struct.curfile64_info, i64, i64, i64, i64, i64, i64, ptr }
%struct.zlib_filefunc64_32_def_s = type { %struct.zlib_filefunc64_def_s, ptr, ptr, ptr, ptr }
%struct.zlib_filefunc64_def_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.linkedlist_data_s = type { ptr, ptr }
%struct.curfile64_info = type { %struct.z_stream_s, i32, i32, i64, ptr, i64, i64, i64, i64, i64, i32, i32, i32, [65536 x i8], i64, i64, i32, i64, i64, i64, i64, [3 x i64], ptr, i32 }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }

; Function Attrs: nounwind uwtable
define dso_local ptr @zipOpen4(ptr noundef %0, i32 noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4) #0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca %struct.zip64_internal, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store i64 %2, ptr %9, align 8, !tbaa !11
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 66024, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  store i64 0, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  store i64 0, ptr %16, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  store i64 0, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  store i64 0, ptr %22, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  store i64 4080, ptr %23, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 0, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %30 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %31 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %30, i32 0, i32 4
  store ptr null, ptr %31, align 8, !tbaa !15
  %32 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %33 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %32, i32 0, i32 3
  store ptr null, ptr %33, align 8, !tbaa !22
  %34 = load ptr, ptr %11, align 8, !tbaa !5
  %35 = icmp eq ptr %34, null
  br i1 %35, label %36, label %39

36:                                               ; preds = %5
  %37 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %38 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %37, i32 0, i32 0
  call void @fill_fopen64_filefunc(ptr noundef %38)
  br label %42

39:                                               ; preds = %5
  %40 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %41 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %41, i64 104, i1 false), !tbaa.struct !23
  br label %42

42:                                               ; preds = %39, %36
  %43 = load i32, ptr %8, align 4, !tbaa !9
  %44 = icmp eq i32 %43, 0
  br i1 %44, label %45, label %46

45:                                               ; preds = %42
  store i32 11, ptr %26, align 4, !tbaa !9
  br label %47

46:                                               ; preds = %42
  store i32 7, ptr %26, align 4, !tbaa !9
  br label %47

47:                                               ; preds = %46, %45
  %48 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = load i32, ptr %26, align 4, !tbaa !9
  %51 = call ptr @call_zopen64(ptr noundef %48, ptr noundef %49, i32 noundef %50)
  %52 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  store ptr %51, ptr %52, align 8, !tbaa !24
  %53 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %54 = load ptr, ptr %53, align 8, !tbaa !24
  %55 = icmp eq ptr %54, null
  br i1 %55, label %56, label %57

56:                                               ; preds = %47
  store ptr null, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %474

57:                                               ; preds = %47
  %58 = load i32, ptr %8, align 4, !tbaa !9
  %59 = icmp eq i32 %58, 1
  br i1 %59, label %60, label %69

60:                                               ; preds = %57
  %61 = load i64, ptr %9, align 8, !tbaa !11
  %62 = icmp ugt i64 %61, 0
  br i1 %62, label %63, label %64

63:                                               ; preds = %60
  store ptr null, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %474

64:                                               ; preds = %60
  %65 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %66 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %67 = load ptr, ptr %66, align 8, !tbaa !24
  %68 = call i64 @call_zseek64(ptr noundef %65, ptr noundef %67, i64 noundef 0, i32 noundef 2)
  br label %69

69:                                               ; preds = %64, %57
  %70 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %71 = load ptr, ptr %70, align 8, !tbaa !24
  %72 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 2
  store ptr %71, ptr %72, align 8, !tbaa !25
  %73 = load i32, ptr %8, align 4, !tbaa !9
  %74 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 5
  store i32 %73, ptr %74, align 4, !tbaa !26
  %75 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 11
  store i64 0, ptr %75, align 8, !tbaa !27
  %76 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 12
  store i64 0, ptr %76, align 8, !tbaa !28
  %77 = load i64, ptr %9, align 8, !tbaa !11
  %78 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 10
  store i64 %77, ptr %78, align 8, !tbaa !29
  %79 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %80 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %81 = load ptr, ptr %80, align 8, !tbaa !24
  %82 = call i64 @call_ztell64(ptr noundef %79, ptr noundef %81)
  %83 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 7
  store i64 %82, ptr %83, align 8, !tbaa !30
  %84 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 4
  store i32 0, ptr %84, align 8, !tbaa !31
  %85 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 6
  %86 = getelementptr inbounds %struct.curfile64_info, ptr %85, i32 0, i32 1
  store i32 0, ptr %86, align 8, !tbaa !32
  %87 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 9
  store i64 0, ptr %87, align 8, !tbaa !33
  %88 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 8
  store i64 0, ptr %88, align 8, !tbaa !34
  %89 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 3
  call void @init_linkedlist(ptr noundef %89)
  %90 = call noalias ptr @malloc(i64 noundef 66024) #7
  store ptr %90, ptr %13, align 8, !tbaa !5
  %91 = load ptr, ptr %13, align 8, !tbaa !5
  %92 = icmp eq ptr %91, null
  br i1 %92, label %93, label %105

93:                                               ; preds = %69
  %94 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %95 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %94, i32 0, i32 0
  %96 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %95, i32 0, i32 6
  %97 = load ptr, ptr %96, align 8, !tbaa !35
  %98 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %99 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %98, i32 0, i32 0
  %100 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %99, i32 0, i32 8
  %101 = load ptr, ptr %100, align 8, !tbaa !36
  %102 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %103 = load ptr, ptr %102, align 8, !tbaa !24
  %104 = call i32 %97(ptr noundef %101, ptr noundef %103)
  store ptr null, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %474

105:                                              ; preds = %69
  %106 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  store ptr null, ptr %106, align 8, !tbaa !37
  %107 = load i32, ptr %8, align 4, !tbaa !9
  %108 = icmp eq i32 %107, 2
  br i1 %108, label %109, label %446

109:                                              ; preds = %105
  %110 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %111 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %112 = load ptr, ptr %111, align 8, !tbaa !24
  %113 = call i64 @zip64local_SearchCentralDir(ptr noundef %110, ptr noundef %112)
  store i64 %113, ptr %19, align 8, !tbaa !11
  %114 = load i32, ptr %25, align 4, !tbaa !9
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %116, label %301

116:                                              ; preds = %109
  %117 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %118 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %119 = load ptr, ptr %118, align 8, !tbaa !24
  %120 = load i64, ptr %19, align 8, !tbaa !11
  %121 = call i64 @call_zseek64(ptr noundef %117, ptr noundef %119, i64 noundef %120, i32 noundef 0)
  %122 = icmp ne i64 %121, 0
  br i1 %122, label %123, label %124

123:                                              ; preds = %116
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %124

124:                                              ; preds = %123, %116
  %125 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %126 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %127 = load ptr, ptr %126, align 8, !tbaa !24
  %128 = call i32 @zip64local_getLong(ptr noundef %125, ptr noundef %127, ptr noundef %21)
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %131

130:                                              ; preds = %124
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %131

131:                                              ; preds = %130, %124
  %132 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %133 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %134 = load ptr, ptr %133, align 8, !tbaa !24
  %135 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 11
  %136 = call i32 @zip64local_getShort(ptr noundef %132, ptr noundef %134, ptr noundef %135)
  %137 = icmp ne i32 %136, 0
  br i1 %137, label %138, label %139

138:                                              ; preds = %131
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %139

139:                                              ; preds = %138, %131
  %140 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %141 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %142 = load ptr, ptr %141, align 8, !tbaa !24
  %143 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 12
  %144 = call i32 @zip64local_getShort(ptr noundef %140, ptr noundef %142, ptr noundef %143)
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %146, label %147

146:                                              ; preds = %139
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %146, %139
  store i64 0, ptr %18, align 8, !tbaa !11
  %148 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %149 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %150 = load ptr, ptr %149, align 8, !tbaa !24
  %151 = call i32 @zip64local_getShort(ptr noundef %148, ptr noundef %150, ptr noundef %21)
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %154

153:                                              ; preds = %147
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %156

154:                                              ; preds = %147
  %155 = load i64, ptr %21, align 8, !tbaa !13
  store i64 %155, ptr %18, align 8, !tbaa !11
  br label %156

156:                                              ; preds = %154, %153
  store i64 0, ptr %17, align 8, !tbaa !11
  %157 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %158 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %159 = load ptr, ptr %158, align 8, !tbaa !24
  %160 = call i32 @zip64local_getShort(ptr noundef %157, ptr noundef %159, ptr noundef %21)
  %161 = icmp ne i32 %160, 0
  br i1 %161, label %162, label %163

162:                                              ; preds = %156
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %165

163:                                              ; preds = %156
  %164 = load i64, ptr %21, align 8, !tbaa !13
  store i64 %164, ptr %17, align 8, !tbaa !11
  br label %165

165:                                              ; preds = %163, %162
  %166 = load i64, ptr %17, align 8, !tbaa !11
  %167 = load i64, ptr %18, align 8, !tbaa !11
  %168 = icmp ne i64 %166, %167
  br i1 %168, label %169, label %170

169:                                              ; preds = %165
  store i32 -103, ptr %25, align 4, !tbaa !9
  br label %170

170:                                              ; preds = %169, %165
  store i64 0, ptr %15, align 8, !tbaa !11
  %171 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %172 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %173 = load ptr, ptr %172, align 8, !tbaa !24
  %174 = call i32 @zip64local_getLong(ptr noundef %171, ptr noundef %173, ptr noundef %21)
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %176, label %177

176:                                              ; preds = %170
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %179

177:                                              ; preds = %170
  %178 = load i64, ptr %21, align 8, !tbaa !13
  store i64 %178, ptr %15, align 8, !tbaa !11
  br label %179

179:                                              ; preds = %177, %176
  store i64 0, ptr %16, align 8, !tbaa !11
  %180 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %181 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %182 = load ptr, ptr %181, align 8, !tbaa !24
  %183 = call i32 @zip64local_getLong(ptr noundef %180, ptr noundef %182, ptr noundef %21)
  %184 = icmp ne i32 %183, 0
  br i1 %184, label %185, label %186

185:                                              ; preds = %179
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %188

186:                                              ; preds = %179
  %187 = load i64, ptr %21, align 8, !tbaa !13
  store i64 %187, ptr %16, align 8, !tbaa !11
  br label %188

188:                                              ; preds = %186, %185
  %189 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %190 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %191 = load ptr, ptr %190, align 8, !tbaa !24
  %192 = call i32 @zip64local_getShort(ptr noundef %189, ptr noundef %191, ptr noundef %22)
  %193 = icmp ne i32 %192, 0
  br i1 %193, label %194, label %195

194:                                              ; preds = %188
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %195

195:                                              ; preds = %194, %188
  %196 = load i32, ptr %25, align 4, !tbaa !9
  %197 = icmp eq i32 %196, 0
  br i1 %197, label %198, label %300

198:                                              ; preds = %195
  %199 = load i64, ptr %17, align 8, !tbaa !11
  %200 = icmp eq i64 %199, 65535
  br i1 %200, label %204, label %201

201:                                              ; preds = %198
  %202 = load i64, ptr %16, align 8, !tbaa !11
  %203 = icmp eq i64 %202, 4294967295
  br i1 %203, label %204, label %300

204:                                              ; preds = %201, %198
  %205 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %206 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %207 = load ptr, ptr %206, align 8, !tbaa !24
  %208 = load i64, ptr %19, align 8, !tbaa !11
  %209 = call i64 @zip64local_SearchCentralDir64(ptr noundef %205, ptr noundef %207, i64 noundef %208)
  store i64 %209, ptr %19, align 8, !tbaa !11
  %210 = load i64, ptr %19, align 8, !tbaa !11
  %211 = icmp ne i64 %210, 0
  br i1 %211, label %212, label %298

212:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %213 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %214 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %215 = load ptr, ptr %214, align 8, !tbaa !24
  %216 = load i64, ptr %19, align 8, !tbaa !11
  %217 = call i64 @call_zseek64(ptr noundef %213, ptr noundef %215, i64 noundef %216, i32 noundef 0)
  %218 = icmp ne i64 %217, 0
  br i1 %218, label %219, label %220

219:                                              ; preds = %212
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %220

220:                                              ; preds = %219, %212
  %221 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %222 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %223 = load ptr, ptr %222, align 8, !tbaa !24
  %224 = call i32 @zip64local_getLong(ptr noundef %221, ptr noundef %223, ptr noundef %21)
  %225 = icmp ne i32 %224, 0
  br i1 %225, label %226, label %227

226:                                              ; preds = %220
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %227

227:                                              ; preds = %226, %220
  %228 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %229 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %230 = load ptr, ptr %229, align 8, !tbaa !24
  %231 = call i32 @zip64local_getLong64(ptr noundef %228, ptr noundef %230, ptr noundef %28)
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %233, label %234

233:                                              ; preds = %227
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %234

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

240:                                              ; preds = %234
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %240, %234
  %242 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %243 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %244 = load ptr, ptr %243, align 8, !tbaa !24
  %245 = call i32 @zip64local_getShort(ptr noundef %242, ptr noundef %244, ptr noundef %21)
  %246 = icmp ne i32 %245, 0
  br i1 %246, label %247, label %248

247:                                              ; preds = %241
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %248

248:                                              ; preds = %247, %241
  %249 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %250 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %251 = load ptr, ptr %250, align 8, !tbaa !24
  %252 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 11
  %253 = call i32 @zip64local_getLong(ptr noundef %249, ptr noundef %251, ptr noundef %252)
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %255, label %256

255:                                              ; preds = %248
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %256

256:                                              ; preds = %255, %248
  %257 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %258 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %259 = load ptr, ptr %258, align 8, !tbaa !24
  %260 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 12
  %261 = call i32 @zip64local_getLong(ptr noundef %257, ptr noundef %259, ptr noundef %260)
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %263, label %264

263:                                              ; preds = %256
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %264

264:                                              ; preds = %263, %256
  %265 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %266 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %267 = load ptr, ptr %266, align 8, !tbaa !24
  %268 = call i32 @zip64local_getLong64(ptr noundef %265, ptr noundef %267, ptr noundef %18)
  %269 = icmp ne i32 %268, 0
  br i1 %269, label %270, label %271

270:                                              ; preds = %264
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %271

271:                                              ; preds = %270, %264
  %272 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %273 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %274 = load ptr, ptr %273, align 8, !tbaa !24
  %275 = call i32 @zip64local_getLong64(ptr noundef %272, ptr noundef %274, ptr noundef %17)
  %276 = icmp ne i32 %275, 0
  br i1 %276, label %277, label %278

277:                                              ; preds = %271
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %278

278:                                              ; preds = %277, %271
  %279 = load i64, ptr %17, align 8, !tbaa !11
  %280 = load i64, ptr %18, align 8, !tbaa !11
  %281 = icmp ne i64 %279, %280
  br i1 %281, label %282, label %283

282:                                              ; preds = %278
  store i32 -103, ptr %25, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %282, %278
  %284 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %285 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %286 = load ptr, ptr %285, align 8, !tbaa !24
  %287 = call i32 @zip64local_getLong64(ptr noundef %284, ptr noundef %286, ptr noundef %15)
  %288 = icmp ne i32 %287, 0
  br i1 %288, label %289, label %290

289:                                              ; preds = %283
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %289, %283
  %291 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %292 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %293 = load ptr, ptr %292, align 8, !tbaa !24
  %294 = call i32 @zip64local_getLong64(ptr noundef %291, ptr noundef %293, ptr noundef %16)
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %296, label %297

296:                                              ; preds = %290
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %297

297:                                              ; preds = %296, %290
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %299

298:                                              ; preds = %204
  store i32 -103, ptr %25, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %298, %297
  br label %300

300:                                              ; preds = %299, %201, %195
  br label %301

301:                                              ; preds = %300, %109
  %302 = load i32, ptr %25, align 4, !tbaa !9
  %303 = icmp eq i32 %302, 0
  br i1 %303, label %304, label %311

304:                                              ; preds = %301
  %305 = load i64, ptr %19, align 8, !tbaa !11
  %306 = load i64, ptr %16, align 8, !tbaa !11
  %307 = load i64, ptr %15, align 8, !tbaa !11
  %308 = add i64 %306, %307
  %309 = icmp ult i64 %305, %308
  br i1 %309, label %310, label %311

310:                                              ; preds = %304
  store i32 -103, ptr %25, align 4, !tbaa !9
  br label %311

311:                                              ; preds = %310, %304, %301
  %312 = load i32, ptr %25, align 4, !tbaa !9
  %313 = icmp ne i32 %312, 0
  br i1 %313, label %314, label %331

314:                                              ; preds = %311
  %315 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %316 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %315, i32 0, i32 0
  %317 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %316, i32 0, i32 6
  %318 = load ptr, ptr %317, align 8, !tbaa !35
  %319 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %320 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %319, i32 0, i32 0
  %321 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %320, i32 0, i32 8
  %322 = load ptr, ptr %321, align 8, !tbaa !36
  %323 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %324 = load ptr, ptr %323, align 8, !tbaa !24
  %325 = call i32 %318(ptr noundef %322, ptr noundef %324)
  %326 = load ptr, ptr %13, align 8, !tbaa !5
  %327 = icmp ne ptr %326, null
  br i1 %327, label %328, label %330

328:                                              ; preds = %314
  %329 = load ptr, ptr %13, align 8, !tbaa !5
  call void @free(ptr noundef %329) #6
  br label %330

330:                                              ; preds = %328, %314
  store ptr null, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %474

331:                                              ; preds = %311
  %332 = load i64, ptr %22, align 8, !tbaa !13
  %333 = icmp ugt i64 %332, 0
  br i1 %333, label %334, label %362

334:                                              ; preds = %331
  %335 = load i64, ptr %22, align 8, !tbaa !13
  %336 = add i64 %335, 1
  %337 = call noalias ptr @malloc(i64 noundef %336) #7
  %338 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  store ptr %337, ptr %338, align 8, !tbaa !37
  %339 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  %340 = load ptr, ptr %339, align 8, !tbaa !37
  %341 = icmp ne ptr %340, null
  br i1 %341, label %342, label %361

342:                                              ; preds = %334
  %343 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %344 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %343, i32 0, i32 0
  %345 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %344, i32 0, i32 2
  %346 = load ptr, ptr %345, align 8, !tbaa !38
  %347 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %348 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %347, i32 0, i32 0
  %349 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %348, i32 0, i32 8
  %350 = load ptr, ptr %349, align 8, !tbaa !36
  %351 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %352 = load ptr, ptr %351, align 8, !tbaa !24
  %353 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  %354 = load ptr, ptr %353, align 8, !tbaa !37
  %355 = load i64, ptr %22, align 8, !tbaa !13
  %356 = call i64 %346(ptr noundef %350, ptr noundef %352, ptr noundef %354, i64 noundef %355)
  store i64 %356, ptr %22, align 8, !tbaa !13
  %357 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  %358 = load ptr, ptr %357, align 8, !tbaa !37
  %359 = load i64, ptr %22, align 8, !tbaa !13
  %360 = getelementptr inbounds i8, ptr %358, i64 %359
  store i8 0, ptr %360, align 1, !tbaa !39
  br label %361

361:                                              ; preds = %342, %334
  br label %362

362:                                              ; preds = %361, %331
  %363 = load i64, ptr %19, align 8, !tbaa !11
  %364 = load i64, ptr %16, align 8, !tbaa !11
  %365 = load i64, ptr %15, align 8, !tbaa !11
  %366 = add i64 %364, %365
  %367 = sub i64 %363, %366
  store i64 %367, ptr %14, align 8, !tbaa !11
  %368 = load i64, ptr %14, align 8, !tbaa !11
  %369 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 8
  store i64 %368, ptr %369, align 8, !tbaa !34
  %370 = load i64, ptr %15, align 8, !tbaa !11
  store i64 %370, ptr %20, align 8, !tbaa !11
  store i64 4080, ptr %23, align 8, !tbaa !13
  %371 = load i64, ptr %23, align 8, !tbaa !13
  %372 = call noalias ptr @malloc(i64 noundef %371) #7
  store ptr %372, ptr %24, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %374 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %375 = load ptr, ptr %374, align 8, !tbaa !24
  %376 = load i64, ptr %16, align 8, !tbaa !11
  %377 = load i64, ptr %14, align 8, !tbaa !11
  %378 = add i64 %376, %377
  %379 = call i64 @call_zseek64(ptr noundef %373, ptr noundef %375, i64 noundef %378, i32 noundef 0)
  %380 = icmp ne i64 %379, 0
  br i1 %380, label %381, label %382

381:                                              ; preds = %362
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %382

382:                                              ; preds = %381, %362
  br label %383

383:                                              ; preds = %422, %382
  %384 = load i64, ptr %20, align 8, !tbaa !11
  %385 = icmp ugt i64 %384, 0
  br i1 %385, label %386, label %389

386:                                              ; preds = %383
  %387 = load i32, ptr %25, align 4, !tbaa !9
  %388 = icmp eq i32 %387, 0
  br label %389

389:                                              ; preds = %386, %383
  %390 = phi i1 [ false, %383 ], [ %388, %386 ]
  br i1 %390, label %391, label %426

391:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  store i64 4080, ptr %29, align 8, !tbaa !11
  %392 = load i64, ptr %29, align 8, !tbaa !11
  %393 = load i64, ptr %20, align 8, !tbaa !11
  %394 = icmp ugt i64 %392, %393
  br i1 %394, label %395, label %397

395:                                              ; preds = %391
  %396 = load i64, ptr %20, align 8, !tbaa !11
  store i64 %396, ptr %29, align 8, !tbaa !11
  br label %397

397:                                              ; preds = %395, %391
  %398 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %399 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %398, i32 0, i32 0
  %400 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %399, i32 0, i32 2
  %401 = load ptr, ptr %400, align 8, !tbaa !38
  %402 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %403 = getelementptr inbounds %struct.zlib_filefunc64_32_def_s, ptr %402, i32 0, i32 0
  %404 = getelementptr inbounds %struct.zlib_filefunc64_def_s, ptr %403, i32 0, i32 8
  %405 = load ptr, ptr %404, align 8, !tbaa !36
  %406 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %407 = load ptr, ptr %406, align 8, !tbaa !24
  %408 = load ptr, ptr %24, align 8, !tbaa !5
  %409 = load i64, ptr %29, align 8, !tbaa !11
  %410 = call i64 %401(ptr noundef %405, ptr noundef %407, ptr noundef %408, i64 noundef %409)
  %411 = load i64, ptr %29, align 8, !tbaa !11
  %412 = icmp ne i64 %410, %411
  br i1 %412, label %413, label %414

413:                                              ; preds = %397
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %414

414:                                              ; preds = %413, %397
  %415 = load i32, ptr %25, align 4, !tbaa !9
  %416 = icmp eq i32 %415, 0
  br i1 %416, label %417, label %422

417:                                              ; preds = %414
  %418 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 3
  %419 = load ptr, ptr %24, align 8, !tbaa !5
  %420 = load i64, ptr %29, align 8, !tbaa !11
  %421 = call i32 @add_data_in_datablock(ptr noundef %418, ptr noundef %419, i64 noundef %420)
  store i32 %421, ptr %25, align 4, !tbaa !9
  br label %422

422:                                              ; preds = %417, %414
  %423 = load i64, ptr %29, align 8, !tbaa !11
  %424 = load i64, ptr %20, align 8, !tbaa !11
  %425 = sub i64 %424, %423
  store i64 %425, ptr %20, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %383, !llvm.loop !40

426:                                              ; preds = %389
  %427 = load ptr, ptr %24, align 8, !tbaa !5
  %428 = icmp ne ptr %427, null
  br i1 %428, label %429, label %431

429:                                              ; preds = %426
  %430 = load ptr, ptr %24, align 8, !tbaa !5
  call void @free(ptr noundef %430) #6
  br label %431

431:                                              ; preds = %429, %426
  %432 = load i64, ptr %14, align 8, !tbaa !11
  %433 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 7
  store i64 %432, ptr %433, align 8, !tbaa !30
  %434 = load i64, ptr %17, align 8, !tbaa !11
  %435 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 9
  store i64 %434, ptr %435, align 8, !tbaa !33
  %436 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 0
  %437 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 1
  %438 = load ptr, ptr %437, align 8, !tbaa !24
  %439 = load i64, ptr %16, align 8, !tbaa !11
  %440 = load i64, ptr %14, align 8, !tbaa !11
  %441 = add i64 %439, %440
  %442 = call i64 @call_zseek64(ptr noundef %436, ptr noundef %438, i64 noundef %441, i32 noundef 0)
  %443 = icmp ne i64 %442, 0
  br i1 %443, label %444, label %445

444:                                              ; preds = %431
  store i32 -1, ptr %25, align 4, !tbaa !9
  br label %445

445:                                              ; preds = %444, %431
  br label %446

446:                                              ; preds = %445, %105
  %447 = load ptr, ptr %10, align 8, !tbaa !5
  %448 = icmp ne ptr %447, null
  br i1 %448, label %449, label %453

449:                                              ; preds = %446
  %450 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  %451 = load ptr, ptr %450, align 8, !tbaa !37
  %452 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %451, ptr %452, align 8, !tbaa !5
  br label %453

453:                                              ; preds = %449, %446
  %454 = load i32, ptr %25, align 4, !tbaa !9
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %469

456:                                              ; preds = %453
  %457 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  %458 = load ptr, ptr %457, align 8, !tbaa !37
  %459 = icmp ne ptr %458, null
  br i1 %459, label %460, label %463

460:                                              ; preds = %456
  %461 = getelementptr inbounds %struct.zip64_internal, ptr %12, i32 0, i32 13
  %462 = load ptr, ptr %461, align 8, !tbaa !37
  call void @free(ptr noundef %462) #6
  br label %463

463:                                              ; preds = %460, %456
  %464 = load ptr, ptr %13, align 8, !tbaa !5
  %465 = icmp ne ptr %464, null
  br i1 %465, label %466, label %468

466:                                              ; preds = %463
  %467 = load ptr, ptr %13, align 8, !tbaa !5
  call void @free(ptr noundef %467) #6
  br label %468

468:                                              ; preds = %466, %463
  store ptr null, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %474

469:                                              ; preds = %453
  %470 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %470, ptr align 8 %12, i64 66024, i1 false), !tbaa.struct !42
  %471 = load ptr, ptr %13, align 8, !tbaa !5
  %472 = call i32 @zipGoToFirstDisk(ptr noundef %471)
  %473 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %473, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %474

474:                                              ; preds = %469, %468, %330, %93, %63, %56
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 66024, ptr %12) #6
  %475 = load ptr, ptr %6, align 8
  ret ptr %475
}

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

declare void @fill_fopen64_filefunc(ptr noundef) #2

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

declare ptr @call_zopen64(ptr noundef, ptr noundef, i32 noundef) #2

declare i64 @call_zseek64(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #2

declare i64 @call_ztell64(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @init_linkedlist(ptr noundef) #0

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

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

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

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

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

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

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

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

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

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

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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind 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 #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 = { nounwind }
attributes #7 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !6, i64 96}
!16 = !{!"", !17, i64 0, !6, i64 104, !6, i64 112, !19, i64 120, !10, i64 136, !10, i64 140, !20, i64 144, !12, i64 65968, !12, i64 65976, !12, i64 65984, !12, i64 65992, !14, i64 66000, !14, i64 66008, !6, i64 66016}
!17 = !{!"zlib_filefunc64_32_def_s", !18, i64 0, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96}
!18 = !{!"zlib_filefunc64_def_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64}
!19 = !{!"linkedlist_data_s", !6, i64 0, !6, i64 8}
!20 = !{!"", !21, i64 0, !10, i64 112, !10, i64 116, !12, i64 120, !6, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !7, i64 188, !14, i64 65728, !14, i64 65736, !10, i64 65744, !14, i64 65752, !12, i64 65760, !12, i64 65768, !12, i64 65776, !7, i64 65784, !6, i64 65808, !10, i64 65816}
!21 = !{!"z_stream_s", !6, i64 0, !10, i64 8, !14, i64 16, !6, i64 24, !10, i64 32, !14, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !14, i64 96, !14, i64 104}
!22 = !{!16, !6, i64 88}
!23 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5, i64 56, i64 8, !5, i64 64, i64 8, !5, i64 72, i64 8, !5, i64 80, i64 8, !5, i64 88, i64 8, !5, i64 96, i64 8, !5}
!24 = !{!16, !6, i64 104}
!25 = !{!16, !6, i64 112}
!26 = !{!16, !10, i64 140}
!27 = !{!16, !14, i64 66000}
!28 = !{!16, !14, i64 66008}
!29 = !{!16, !12, i64 65992}
!30 = !{!16, !12, i64 65968}
!31 = !{!16, !10, i64 136}
!32 = !{!16, !10, i64 256}
!33 = !{!16, !12, i64 65984}
!34 = !{!16, !12, i64 65976}
!35 = !{!16, !6, i64 48}
!36 = !{!16, !6, i64 64}
!37 = !{!16, !6, i64 66016}
!38 = !{!16, !6, i64 16}
!39 = !{!7, !7, i64 0}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5, i64 56, i64 8, !5, i64 64, i64 8, !5, i64 72, i64 8, !5, i64 80, i64 8, !5, i64 88, i64 8, !5, i64 96, i64 8, !5, i64 104, i64 8, !5, i64 112, i64 8, !5, i64 120, i64 8, !5, i64 128, i64 8, !5, i64 136, i64 4, !9, i64 140, i64 4, !9, i64 144, i64 8, !5, i64 152, i64 4, !9, i64 160, i64 8, !13, i64 168, i64 8, !5, i64 176, i64 4, !9, i64 184, i64 8, !13, i64 192, i64 8, !5, i64 200, i64 8, !5, i64 208, i64 8, !5, i64 216, i64 8, !5, i64 224, i64 8, !5, i64 232, i64 4, !9, i64 240, i64 8, !13, i64 248, i64 8, !13, i64 256, i64 4, !9, i64 260, i64 4, !9, i64 264, i64 8, !11, i64 272, i64 8, !5, i64 280, i64 8, !13, i64 288, i64 8, !13, i64 296, i64 8, !13, i64 304, i64 8, !13, i64 312, i64 8, !13, i64 320, i64 4, !9, i64 324, i64 4, !9, i64 328, i64 4, !9, i64 332, i64 65536, !39, i64 65872, i64 8, !13, i64 65880, i64 8, !13, i64 65888, i64 4, !9, i64 65896, i64 8, !13, i64 65904, i64 8, !11, i64 65912, i64 8, !11, i64 65920, i64 8, !11, i64 65928, i64 24, !39, i64 65952, i64 8, !5, i64 65960, i64 4, !9, i64 65968, i64 8, !11, i64 65976, i64 8, !11, i64 65984, i64 8, !11, i64 65992, i64 8, !11, i64 66000, i64 8, !13, i64 66008, i64 8, !13, i64 66016, i64 8, !5}


; 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.zip64_internal = type { %struct.zlib_filefunc64_32_def_s, ptr, ptr, %struct.linkedlist_data_s, i32, i32, %struct.curfile64_info, i64, i64, i64, i64, i64, i64, ptr }
%struct.zlib_filefunc64_32_def_s = type { %struct.zlib_filefunc64_def_s, ptr, ptr, ptr, ptr }
%struct.zlib_filefunc64_def_s = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.linkedlist_data_s = type { ptr, ptr }
%struct.curfile64_info = type { %struct.z_stream_s, i32, i32, i64, ptr, i64, i64, i64, i64, i64, i32, i32, i32, [65536 x i8], i64, i64, i32, i64, i64, i64, i64, [3 x i64], ptr, i32 }
%struct.z_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }

; Function Attrs: nounwind uwtable
define dso_local noundef ptr @zipOpen4(ptr noundef %0, i32 noundef %1, i64 noundef %2, ptr noundef writeonly %3, ptr noundef readonly %4) local_unnamed_addr #0 {
  %6 = alloca %struct.zip64_internal, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 66024, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  store i64 0, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  store i64 0, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  store i64 0, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  store i64 0, ptr %12, align 8, !tbaa !9
  %14 = getelementptr inbounds i8, ptr %6, i64 88
  %15 = icmp eq ptr %4, null
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %14, i8 0, i64 16, i1 false)
  br i1 %15, label %16, label %17

16:                                               ; preds = %5
  call void @fill_fopen64_filefunc(ptr noundef nonnull %6) #8
  br label %18

17:                                               ; preds = %5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %6, ptr noundef nonnull align 8 dereferenceable(104) %4, i64 104, i1 false), !tbaa.struct !11
  br label %18

18:                                               ; preds = %17, %16
  %19 = icmp eq i32 %1, 0
  %. = select i1 %19, i32 11, i32 7
  %20 = call ptr @call_zopen64(ptr noundef nonnull %6, ptr noundef %0, i32 noundef %.) #8
  %21 = getelementptr inbounds i8, ptr %6, i64 104
  store ptr %20, ptr %21, align 8, !tbaa !14
  %22 = icmp eq ptr %20, null
  br i1 %22, label %198, label %23

23:                                               ; preds = %18
  %24 = icmp eq i32 %1, 1
  br i1 %24, label %25, label %28

25:                                               ; preds = %23
  %.not = icmp eq i64 %2, 0
  br i1 %.not, label %26, label %198

26:                                               ; preds = %25
  %27 = call i64 @call_zseek64(ptr noundef nonnull %6, ptr noundef nonnull %20, i64 noundef 0, i32 noundef 2) #8
  %.pre = load ptr, ptr %21, align 8, !tbaa !14
  br label %28

28:                                               ; preds = %26, %23
  %29 = phi ptr [ %.pre, %26 ], [ %20, %23 ]
  %30 = getelementptr inbounds i8, ptr %6, i64 112
  store ptr %29, ptr %30, align 8, !tbaa !22
  %31 = getelementptr inbounds i8, ptr %6, i64 140
  store i32 %1, ptr %31, align 4, !tbaa !23
  %32 = getelementptr inbounds i8, ptr %6, i64 66000
  %33 = getelementptr inbounds i8, ptr %6, i64 66008
  %34 = getelementptr inbounds i8, ptr %6, i64 65992
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %32, i8 0, i64 16, i1 false)
  store i64 %2, ptr %34, align 8, !tbaa !24
  %35 = call i64 @call_ztell64(ptr noundef nonnull %6, ptr noundef %29) #8
  %36 = getelementptr inbounds i8, ptr %6, i64 65968
  store i64 %35, ptr %36, align 8, !tbaa !25
  %37 = getelementptr inbounds i8, ptr %6, i64 136
  store i32 0, ptr %37, align 8, !tbaa !26
  %38 = getelementptr inbounds i8, ptr %6, i64 256
  store i32 0, ptr %38, align 8, !tbaa !27
  %39 = getelementptr inbounds i8, ptr %6, i64 65984
  %40 = getelementptr inbounds i8, ptr %6, i64 65976
  %41 = getelementptr inbounds i8, ptr %6, i64 120
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %40, i8 0, i64 16, i1 false)
  call void @init_linkedlist(ptr noundef nonnull %41)
  %42 = call noalias dereferenceable_or_null(66024) ptr @malloc(i64 noundef 66024) #9
  %43 = icmp eq ptr %42, null
  br i1 %43, label %44, label %51

44:                                               ; preds = %28
  %45 = getelementptr inbounds i8, ptr %6, i64 48
  %46 = load ptr, ptr %45, align 8, !tbaa !28
  %47 = getelementptr inbounds i8, ptr %6, i64 64
  %48 = load ptr, ptr %47, align 8, !tbaa !29
  %49 = load ptr, ptr %21, align 8, !tbaa !14
  %50 = call i32 %46(ptr noundef %48, ptr noundef %49) #8
  br label %198

51:                                               ; preds = %28
  %52 = getelementptr inbounds i8, ptr %6, i64 66016
  store ptr null, ptr %52, align 8, !tbaa !30
  %53 = icmp eq i32 %1, 2
  br i1 %53, label %54, label %188

54:                                               ; preds = %51
  %55 = load ptr, ptr %21, align 8, !tbaa !14
  %56 = call i64 @zip64local_SearchCentralDir(ptr noundef nonnull %6, ptr noundef %55)
  %57 = load ptr, ptr %21, align 8, !tbaa !14
  %58 = call i64 @call_zseek64(ptr noundef nonnull %6, ptr noundef %57, i64 noundef %56, i32 noundef 0) #8
  %59 = load ptr, ptr %21, align 8, !tbaa !14
  %60 = call i32 @zip64local_getLong(ptr noundef nonnull %6, ptr noundef %59, ptr noundef nonnull %11)
  %61 = load ptr, ptr %21, align 8, !tbaa !14
  %62 = call i32 @zip64local_getShort(ptr noundef nonnull %6, ptr noundef %61, ptr noundef nonnull %32)
  %63 = load ptr, ptr %21, align 8, !tbaa !14
  %64 = call i32 @zip64local_getShort(ptr noundef nonnull %6, ptr noundef %63, ptr noundef nonnull %33)
  store i64 0, ptr %10, align 8, !tbaa !5
  %65 = load ptr, ptr %21, align 8, !tbaa !14
  %66 = call i32 @zip64local_getShort(ptr noundef nonnull %6, ptr noundef %65, ptr noundef nonnull %11)
  %.not71 = icmp eq i32 %66, 0
  br i1 %.not71, label %67, label %69

67:                                               ; preds = %54
  %.not70 = icmp eq i32 %64, 0
  %.not67 = icmp eq i64 %58, 0
  %.not68 = icmp eq i32 %60, 0
  %.not69 = icmp eq i32 %62, 0
  %.not117 = select i1 %.not70, i1 %.not69, i1 false
  %.not116 = select i1 %.not117, i1 %.not68, i1 false
  %narrow.not = select i1 %.not116, i1 %.not67, i1 false
  %68 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %68, ptr %10, align 8, !tbaa !5
  br label %69

69:                                               ; preds = %54, %67
  %70 = phi i64 [ %68, %67 ], [ 0, %54 ]
  %.4 = phi i1 [ %narrow.not, %67 ], [ false, %54 ]
  store i64 0, ptr %9, align 8, !tbaa !5
  %71 = load ptr, ptr %21, align 8, !tbaa !14
  %72 = call i32 @zip64local_getShort(ptr noundef nonnull %6, ptr noundef %71, ptr noundef nonnull %11)
  %.not72 = icmp eq i32 %72, 0
  br i1 %.not72, label %73, label %75

73:                                               ; preds = %69
  %74 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %74, ptr %9, align 8, !tbaa !5
  br label %75

75:                                               ; preds = %69, %73
  %76 = phi i64 [ %74, %73 ], [ 0, %69 ]
  %.5 = phi i1 [ %.4, %73 ], [ false, %69 ]
  store i64 0, ptr %7, align 8, !tbaa !5
  %77 = load ptr, ptr %21, align 8, !tbaa !14
  %78 = call i32 @zip64local_getLong(ptr noundef nonnull %6, ptr noundef %77, ptr noundef nonnull %11)
  %.not74 = icmp eq i32 %78, 0
  br i1 %.not74, label %79, label %82

79:                                               ; preds = %75
  %.not73 = icmp eq i64 %76, %70
  %80 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %80, ptr %7, align 8, !tbaa !5
  %81 = select i1 %.not73, i1 %.5, i1 false
  br label %82

82:                                               ; preds = %75, %79
  %83 = phi i64 [ %80, %79 ], [ 0, %75 ]
  %.7 = phi i1 [ %81, %79 ], [ false, %75 ]
  store i64 0, ptr %8, align 8, !tbaa !5
  %84 = load ptr, ptr %21, align 8, !tbaa !14
  %85 = call i32 @zip64local_getLong(ptr noundef nonnull %6, ptr noundef %84, ptr noundef nonnull %11)
  %.not75 = icmp eq i32 %85, 0
  br i1 %.not75, label %86, label %88

86:                                               ; preds = %82
  %87 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %87, ptr %8, align 8, !tbaa !5
  br label %88

88:                                               ; preds = %82, %86
  %89 = phi i64 [ %87, %86 ], [ 0, %82 ]
  %.8 = phi i1 [ %.7, %86 ], [ false, %82 ]
  %90 = load ptr, ptr %21, align 8, !tbaa !14
  %91 = call i32 @zip64local_getShort(ptr noundef nonnull %6, ptr noundef %90, ptr noundef nonnull %12)
  %.not76 = icmp eq i32 %91, 0
  %92 = select i1 %.not76, i1 %.8, i1 false
  br i1 %92, label %93, label %.critedge

93:                                               ; preds = %88
  %94 = icmp eq i64 %76, 65535
  %95 = icmp eq i64 %89, 4294967295
  %or.cond = select i1 %94, i1 true, i1 %95
  br i1 %or.cond, label %96, label %.thread108

96:                                               ; preds = %93
  %97 = load ptr, ptr %21, align 8, !tbaa !14
  %98 = call i64 @zip64local_SearchCentralDir64(ptr noundef nonnull %6, ptr noundef %97, i64 noundef %56)
  %.not77 = icmp eq i64 %98, 0
  br i1 %.not77, label %.critedge, label %99

99:                                               ; preds = %96
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %100 = load ptr, ptr %21, align 8, !tbaa !14
  %101 = call i64 @call_zseek64(ptr noundef nonnull %6, ptr noundef %100, i64 noundef %98, i32 noundef 0) #8
  %.not78 = icmp eq i64 %101, 0
  %102 = load ptr, ptr %21, align 8, !tbaa !14
  %103 = call i32 @zip64local_getLong(ptr noundef nonnull %6, ptr noundef %102, ptr noundef nonnull %11)
  %.not79 = icmp eq i32 %103, 0
  %104 = load ptr, ptr %21, align 8, !tbaa !14
  %105 = call i32 @zip64local_getLong64(ptr noundef nonnull %6, ptr noundef %104, ptr noundef nonnull %13)
  %.not80 = icmp eq i32 %105, 0
  %106 = load ptr, ptr %21, align 8, !tbaa !14
  %107 = call i32 @zip64local_getShort(ptr noundef nonnull %6, ptr noundef %106, ptr noundef nonnull %11)
  %.not81 = icmp eq i32 %107, 0
  %108 = load ptr, ptr %21, align 8, !tbaa !14
  %109 = call i32 @zip64local_getShort(ptr noundef nonnull %6, ptr noundef %108, ptr noundef nonnull %11)
  %.not82 = icmp eq i32 %109, 0
  %110 = load ptr, ptr %21, align 8, !tbaa !14
  %111 = call i32 @zip64local_getLong(ptr noundef nonnull %6, ptr noundef %110, ptr noundef nonnull %32)
  %.not83 = icmp eq i32 %111, 0
  %112 = load ptr, ptr %21, align 8, !tbaa !14
  %113 = call i32 @zip64local_getLong(ptr noundef nonnull %6, ptr noundef %112, ptr noundef nonnull %33)
  %.not84 = icmp eq i32 %113, 0
  %114 = load ptr, ptr %21, align 8, !tbaa !14
  %115 = call i32 @zip64local_getLong64(ptr noundef nonnull %6, ptr noundef %114, ptr noundef nonnull %10)
  %.not85 = icmp eq i32 %115, 0
  %116 = load ptr, ptr %21, align 8, !tbaa !14
  %117 = call i32 @zip64local_getLong64(ptr noundef nonnull %6, ptr noundef %116, ptr noundef nonnull %9)
  %.not86 = icmp eq i32 %117, 0
  %118 = load i64, ptr %9, align 8, !tbaa !5
  %119 = load i64, ptr %10, align 8, !tbaa !5
  %.not87 = icmp eq i64 %118, %119
  %120 = load ptr, ptr %21, align 8, !tbaa !14
  %121 = call i32 @zip64local_getLong64(ptr noundef nonnull %6, ptr noundef %120, ptr noundef nonnull %7)
  %.not88 = icmp eq i32 %121, 0
  %122 = load ptr, ptr %21, align 8, !tbaa !14
  %123 = call i32 @zip64local_getLong64(ptr noundef nonnull %6, ptr noundef %122, ptr noundef nonnull %8)
  %.not89 = icmp eq i32 %123, 0
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  %124 = select i1 %.not89, i1 %.not88, i1 false
  %125 = select i1 %124, i1 %.not87, i1 false
  %126 = select i1 %125, i1 %.not86, i1 false
  %127 = select i1 %126, i1 %.not85, i1 false
  %128 = select i1 %127, i1 %.not84, i1 false
  %129 = select i1 %128, i1 %.not83, i1 false
  %130 = select i1 %129, i1 %.not82, i1 false
  %131 = select i1 %130, i1 %.not81, i1 false
  %132 = select i1 %131, i1 %.not80, i1 false
  %133 = select i1 %132, i1 %.not79, i1 false
  %or.cond112 = select i1 %133, i1 %.not78, i1 false
  br i1 %or.cond112, label %..thread108_crit_edge, label %.critedge

..thread108_crit_edge:                            ; preds = %99
  %.pre139 = load i64, ptr %8, align 8, !tbaa !5
  %.pre140 = load i64, ptr %7, align 8, !tbaa !5
  br label %.thread108

.thread108:                                       ; preds = %..thread108_crit_edge, %93
  %134 = phi i64 [ %83, %93 ], [ %.pre140, %..thread108_crit_edge ]
  %135 = phi i64 [ %89, %93 ], [ %.pre139, %..thread108_crit_edge ]
  %.056111 = phi i64 [ %56, %93 ], [ %98, %..thread108_crit_edge ]
  %136 = add i64 %134, %135
  %.not133 = icmp ult i64 %.056111, %136
  br i1 %.not133, label %.critedge, label %143

.critedge:                                        ; preds = %96, %88, %99, %.thread108
  %137 = getelementptr inbounds i8, ptr %6, i64 48
  %138 = load ptr, ptr %137, align 8, !tbaa !28
  %139 = getelementptr inbounds i8, ptr %6, i64 64
  %140 = load ptr, ptr %139, align 8, !tbaa !29
  %141 = load ptr, ptr %21, align 8, !tbaa !14
  %142 = call i32 %138(ptr noundef %140, ptr noundef %141) #8
  call void @free(ptr noundef nonnull %42) #8
  br label %198

143:                                              ; preds = %.thread108
  %144 = load i64, ptr %12, align 8, !tbaa !9
  %.not91 = icmp eq i64 %144, 0
  br i1 %.not91, label %157, label %145

145:                                              ; preds = %143
  %146 = add i64 %144, 1
  %147 = call noalias ptr @malloc(i64 noundef %146) #9
  store ptr %147, ptr %52, align 8, !tbaa !30
  %.not92 = icmp eq ptr %147, null
  br i1 %.not92, label %157, label %148

148:                                              ; preds = %145
  %149 = getelementptr inbounds i8, ptr %6, i64 16
  %150 = load ptr, ptr %149, align 8, !tbaa !31
  %151 = getelementptr inbounds i8, ptr %6, i64 64
  %152 = load ptr, ptr %151, align 8, !tbaa !29
  %153 = load ptr, ptr %21, align 8, !tbaa !14
  %154 = call i64 %150(ptr noundef %152, ptr noundef %153, ptr noundef nonnull %147, i64 noundef %144) #8
  store i64 %154, ptr %12, align 8, !tbaa !9
  %155 = load ptr, ptr %52, align 8, !tbaa !30
  %156 = getelementptr inbounds i8, ptr %155, i64 %154
  store i8 0, ptr %156, align 1, !tbaa !32
  %.pre141 = load i64, ptr %8, align 8, !tbaa !5
  %.pre142 = load i64, ptr %7, align 8, !tbaa !5
  %.pre143 = add i64 %.pre141, %.pre142
  br label %157

157:                                              ; preds = %145, %148, %143
  %.pre-phi = phi i64 [ %136, %145 ], [ %.pre143, %148 ], [ %136, %143 ]
  %158 = phi i64 [ %134, %145 ], [ %.pre142, %148 ], [ %134, %143 ]
  %159 = phi i64 [ %135, %145 ], [ %.pre141, %148 ], [ %135, %143 ]
  %160 = sub i64 %.056111, %.pre-phi
  store i64 %160, ptr %40, align 8, !tbaa !33
  %161 = call noalias dereferenceable_or_null(4080) ptr @malloc(i64 noundef 4080) #9
  %162 = load ptr, ptr %21, align 8, !tbaa !14
  %163 = add i64 %160, %159
  %164 = call i64 @call_zseek64(ptr noundef nonnull %6, ptr noundef %162, i64 noundef %163, i32 noundef 0) #8
  %.not93 = icmp ne i64 %164, 0
  %spec.select103 = sext i1 %.not93 to i32
  %165 = icmp eq i64 %158, 0
  %.not138 = select i1 %165, i1 true, i1 %.not93
  br i1 %.not138, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %157
  %166 = getelementptr inbounds i8, ptr %6, i64 16
  %167 = getelementptr inbounds i8, ptr %6, i64 64
  br label %168

168:                                              ; preds = %.lr.ph, %173
  %.055136 = phi i64 [ %158, %.lr.ph ], [ %175, %173 ]
  %spec.select104 = call i64 @llvm.umin.i64(i64 %.055136, i64 4080)
  %169 = load ptr, ptr %166, align 8, !tbaa !31
  %170 = load ptr, ptr %167, align 8, !tbaa !29
  %171 = load ptr, ptr %21, align 8, !tbaa !14
  %172 = call i64 %169(ptr noundef %170, ptr noundef %171, ptr noundef %161, i64 noundef %spec.select104) #8
  %.not99 = icmp eq i64 %172, %spec.select104
  br i1 %.not99, label %173, label %._crit_edge

173:                                              ; preds = %168
  %174 = call i32 @add_data_in_datablock(ptr noundef nonnull %41, ptr noundef %161, i64 noundef %spec.select104)
  %175 = sub i64 %.055136, %spec.select104
  %176 = icmp ne i64 %175, 0
  %177 = icmp eq i32 %174, 0
  %178 = select i1 %176, i1 %177, i1 false
  br i1 %178, label %168, label %._crit_edge, !llvm.loop !34

._crit_edge:                                      ; preds = %168, %173, %157
  %.25.lcssa = phi i32 [ %spec.select103, %157 ], [ -1, %168 ], [ %174, %173 ]
  %.not94 = icmp eq ptr %161, null
  br i1 %.not94, label %180, label %179

179:                                              ; preds = %._crit_edge
  call void @free(ptr noundef nonnull %161) #8
  br label %180

180:                                              ; preds = %179, %._crit_edge
  store i64 %160, ptr %36, align 8, !tbaa !25
  %181 = load i64, ptr %9, align 8, !tbaa !5
  store i64 %181, ptr %39, align 8, !tbaa !36
  %182 = load ptr, ptr %21, align 8, !tbaa !14
  %183 = load i64, ptr %8, align 8, !tbaa !5
  %184 = add i64 %183, %160
  %185 = call i64 @call_zseek64(ptr noundef nonnull %6, ptr noundef %182, i64 noundef %184, i32 noundef 0) #8
  %.not95 = icmp eq i64 %185, 0
  %186 = icmp eq i32 %.25.lcssa, 0
  %187 = select i1 %.not95, i1 %186, i1 false
  br label %188

188:                                              ; preds = %180, %51
  %.28 = phi i1 [ true, %51 ], [ %187, %180 ]
  %.not96 = icmp eq ptr %3, null
  br i1 %.not96, label %191, label %189

189:                                              ; preds = %188
  %190 = load ptr, ptr %52, align 8, !tbaa !30
  store ptr %190, ptr %3, align 8, !tbaa !12
  br label %191

191:                                              ; preds = %189, %188
  br i1 %.28, label %196, label %192

192:                                              ; preds = %191
  %193 = load ptr, ptr %52, align 8, !tbaa !30
  %.not98 = icmp eq ptr %193, null
  br i1 %.not98, label %195, label %194

194:                                              ; preds = %192
  call void @free(ptr noundef nonnull %193) #8
  br label %195

195:                                              ; preds = %192, %194
  call void @free(ptr noundef %42) #8
  br label %198

196:                                              ; preds = %191
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(66024) %42, ptr noundef nonnull align 8 dereferenceable(66024) %6, i64 66024, i1 false), !tbaa.struct !37
  %197 = call i32 @zipGoToFirstDisk(ptr noundef nonnull %42)
  br label %198

198:                                              ; preds = %25, %18, %196, %195, %.critedge, %44
  %.054 = phi ptr [ null, %44 ], [ null, %.critedge ], [ null, %195 ], [ %42, %196 ], [ null, %18 ], [ null, %25 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 66024, ptr nonnull %6) #8
  ret ptr %.054
}

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

declare void @fill_fopen64_filefunc(ptr noundef) local_unnamed_addr #2

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

declare ptr @call_zopen64(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare i64 @call_zseek64(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #2

declare i64 @call_ztell64(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @init_linkedlist(ptr noundef) local_unnamed_addr #0

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @zip64local_getLong64(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.end.p0(i64 immarg, ptr nocapture) #1

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #6

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

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 = { "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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 #5 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind }
attributes #9 = { 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 = !{!"long long", !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 = !{i64 0, i64 8, !12, i64 8, i64 8, !12, i64 16, i64 8, !12, i64 24, i64 8, !12, i64 32, i64 8, !12, i64 40, i64 8, !12, i64 48, i64 8, !12, i64 56, i64 8, !12, i64 64, i64 8, !12, i64 72, i64 8, !12, i64 80, i64 8, !12, i64 88, i64 8, !12, i64 96, i64 8, !12}
!12 = !{!13, !13, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!15, !13, i64 104}
!15 = !{!"", !16, i64 0, !13, i64 104, !13, i64 112, !18, i64 120, !19, i64 136, !19, i64 140, !20, i64 144, !6, i64 65968, !6, i64 65976, !6, i64 65984, !6, i64 65992, !10, i64 66000, !10, i64 66008, !13, i64 66016}
!16 = !{!"zlib_filefunc64_32_def_s", !17, i64 0, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96}
!17 = !{!"zlib_filefunc64_def_s", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64}
!18 = !{!"linkedlist_data_s", !13, i64 0, !13, i64 8}
!19 = !{!"int", !7, i64 0}
!20 = !{!"", !21, i64 0, !19, i64 112, !19, i64 116, !6, i64 120, !13, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !19, i64 176, !19, i64 180, !19, i64 184, !7, i64 188, !10, i64 65728, !10, i64 65736, !19, i64 65744, !10, i64 65752, !6, i64 65760, !6, i64 65768, !6, i64 65776, !7, i64 65784, !13, i64 65808, !19, i64 65816}
!21 = !{!"z_stream_s", !13, i64 0, !19, i64 8, !10, i64 16, !13, i64 24, !19, i64 32, !10, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !19, i64 88, !10, i64 96, !10, i64 104}
!22 = !{!15, !13, i64 112}
!23 = !{!15, !19, i64 140}
!24 = !{!15, !6, i64 65992}
!25 = !{!15, !6, i64 65968}
!26 = !{!15, !19, i64 136}
!27 = !{!15, !19, i64 256}
!28 = !{!15, !13, i64 48}
!29 = !{!15, !13, i64 64}
!30 = !{!15, !13, i64 66016}
!31 = !{!15, !13, i64 16}
!32 = !{!7, !7, i64 0}
!33 = !{!15, !6, i64 65976}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!15, !6, i64 65984}
!37 = !{i64 0, i64 8, !12, i64 8, i64 8, !12, i64 16, i64 8, !12, i64 24, i64 8, !12, i64 32, i64 8, !12, i64 40, i64 8, !12, i64 48, i64 8, !12, i64 56, i64 8, !12, i64 64, i64 8, !12, i64 72, i64 8, !12, i64 80, i64 8, !12, i64 88, i64 8, !12, i64 96, i64 8, !12, i64 104, i64 8, !12, i64 112, i64 8, !12, i64 120, i64 8, !12, i64 128, i64 8, !12, i64 136, i64 4, !38, i64 140, i64 4, !38, i64 144, i64 8, !12, i64 152, i64 4, !38, i64 160, i64 8, !9, i64 168, i64 8, !12, i64 176, i64 4, !38, i64 184, i64 8, !9, i64 192, i64 8, !12, i64 200, i64 8, !12, i64 208, i64 8, !12, i64 216, i64 8, !12, i64 224, i64 8, !12, i64 232, i64 4, !38, i64 240, i64 8, !9, i64 248, i64 8, !9, i64 256, i64 4, !38, i64 260, i64 4, !38, i64 264, i64 8, !5, i64 272, i64 8, !12, i64 280, i64 8, !9, i64 288, i64 8, !9, i64 296, i64 8, !9, i64 304, i64 8, !9, i64 312, i64 8, !9, i64 320, i64 4, !38, i64 324, i64 4, !38, i64 328, i64 4, !38, i64 332, i64 65536, !32, i64 65872, i64 8, !9, i64 65880, i64 8, !9, i64 65888, i64 4, !38, i64 65896, i64 8, !9, i64 65904, i64 8, !5, i64 65912, i64 8, !5, i64 65920, i64 8, !5, i64 65928, i64 24, !32, i64 65952, i64 8, !12, i64 65960, i64 4, !38, i64 65968, i64 8, !5, i64 65976, i64 8, !5, i64 65984, i64 8, !5, i64 65992, i64 8, !5, i64 66000, i64 8, !9, i64 66008, i64 8, !9, i64 66016, i64 8, !12}
!38 = !{!19, !19, i64 0}


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