; LLVM IR from kuba--/zip :: src (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.mz_zip_writer_add_state = type { ptr, i64, i64 }
%struct.mz_zip_archive = type { i64, i64, i32, i32, i32, i32, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.mz_zip_internal_state_tag = type { %struct.mz_zip_array, %struct.mz_zip_array, %struct.mz_zip_array, i32, i32, i32, ptr, i64, ptr, i64, i64 }
%struct.mz_zip_array = type { ptr, i64, i64, i32 }

@.str.12 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__.mz_zip_writer_add_read_buf_callback = external hidden unnamed_addr constant [221 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @tdefl_create_comp_flags_from_zip_params(i32 noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @tdefl_init(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #1

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_set_error(ptr noundef, i32 noundef) #4

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

; Function Attrs: nounwind uwtable
declare hidden i32 @mz_zip_writer_validate_archive_name(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @mz_zip_time_t_to_dos_time(i64 noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden i32 @mz_zip_writer_compute_padding_needed_for_file_alignment(ptr noundef) #1

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @mz_zip_writer_create_local_dir_header(ptr noundef, ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i64 noundef, i64 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext) #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_write_le32(ptr noundef, i32 noundef) #4

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_write_le64(ptr noundef, i64 noundef) #4

; Function Attrs: nounwind uwtable
declare hidden i32 @mz_zip_writer_add_to_central_dir(ptr noundef, ptr noundef, i16 noundef zeroext, ptr noundef, i16 noundef zeroext, ptr noundef, i16 noundef zeroext, i64 noundef, i64 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, i64 noundef, i32 noundef, ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @mz_zip_writer_add_read_buf_callback(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %4, ptr noundef %5, ptr noundef %6, i16 noundef zeroext %7, i32 noundef %8, i32 noundef %9, ptr noundef %10, i32 noundef %11, ptr noundef %12, i32 noundef %13) #1 {
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i16, align 2
  %24 = alloca i32, align 4
  %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 i16, align 2
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i16, align 2
  %35 = alloca i16, align 2
  %36 = alloca i16, align 2
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca [30 x i8], align 16
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca [28 x i8], align 16
  %46 = alloca ptr, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca i64, align 8
  %52 = alloca i32, align 4
  %53 = alloca %struct.mz_zip_writer_add_state, align 8
  %54 = alloca ptr, align 8
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i64, align 8
  %58 = alloca [24 x i8], align 16
  %59 = alloca i32, align 4
  store ptr %0, ptr %16, align 8, !tbaa !5
  store ptr %1, ptr %17, align 8, !tbaa !5
  store ptr %2, ptr %18, align 8, !tbaa !5
  store ptr %3, ptr %19, align 8, !tbaa !5
  store i64 %4, ptr %20, align 8, !tbaa !9
  store ptr %5, ptr %21, align 8, !tbaa !5
  store ptr %6, ptr %22, align 8, !tbaa !5
  store i16 %7, ptr %23, align 2, !tbaa !11
  store i32 %8, ptr %24, align 4, !tbaa !13
  store i32 %9, ptr %25, align 4, !tbaa !13
  store ptr %10, ptr %26, align 8, !tbaa !5
  store i32 %11, ptr %27, align 4, !tbaa !13
  store ptr %12, ptr %28, align 8, !tbaa !5
  store i32 %13, ptr %29, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 0, ptr %31, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #6
  store i16 0, ptr %34, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %35) #6
  store i16 0, ptr %35, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %36) #6
  store i16 0, ptr %36, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %60 = load ptr, ptr %16, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.mz_zip_archive, ptr %60, i32 0, i32 0
  %62 = load i64, ptr %61, align 8, !tbaa !15
  store i64 %62, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  store i64 0, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  store i64 0, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 30, ptr %42) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  store ptr null, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  store i32 0, ptr %44, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 28, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  store i64 0, ptr %47, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %63 = load i32, ptr %24, align 4, !tbaa !13
  %64 = icmp slt i32 %63, 0
  br i1 %64, label %65, label %66

65:                                               ; preds = %14
  store i32 6, ptr %24, align 4, !tbaa !13
  br label %66

66:                                               ; preds = %65, %14
  %67 = load i32, ptr %24, align 4, !tbaa !13
  %68 = and i32 %67, 15
  store i32 %68, ptr %32, align 4, !tbaa !13
  %69 = load i32, ptr %24, align 4, !tbaa !13
  %70 = and i32 %69, 131072
  %71 = icmp ne i32 %70, 0
  %72 = zext i1 %71 to i64
  %73 = select i1 %71, i32 0, i32 8
  %74 = trunc i32 %73 to i16
  store i16 %74, ptr %30, align 2, !tbaa !11
  %75 = load i32, ptr %24, align 4, !tbaa !13
  %76 = and i32 %75, 65536
  %77 = icmp ne i32 %76, 0
  br i1 %77, label %83, label %78

78:                                               ; preds = %66
  %79 = load i16, ptr %30, align 2, !tbaa !11
  %80 = zext i16 %79 to i32
  %81 = or i32 %80, 2048
  %82 = trunc i32 %81 to i16
  store i16 %82, ptr %30, align 2, !tbaa !11
  br label %83

83:                                               ; preds = %78, %66
  %84 = load ptr, ptr %16, align 8, !tbaa !5
  %85 = icmp ne ptr %84, null
  br i1 %85, label %86, label %109

86:                                               ; preds = %83
  %87 = load ptr, ptr %16, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.mz_zip_archive, ptr %87, i32 0, i32 15
  %89 = load ptr, ptr %88, align 8, !tbaa !17
  %90 = icmp ne ptr %89, null
  br i1 %90, label %91, label %109

91:                                               ; preds = %86
  %92 = load ptr, ptr %16, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.mz_zip_archive, ptr %92, i32 0, i32 3
  %94 = load i32, ptr %93, align 4, !tbaa !18
  %95 = icmp ne i32 %94, 2
  br i1 %95, label %109, label %96

96:                                               ; preds = %91
  %97 = load ptr, ptr %17, align 8, !tbaa !5
  %98 = icmp ne ptr %97, null
  br i1 %98, label %99, label %109

99:                                               ; preds = %96
  %100 = load i16, ptr %23, align 2, !tbaa !11
  %101 = zext i16 %100 to i32
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %106

103:                                              ; preds = %99
  %104 = load ptr, ptr %22, align 8, !tbaa !5
  %105 = icmp ne ptr %104, null
  br i1 %105, label %106, label %109

106:                                              ; preds = %103, %99
  %107 = load i32, ptr %32, align 4, !tbaa !13
  %108 = icmp ugt i32 %107, 10
  br i1 %108, label %109, label %112

109:                                              ; preds = %106, %103, %96, %91, %86, %83
  %110 = load ptr, ptr %16, align 8, !tbaa !5
  %111 = call i32 @mz_zip_set_error(ptr noundef %110, i32 noundef 24)
  store i32 %111, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

112:                                              ; preds = %106
  %113 = load ptr, ptr %16, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.mz_zip_archive, ptr %113, i32 0, i32 15
  %115 = load ptr, ptr %114, align 8, !tbaa !17
  store ptr %115, ptr %46, align 8, !tbaa !5
  %116 = load ptr, ptr %46, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %116, i32 0, i32 4
  %118 = load i32, ptr %117, align 4, !tbaa !19
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %126, label %120

120:                                              ; preds = %112
  %121 = load i64, ptr %20, align 8, !tbaa !9
  %122 = icmp ugt i64 %121, 4294967295
  br i1 %122, label %123, label %126

123:                                              ; preds = %120
  %124 = load ptr, ptr %46, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %124, i32 0, i32 4
  store i32 1, ptr %125, align 4, !tbaa !19
  br label %126

126:                                              ; preds = %123, %120, %112
  %127 = load i32, ptr %24, align 4, !tbaa !13
  %128 = and i32 %127, 1024
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %133

130:                                              ; preds = %126
  %131 = load ptr, ptr %16, align 8, !tbaa !5
  %132 = call i32 @mz_zip_set_error(ptr noundef %131, i32 noundef 24)
  store i32 %132, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

133:                                              ; preds = %126
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = call i32 @mz_zip_writer_validate_archive_name(ptr noundef %134)
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %140, label %137

137:                                              ; preds = %133
  %138 = load ptr, ptr %16, align 8, !tbaa !5
  %139 = call i32 @mz_zip_set_error(ptr noundef %138, i32 noundef 25)
  store i32 %139, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

140:                                              ; preds = %133
  %141 = load ptr, ptr %46, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %141, i32 0, i32 4
  %143 = load i32, ptr %142, align 4, !tbaa !19
  %144 = icmp ne i32 %143, 0
  br i1 %144, label %145, label %154

145:                                              ; preds = %140
  %146 = load ptr, ptr %16, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.mz_zip_archive, ptr %146, i32 0, i32 2
  %148 = load i32, ptr %147, align 8, !tbaa !22
  %149 = icmp eq i32 %148, -1
  br i1 %149, label %150, label %153

150:                                              ; preds = %145
  %151 = load ptr, ptr %16, align 8, !tbaa !5
  %152 = call i32 @mz_zip_set_error(ptr noundef %151, i32 noundef 2)
  store i32 %152, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

153:                                              ; preds = %145
  br label %163

154:                                              ; preds = %140
  %155 = load ptr, ptr %16, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.mz_zip_archive, ptr %155, i32 0, i32 2
  %157 = load i32, ptr %156, align 8, !tbaa !22
  %158 = icmp eq i32 %157, 65535
  br i1 %158, label %159, label %162

159:                                              ; preds = %154
  %160 = load ptr, ptr %46, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %160, i32 0, i32 4
  store i32 1, ptr %161, align 4, !tbaa !19
  br label %162

162:                                              ; preds = %159, %154
  br label %163

163:                                              ; preds = %162, %153
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  %165 = call i64 @strlen(ptr noundef %164) #7
  store i64 %165, ptr %41, align 8, !tbaa !9
  %166 = load i64, ptr %41, align 8, !tbaa !9
  %167 = icmp ugt i64 %166, 65535
  br i1 %167, label %168, label %171

168:                                              ; preds = %163
  %169 = load ptr, ptr %16, align 8, !tbaa !5
  %170 = call i32 @mz_zip_set_error(ptr noundef %169, i32 noundef 25)
  store i32 %170, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

171:                                              ; preds = %163
  %172 = load ptr, ptr %16, align 8, !tbaa !5
  %173 = call i32 @mz_zip_writer_compute_padding_needed_for_file_alignment(ptr noundef %172)
  store i32 %173, ptr %33, align 4, !tbaa !13
  %174 = load ptr, ptr %46, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %174, i32 0, i32 0
  %176 = getelementptr inbounds %struct.mz_zip_array, ptr %175, i32 0, i32 1
  %177 = load i64, ptr %176, align 8, !tbaa !23
  %178 = add i64 %177, 46
  %179 = load i64, ptr %41, align 8, !tbaa !9
  %180 = add i64 %178, %179
  %181 = add i64 %180, 28
  %182 = load i16, ptr %23, align 2, !tbaa !11
  %183 = zext i16 %182 to i64
  %184 = add i64 %181, %183
  %185 = icmp uge i64 %184, 4294967295
  br i1 %185, label %186, label %189

186:                                              ; preds = %171
  %187 = load ptr, ptr %16, align 8, !tbaa !5
  %188 = call i32 @mz_zip_set_error(ptr noundef %187, i32 noundef 15)
  store i32 %188, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

189:                                              ; preds = %171
  %190 = load ptr, ptr %46, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %190, i32 0, i32 4
  %192 = load i32, ptr %191, align 4, !tbaa !19
  %193 = icmp ne i32 %192, 0
  br i1 %193, label %229, label %194

194:                                              ; preds = %189
  %195 = load ptr, ptr %16, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.mz_zip_archive, ptr %195, i32 0, i32 0
  %197 = load i64, ptr %196, align 8, !tbaa !15
  %198 = load i32, ptr %33, align 4, !tbaa !13
  %199 = zext i32 %198 to i64
  %200 = add i64 %197, %199
  %201 = add i64 %200, 30
  %202 = load i64, ptr %41, align 8, !tbaa !9
  %203 = add i64 %201, %202
  %204 = add i64 %203, 46
  %205 = load i64, ptr %41, align 8, !tbaa !9
  %206 = add i64 %204, %205
  %207 = load i16, ptr %23, align 2, !tbaa !11
  %208 = zext i16 %207 to i64
  %209 = add i64 %206, %208
  %210 = load i32, ptr %27, align 4, !tbaa !13
  %211 = zext i32 %210 to i64
  %212 = add i64 %209, %211
  %213 = load ptr, ptr %46, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %213, i32 0, i32 0
  %215 = getelementptr inbounds %struct.mz_zip_array, ptr %214, i32 0, i32 1
  %216 = load i64, ptr %215, align 8, !tbaa !23
  %217 = add i64 %212, %216
  %218 = add i64 %217, 22
  %219 = add i64 %218, 1024
  %220 = add i64 %219, 16
  %221 = load i32, ptr %29, align 4, !tbaa !13
  %222 = zext i32 %221 to i64
  %223 = add i64 %220, %222
  %224 = icmp ugt i64 %223, 4294967295
  br i1 %224, label %225, label %228

225:                                              ; preds = %194
  %226 = load ptr, ptr %46, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %226, i32 0, i32 4
  store i32 1, ptr %227, align 4, !tbaa !19
  br label %228

228:                                              ; preds = %225, %194
  br label %229

229:                                              ; preds = %228, %189
  %230 = load ptr, ptr %21, align 8, !tbaa !5
  %231 = icmp ne ptr %230, null
  br i1 %231, label %232, label %235

232:                                              ; preds = %229
  %233 = load ptr, ptr %21, align 8, !tbaa !5
  %234 = load i64, ptr %233, align 8, !tbaa !9
  call void @mz_zip_time_t_to_dos_time(i64 noundef %234, ptr noundef %35, ptr noundef %36)
  br label %235

235:                                              ; preds = %232, %229
  %236 = load i64, ptr %20, align 8, !tbaa !9
  %237 = icmp ule i64 %236, 3
  br i1 %237, label %238, label %239

238:                                              ; preds = %235
  store i32 0, ptr %32, align 4, !tbaa !13
  br label %239

239:                                              ; preds = %238, %235
  %240 = load ptr, ptr %16, align 8, !tbaa !5
  %241 = load i64, ptr %38, align 8, !tbaa !9
  %242 = load i32, ptr %33, align 4, !tbaa !13
  %243 = call i32 @mz_zip_writer_write_zeros(ptr noundef %240, i64 noundef %241, i32 noundef %242)
  %244 = icmp ne i32 %243, 0
  br i1 %244, label %248, label %245

245:                                              ; preds = %239
  %246 = load ptr, ptr %16, align 8, !tbaa !5
  %247 = call i32 @mz_zip_set_error(ptr noundef %246, i32 noundef 19)
  store i32 %247, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

248:                                              ; preds = %239
  %249 = load i32, ptr %33, align 4, !tbaa !13
  %250 = zext i32 %249 to i64
  %251 = load i64, ptr %38, align 8, !tbaa !9
  %252 = add i64 %251, %250
  store i64 %252, ptr %38, align 8, !tbaa !9
  %253 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %253, ptr %37, align 8, !tbaa !9
  %254 = load ptr, ptr %16, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.mz_zip_archive, ptr %254, i32 0, i32 6
  %256 = load i64, ptr %255, align 8, !tbaa !24
  %257 = icmp ne i64 %256, 0
  br i1 %257, label %258, label %269

258:                                              ; preds = %248
  %259 = load i64, ptr %38, align 8, !tbaa !9
  %260 = load ptr, ptr %16, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.mz_zip_archive, ptr %260, i32 0, i32 6
  %262 = load i64, ptr %261, align 8, !tbaa !24
  %263 = sub i64 %262, 1
  %264 = and i64 %259, %263
  %265 = icmp eq i64 %264, 0
  br i1 %265, label %266, label %267

266:                                              ; preds = %258
  br label %268

267:                                              ; preds = %258
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.12, i32 noundef 8848, ptr noundef @__PRETTY_FUNCTION__.mz_zip_writer_add_read_buf_callback) #8
  unreachable

268:                                              ; preds = %266
  br label %269

269:                                              ; preds = %268, %248
  %270 = load i64, ptr %20, align 8, !tbaa !9
  %271 = icmp ne i64 %270, 0
  br i1 %271, label %272, label %276

272:                                              ; preds = %269
  %273 = load i32, ptr %32, align 4, !tbaa !13
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %276

275:                                              ; preds = %272
  store i16 8, ptr %34, align 2, !tbaa !11
  br label %276

276:                                              ; preds = %275, %272, %269
  %277 = getelementptr inbounds [30 x i8], ptr %42, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %277, i8 0, i64 30, i1 false)
  %278 = load ptr, ptr %46, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %278, i32 0, i32 4
  %280 = load i32, ptr %279, align 4, !tbaa !19
  %281 = icmp ne i32 %280, 0
  br i1 %281, label %282, label %400

282:                                              ; preds = %276
  %283 = load i64, ptr %20, align 8, !tbaa !9
  %284 = icmp uge i64 %283, 4294967295
  br i1 %284, label %288, label %285

285:                                              ; preds = %282
  %286 = load i64, ptr %37, align 8, !tbaa !9
  %287 = icmp uge i64 %286, 4294967295
  br i1 %287, label %288, label %324

288:                                              ; preds = %285, %282
  %289 = getelementptr inbounds [28 x i8], ptr %45, i64 0, i64 0
  store ptr %289, ptr %43, align 8, !tbaa !5
  %290 = load i32, ptr %24, align 4, !tbaa !13
  %291 = and i32 %290, 131072
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %293, label %314

293:                                              ; preds = %288
  %294 = getelementptr inbounds [28 x i8], ptr %45, i64 0, i64 0
  %295 = load i64, ptr %20, align 8, !tbaa !9
  %296 = icmp uge i64 %295, 4294967295
  br i1 %296, label %297, label %298

297:                                              ; preds = %293
  br label %299

298:                                              ; preds = %293
  br label %299

299:                                              ; preds = %298, %297
  %300 = phi ptr [ %39, %297 ], [ null, %298 ]
  %301 = load i64, ptr %20, align 8, !tbaa !9
  %302 = icmp uge i64 %301, 4294967295
  br i1 %302, label %303, label %304

303:                                              ; preds = %299
  br label %305

304:                                              ; preds = %299
  br label %305

305:                                              ; preds = %304, %303
  %306 = phi ptr [ %40, %303 ], [ null, %304 ]
  %307 = load i64, ptr %37, align 8, !tbaa !9
  %308 = icmp uge i64 %307, 4294967295
  br i1 %308, label %309, label %310

309:                                              ; preds = %305
  br label %311

310:                                              ; preds = %305
  br label %311

311:                                              ; preds = %310, %309
  %312 = phi ptr [ %37, %309 ], [ null, %310 ]
  %313 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %294, ptr noundef %300, ptr noundef %306, ptr noundef %312)
  store i32 %313, ptr %44, align 4, !tbaa !13
  br label %323

314:                                              ; preds = %288
  %315 = getelementptr inbounds [28 x i8], ptr %45, i64 0, i64 0
  %316 = load i64, ptr %37, align 8, !tbaa !9
  %317 = icmp uge i64 %316, 4294967295
  br i1 %317, label %318, label %319

318:                                              ; preds = %314
  br label %320

319:                                              ; preds = %314
  br label %320

320:                                              ; preds = %319, %318
  %321 = phi ptr [ %37, %318 ], [ null, %319 ]
  %322 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %315, ptr noundef null, ptr noundef null, ptr noundef %321)
  store i32 %322, ptr %44, align 4, !tbaa !13
  br label %323

323:                                              ; preds = %320, %311
  br label %324

324:                                              ; preds = %323, %285
  %325 = load ptr, ptr %16, align 8, !tbaa !5
  %326 = getelementptr inbounds [30 x i8], ptr %42, i64 0, i64 0
  %327 = load i64, ptr %41, align 8, !tbaa !9
  %328 = trunc i64 %327 to i16
  %329 = load i32, ptr %44, align 4, !tbaa !13
  %330 = load i32, ptr %27, align 4, !tbaa !13
  %331 = add i32 %329, %330
  %332 = trunc i32 %331 to i16
  %333 = load i16, ptr %34, align 2, !tbaa !11
  %334 = load i16, ptr %30, align 2, !tbaa !11
  %335 = load i16, ptr %35, align 2, !tbaa !11
  %336 = load i16, ptr %36, align 2, !tbaa !11
  %337 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef %325, ptr noundef %326, i16 noundef zeroext %328, i16 noundef zeroext %332, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %333, i16 noundef zeroext %334, i16 noundef zeroext %335, i16 noundef zeroext %336)
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %342, label %339

339:                                              ; preds = %324
  %340 = load ptr, ptr %16, align 8, !tbaa !5
  %341 = call i32 @mz_zip_set_error(ptr noundef %340, i32 noundef 27)
  store i32 %341, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

342:                                              ; preds = %324
  %343 = load ptr, ptr %16, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.mz_zip_archive, ptr %343, i32 0, i32 12
  %345 = load ptr, ptr %344, align 8, !tbaa !25
  %346 = load ptr, ptr %16, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.mz_zip_archive, ptr %346, i32 0, i32 14
  %348 = load ptr, ptr %347, align 8, !tbaa !26
  %349 = load i64, ptr %38, align 8, !tbaa !9
  %350 = getelementptr inbounds [30 x i8], ptr %42, i64 0, i64 0
  %351 = call i64 %345(ptr noundef %348, i64 noundef %349, ptr noundef %350, i64 noundef 30)
  %352 = icmp ne i64 %351, 30
  br i1 %352, label %353, label %356

353:                                              ; preds = %342
  %354 = load ptr, ptr %16, align 8, !tbaa !5
  %355 = call i32 @mz_zip_set_error(ptr noundef %354, i32 noundef 19)
  store i32 %355, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

356:                                              ; preds = %342
  %357 = load i64, ptr %38, align 8, !tbaa !9
  %358 = add i64 %357, 30
  store i64 %358, ptr %38, align 8, !tbaa !9
  %359 = load ptr, ptr %16, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.mz_zip_archive, ptr %359, i32 0, i32 12
  %361 = load ptr, ptr %360, align 8, !tbaa !25
  %362 = load ptr, ptr %16, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.mz_zip_archive, ptr %362, i32 0, i32 14
  %364 = load ptr, ptr %363, align 8, !tbaa !26
  %365 = load i64, ptr %38, align 8, !tbaa !9
  %366 = load ptr, ptr %17, align 8, !tbaa !5
  %367 = load i64, ptr %41, align 8, !tbaa !9
  %368 = call i64 %361(ptr noundef %364, i64 noundef %365, ptr noundef %366, i64 noundef %367)
  %369 = load i64, ptr %41, align 8, !tbaa !9
  %370 = icmp ne i64 %368, %369
  br i1 %370, label %371, label %374

371:                                              ; preds = %356
  %372 = load ptr, ptr %16, align 8, !tbaa !5
  %373 = call i32 @mz_zip_set_error(ptr noundef %372, i32 noundef 19)
  store i32 %373, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

374:                                              ; preds = %356
  %375 = load i64, ptr %41, align 8, !tbaa !9
  %376 = load i64, ptr %38, align 8, !tbaa !9
  %377 = add i64 %376, %375
  store i64 %377, ptr %38, align 8, !tbaa !9
  %378 = load ptr, ptr %16, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.mz_zip_archive, ptr %378, i32 0, i32 12
  %380 = load ptr, ptr %379, align 8, !tbaa !25
  %381 = load ptr, ptr %16, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.mz_zip_archive, ptr %381, i32 0, i32 14
  %383 = load ptr, ptr %382, align 8, !tbaa !26
  %384 = load i64, ptr %38, align 8, !tbaa !9
  %385 = getelementptr inbounds [28 x i8], ptr %45, i64 0, i64 0
  %386 = load i32, ptr %44, align 4, !tbaa !13
  %387 = zext i32 %386 to i64
  %388 = call i64 %380(ptr noundef %383, i64 noundef %384, ptr noundef %385, i64 noundef %387)
  %389 = load i32, ptr %44, align 4, !tbaa !13
  %390 = zext i32 %389 to i64
  %391 = icmp ne i64 %388, %390
  br i1 %391, label %392, label %395

392:                                              ; preds = %374
  %393 = load ptr, ptr %16, align 8, !tbaa !5
  %394 = call i32 @mz_zip_set_error(ptr noundef %393, i32 noundef 19)
  store i32 %394, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

395:                                              ; preds = %374
  %396 = load i32, ptr %44, align 4, !tbaa !13
  %397 = zext i32 %396 to i64
  %398 = load i64, ptr %38, align 8, !tbaa !9
  %399 = add i64 %398, %397
  store i64 %399, ptr %38, align 8, !tbaa !9
  br label %461

400:                                              ; preds = %276
  %401 = load i64, ptr %40, align 8, !tbaa !9
  %402 = icmp ugt i64 %401, 4294967295
  br i1 %402, label %406, label %403

403:                                              ; preds = %400
  %404 = load i64, ptr %38, align 8, !tbaa !9
  %405 = icmp ugt i64 %404, 4294967295
  br i1 %405, label %406, label %409

406:                                              ; preds = %403, %400
  %407 = load ptr, ptr %16, align 8, !tbaa !5
  %408 = call i32 @mz_zip_set_error(ptr noundef %407, i32 noundef 29)
  store i32 %408, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

409:                                              ; preds = %403
  %410 = load ptr, ptr %16, align 8, !tbaa !5
  %411 = getelementptr inbounds [30 x i8], ptr %42, i64 0, i64 0
  %412 = load i64, ptr %41, align 8, !tbaa !9
  %413 = trunc i64 %412 to i16
  %414 = load i32, ptr %27, align 4, !tbaa !13
  %415 = trunc i32 %414 to i16
  %416 = load i16, ptr %34, align 2, !tbaa !11
  %417 = load i16, ptr %30, align 2, !tbaa !11
  %418 = load i16, ptr %35, align 2, !tbaa !11
  %419 = load i16, ptr %36, align 2, !tbaa !11
  %420 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef %410, ptr noundef %411, i16 noundef zeroext %413, i16 noundef zeroext %415, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %416, i16 noundef zeroext %417, i16 noundef zeroext %418, i16 noundef zeroext %419)
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %425, label %422

422:                                              ; preds = %409
  %423 = load ptr, ptr %16, align 8, !tbaa !5
  %424 = call i32 @mz_zip_set_error(ptr noundef %423, i32 noundef 27)
  store i32 %424, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

425:                                              ; preds = %409
  %426 = load ptr, ptr %16, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.mz_zip_archive, ptr %426, i32 0, i32 12
  %428 = load ptr, ptr %427, align 8, !tbaa !25
  %429 = load ptr, ptr %16, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.mz_zip_archive, ptr %429, i32 0, i32 14
  %431 = load ptr, ptr %430, align 8, !tbaa !26
  %432 = load i64, ptr %38, align 8, !tbaa !9
  %433 = getelementptr inbounds [30 x i8], ptr %42, i64 0, i64 0
  %434 = call i64 %428(ptr noundef %431, i64 noundef %432, ptr noundef %433, i64 noundef 30)
  %435 = icmp ne i64 %434, 30
  br i1 %435, label %436, label %439

436:                                              ; preds = %425
  %437 = load ptr, ptr %16, align 8, !tbaa !5
  %438 = call i32 @mz_zip_set_error(ptr noundef %437, i32 noundef 19)
  store i32 %438, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

439:                                              ; preds = %425
  %440 = load i64, ptr %38, align 8, !tbaa !9
  %441 = add i64 %440, 30
  store i64 %441, ptr %38, align 8, !tbaa !9
  %442 = load ptr, ptr %16, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.mz_zip_archive, ptr %442, i32 0, i32 12
  %444 = load ptr, ptr %443, align 8, !tbaa !25
  %445 = load ptr, ptr %16, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.mz_zip_archive, ptr %445, i32 0, i32 14
  %447 = load ptr, ptr %446, align 8, !tbaa !26
  %448 = load i64, ptr %38, align 8, !tbaa !9
  %449 = load ptr, ptr %17, align 8, !tbaa !5
  %450 = load i64, ptr %41, align 8, !tbaa !9
  %451 = call i64 %444(ptr noundef %447, i64 noundef %448, ptr noundef %449, i64 noundef %450)
  %452 = load i64, ptr %41, align 8, !tbaa !9
  %453 = icmp ne i64 %451, %452
  br i1 %453, label %454, label %457

454:                                              ; preds = %439
  %455 = load ptr, ptr %16, align 8, !tbaa !5
  %456 = call i32 @mz_zip_set_error(ptr noundef %455, i32 noundef 19)
  store i32 %456, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

457:                                              ; preds = %439
  %458 = load i64, ptr %41, align 8, !tbaa !9
  %459 = load i64, ptr %38, align 8, !tbaa !9
  %460 = add i64 %459, %458
  store i64 %460, ptr %38, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %457, %395
  %462 = load i32, ptr %27, align 4, !tbaa !13
  %463 = icmp ugt i32 %462, 0
  br i1 %463, label %464, label %487

464:                                              ; preds = %461
  %465 = load ptr, ptr %16, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.mz_zip_archive, ptr %465, i32 0, i32 12
  %467 = load ptr, ptr %466, align 8, !tbaa !25
  %468 = load ptr, ptr %16, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.mz_zip_archive, ptr %468, i32 0, i32 14
  %470 = load ptr, ptr %469, align 8, !tbaa !26
  %471 = load i64, ptr %38, align 8, !tbaa !9
  %472 = load ptr, ptr %26, align 8, !tbaa !5
  %473 = load i32, ptr %27, align 4, !tbaa !13
  %474 = zext i32 %473 to i64
  %475 = call i64 %467(ptr noundef %470, i64 noundef %471, ptr noundef %472, i64 noundef %474)
  %476 = load i32, ptr %27, align 4, !tbaa !13
  %477 = zext i32 %476 to i64
  %478 = icmp ne i64 %475, %477
  br i1 %478, label %479, label %482

479:                                              ; preds = %464
  %480 = load ptr, ptr %16, align 8, !tbaa !5
  %481 = call i32 @mz_zip_set_error(ptr noundef %480, i32 noundef 19)
  store i32 %481, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

482:                                              ; preds = %464
  %483 = load i32, ptr %27, align 4, !tbaa !13
  %484 = zext i32 %483 to i64
  %485 = load i64, ptr %38, align 8, !tbaa !9
  %486 = add i64 %485, %484
  store i64 %486, ptr %38, align 8, !tbaa !9
  br label %487

487:                                              ; preds = %482, %461
  %488 = load i64, ptr %20, align 8, !tbaa !9
  %489 = icmp ne i64 %488, 0
  br i1 %489, label %490, label %730

490:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %491 = load ptr, ptr %16, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.mz_zip_archive, ptr %491, i32 0, i32 7
  %493 = load ptr, ptr %492, align 8, !tbaa !27
  %494 = load ptr, ptr %16, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.mz_zip_archive, ptr %494, i32 0, i32 10
  %496 = load ptr, ptr %495, align 8, !tbaa !28
  %497 = call ptr %493(ptr noundef %496, i64 noundef 1, i64 noundef 65536)
  store ptr %497, ptr %50, align 8, !tbaa !5
  %498 = load ptr, ptr %50, align 8, !tbaa !5
  %499 = icmp ne ptr %498, null
  br i1 %499, label %503, label %500

500:                                              ; preds = %490
  %501 = load ptr, ptr %16, align 8, !tbaa !5
  %502 = call i32 @mz_zip_set_error(ptr noundef %501, i32 noundef 16)
  store i32 %502, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %727

503:                                              ; preds = %490
  %504 = load i32, ptr %32, align 4, !tbaa !13
  %505 = icmp ne i32 %504, 0
  br i1 %505, label %578, label %506

506:                                              ; preds = %503
  br label %507

507:                                              ; preds = %574, %506
  br label %508

508:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %509 = load ptr, ptr %18, align 8, !tbaa !5
  %510 = load ptr, ptr %19, align 8, !tbaa !5
  %511 = load i64, ptr %47, align 8, !tbaa !9
  %512 = load ptr, ptr %50, align 8, !tbaa !5
  %513 = call i64 %509(ptr noundef %510, i64 noundef %511, ptr noundef %512, i64 noundef 65536)
  store i64 %513, ptr %51, align 8, !tbaa !9
  %514 = load i64, ptr %51, align 8, !tbaa !9
  %515 = icmp eq i64 %514, 0
  br i1 %515, label %516, label %517

516:                                              ; preds = %508
  store i32 3, ptr %49, align 4
  br label %572

517:                                              ; preds = %508
  %518 = load i64, ptr %51, align 8, !tbaa !9
  %519 = icmp ugt i64 %518, 65536
  br i1 %519, label %526, label %520

520:                                              ; preds = %517
  %521 = load i64, ptr %47, align 8, !tbaa !9
  %522 = load i64, ptr %51, align 8, !tbaa !9
  %523 = add i64 %521, %522
  %524 = load i64, ptr %20, align 8, !tbaa !9
  %525 = icmp ugt i64 %523, %524
  br i1 %525, label %526, label %536

526:                                              ; preds = %520, %517
  %527 = load ptr, ptr %16, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.mz_zip_archive, ptr %527, i32 0, i32 8
  %529 = load ptr, ptr %528, align 8, !tbaa !29
  %530 = load ptr, ptr %16, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.mz_zip_archive, ptr %530, i32 0, i32 10
  %532 = load ptr, ptr %531, align 8, !tbaa !28
  %533 = load ptr, ptr %50, align 8, !tbaa !5
  call void %529(ptr noundef %532, ptr noundef %533)
  %534 = load ptr, ptr %16, align 8, !tbaa !5
  %535 = call i32 @mz_zip_set_error(ptr noundef %534, i32 noundef 20)
  store i32 %535, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %572

536:                                              ; preds = %520
  %537 = load ptr, ptr %16, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.mz_zip_archive, ptr %537, i32 0, i32 12
  %539 = load ptr, ptr %538, align 8, !tbaa !25
  %540 = load ptr, ptr %16, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.mz_zip_archive, ptr %540, i32 0, i32 14
  %542 = load ptr, ptr %541, align 8, !tbaa !26
  %543 = load i64, ptr %38, align 8, !tbaa !9
  %544 = load ptr, ptr %50, align 8, !tbaa !5
  %545 = load i64, ptr %51, align 8, !tbaa !9
  %546 = call i64 %539(ptr noundef %542, i64 noundef %543, ptr noundef %544, i64 noundef %545)
  %547 = load i64, ptr %51, align 8, !tbaa !9
  %548 = icmp ne i64 %546, %547
  br i1 %548, label %549, label %559

549:                                              ; preds = %536
  %550 = load ptr, ptr %16, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.mz_zip_archive, ptr %550, i32 0, i32 8
  %552 = load ptr, ptr %551, align 8, !tbaa !29
  %553 = load ptr, ptr %16, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.mz_zip_archive, ptr %553, i32 0, i32 10
  %555 = load ptr, ptr %554, align 8, !tbaa !28
  %556 = load ptr, ptr %50, align 8, !tbaa !5
  call void %552(ptr noundef %555, ptr noundef %556)
  %557 = load ptr, ptr %16, align 8, !tbaa !5
  %558 = call i32 @mz_zip_set_error(ptr noundef %557, i32 noundef 19)
  store i32 %558, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %572

559:                                              ; preds = %536
  %560 = load i64, ptr %51, align 8, !tbaa !9
  %561 = load i64, ptr %47, align 8, !tbaa !9
  %562 = add i64 %561, %560
  store i64 %562, ptr %47, align 8, !tbaa !9
  %563 = load i32, ptr %31, align 4, !tbaa !13
  %564 = zext i32 %563 to i64
  %565 = load ptr, ptr %50, align 8, !tbaa !5
  %566 = load i64, ptr %51, align 8, !tbaa !9
  %567 = call i64 @mz_crc32(i64 noundef %564, ptr noundef %565, i64 noundef %566)
  %568 = trunc i64 %567 to i32
  store i32 %568, ptr %31, align 4, !tbaa !13
  %569 = load i64, ptr %51, align 8, !tbaa !9
  %570 = load i64, ptr %38, align 8, !tbaa !9
  %571 = add i64 %570, %569
  store i64 %571, ptr %38, align 8, !tbaa !9
  store i32 0, ptr %49, align 4
  br label %572

572:                                              ; preds = %559, %549, %526, %516
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  %573 = load i32, ptr %49, align 4
  switch i32 %573, label %727 [
    i32 0, label %574
    i32 3, label %575
  ]

574:                                              ; preds = %572
  br label %507

575:                                              ; preds = %572
  %576 = load i64, ptr %47, align 8, !tbaa !9
  store i64 %576, ptr %39, align 8, !tbaa !9
  %577 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %577, ptr %40, align 8, !tbaa !9
  br label %719

578:                                              ; preds = %503
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  store i32 0, ptr %52, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr %53) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %579 = load ptr, ptr %16, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.mz_zip_archive, ptr %579, i32 0, i32 7
  %581 = load ptr, ptr %580, align 8, !tbaa !27
  %582 = load ptr, ptr %16, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.mz_zip_archive, ptr %582, i32 0, i32 10
  %584 = load ptr, ptr %583, align 8, !tbaa !28
  %585 = call ptr %581(ptr noundef %584, i64 noundef 1, i64 noundef 319352)
  store ptr %585, ptr %54, align 8, !tbaa !5
  %586 = load ptr, ptr %54, align 8, !tbaa !5
  %587 = icmp ne ptr %586, null
  br i1 %587, label %598, label %588

588:                                              ; preds = %578
  %589 = load ptr, ptr %16, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.mz_zip_archive, ptr %589, i32 0, i32 8
  %591 = load ptr, ptr %590, align 8, !tbaa !29
  %592 = load ptr, ptr %16, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.mz_zip_archive, ptr %592, i32 0, i32 10
  %594 = load ptr, ptr %593, align 8, !tbaa !28
  %595 = load ptr, ptr %50, align 8, !tbaa !5
  call void %591(ptr noundef %594, ptr noundef %595)
  %596 = load ptr, ptr %16, align 8, !tbaa !5
  %597 = call i32 @mz_zip_set_error(ptr noundef %596, i32 noundef 16)
  store i32 %597, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %716

598:                                              ; preds = %578
  %599 = load ptr, ptr %16, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.mz_zip_writer_add_state, ptr %53, i32 0, i32 0
  store ptr %599, ptr %600, align 8, !tbaa !30
  %601 = load i64, ptr %38, align 8, !tbaa !9
  %602 = getelementptr inbounds %struct.mz_zip_writer_add_state, ptr %53, i32 0, i32 1
  store i64 %601, ptr %602, align 8, !tbaa !32
  %603 = getelementptr inbounds %struct.mz_zip_writer_add_state, ptr %53, i32 0, i32 2
  store i64 0, ptr %603, align 8, !tbaa !33
  %604 = load ptr, ptr %54, align 8, !tbaa !5
  %605 = load i32, ptr %32, align 4, !tbaa !13
  %606 = call i32 @tdefl_create_comp_flags_from_zip_params(i32 noundef %605, i32 noundef -15, i32 noundef 0)
  %607 = call i32 @tdefl_init(ptr noundef %604, ptr noundef @mz_zip_writer_add_put_buf_callback, ptr noundef %53, i32 noundef %606)
  %608 = icmp ne i32 %607, 0
  br i1 %608, label %609, label %626

609:                                              ; preds = %598
  %610 = load ptr, ptr %16, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.mz_zip_archive, ptr %610, i32 0, i32 8
  %612 = load ptr, ptr %611, align 8, !tbaa !29
  %613 = load ptr, ptr %16, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.mz_zip_archive, ptr %613, i32 0, i32 10
  %615 = load ptr, ptr %614, align 8, !tbaa !28
  %616 = load ptr, ptr %54, align 8, !tbaa !5
  call void %612(ptr noundef %615, ptr noundef %616)
  %617 = load ptr, ptr %16, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.mz_zip_archive, ptr %617, i32 0, i32 8
  %619 = load ptr, ptr %618, align 8, !tbaa !29
  %620 = load ptr, ptr %16, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.mz_zip_archive, ptr %620, i32 0, i32 10
  %622 = load ptr, ptr %621, align 8, !tbaa !28
  %623 = load ptr, ptr %50, align 8, !tbaa !5
  call void %619(ptr noundef %622, ptr noundef %623)
  %624 = load ptr, ptr %16, align 8, !tbaa !5
  %625 = call i32 @mz_zip_set_error(ptr noundef %624, i32 noundef 27)
  store i32 %625, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %716

626:                                              ; preds = %598
  br label %627

627:                                              ; preds = %691, %626
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  store i32 0, ptr %56, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  %628 = load ptr, ptr %18, align 8, !tbaa !5
  %629 = load ptr, ptr %19, align 8, !tbaa !5
  %630 = load i64, ptr %47, align 8, !tbaa !9
  %631 = load ptr, ptr %50, align 8, !tbaa !5
  %632 = call i64 %628(ptr noundef %629, i64 noundef %630, ptr noundef %631, i64 noundef 65536)
  store i64 %632, ptr %57, align 8, !tbaa !9
  %633 = load i64, ptr %57, align 8, !tbaa !9
  %634 = icmp ugt i64 %633, 65536
  br i1 %634, label %641, label %635

635:                                              ; preds = %627
  %636 = load i64, ptr %47, align 8, !tbaa !9
  %637 = load i64, ptr %57, align 8, !tbaa !9
  %638 = add i64 %636, %637
  %639 = load i64, ptr %20, align 8, !tbaa !9
  %640 = icmp ugt i64 %638, %639
  br i1 %640, label %641, label %644

641:                                              ; preds = %635, %627
  %642 = load ptr, ptr %16, align 8, !tbaa !5
  %643 = call i32 @mz_zip_set_error(ptr noundef %642, i32 noundef 20)
  store i32 4, ptr %49, align 4
  br label %689

644:                                              ; preds = %635
  %645 = load i64, ptr %57, align 8, !tbaa !9
  %646 = load i64, ptr %47, align 8, !tbaa !9
  %647 = add i64 %646, %645
  store i64 %647, ptr %47, align 8, !tbaa !9
  %648 = load i32, ptr %31, align 4, !tbaa !13
  %649 = zext i32 %648 to i64
  %650 = load ptr, ptr %50, align 8, !tbaa !5
  %651 = load i64, ptr %57, align 8, !tbaa !9
  %652 = call i64 @mz_crc32(i64 noundef %649, ptr noundef %650, i64 noundef %651)
  %653 = trunc i64 %652 to i32
  store i32 %653, ptr %31, align 4, !tbaa !13
  %654 = load ptr, ptr %16, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.mz_zip_archive, ptr %654, i32 0, i32 13
  %656 = load ptr, ptr %655, align 8, !tbaa !34
  %657 = icmp ne ptr %656, null
  br i1 %657, label %658, label %668

658:                                              ; preds = %644
  %659 = load ptr, ptr %16, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.mz_zip_archive, ptr %659, i32 0, i32 13
  %661 = load ptr, ptr %660, align 8, !tbaa !34
  %662 = load ptr, ptr %16, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.mz_zip_archive, ptr %662, i32 0, i32 14
  %664 = load ptr, ptr %663, align 8, !tbaa !26
  %665 = call i32 %661(ptr noundef %664)
  %666 = icmp ne i32 %665, 0
  br i1 %666, label %667, label %668

667:                                              ; preds = %658
  store i32 3, ptr %56, align 4, !tbaa !13
  br label %668

668:                                              ; preds = %667, %658, %644
  %669 = load i64, ptr %57, align 8, !tbaa !9
  %670 = icmp eq i64 %669, 0
  br i1 %670, label %671, label %672

671:                                              ; preds = %668
  store i32 4, ptr %56, align 4, !tbaa !13
  br label %672

672:                                              ; preds = %671, %668
  %673 = load ptr, ptr %54, align 8, !tbaa !5
  %674 = load ptr, ptr %50, align 8, !tbaa !5
  %675 = load i64, ptr %57, align 8, !tbaa !9
  %676 = load i32, ptr %56, align 4, !tbaa !13
  %677 = call i32 @tdefl_compress_buffer(ptr noundef %673, ptr noundef %674, i64 noundef %675, i32 noundef %676)
  store i32 %677, ptr %55, align 4, !tbaa !13
  %678 = load i32, ptr %55, align 4, !tbaa !13
  %679 = icmp eq i32 %678, 1
  br i1 %679, label %680, label %681

680:                                              ; preds = %672
  store i32 1, ptr %52, align 4, !tbaa !13
  store i32 4, ptr %49, align 4
  br label %689

681:                                              ; preds = %672
  %682 = load i32, ptr %55, align 4, !tbaa !13
  %683 = icmp ne i32 %682, 0
  br i1 %683, label %684, label %687

684:                                              ; preds = %681
  %685 = load ptr, ptr %16, align 8, !tbaa !5
  %686 = call i32 @mz_zip_set_error(ptr noundef %685, i32 noundef 12)
  store i32 4, ptr %49, align 4
  br label %689

687:                                              ; preds = %681
  br label %688

688:                                              ; preds = %687
  store i32 0, ptr %49, align 4
  br label %689

689:                                              ; preds = %688, %684, %680, %641
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  %690 = load i32, ptr %49, align 4
  switch i32 %690, label %970 [
    i32 0, label %691
    i32 4, label %692
  ]

691:                                              ; preds = %689
  br label %627

692:                                              ; preds = %689
  %693 = load ptr, ptr %16, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.mz_zip_archive, ptr %693, i32 0, i32 8
  %695 = load ptr, ptr %694, align 8, !tbaa !29
  %696 = load ptr, ptr %16, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.mz_zip_archive, ptr %696, i32 0, i32 10
  %698 = load ptr, ptr %697, align 8, !tbaa !28
  %699 = load ptr, ptr %54, align 8, !tbaa !5
  call void %695(ptr noundef %698, ptr noundef %699)
  %700 = load i32, ptr %52, align 4, !tbaa !13
  %701 = icmp ne i32 %700, 0
  br i1 %701, label %710, label %702

702:                                              ; preds = %692
  %703 = load ptr, ptr %16, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.mz_zip_archive, ptr %703, i32 0, i32 8
  %705 = load ptr, ptr %704, align 8, !tbaa !29
  %706 = load ptr, ptr %16, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.mz_zip_archive, ptr %706, i32 0, i32 10
  %708 = load ptr, ptr %707, align 8, !tbaa !28
  %709 = load ptr, ptr %50, align 8, !tbaa !5
  call void %705(ptr noundef %708, ptr noundef %709)
  store i32 0, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %716

710:                                              ; preds = %692
  %711 = load i64, ptr %47, align 8, !tbaa !9
  store i64 %711, ptr %39, align 8, !tbaa !9
  %712 = getelementptr inbounds %struct.mz_zip_writer_add_state, ptr %53, i32 0, i32 2
  %713 = load i64, ptr %712, align 8, !tbaa !33
  store i64 %713, ptr %40, align 8, !tbaa !9
  %714 = getelementptr inbounds %struct.mz_zip_writer_add_state, ptr %53, i32 0, i32 1
  %715 = load i64, ptr %714, align 8, !tbaa !32
  store i64 %715, ptr %38, align 8, !tbaa !9
  store i32 0, ptr %49, align 4
  br label %716

716:                                              ; preds = %710, %702, %609, %588
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  %717 = load i32, ptr %49, align 4
  switch i32 %717, label %727 [
    i32 0, label %718
  ]

718:                                              ; preds = %716
  br label %719

719:                                              ; preds = %718, %575
  %720 = load ptr, ptr %16, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.mz_zip_archive, ptr %720, i32 0, i32 8
  %722 = load ptr, ptr %721, align 8, !tbaa !29
  %723 = load ptr, ptr %16, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.mz_zip_archive, ptr %723, i32 0, i32 10
  %725 = load ptr, ptr %724, align 8, !tbaa !28
  %726 = load ptr, ptr %50, align 8, !tbaa !5
  call void %722(ptr noundef %725, ptr noundef %726)
  store i32 0, ptr %49, align 4
  br label %727

727:                                              ; preds = %719, %716, %572, %500
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  %728 = load i32, ptr %49, align 4
  switch i32 %728, label %968 [
    i32 0, label %729
  ]

729:                                              ; preds = %727
  br label %730

730:                                              ; preds = %729, %487
  %731 = load i32, ptr %24, align 4, !tbaa !13
  %732 = and i32 %731, 131072
  %733 = icmp ne i32 %732, 0
  br i1 %733, label %788, label %734

734:                                              ; preds = %730
  call void @llvm.lifetime.start.p0(i64 24, ptr %58) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  store i32 16, ptr %59, align 4, !tbaa !13
  %735 = getelementptr inbounds [24 x i8], ptr %58, i64 0, i64 0
  %736 = getelementptr inbounds i8, ptr %735, i64 0
  call void @mz_write_le32(ptr noundef %736, i32 noundef 134695760)
  %737 = getelementptr inbounds [24 x i8], ptr %58, i64 0, i64 0
  %738 = getelementptr inbounds i8, ptr %737, i64 4
  %739 = load i32, ptr %31, align 4, !tbaa !13
  call void @mz_write_le32(ptr noundef %738, i32 noundef %739)
  %740 = load ptr, ptr %43, align 8, !tbaa !5
  %741 = icmp eq ptr %740, null
  br i1 %741, label %742, label %757

742:                                              ; preds = %734
  %743 = load i64, ptr %40, align 8, !tbaa !9
  %744 = icmp ugt i64 %743, 4294967295
  br i1 %744, label %745, label %748

745:                                              ; preds = %742
  %746 = load ptr, ptr %16, align 8, !tbaa !5
  %747 = call i32 @mz_zip_set_error(ptr noundef %746, i32 noundef 29)
  store i32 %747, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %785

748:                                              ; preds = %742
  %749 = getelementptr inbounds [24 x i8], ptr %58, i64 0, i64 0
  %750 = getelementptr inbounds i8, ptr %749, i64 8
  %751 = load i64, ptr %40, align 8, !tbaa !9
  %752 = trunc i64 %751 to i32
  call void @mz_write_le32(ptr noundef %750, i32 noundef %752)
  %753 = getelementptr inbounds [24 x i8], ptr %58, i64 0, i64 0
  %754 = getelementptr inbounds i8, ptr %753, i64 12
  %755 = load i64, ptr %39, align 8, !tbaa !9
  %756 = trunc i64 %755 to i32
  call void @mz_write_le32(ptr noundef %754, i32 noundef %756)
  br label %764

757:                                              ; preds = %734
  %758 = getelementptr inbounds [24 x i8], ptr %58, i64 0, i64 0
  %759 = getelementptr inbounds i8, ptr %758, i64 8
  %760 = load i64, ptr %40, align 8, !tbaa !9
  call void @mz_write_le64(ptr noundef %759, i64 noundef %760)
  %761 = getelementptr inbounds [24 x i8], ptr %58, i64 0, i64 0
  %762 = getelementptr inbounds i8, ptr %761, i64 16
  %763 = load i64, ptr %39, align 8, !tbaa !9
  call void @mz_write_le64(ptr noundef %762, i64 noundef %763)
  store i32 24, ptr %59, align 4, !tbaa !13
  br label %764

764:                                              ; preds = %757, %748
  %765 = load ptr, ptr %16, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.mz_zip_archive, ptr %765, i32 0, i32 12
  %767 = load ptr, ptr %766, align 8, !tbaa !25
  %768 = load ptr, ptr %16, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.mz_zip_archive, ptr %768, i32 0, i32 14
  %770 = load ptr, ptr %769, align 8, !tbaa !26
  %771 = load i64, ptr %38, align 8, !tbaa !9
  %772 = getelementptr inbounds [24 x i8], ptr %58, i64 0, i64 0
  %773 = load i32, ptr %59, align 4, !tbaa !13
  %774 = zext i32 %773 to i64
  %775 = call i64 %767(ptr noundef %770, i64 noundef %771, ptr noundef %772, i64 noundef %774)
  %776 = load i32, ptr %59, align 4, !tbaa !13
  %777 = zext i32 %776 to i64
  %778 = icmp ne i64 %775, %777
  br i1 %778, label %779, label %780

779:                                              ; preds = %764
  store i32 0, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %785

780:                                              ; preds = %764
  %781 = load i32, ptr %59, align 4, !tbaa !13
  %782 = zext i32 %781 to i64
  %783 = load i64, ptr %38, align 8, !tbaa !9
  %784 = add i64 %783, %782
  store i64 %784, ptr %38, align 8, !tbaa !9
  store i32 0, ptr %49, align 4
  br label %785

785:                                              ; preds = %780, %779, %745
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #6
  %786 = load i32, ptr %49, align 4
  switch i32 %786, label %968 [
    i32 0, label %787
  ]

787:                                              ; preds = %785
  br label %788

788:                                              ; preds = %787, %730
  %789 = load i32, ptr %24, align 4, !tbaa !13
  %790 = and i32 %789, 131072
  %791 = icmp ne i32 %790, 0
  br i1 %791, label %792, label %912

792:                                              ; preds = %788
  %793 = load ptr, ptr %43, align 8, !tbaa !5
  %794 = icmp ne ptr %793, null
  br i1 %794, label %795, label %816

795:                                              ; preds = %792
  %796 = getelementptr inbounds [28 x i8], ptr %45, i64 0, i64 0
  %797 = load i64, ptr %20, align 8, !tbaa !9
  %798 = icmp uge i64 %797, 4294967295
  br i1 %798, label %799, label %800

799:                                              ; preds = %795
  br label %801

800:                                              ; preds = %795
  br label %801

801:                                              ; preds = %800, %799
  %802 = phi ptr [ %39, %799 ], [ null, %800 ]
  %803 = load i64, ptr %20, align 8, !tbaa !9
  %804 = icmp uge i64 %803, 4294967295
  br i1 %804, label %805, label %806

805:                                              ; preds = %801
  br label %807

806:                                              ; preds = %801
  br label %807

807:                                              ; preds = %806, %805
  %808 = phi ptr [ %40, %805 ], [ null, %806 ]
  %809 = load i64, ptr %37, align 8, !tbaa !9
  %810 = icmp uge i64 %809, 4294967295
  br i1 %810, label %811, label %812

811:                                              ; preds = %807
  br label %813

812:                                              ; preds = %807
  br label %813

813:                                              ; preds = %812, %811
  %814 = phi ptr [ %37, %811 ], [ null, %812 ]
  %815 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %796, ptr noundef %802, ptr noundef %808, ptr noundef %814)
  store i32 %815, ptr %44, align 4, !tbaa !13
  br label %816

816:                                              ; preds = %813, %792
  %817 = load ptr, ptr %16, align 8, !tbaa !5
  %818 = getelementptr inbounds [30 x i8], ptr %42, i64 0, i64 0
  %819 = load i64, ptr %41, align 8, !tbaa !9
  %820 = trunc i64 %819 to i16
  %821 = load i32, ptr %44, align 4, !tbaa !13
  %822 = load i32, ptr %27, align 4, !tbaa !13
  %823 = add i32 %821, %822
  %824 = trunc i32 %823 to i16
  %825 = load i64, ptr %20, align 8, !tbaa !9
  %826 = icmp uge i64 %825, 4294967295
  br i1 %826, label %827, label %828

827:                                              ; preds = %816
  br label %830

828:                                              ; preds = %816
  %829 = load i64, ptr %39, align 8, !tbaa !9
  br label %830

830:                                              ; preds = %828, %827
  %831 = phi i64 [ 4294967295, %827 ], [ %829, %828 ]
  %832 = load i64, ptr %20, align 8, !tbaa !9
  %833 = icmp uge i64 %832, 4294967295
  br i1 %833, label %834, label %835

834:                                              ; preds = %830
  br label %837

835:                                              ; preds = %830
  %836 = load i64, ptr %40, align 8, !tbaa !9
  br label %837

837:                                              ; preds = %835, %834
  %838 = phi i64 [ 4294967295, %834 ], [ %836, %835 ]
  %839 = load i32, ptr %31, align 4, !tbaa !13
  %840 = load i16, ptr %34, align 2, !tbaa !11
  %841 = load i16, ptr %30, align 2, !tbaa !11
  %842 = load i16, ptr %35, align 2, !tbaa !11
  %843 = load i16, ptr %36, align 2, !tbaa !11
  %844 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef %817, ptr noundef %818, i16 noundef zeroext %820, i16 noundef zeroext %824, i64 noundef %831, i64 noundef %838, i32 noundef %839, i16 noundef zeroext %840, i16 noundef zeroext %841, i16 noundef zeroext %842, i16 noundef zeroext %843)
  %845 = icmp ne i32 %844, 0
  br i1 %845, label %849, label %846

846:                                              ; preds = %837
  %847 = load ptr, ptr %16, align 8, !tbaa !5
  %848 = call i32 @mz_zip_set_error(ptr noundef %847, i32 noundef 27)
  store i32 %848, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

849:                                              ; preds = %837
  %850 = load i64, ptr %37, align 8, !tbaa !9
  store i64 %850, ptr %48, align 8, !tbaa !9
  %851 = load ptr, ptr %16, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.mz_zip_archive, ptr %851, i32 0, i32 12
  %853 = load ptr, ptr %852, align 8, !tbaa !25
  %854 = load ptr, ptr %16, align 8, !tbaa !5
  %855 = getelementptr inbounds %struct.mz_zip_archive, ptr %854, i32 0, i32 14
  %856 = load ptr, ptr %855, align 8, !tbaa !26
  %857 = load i64, ptr %48, align 8, !tbaa !9
  %858 = getelementptr inbounds [30 x i8], ptr %42, i64 0, i64 0
  %859 = call i64 %853(ptr noundef %856, i64 noundef %857, ptr noundef %858, i64 noundef 30)
  %860 = icmp ne i64 %859, 30
  br i1 %860, label %861, label %864

861:                                              ; preds = %849
  %862 = load ptr, ptr %16, align 8, !tbaa !5
  %863 = call i32 @mz_zip_set_error(ptr noundef %862, i32 noundef 19)
  store i32 %863, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

864:                                              ; preds = %849
  %865 = load ptr, ptr %43, align 8, !tbaa !5
  %866 = icmp ne ptr %865, null
  br i1 %866, label %867, label %911

867:                                              ; preds = %864
  %868 = load i64, ptr %48, align 8, !tbaa !9
  %869 = add i64 %868, 30
  store i64 %869, ptr %48, align 8, !tbaa !9
  %870 = load ptr, ptr %16, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.mz_zip_archive, ptr %870, i32 0, i32 12
  %872 = load ptr, ptr %871, align 8, !tbaa !25
  %873 = load ptr, ptr %16, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.mz_zip_archive, ptr %873, i32 0, i32 14
  %875 = load ptr, ptr %874, align 8, !tbaa !26
  %876 = load i64, ptr %48, align 8, !tbaa !9
  %877 = load ptr, ptr %17, align 8, !tbaa !5
  %878 = load i64, ptr %41, align 8, !tbaa !9
  %879 = call i64 %872(ptr noundef %875, i64 noundef %876, ptr noundef %877, i64 noundef %878)
  %880 = load i64, ptr %41, align 8, !tbaa !9
  %881 = icmp ne i64 %879, %880
  br i1 %881, label %882, label %885

882:                                              ; preds = %867
  %883 = load ptr, ptr %16, align 8, !tbaa !5
  %884 = call i32 @mz_zip_set_error(ptr noundef %883, i32 noundef 19)
  store i32 %884, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

885:                                              ; preds = %867
  %886 = load i64, ptr %41, align 8, !tbaa !9
  %887 = load i64, ptr %48, align 8, !tbaa !9
  %888 = add i64 %887, %886
  store i64 %888, ptr %48, align 8, !tbaa !9
  %889 = load ptr, ptr %16, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.mz_zip_archive, ptr %889, i32 0, i32 12
  %891 = load ptr, ptr %890, align 8, !tbaa !25
  %892 = load ptr, ptr %16, align 8, !tbaa !5
  %893 = getelementptr inbounds %struct.mz_zip_archive, ptr %892, i32 0, i32 14
  %894 = load ptr, ptr %893, align 8, !tbaa !26
  %895 = load i64, ptr %48, align 8, !tbaa !9
  %896 = getelementptr inbounds [28 x i8], ptr %45, i64 0, i64 0
  %897 = load i32, ptr %44, align 4, !tbaa !13
  %898 = zext i32 %897 to i64
  %899 = call i64 %891(ptr noundef %894, i64 noundef %895, ptr noundef %896, i64 noundef %898)
  %900 = load i32, ptr %44, align 4, !tbaa !13
  %901 = zext i32 %900 to i64
  %902 = icmp ne i64 %899, %901
  br i1 %902, label %903, label %906

903:                                              ; preds = %885
  %904 = load ptr, ptr %16, align 8, !tbaa !5
  %905 = call i32 @mz_zip_set_error(ptr noundef %904, i32 noundef 19)
  store i32 %905, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

906:                                              ; preds = %885
  %907 = load i32, ptr %44, align 4, !tbaa !13
  %908 = zext i32 %907 to i64
  %909 = load i64, ptr %48, align 8, !tbaa !9
  %910 = add i64 %909, %908
  store i64 %910, ptr %48, align 8, !tbaa !9
  br label %911

911:                                              ; preds = %906, %864
  br label %912

912:                                              ; preds = %911, %788
  %913 = load ptr, ptr %43, align 8, !tbaa !5
  %914 = icmp ne ptr %913, null
  br i1 %914, label %915, label %936

915:                                              ; preds = %912
  %916 = getelementptr inbounds [28 x i8], ptr %45, i64 0, i64 0
  %917 = load i64, ptr %39, align 8, !tbaa !9
  %918 = icmp uge i64 %917, 4294967295
  br i1 %918, label %919, label %920

919:                                              ; preds = %915
  br label %921

920:                                              ; preds = %915
  br label %921

921:                                              ; preds = %920, %919
  %922 = phi ptr [ %39, %919 ], [ null, %920 ]
  %923 = load i64, ptr %39, align 8, !tbaa !9
  %924 = icmp uge i64 %923, 4294967295
  br i1 %924, label %925, label %926

925:                                              ; preds = %921
  br label %927

926:                                              ; preds = %921
  br label %927

927:                                              ; preds = %926, %925
  %928 = phi ptr [ %40, %925 ], [ null, %926 ]
  %929 = load i64, ptr %37, align 8, !tbaa !9
  %930 = icmp uge i64 %929, 4294967295
  br i1 %930, label %931, label %932

931:                                              ; preds = %927
  br label %933

932:                                              ; preds = %927
  br label %933

933:                                              ; preds = %932, %931
  %934 = phi ptr [ %37, %931 ], [ null, %932 ]
  %935 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %916, ptr noundef %922, ptr noundef %928, ptr noundef %934)
  store i32 %935, ptr %44, align 4, !tbaa !13
  br label %936

936:                                              ; preds = %933, %912
  %937 = load ptr, ptr %16, align 8, !tbaa !5
  %938 = load ptr, ptr %17, align 8, !tbaa !5
  %939 = load i64, ptr %41, align 8, !tbaa !9
  %940 = trunc i64 %939 to i16
  %941 = load ptr, ptr %43, align 8, !tbaa !5
  %942 = load i32, ptr %44, align 4, !tbaa !13
  %943 = trunc i32 %942 to i16
  %944 = load ptr, ptr %22, align 8, !tbaa !5
  %945 = load i16, ptr %23, align 2, !tbaa !11
  %946 = load i64, ptr %39, align 8, !tbaa !9
  %947 = load i64, ptr %40, align 8, !tbaa !9
  %948 = load i32, ptr %31, align 4, !tbaa !13
  %949 = load i16, ptr %34, align 2, !tbaa !11
  %950 = load i16, ptr %30, align 2, !tbaa !11
  %951 = load i16, ptr %35, align 2, !tbaa !11
  %952 = load i16, ptr %36, align 2, !tbaa !11
  %953 = load i64, ptr %37, align 8, !tbaa !9
  %954 = load i32, ptr %25, align 4, !tbaa !13
  %955 = load ptr, ptr %28, align 8, !tbaa !5
  %956 = load i32, ptr %29, align 4, !tbaa !13
  %957 = call i32 @mz_zip_writer_add_to_central_dir(ptr noundef %937, ptr noundef %938, i16 noundef zeroext %940, ptr noundef %941, i16 noundef zeroext %943, ptr noundef %944, i16 noundef zeroext %945, i64 noundef %946, i64 noundef %947, i32 noundef %948, i16 noundef zeroext %949, i16 noundef zeroext %950, i16 noundef zeroext %951, i16 noundef zeroext %952, i64 noundef %953, i32 noundef %954, ptr noundef %955, i32 noundef %956)
  %958 = icmp ne i32 %957, 0
  br i1 %958, label %960, label %959

959:                                              ; preds = %936
  store i32 0, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

960:                                              ; preds = %936
  %961 = load ptr, ptr %16, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.mz_zip_archive, ptr %961, i32 0, i32 2
  %963 = load i32, ptr %962, align 8, !tbaa !22
  %964 = add i32 %963, 1
  store i32 %964, ptr %962, align 8, !tbaa !22
  %965 = load i64, ptr %38, align 8, !tbaa !9
  %966 = load ptr, ptr %16, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.mz_zip_archive, ptr %966, i32 0, i32 0
  store i64 %965, ptr %967, align 8, !tbaa !15
  store i32 1, ptr %15, align 4
  store i32 1, ptr %49, align 4
  br label %968

968:                                              ; preds = %960, %959, %903, %882, %861, %846, %785, %727, %479, %454, %436, %422, %406, %392, %371, %353, %339, %245, %186, %168, %150, %137, %130, %109
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 28, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 30, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #6
  %969 = load i32, ptr %15, align 4
  ret i32 %969

970:                                              ; preds = %689
  unreachable
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { alwaysinline 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 #5 = { 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 #6 = { nounwind }
attributes #7 = { nounwind willreturn memory(read) }
attributes #8 = { 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 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !10, i64 0}
!16 = !{!"", !10, i64 0, !10, i64 8, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !10, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104}
!17 = !{!16, !6, i64 104}
!18 = !{!16, !14, i64 20}
!19 = !{!20, !14, i64 100}
!20 = !{!"mz_zip_internal_state_tag", !21, i64 0, !21, i64 32, !21, i64 64, !14, i64 96, !14, i64 100, !14, i64 104, !6, i64 112, !10, i64 120, !6, i64 128, !10, i64 136, !10, i64 144}
!21 = !{!"", !6, i64 0, !10, i64 8, !10, i64 16, !14, i64 24}
!22 = !{!16, !14, i64 16}
!23 = !{!20, !10, i64 8}
!24 = !{!16, !10, i64 32}
!25 = !{!16, !6, i64 80}
!26 = !{!16, !6, i64 96}
!27 = !{!16, !6, i64 40}
!28 = !{!16, !6, i64 64}
!29 = !{!16, !6, i64 48}
!30 = !{!31, !6, i64 0}
!31 = !{!"", !6, i64 0, !10, i64 8, !10, i64 16}
!32 = !{!31, !10, i64 8}
!33 = !{!31, !10, i64 16}
!34 = !{!16, !6, i64 88}


; 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.mz_zip_writer_add_state = type { ptr, i64, i64 }

@.str.12 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__.mz_zip_writer_add_read_buf_callback = external hidden unnamed_addr constant [221 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @tdefl_create_comp_flags_from_zip_params(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @tdefl_init(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @mz_zip_set_error(ptr noundef, i32 noundef) local_unnamed_addr #4

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

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

; Function Attrs: nounwind uwtable
declare hidden void @mz_zip_time_t_to_dos_time(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @mz_zip_writer_create_local_dir_header(ptr noundef, ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i64 noundef, i64 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_write_le32(ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @mz_write_le64(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden i32 @mz_zip_writer_add_to_central_dir(ptr noundef, ptr noundef, i16 noundef zeroext, ptr noundef, i16 noundef zeroext, ptr noundef, i16 noundef zeroext, i64 noundef, i64 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, i64 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local i32 @mz_zip_writer_add_read_buf_callback(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, i64 noundef %4, ptr noundef readonly %5, ptr noundef %6, i16 noundef zeroext %7, i32 noundef %8, i32 noundef %9, ptr noundef %10, i32 noundef %11, ptr noundef %12, i32 noundef %13) local_unnamed_addr #1 {
  %15 = alloca i16, align 2
  %16 = alloca i16, align 2
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca [30 x i8], align 16
  %21 = alloca [28 x i8], align 16
  %22 = alloca %struct.mz_zip_writer_add_state, align 8
  %23 = alloca [24 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %15) #6
  store i16 0, ptr %15, align 2, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %16) #6
  store i16 0, ptr %16, align 2, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  %24 = load i64, ptr %0, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  store i64 0, ptr %18, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #6
  store i64 0, ptr %19, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 30, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %21) #6
  %25 = icmp slt i32 %8, 0
  %spec.store.select = select i1 %25, i32 6, i32 %8
  %26 = and i32 %spec.store.select, 15
  %27 = and i32 %spec.store.select, 131072
  %.not = icmp eq i32 %27, 0
  %28 = lshr exact i32 %27, 14
  %29 = trunc nuw nsw i32 %28 to i16
  %30 = xor i16 %29, 8
  %31 = and i32 %spec.store.select, 65536
  %.not366 = icmp eq i32 %31, 0
  %32 = or disjoint i16 %30, 2048
  %spec.select = select i1 %.not366, i16 %32, i16 %30
  %33 = getelementptr inbounds i8, ptr %0, i64 104
  %34 = load ptr, ptr %33, align 8, !tbaa !15
  %.not367 = icmp eq ptr %34, null
  br i1 %.not367, label %44, label %35

35:                                               ; preds = %14
  %36 = getelementptr inbounds i8, ptr %0, i64 20
  %37 = load i32, ptr %36, align 4, !tbaa !16
  %38 = icmp eq i32 %37, 2
  %39 = icmp ne ptr %1, null
  %or.cond = and i1 %39, %38
  br i1 %or.cond, label %40, label %44

40:                                               ; preds = %35
  %41 = icmp ne i16 %7, 0
  %42 = icmp eq ptr %6, null
  %or.cond5.not370 = and i1 %42, %41
  %43 = icmp ugt i32 %26, 10
  %or.cond7 = or i1 %or.cond5.not370, %43
  br i1 %or.cond7, label %44, label %46

44:                                               ; preds = %40, %35, %14
  %45 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 24)
  br label %.thread440

46:                                               ; preds = %40
  %47 = getelementptr inbounds i8, ptr %34, i64 100
  %48 = load i32, ptr %47, align 4, !tbaa !17
  %49 = icmp eq i32 %48, 0
  %50 = icmp ugt i64 %4, 4294967295
  %or.cond9 = and i1 %50, %49
  br i1 %or.cond9, label %51, label %52

51:                                               ; preds = %46
  store i32 1, ptr %47, align 4, !tbaa !17
  br label %52

52:                                               ; preds = %51, %46
  %53 = and i32 %spec.store.select, 1024
  %.not371 = icmp eq i32 %53, 0
  br i1 %.not371, label %56, label %54

54:                                               ; preds = %52
  %55 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 24)
  br label %.thread440

56:                                               ; preds = %52
  %57 = tail call i32 @mz_zip_writer_validate_archive_name(ptr noundef nonnull %1)
  %.not372 = icmp eq i32 %57, 0
  br i1 %.not372, label %58, label %60

58:                                               ; preds = %56
  %59 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 25)
  br label %.thread440

60:                                               ; preds = %56
  %61 = load i32, ptr %47, align 4, !tbaa !17
  %.not373 = icmp eq i32 %61, 0
  %62 = getelementptr inbounds i8, ptr %0, i64 16
  %63 = load i32, ptr %62, align 8, !tbaa !20
  br i1 %.not373, label %68, label %64

64:                                               ; preds = %60
  %65 = icmp eq i32 %63, -1
  br i1 %65, label %66, label %71

66:                                               ; preds = %64
  %67 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 2)
  br label %.thread440

68:                                               ; preds = %60
  %69 = icmp eq i32 %63, 65535
  br i1 %69, label %70, label %71

70:                                               ; preds = %68
  store i32 1, ptr %47, align 4, !tbaa !17
  br label %71

71:                                               ; preds = %68, %70, %64
  %72 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %1) #7
  %73 = icmp ugt i64 %72, 65535
  br i1 %73, label %74, label %76

74:                                               ; preds = %71
  %75 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 25)
  br label %.thread440

76:                                               ; preds = %71
  %77 = tail call i32 @mz_zip_writer_compute_padding_needed_for_file_alignment(ptr noundef nonnull %0)
  %78 = getelementptr inbounds i8, ptr %34, i64 8
  %79 = load i64, ptr %78, align 8, !tbaa !21
  %80 = zext i16 %7 to i64
  %81 = add nuw nsw i64 %80, 74
  %82 = add nuw nsw i64 %81, %72
  %83 = add i64 %82, %79
  %84 = icmp ugt i64 %83, 4294967294
  br i1 %84, label %85, label %87

85:                                               ; preds = %76
  %86 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 15)
  br label %.thread440

87:                                               ; preds = %76
  %88 = load i32, ptr %47, align 4, !tbaa !17
  %.not374 = icmp eq i32 %88, 0
  br i1 %.not374, label %89, label %103

89:                                               ; preds = %87
  %90 = load i64, ptr %0, align 8, !tbaa !9
  %91 = zext i32 %77 to i64
  %92 = zext i32 %11 to i64
  %93 = zext i32 %13 to i64
  %factor = shl nuw nsw i64 %72, 1
  %94 = add nuw nsw i64 %80, 1138
  %95 = add nuw nsw i64 %94, %92
  %96 = add nuw nsw i64 %95, %93
  %97 = add nuw nsw i64 %96, %factor
  %98 = add nuw nsw i64 %97, %91
  %99 = add i64 %98, %79
  %100 = add i64 %99, %90
  %101 = icmp ugt i64 %100, 4294967295
  br i1 %101, label %102, label %103

102:                                              ; preds = %89
  store i32 1, ptr %47, align 4, !tbaa !17
  br label %103

103:                                              ; preds = %89, %102, %87
  %.not375 = icmp eq ptr %5, null
  br i1 %.not375, label %106, label %104

104:                                              ; preds = %103
  %105 = load i64, ptr %5, align 8, !tbaa !14
  call void @mz_zip_time_t_to_dos_time(i64 noundef %105, ptr noundef nonnull %15, ptr noundef nonnull %16)
  br label %106

106:                                              ; preds = %104, %103
  %107 = icmp ult i64 %4, 4
  %spec.select404 = select i1 %107, i32 0, i32 %26
  %108 = call i32 @mz_zip_writer_write_zeros(ptr noundef nonnull %0, i64 noundef %24, i32 noundef %77)
  %.not376 = icmp eq i32 %108, 0
  br i1 %.not376, label %109, label %111

109:                                              ; preds = %106
  %110 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

111:                                              ; preds = %106
  %112 = zext i32 %77 to i64
  %113 = add i64 %24, %112
  store i64 %113, ptr %17, align 8, !tbaa !14
  %114 = getelementptr inbounds i8, ptr %0, i64 32
  %115 = load i64, ptr %114, align 8, !tbaa !22
  %.not377 = icmp eq i64 %115, 0
  br i1 %.not377, label %121, label %116

116:                                              ; preds = %111
  %117 = add i64 %115, -1
  %118 = and i64 %117, %113
  %119 = icmp eq i64 %118, 0
  br i1 %119, label %121, label %120

120:                                              ; preds = %116
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.12, i32 noundef 8848, ptr noundef nonnull @__PRETTY_FUNCTION__.mz_zip_writer_add_read_buf_callback) #8
  unreachable

121:                                              ; preds = %116, %111
  %.not464 = icmp eq i64 %4, 0
  %.not465 = icmp eq i32 %spec.select404, 0
  %spec.select405 = select i1 %.not465, i16 0, i16 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(30) %20, i8 0, i64 30, i1 false)
  %122 = load i32, ptr %47, align 4, !tbaa !17
  %.not378 = icmp eq i32 %122, 0
  br i1 %.not378, label %167, label %123

123:                                              ; preds = %121
  %124 = icmp ugt i64 %4, 4294967294
  %125 = icmp ugt i64 %113, 4294967294
  %or.cond13 = select i1 %124, i1 true, i1 %125
  br i1 %or.cond13, label %126, label %133

126:                                              ; preds = %123
  br i1 %.not, label %131, label %127

127:                                              ; preds = %126
  %. = select i1 %124, ptr %18, ptr null
  %128 = select i1 %124, ptr %19, ptr null
  %129 = select i1 %125, ptr %17, ptr null
  %130 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef nonnull %21, ptr noundef %., ptr noundef %128, ptr noundef %129)
  br label %133

131:                                              ; preds = %126
  %.14 = select i1 %125, ptr %17, ptr null
  %132 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef nonnull %21, ptr noundef null, ptr noundef null, ptr noundef %.14)
  br label %133

133:                                              ; preds = %127, %131, %123
  %.0335 = phi ptr [ %21, %127 ], [ %21, %131 ], [ null, %123 ]
  %.0330 = phi i32 [ %130, %127 ], [ %132, %131 ], [ 0, %123 ]
  %134 = trunc nuw i64 %72 to i16
  %135 = add i32 %.0330, %11
  %136 = trunc i32 %135 to i16
  %137 = load i16, ptr %15, align 2, !tbaa !5
  %138 = load i16, ptr %16, align 2, !tbaa !5
  %139 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef nonnull %0, ptr noundef nonnull %20, i16 noundef zeroext %134, i16 noundef zeroext %136, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %spec.select405, i16 noundef zeroext %spec.select, i16 noundef zeroext %137, i16 noundef zeroext %138)
  %.not382 = icmp eq i32 %139, 0
  br i1 %.not382, label %140, label %142

140:                                              ; preds = %133
  %141 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 27)
  br label %.thread440

142:                                              ; preds = %133
  %143 = getelementptr inbounds i8, ptr %0, i64 80
  %144 = load ptr, ptr %143, align 8, !tbaa !23
  %145 = getelementptr inbounds i8, ptr %0, i64 96
  %146 = load ptr, ptr %145, align 8, !tbaa !24
  %147 = call i64 %144(ptr noundef %146, i64 noundef %113, ptr noundef nonnull %20, i64 noundef 30) #6
  %.not383 = icmp eq i64 %147, 30
  br i1 %.not383, label %150, label %148

148:                                              ; preds = %142
  %149 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

150:                                              ; preds = %142
  %151 = add i64 %113, 30
  %152 = load ptr, ptr %143, align 8, !tbaa !23
  %153 = load ptr, ptr %145, align 8, !tbaa !24
  %154 = call i64 %152(ptr noundef %153, i64 noundef %151, ptr noundef nonnull %1, i64 noundef %72) #6
  %.not384 = icmp eq i64 %154, %72
  br i1 %.not384, label %157, label %155

155:                                              ; preds = %150
  %156 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

157:                                              ; preds = %150
  %158 = add i64 %151, %72
  %159 = load ptr, ptr %143, align 8, !tbaa !23
  %160 = load ptr, ptr %145, align 8, !tbaa !24
  %161 = zext i32 %.0330 to i64
  %162 = call i64 %159(ptr noundef %160, i64 noundef %158, ptr noundef nonnull %21, i64 noundef %161) #6
  %.not385 = icmp eq i64 %162, %161
  br i1 %.not385, label %165, label %163

163:                                              ; preds = %157
  %164 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

165:                                              ; preds = %157
  %166 = add i64 %158, %161
  br label %198

167:                                              ; preds = %121
  %168 = load i64, ptr %19, align 8, !tbaa !14
  %169 = icmp ugt i64 %168, 4294967295
  %170 = icmp ugt i64 %113, 4294967295
  %or.cond16 = select i1 %169, i1 true, i1 %170
  br i1 %or.cond16, label %171, label %173

171:                                              ; preds = %167
  %172 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 29)
  br label %.thread440

173:                                              ; preds = %167
  %174 = trunc nuw i64 %72 to i16
  %175 = trunc i32 %11 to i16
  %176 = load i16, ptr %15, align 2, !tbaa !5
  %177 = load i16, ptr %16, align 2, !tbaa !5
  %178 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef nonnull %0, ptr noundef nonnull %20, i16 noundef zeroext %174, i16 noundef zeroext %175, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %spec.select405, i16 noundef zeroext %spec.select, i16 noundef zeroext %176, i16 noundef zeroext %177)
  %.not379 = icmp eq i32 %178, 0
  br i1 %.not379, label %179, label %181

179:                                              ; preds = %173
  %180 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 27)
  br label %.thread440

181:                                              ; preds = %173
  %182 = getelementptr inbounds i8, ptr %0, i64 80
  %183 = load ptr, ptr %182, align 8, !tbaa !23
  %184 = getelementptr inbounds i8, ptr %0, i64 96
  %185 = load ptr, ptr %184, align 8, !tbaa !24
  %186 = call i64 %183(ptr noundef %185, i64 noundef %113, ptr noundef nonnull %20, i64 noundef 30) #6
  %.not380 = icmp eq i64 %186, 30
  br i1 %.not380, label %189, label %187

187:                                              ; preds = %181
  %188 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

189:                                              ; preds = %181
  %190 = add nuw nsw i64 %113, 30
  %191 = load ptr, ptr %182, align 8, !tbaa !23
  %192 = load ptr, ptr %184, align 8, !tbaa !24
  %193 = call i64 %191(ptr noundef %192, i64 noundef %190, ptr noundef nonnull %1, i64 noundef %72) #6
  %.not381 = icmp eq i64 %193, %72
  br i1 %.not381, label %196, label %194

194:                                              ; preds = %189
  %195 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

196:                                              ; preds = %189
  %197 = add nuw nsw i64 %190, %72
  br label %198

198:                                              ; preds = %196, %165
  %.0337 = phi i64 [ %166, %165 ], [ %197, %196 ]
  %.1336 = phi ptr [ %.0335, %165 ], [ null, %196 ]
  %.1331 = phi i32 [ %.0330, %165 ], [ 0, %196 ]
  %.not386 = icmp eq i32 %11, 0
  br i1 %.not386, label %210, label %199

199:                                              ; preds = %198
  %200 = getelementptr inbounds i8, ptr %0, i64 80
  %201 = load ptr, ptr %200, align 8, !tbaa !23
  %202 = getelementptr inbounds i8, ptr %0, i64 96
  %203 = load ptr, ptr %202, align 8, !tbaa !24
  %204 = zext i32 %11 to i64
  %205 = call i64 %201(ptr noundef %203, i64 noundef %.0337, ptr noundef %10, i64 noundef %204) #6
  %.not387 = icmp eq i64 %205, %204
  br i1 %.not387, label %208, label %206

206:                                              ; preds = %199
  %207 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

208:                                              ; preds = %199
  %209 = add i64 %.0337, %204
  br label %210

210:                                              ; preds = %208, %198
  %.1338 = phi i64 [ %209, %208 ], [ %.0337, %198 ]
  br i1 %.not464, label %308, label %211

211:                                              ; preds = %210
  %212 = getelementptr inbounds i8, ptr %0, i64 40
  %213 = load ptr, ptr %212, align 8, !tbaa !25
  %214 = getelementptr inbounds i8, ptr %0, i64 64
  %215 = load ptr, ptr %214, align 8, !tbaa !26
  %216 = call ptr %213(ptr noundef %215, i64 noundef 1, i64 noundef 65536) #6
  %.not388 = icmp eq ptr %216, null
  br i1 %.not388, label %217, label %219

217:                                              ; preds = %211
  %218 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 16)
  br label %.thread440

219:                                              ; preds = %211
  br i1 %.not465, label %.preheader, label %251

.preheader:                                       ; preds = %219
  %220 = call i64 %2(ptr noundef %3, i64 noundef 0, ptr noundef nonnull %216, i64 noundef 65536) #6
  %221 = icmp eq i64 %220, 0
  br i1 %221, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %222 = getelementptr inbounds i8, ptr %0, i64 80
  %223 = getelementptr inbounds i8, ptr %0, i64 96
  br label %224

224:                                              ; preds = %.lr.ph, %244
  %225 = phi i64 [ %220, %.lr.ph ], [ %248, %244 ]
  %.0311482 = phi i64 [ 0, %.lr.ph ], [ %246, %244 ]
  %.0325481 = phi i64 [ 0, %.lr.ph ], [ %228, %244 ]
  %.2339480 = phi i64 [ %.1338, %.lr.ph ], [ %247, %244 ]
  %226 = icmp ugt i64 %225, 65536
  br i1 %226, label %230, label %227

227:                                              ; preds = %224
  %228 = add i64 %225, %.0325481
  %229 = icmp ugt i64 %228, %4
  br i1 %229, label %230, label %235

230:                                              ; preds = %227, %224
  %231 = getelementptr inbounds i8, ptr %0, i64 48
  %232 = load ptr, ptr %231, align 8, !tbaa !27
  %233 = load ptr, ptr %214, align 8, !tbaa !26
  call void %232(ptr noundef %233, ptr noundef nonnull %216) #6
  %234 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 20)
  br label %.thread440

235:                                              ; preds = %227
  %236 = load ptr, ptr %222, align 8, !tbaa !23
  %237 = load ptr, ptr %223, align 8, !tbaa !24
  %238 = call i64 %236(ptr noundef %237, i64 noundef %.2339480, ptr noundef nonnull %216, i64 noundef %225) #6
  %.not389 = icmp eq i64 %238, %225
  br i1 %.not389, label %244, label %239

239:                                              ; preds = %235
  %240 = getelementptr inbounds i8, ptr %0, i64 48
  %241 = load ptr, ptr %240, align 8, !tbaa !27
  %242 = load ptr, ptr %214, align 8, !tbaa !26
  call void %241(ptr noundef %242, ptr noundef nonnull %216) #6
  %243 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

244:                                              ; preds = %235
  %245 = and i64 %.0311482, 4294967295
  %246 = call i64 @mz_crc32(i64 noundef %245, ptr noundef nonnull %216, i64 noundef %225)
  %247 = add i64 %225, %.2339480
  %248 = call i64 %2(ptr noundef %3, i64 noundef %228, ptr noundef nonnull %216, i64 noundef 65536) #6
  %249 = icmp eq i64 %248, 0
  br i1 %249, label %._crit_edge.loopexit, label %224

._crit_edge.loopexit:                             ; preds = %244
  %250 = trunc i64 %246 to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader
  %.2339.lcssa = phi i64 [ %.1338, %.preheader ], [ %247, %._crit_edge.loopexit ]
  %.0325.lcssa = phi i64 [ 0, %.preheader ], [ %228, %._crit_edge.loopexit ]
  %.0311.lcssa = phi i32 [ 0, %.preheader ], [ %250, %._crit_edge.loopexit ]
  store i64 %.0325.lcssa, ptr %18, align 8, !tbaa !14
  store i64 %.0325.lcssa, ptr %19, align 8, !tbaa !14
  br label %304

251:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #6
  %252 = load ptr, ptr %212, align 8, !tbaa !25
  %253 = load ptr, ptr %214, align 8, !tbaa !26
  %254 = call ptr %252(ptr noundef %253, i64 noundef 1, i64 noundef 319352) #6
  %.not390 = icmp eq ptr %254, null
  br i1 %.not390, label %255, label %260

255:                                              ; preds = %251
  %256 = getelementptr inbounds i8, ptr %0, i64 48
  %257 = load ptr, ptr %256, align 8, !tbaa !27
  %258 = load ptr, ptr %214, align 8, !tbaa !26
  call void %257(ptr noundef %258, ptr noundef nonnull %216) #6
  %259 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 16)
  br label %.thread434

260:                                              ; preds = %251
  store ptr %0, ptr %22, align 8, !tbaa !28
  %261 = getelementptr inbounds i8, ptr %22, i64 8
  store i64 %.1338, ptr %261, align 8, !tbaa !30
  %262 = getelementptr inbounds i8, ptr %22, i64 16
  store i64 0, ptr %262, align 8, !tbaa !31
  %263 = call i32 @tdefl_create_comp_flags_from_zip_params(i32 noundef %spec.select404, i32 noundef -15, i32 noundef 0)
  %264 = call i32 @tdefl_init(ptr noundef nonnull %254, ptr noundef nonnull @mz_zip_writer_add_put_buf_callback, ptr noundef nonnull %22, i32 noundef %263)
  %.not391 = icmp eq i32 %264, 0
  br i1 %.not391, label %.preheader466, label %267

.preheader466:                                    ; preds = %260
  %265 = getelementptr inbounds i8, ptr %0, i64 88
  %266 = getelementptr inbounds i8, ptr %0, i64 96
  br label %274

267:                                              ; preds = %260
  %268 = getelementptr inbounds i8, ptr %0, i64 48
  %269 = load ptr, ptr %268, align 8, !tbaa !27
  %270 = load ptr, ptr %214, align 8, !tbaa !26
  call void %269(ptr noundef %270, ptr noundef nonnull %254) #6
  %271 = load ptr, ptr %268, align 8, !tbaa !27
  %272 = load ptr, ptr %214, align 8, !tbaa !26
  call void %271(ptr noundef %272, ptr noundef nonnull %216) #6
  %273 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 27)
  br label %.thread434

274:                                              ; preds = %.preheader466, %287
  %.2327 = phi i64 [ %278, %287 ], [ 0, %.preheader466 ]
  %.2313 = phi i64 [ %282, %287 ], [ 0, %.preheader466 ]
  %275 = call i64 %2(ptr noundef %3, i64 noundef %.2327, ptr noundef nonnull %216, i64 noundef 65536) #6
  %276 = icmp ugt i64 %275, 65536
  br i1 %276, label %290, label %277

277:                                              ; preds = %274
  %278 = add i64 %275, %.2327
  %279 = icmp ugt i64 %278, %4
  br i1 %279, label %290, label %280

280:                                              ; preds = %277
  %281 = and i64 %.2313, 4294967295
  %282 = call i64 @mz_crc32(i64 noundef %281, ptr noundef nonnull %216, i64 noundef %275)
  %283 = load ptr, ptr %265, align 8, !tbaa !32
  %.not392 = icmp eq ptr %283, null
  br i1 %.not392, label %287, label %284

284:                                              ; preds = %280
  %285 = load ptr, ptr %266, align 8, !tbaa !24
  %286 = call i32 %283(ptr noundef %285) #6
  %.not393 = icmp eq i32 %286, 0
  %spec.select406 = select i1 %.not393, i32 0, i32 3
  br label %287

287:                                              ; preds = %284, %280
  %.0306 = phi i32 [ 0, %280 ], [ %spec.select406, %284 ]
  %288 = icmp eq i64 %275, 0
  %spec.select407 = select i1 %288, i32 4, i32 %.0306
  %289 = call i32 @tdefl_compress_buffer(ptr noundef nonnull %254, ptr noundef nonnull %216, i64 noundef %275, i32 noundef %spec.select407)
  switch i32 %289, label %290 [
    i32 1, label %297
    i32 0, label %274
  ]

290:                                              ; preds = %287, %274, %277
  %.sink = phi i32 [ 20, %277 ], [ 20, %274 ], [ 12, %287 ]
  %291 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef %.sink)
  %292 = getelementptr inbounds i8, ptr %0, i64 48
  %293 = load ptr, ptr %292, align 8, !tbaa !27
  %294 = load ptr, ptr %214, align 8, !tbaa !26
  call void %293(ptr noundef %294, ptr noundef nonnull %254) #6
  %295 = load ptr, ptr %292, align 8, !tbaa !27
  %296 = load ptr, ptr %214, align 8, !tbaa !26
  call void %295(ptr noundef %296, ptr noundef nonnull %216) #6
  br label %.thread434

.thread434:                                       ; preds = %267, %290, %255
  %.2.ph = phi i32 [ %259, %255 ], [ 0, %290 ], [ %273, %267 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  br label %.thread440

297:                                              ; preds = %287
  %298 = trunc i64 %282 to i32
  %299 = getelementptr inbounds i8, ptr %0, i64 48
  %300 = load ptr, ptr %299, align 8, !tbaa !27
  %301 = load ptr, ptr %214, align 8, !tbaa !26
  call void %300(ptr noundef %301, ptr noundef nonnull %254) #6
  store i64 %278, ptr %18, align 8, !tbaa !14
  %302 = load i64, ptr %262, align 8, !tbaa !31
  store i64 %302, ptr %19, align 8, !tbaa !14
  %303 = load i64, ptr %261, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  br label %304

304:                                              ; preds = %._crit_edge, %297
  %.5342 = phi i64 [ %303, %297 ], [ %.2339.lcssa, %._crit_edge ]
  %.5316 = phi i32 [ %298, %297 ], [ %.0311.lcssa, %._crit_edge ]
  %305 = getelementptr inbounds i8, ptr %0, i64 48
  %306 = load ptr, ptr %305, align 8, !tbaa !27
  %307 = load ptr, ptr %214, align 8, !tbaa !26
  call void %306(ptr noundef %307, ptr noundef nonnull %216) #6
  br label %308

308:                                              ; preds = %304, %210
  %.7344 = phi i64 [ %.5342, %304 ], [ %.1338, %210 ]
  %.7318 = phi i32 [ %.5316, %304 ], [ 0, %210 ]
  br i1 %.not, label %309, label %334

309:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #6
  call void @mz_write_le32(ptr noundef nonnull %23, i32 noundef 134695760)
  %310 = getelementptr inbounds i8, ptr %23, i64 4
  call void @mz_write_le32(ptr noundef nonnull %310, i32 noundef %.7318)
  %311 = icmp eq ptr %.1336, null
  br i1 %311, label %312, label %323

312:                                              ; preds = %309
  %313 = load i64, ptr %19, align 8, !tbaa !14
  %314 = icmp ugt i64 %313, 4294967295
  br i1 %314, label %315, label %317

315:                                              ; preds = %312
  %316 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 29)
  br label %.thread447

317:                                              ; preds = %312
  %318 = getelementptr inbounds i8, ptr %23, i64 8
  %319 = trunc nuw i64 %313 to i32
  call void @mz_write_le32(ptr noundef nonnull %318, i32 noundef %319)
  %320 = getelementptr inbounds i8, ptr %23, i64 12
  %321 = load i64, ptr %18, align 8, !tbaa !14
  %322 = trunc i64 %321 to i32
  call void @mz_write_le32(ptr noundef nonnull %320, i32 noundef %322)
  br label %328

323:                                              ; preds = %309
  %324 = getelementptr inbounds i8, ptr %23, i64 8
  %325 = load i64, ptr %19, align 8, !tbaa !14
  call void @mz_write_le64(ptr noundef nonnull %324, i64 noundef %325)
  %326 = getelementptr inbounds i8, ptr %23, i64 16
  %327 = load i64, ptr %18, align 8, !tbaa !14
  call void @mz_write_le64(ptr noundef nonnull %326, i64 noundef %327)
  br label %328

328:                                              ; preds = %323, %317
  %.0 = phi i64 [ 16, %317 ], [ 24, %323 ]
  %329 = getelementptr inbounds i8, ptr %0, i64 80
  %330 = load ptr, ptr %329, align 8, !tbaa !23
  %331 = getelementptr inbounds i8, ptr %0, i64 96
  %332 = load ptr, ptr %331, align 8, !tbaa !24
  %333 = call i64 %330(ptr noundef %332, i64 noundef %.7344, ptr noundef nonnull %23, i64 noundef %.0) #6
  %.not396 = icmp eq i64 %333, %.0
  br i1 %.not396, label %381, label %.thread447

.thread447:                                       ; preds = %315, %328
  %.6.ph = phi i32 [ 0, %328 ], [ %316, %315 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #6
  br label %.thread440

334:                                              ; preds = %308
  %.not397 = icmp eq ptr %.1336, null
  br i1 %.not397, label %342, label %335

335:                                              ; preds = %334
  %336 = icmp ugt i64 %4, 4294967294
  %.17 = select i1 %336, ptr %18, ptr null
  %337 = select i1 %336, ptr %19, ptr null
  %338 = load i64, ptr %17, align 8, !tbaa !14
  %339 = icmp ugt i64 %338, 4294967294
  %340 = select i1 %339, ptr %17, ptr null
  %341 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef nonnull %21, ptr noundef %.17, ptr noundef %337, ptr noundef %340)
  br label %342

342:                                              ; preds = %335, %334
  %.2332 = phi i32 [ %341, %335 ], [ %.1331, %334 ]
  %343 = trunc nuw i64 %72 to i16
  %344 = add i32 %.2332, %11
  %345 = trunc i32 %344 to i16
  %346 = icmp ugt i64 %4, 4294967294
  %347 = load i64, ptr %18, align 8
  %348 = select i1 %346, i64 4294967295, i64 %347
  %349 = load i64, ptr %19, align 8
  %350 = select i1 %346, i64 4294967295, i64 %349
  %351 = load i16, ptr %15, align 2, !tbaa !5
  %352 = load i16, ptr %16, align 2, !tbaa !5
  %353 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef nonnull %0, ptr noundef nonnull %20, i16 noundef zeroext %343, i16 noundef zeroext %345, i64 noundef %348, i64 noundef %350, i32 noundef %.7318, i16 noundef zeroext %spec.select405, i16 noundef zeroext %spec.select, i16 noundef zeroext %351, i16 noundef zeroext %352)
  %.not398 = icmp eq i32 %353, 0
  br i1 %.not398, label %354, label %356

354:                                              ; preds = %342
  %355 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 27)
  br label %.thread440

356:                                              ; preds = %342
  %357 = load i64, ptr %17, align 8, !tbaa !14
  %358 = getelementptr inbounds i8, ptr %0, i64 80
  %359 = load ptr, ptr %358, align 8, !tbaa !23
  %360 = getelementptr inbounds i8, ptr %0, i64 96
  %361 = load ptr, ptr %360, align 8, !tbaa !24
  %362 = call i64 %359(ptr noundef %361, i64 noundef %357, ptr noundef nonnull %20, i64 noundef 30) #6
  %.not399 = icmp eq i64 %362, 30
  br i1 %.not399, label %365, label %363

363:                                              ; preds = %356
  %364 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

365:                                              ; preds = %356
  br i1 %.not397, label %.thread454, label %366

366:                                              ; preds = %365
  %367 = add i64 %357, 30
  %368 = load ptr, ptr %358, align 8, !tbaa !23
  %369 = load ptr, ptr %360, align 8, !tbaa !24
  %370 = call i64 %368(ptr noundef %369, i64 noundef %367, ptr noundef nonnull %1, i64 noundef %72) #6
  %.not400 = icmp eq i64 %370, %72
  br i1 %.not400, label %373, label %371

371:                                              ; preds = %366
  %372 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

373:                                              ; preds = %366
  %374 = add i64 %367, %72
  %375 = load ptr, ptr %358, align 8, !tbaa !23
  %376 = load ptr, ptr %360, align 8, !tbaa !24
  %377 = zext i32 %.2332 to i64
  %378 = call i64 %375(ptr noundef %376, i64 noundef %374, ptr noundef nonnull %21, i64 noundef %377) #6
  %.not401 = icmp eq i64 %378, %377
  br i1 %.not401, label %.thread459, label %379

379:                                              ; preds = %373
  %380 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread440

381:                                              ; preds = %328
  %382 = add i64 %.0, %.7344
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #6
  br i1 %311, label %.thread454, label %.thread459

.thread459:                                       ; preds = %373, %381
  %.9453463 = phi i64 [ %382, %381 ], [ %.7344, %373 ]
  %383 = load i64, ptr %18, align 8, !tbaa !14
  %384 = icmp ugt i64 %383, 4294967294
  %.18 = select i1 %384, ptr %18, ptr null
  %385 = select i1 %384, ptr %19, ptr null
  %386 = load i64, ptr %17, align 8, !tbaa !14
  %387 = icmp ugt i64 %386, 4294967294
  %388 = select i1 %387, ptr %17, ptr null
  %389 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef nonnull %21, ptr noundef %.18, ptr noundef %385, ptr noundef %388)
  br label %.thread454

.thread454:                                       ; preds = %365, %.thread459, %381
  %.9453458 = phi i64 [ %.9453463, %.thread459 ], [ %382, %381 ], [ %.7344, %365 ]
  %.4334 = phi i32 [ %389, %.thread459 ], [ %.1331, %381 ], [ %.2332, %365 ]
  %390 = trunc nuw i64 %72 to i16
  %391 = trunc i32 %.4334 to i16
  %392 = load i64, ptr %18, align 8, !tbaa !14
  %393 = load i64, ptr %19, align 8, !tbaa !14
  %394 = load i16, ptr %15, align 2, !tbaa !5
  %395 = load i16, ptr %16, align 2, !tbaa !5
  %396 = load i64, ptr %17, align 8, !tbaa !14
  %397 = call i32 @mz_zip_writer_add_to_central_dir(ptr noundef nonnull %0, ptr noundef nonnull %1, i16 noundef zeroext %390, ptr noundef %.1336, i16 noundef zeroext %391, ptr noundef %6, i16 noundef zeroext %7, i64 noundef %392, i64 noundef %393, i32 noundef %.7318, i16 noundef zeroext %spec.select405, i16 noundef zeroext %spec.select, i16 noundef zeroext %394, i16 noundef zeroext %395, i64 noundef %396, i32 noundef %9, ptr noundef %12, i32 noundef %13)
  %.not403 = icmp eq i32 %397, 0
  br i1 %.not403, label %.thread440, label %398

398:                                              ; preds = %.thread454
  %399 = getelementptr inbounds i8, ptr %0, i64 16
  %400 = load i32, ptr %399, align 8, !tbaa !20
  %401 = add i32 %400, 1
  store i32 %401, ptr %399, align 8, !tbaa !20
  store i64 %.9453458, ptr %0, align 8, !tbaa !9
  br label %.thread440

.thread440:                                       ; preds = %239, %230, %.thread434, %217, %.thread447, %.thread454, %398, %379, %371, %363, %354, %206, %194, %187, %179, %171, %163, %155, %148, %140, %109, %85, %74, %66, %58, %54, %44
  %.7 = phi i32 [ %45, %44 ], [ %55, %54 ], [ %67, %66 ], [ %75, %74 ], [ %86, %85 ], [ %149, %148 ], [ %156, %155 ], [ %164, %163 ], [ %207, %206 ], [ %364, %363 ], [ %372, %371 ], [ %380, %379 ], [ 1, %398 ], [ %355, %354 ], [ %141, %140 ], [ %172, %171 ], [ %188, %187 ], [ %195, %194 ], [ %180, %179 ], [ %110, %109 ], [ %59, %58 ], [ 0, %.thread454 ], [ %.6.ph, %.thread447 ], [ %.2.ph, %.thread434 ], [ %218, %217 ], [ %243, %239 ], [ %234, %230 ]
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 30, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %15) #6
  ret i32 %.7
}

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #4 = { alwaysinline 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 #5 = { 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 #6 = { nounwind }
attributes #7 = { nounwind willreturn memory(read) }
attributes #8 = { 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 = !{!"short", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !11, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104}
!11 = !{!"long", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!10, !13, i64 104}
!16 = !{!10, !12, i64 20}
!17 = !{!18, !12, i64 100}
!18 = !{!"mz_zip_internal_state_tag", !19, i64 0, !19, i64 32, !19, i64 64, !12, i64 96, !12, i64 100, !12, i64 104, !13, i64 112, !11, i64 120, !13, i64 128, !11, i64 136, !11, i64 144}
!19 = !{!"", !13, i64 0, !11, i64 8, !11, i64 16, !12, i64 24}
!20 = !{!10, !12, i64 16}
!21 = !{!18, !11, i64 8}
!22 = !{!10, !11, i64 32}
!23 = !{!10, !13, i64 80}
!24 = !{!10, !13, i64 96}
!25 = !{!10, !13, i64 40}
!26 = !{!10, !13, i64 64}
!27 = !{!10, !13, i64 48}
!28 = !{!29, !13, i64 0}
!29 = !{!"", !13, i64 0, !11, i64 8, !11, i64 16}
!30 = !{!29, !11, i64 8}
!31 = !{!29, !11, i64 16}
!32 = !{!10, !13, i64 88}


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