; LLVM IR from jan-van-bergen/GPU-Raytracer :: include/miniz (miniz)

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

71:                                               ; preds = %13
  %72 = load i16, ptr %28, align 2, !tbaa !11
  %73 = zext i16 %72 to i32
  %74 = or i32 %73, 2048
  %75 = trunc i32 %74 to i16
  store i16 %75, ptr %28, align 2, !tbaa !11
  br label %76

76:                                               ; preds = %71, %13
  %77 = load i32, ptr %23, align 4, !tbaa !13
  %78 = icmp slt i32 %77, 0
  br i1 %78, label %79, label %80

79:                                               ; preds = %76
  store i32 6, ptr %23, align 4, !tbaa !13
  br label %80

80:                                               ; preds = %79, %76
  %81 = load i32, ptr %23, align 4, !tbaa !13
  %82 = and i32 %81, 15
  store i32 %82, ptr %30, align 4, !tbaa !13
  %83 = load ptr, ptr %15, align 8, !tbaa !5
  %84 = icmp ne ptr %83, null
  br i1 %84, label %85, label %108

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

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

95:                                               ; preds = %90
  %96 = load ptr, ptr %16, align 8, !tbaa !5
  %97 = icmp ne ptr %96, null
  br i1 %97, label %98, label %108

98:                                               ; preds = %95
  %99 = load i16, ptr %22, align 2, !tbaa !11
  %100 = zext i16 %99 to i32
  %101 = icmp ne i32 %100, 0
  br i1 %101, label %102, label %105

102:                                              ; preds = %98
  %103 = load ptr, ptr %21, align 8, !tbaa !5
  %104 = icmp ne ptr %103, null
  br i1 %104, label %105, label %108

105:                                              ; preds = %102, %98
  %106 = load i32, ptr %30, align 4, !tbaa !13
  %107 = icmp ugt i32 %106, 10
  br i1 %107, label %108, label %111

108:                                              ; preds = %105, %102, %95, %90, %85, %80
  %109 = load ptr, ptr %15, align 8, !tbaa !5
  %110 = call i32 @mz_zip_set_error(ptr noundef %109, i32 noundef 24)
  store i32 %110, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

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

119:                                              ; preds = %111
  %120 = load i64, ptr %19, align 8, !tbaa !9
  %121 = icmp ugt i64 %120, 4294967295
  br i1 %121, label %122, label %125

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

125:                                              ; preds = %122, %119, %111
  %126 = load i32, ptr %23, align 4, !tbaa !13
  %127 = and i32 %126, 1024
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %129, label %132

129:                                              ; preds = %125
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = call i32 @mz_zip_set_error(ptr noundef %130, i32 noundef 24)
  store i32 %131, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

132:                                              ; preds = %125
  %133 = load ptr, ptr %16, align 8, !tbaa !5
  %134 = call i32 @mz_zip_writer_validate_archive_name(ptr noundef %133)
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %139, label %136

136:                                              ; preds = %132
  %137 = load ptr, ptr %15, align 8, !tbaa !5
  %138 = call i32 @mz_zip_set_error(ptr noundef %137, i32 noundef 25)
  store i32 %138, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

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

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

149:                                              ; preds = %144
  %150 = load ptr, ptr %15, align 8, !tbaa !5
  %151 = call i32 @mz_zip_set_error(ptr noundef %150, i32 noundef 2)
  store i32 %151, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

152:                                              ; preds = %144
  br label %162

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

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

161:                                              ; preds = %158, %153
  br label %162

162:                                              ; preds = %161, %152
  %163 = load ptr, ptr %16, align 8, !tbaa !5
  %164 = call i64 @strlen(ptr noundef %163) #7
  store i64 %164, ptr %40, align 8, !tbaa !9
  %165 = load i64, ptr %40, align 8, !tbaa !9
  %166 = icmp ugt i64 %165, 65535
  br i1 %166, label %167, label %170

167:                                              ; preds = %162
  %168 = load ptr, ptr %15, align 8, !tbaa !5
  %169 = call i32 @mz_zip_set_error(ptr noundef %168, i32 noundef 25)
  store i32 %169, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

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

185:                                              ; preds = %170
  %186 = load ptr, ptr %15, align 8, !tbaa !5
  %187 = call i32 @mz_zip_set_error(ptr noundef %186, i32 noundef 15)
  store i32 %187, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

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

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

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

227:                                              ; preds = %224, %193
  br label %228

228:                                              ; preds = %227, %188
  %229 = load ptr, ptr %20, align 8, !tbaa !5
  %230 = icmp ne ptr %229, null
  br i1 %230, label %231, label %234

231:                                              ; preds = %228
  %232 = load ptr, ptr %20, align 8, !tbaa !5
  %233 = load i64, ptr %232, align 8, !tbaa !9
  call void @mz_zip_time_t_to_dos_time(i64 noundef %233, ptr noundef %33, ptr noundef %34)
  br label %234

234:                                              ; preds = %231, %228
  %235 = load i64, ptr %19, align 8, !tbaa !9
  %236 = icmp ule i64 %235, 3
  br i1 %236, label %237, label %238

237:                                              ; preds = %234
  store i32 0, ptr %30, align 4, !tbaa !13
  br label %238

238:                                              ; preds = %237, %234
  %239 = load ptr, ptr %15, align 8, !tbaa !5
  %240 = load i64, ptr %37, align 8, !tbaa !9
  %241 = load i32, ptr %31, align 4, !tbaa !13
  %242 = call i32 @mz_zip_writer_write_zeros(ptr noundef %239, i64 noundef %240, i32 noundef %241)
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %247, label %244

244:                                              ; preds = %238
  %245 = load ptr, ptr %15, align 8, !tbaa !5
  %246 = call i32 @mz_zip_set_error(ptr noundef %245, i32 noundef 19)
  store i32 %246, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

247:                                              ; preds = %238
  %248 = load i32, ptr %31, align 4, !tbaa !13
  %249 = zext i32 %248 to i64
  %250 = load i64, ptr %37, align 8, !tbaa !9
  %251 = add i64 %250, %249
  store i64 %251, ptr %37, align 8, !tbaa !9
  %252 = load i64, ptr %37, align 8, !tbaa !9
  store i64 %252, ptr %36, align 8, !tbaa !9
  %253 = load ptr, ptr %15, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.mz_zip_archive, ptr %253, i32 0, i32 6
  %255 = load i64, ptr %254, align 8, !tbaa !24
  %256 = icmp ne i64 %255, 0
  br i1 %256, label %257, label %268

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

265:                                              ; preds = %257
  br label %267

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

267:                                              ; preds = %265
  br label %268

268:                                              ; preds = %267, %247
  %269 = load i64, ptr %19, align 8, !tbaa !9
  %270 = icmp ne i64 %269, 0
  br i1 %270, label %271, label %275

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

274:                                              ; preds = %271
  store i16 8, ptr %32, align 2, !tbaa !11
  br label %275

275:                                              ; preds = %274, %271, %268
  call void @llvm.memset.p0.i64(ptr align 16 %41, i8 0, i64 30, i1 false)
  %276 = load ptr, ptr %45, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.mz_zip_internal_state_tag, ptr %276, i32 0, i32 4
  %278 = load i32, ptr %277, align 4, !tbaa !19
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %398

280:                                              ; preds = %275
  %281 = load i64, ptr %19, align 8, !tbaa !9
  %282 = icmp uge i64 %281, 4294967295
  br i1 %282, label %286, label %283

283:                                              ; preds = %280
  %284 = load i64, ptr %36, align 8, !tbaa !9
  %285 = icmp uge i64 %284, 4294967295
  br i1 %285, label %286, label %322

286:                                              ; preds = %283, %280
  %287 = getelementptr inbounds [28 x i8], ptr %44, i64 0, i64 0
  store ptr %287, ptr %42, align 8, !tbaa !5
  %288 = load i32, ptr %23, align 4, !tbaa !13
  %289 = and i32 %288, 131072
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %312

291:                                              ; preds = %286
  %292 = getelementptr inbounds [28 x i8], ptr %44, i64 0, i64 0
  %293 = load i64, ptr %19, align 8, !tbaa !9
  %294 = icmp uge i64 %293, 4294967295
  br i1 %294, label %295, label %296

295:                                              ; preds = %291
  br label %297

296:                                              ; preds = %291
  br label %297

297:                                              ; preds = %296, %295
  %298 = phi ptr [ %38, %295 ], [ null, %296 ]
  %299 = load i64, ptr %19, align 8, !tbaa !9
  %300 = icmp uge i64 %299, 4294967295
  br i1 %300, label %301, label %302

301:                                              ; preds = %297
  br label %303

302:                                              ; preds = %297
  br label %303

303:                                              ; preds = %302, %301
  %304 = phi ptr [ %39, %301 ], [ null, %302 ]
  %305 = load i64, ptr %36, align 8, !tbaa !9
  %306 = icmp uge i64 %305, 4294967295
  br i1 %306, label %307, label %308

307:                                              ; preds = %303
  br label %309

308:                                              ; preds = %303
  br label %309

309:                                              ; preds = %308, %307
  %310 = phi ptr [ %36, %307 ], [ null, %308 ]
  %311 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %292, ptr noundef %298, ptr noundef %304, ptr noundef %310)
  store i32 %311, ptr %43, align 4, !tbaa !13
  br label %321

312:                                              ; preds = %286
  %313 = getelementptr inbounds [28 x i8], ptr %44, i64 0, i64 0
  %314 = load i64, ptr %36, align 8, !tbaa !9
  %315 = icmp uge i64 %314, 4294967295
  br i1 %315, label %316, label %317

316:                                              ; preds = %312
  br label %318

317:                                              ; preds = %312
  br label %318

318:                                              ; preds = %317, %316
  %319 = phi ptr [ %36, %316 ], [ null, %317 ]
  %320 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %313, ptr noundef null, ptr noundef null, ptr noundef %319)
  store i32 %320, ptr %43, align 4, !tbaa !13
  br label %321

321:                                              ; preds = %318, %309
  br label %322

322:                                              ; preds = %321, %283
  %323 = load ptr, ptr %15, align 8, !tbaa !5
  %324 = getelementptr inbounds [30 x i8], ptr %41, i64 0, i64 0
  %325 = load i64, ptr %40, align 8, !tbaa !9
  %326 = trunc i64 %325 to i16
  %327 = load i32, ptr %43, align 4, !tbaa !13
  %328 = load i32, ptr %25, align 4, !tbaa !13
  %329 = add i32 %327, %328
  %330 = trunc i32 %329 to i16
  %331 = load i16, ptr %32, align 2, !tbaa !11
  %332 = load i16, ptr %28, align 2, !tbaa !11
  %333 = load i16, ptr %33, align 2, !tbaa !11
  %334 = load i16, ptr %34, align 2, !tbaa !11
  %335 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef %323, ptr noundef %324, i16 noundef zeroext %326, i16 noundef zeroext %330, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %331, i16 noundef zeroext %332, i16 noundef zeroext %333, i16 noundef zeroext %334)
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %340, label %337

337:                                              ; preds = %322
  %338 = load ptr, ptr %15, align 8, !tbaa !5
  %339 = call i32 @mz_zip_set_error(ptr noundef %338, i32 noundef 27)
  store i32 %339, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

340:                                              ; preds = %322
  %341 = load ptr, ptr %15, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.mz_zip_archive, ptr %341, i32 0, i32 12
  %343 = load ptr, ptr %342, align 8, !tbaa !25
  %344 = load ptr, ptr %15, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.mz_zip_archive, ptr %344, i32 0, i32 14
  %346 = load ptr, ptr %345, align 8, !tbaa !26
  %347 = load i64, ptr %37, align 8, !tbaa !9
  %348 = getelementptr inbounds [30 x i8], ptr %41, i64 0, i64 0
  %349 = call i64 %343(ptr noundef %346, i64 noundef %347, ptr noundef %348, i64 noundef 30)
  %350 = icmp ne i64 %349, 30
  br i1 %350, label %351, label %354

351:                                              ; preds = %340
  %352 = load ptr, ptr %15, align 8, !tbaa !5
  %353 = call i32 @mz_zip_set_error(ptr noundef %352, i32 noundef 19)
  store i32 %353, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

354:                                              ; preds = %340
  %355 = load i64, ptr %37, align 8, !tbaa !9
  %356 = add i64 %355, 30
  store i64 %356, ptr %37, align 8, !tbaa !9
  %357 = load ptr, ptr %15, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.mz_zip_archive, ptr %357, i32 0, i32 12
  %359 = load ptr, ptr %358, align 8, !tbaa !25
  %360 = load ptr, ptr %15, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.mz_zip_archive, ptr %360, i32 0, i32 14
  %362 = load ptr, ptr %361, align 8, !tbaa !26
  %363 = load i64, ptr %37, align 8, !tbaa !9
  %364 = load ptr, ptr %16, align 8, !tbaa !5
  %365 = load i64, ptr %40, align 8, !tbaa !9
  %366 = call i64 %359(ptr noundef %362, i64 noundef %363, ptr noundef %364, i64 noundef %365)
  %367 = load i64, ptr %40, align 8, !tbaa !9
  %368 = icmp ne i64 %366, %367
  br i1 %368, label %369, label %372

369:                                              ; preds = %354
  %370 = load ptr, ptr %15, align 8, !tbaa !5
  %371 = call i32 @mz_zip_set_error(ptr noundef %370, i32 noundef 19)
  store i32 %371, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

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

390:                                              ; preds = %372
  %391 = load ptr, ptr %15, align 8, !tbaa !5
  %392 = call i32 @mz_zip_set_error(ptr noundef %391, i32 noundef 19)
  store i32 %392, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

393:                                              ; preds = %372
  %394 = load i32, ptr %43, align 4, !tbaa !13
  %395 = zext i32 %394 to i64
  %396 = load i64, ptr %37, align 8, !tbaa !9
  %397 = add i64 %396, %395
  store i64 %397, ptr %37, align 8, !tbaa !9
  br label %459

398:                                              ; preds = %275
  %399 = load i64, ptr %39, align 8, !tbaa !9
  %400 = icmp ugt i64 %399, 4294967295
  br i1 %400, label %404, label %401

401:                                              ; preds = %398
  %402 = load i64, ptr %37, align 8, !tbaa !9
  %403 = icmp ugt i64 %402, 4294967295
  br i1 %403, label %404, label %407

404:                                              ; preds = %401, %398
  %405 = load ptr, ptr %15, align 8, !tbaa !5
  %406 = call i32 @mz_zip_set_error(ptr noundef %405, i32 noundef 29)
  store i32 %406, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

407:                                              ; preds = %401
  %408 = load ptr, ptr %15, align 8, !tbaa !5
  %409 = getelementptr inbounds [30 x i8], ptr %41, i64 0, i64 0
  %410 = load i64, ptr %40, align 8, !tbaa !9
  %411 = trunc i64 %410 to i16
  %412 = load i32, ptr %25, align 4, !tbaa !13
  %413 = trunc i32 %412 to i16
  %414 = load i16, ptr %32, align 2, !tbaa !11
  %415 = load i16, ptr %28, align 2, !tbaa !11
  %416 = load i16, ptr %33, align 2, !tbaa !11
  %417 = load i16, ptr %34, align 2, !tbaa !11
  %418 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef %408, ptr noundef %409, i16 noundef zeroext %411, i16 noundef zeroext %413, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %414, i16 noundef zeroext %415, i16 noundef zeroext %416, i16 noundef zeroext %417)
  %419 = icmp ne i32 %418, 0
  br i1 %419, label %423, label %420

420:                                              ; preds = %407
  %421 = load ptr, ptr %15, align 8, !tbaa !5
  %422 = call i32 @mz_zip_set_error(ptr noundef %421, i32 noundef 27)
  store i32 %422, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

423:                                              ; preds = %407
  %424 = load ptr, ptr %15, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.mz_zip_archive, ptr %424, i32 0, i32 12
  %426 = load ptr, ptr %425, align 8, !tbaa !25
  %427 = load ptr, ptr %15, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.mz_zip_archive, ptr %427, i32 0, i32 14
  %429 = load ptr, ptr %428, align 8, !tbaa !26
  %430 = load i64, ptr %37, align 8, !tbaa !9
  %431 = getelementptr inbounds [30 x i8], ptr %41, i64 0, i64 0
  %432 = call i64 %426(ptr noundef %429, i64 noundef %430, ptr noundef %431, i64 noundef 30)
  %433 = icmp ne i64 %432, 30
  br i1 %433, label %434, label %437

434:                                              ; preds = %423
  %435 = load ptr, ptr %15, align 8, !tbaa !5
  %436 = call i32 @mz_zip_set_error(ptr noundef %435, i32 noundef 19)
  store i32 %436, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

437:                                              ; preds = %423
  %438 = load i64, ptr %37, align 8, !tbaa !9
  %439 = add i64 %438, 30
  store i64 %439, ptr %37, align 8, !tbaa !9
  %440 = load ptr, ptr %15, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.mz_zip_archive, ptr %440, i32 0, i32 12
  %442 = load ptr, ptr %441, align 8, !tbaa !25
  %443 = load ptr, ptr %15, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.mz_zip_archive, ptr %443, i32 0, i32 14
  %445 = load ptr, ptr %444, align 8, !tbaa !26
  %446 = load i64, ptr %37, align 8, !tbaa !9
  %447 = load ptr, ptr %16, align 8, !tbaa !5
  %448 = load i64, ptr %40, align 8, !tbaa !9
  %449 = call i64 %442(ptr noundef %445, i64 noundef %446, ptr noundef %447, i64 noundef %448)
  %450 = load i64, ptr %40, align 8, !tbaa !9
  %451 = icmp ne i64 %449, %450
  br i1 %451, label %452, label %455

452:                                              ; preds = %437
  %453 = load ptr, ptr %15, align 8, !tbaa !5
  %454 = call i32 @mz_zip_set_error(ptr noundef %453, i32 noundef 19)
  store i32 %454, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

455:                                              ; preds = %437
  %456 = load i64, ptr %40, align 8, !tbaa !9
  %457 = load i64, ptr %37, align 8, !tbaa !9
  %458 = add i64 %457, %456
  store i64 %458, ptr %37, align 8, !tbaa !9
  br label %459

459:                                              ; preds = %455, %393
  %460 = load i32, ptr %25, align 4, !tbaa !13
  %461 = icmp ugt i32 %460, 0
  br i1 %461, label %462, label %485

462:                                              ; preds = %459
  %463 = load ptr, ptr %15, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.mz_zip_archive, ptr %463, i32 0, i32 12
  %465 = load ptr, ptr %464, align 8, !tbaa !25
  %466 = load ptr, ptr %15, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.mz_zip_archive, ptr %466, i32 0, i32 14
  %468 = load ptr, ptr %467, align 8, !tbaa !26
  %469 = load i64, ptr %37, align 8, !tbaa !9
  %470 = load ptr, ptr %24, align 8, !tbaa !5
  %471 = load i32, ptr %25, align 4, !tbaa !13
  %472 = zext i32 %471 to i64
  %473 = call i64 %465(ptr noundef %468, i64 noundef %469, ptr noundef %470, i64 noundef %472)
  %474 = load i32, ptr %25, align 4, !tbaa !13
  %475 = zext i32 %474 to i64
  %476 = icmp ne i64 %473, %475
  br i1 %476, label %477, label %480

477:                                              ; preds = %462
  %478 = load ptr, ptr %15, align 8, !tbaa !5
  %479 = call i32 @mz_zip_set_error(ptr noundef %478, i32 noundef 19)
  store i32 %479, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

480:                                              ; preds = %462
  %481 = load i32, ptr %25, align 4, !tbaa !13
  %482 = zext i32 %481 to i64
  %483 = load i64, ptr %37, align 8, !tbaa !9
  %484 = add i64 %483, %482
  store i64 %484, ptr %37, align 8, !tbaa !9
  br label %485

485:                                              ; preds = %480, %459
  %486 = load i64, ptr %19, align 8, !tbaa !9
  %487 = icmp ne i64 %486, 0
  br i1 %487, label %488, label %728

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

498:                                              ; preds = %488
  %499 = load ptr, ptr %15, align 8, !tbaa !5
  %500 = call i32 @mz_zip_set_error(ptr noundef %499, i32 noundef 16)
  store i32 %500, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %725

501:                                              ; preds = %488
  %502 = load i32, ptr %30, align 4, !tbaa !13
  %503 = icmp ne i32 %502, 0
  br i1 %503, label %576, label %504

504:                                              ; preds = %501
  br label %505

505:                                              ; preds = %572, %504
  br label %506

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

514:                                              ; preds = %506
  store i32 3, ptr %48, align 4
  br label %570

515:                                              ; preds = %506
  %516 = load i64, ptr %50, align 8, !tbaa !9
  %517 = icmp ugt i64 %516, 65536
  br i1 %517, label %524, label %518

518:                                              ; preds = %515
  %519 = load i64, ptr %46, align 8, !tbaa !9
  %520 = load i64, ptr %50, align 8, !tbaa !9
  %521 = add i64 %519, %520
  %522 = load i64, ptr %19, align 8, !tbaa !9
  %523 = icmp ugt i64 %521, %522
  br i1 %523, label %524, label %534

524:                                              ; preds = %518, %515
  %525 = load ptr, ptr %15, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.mz_zip_archive, ptr %525, i32 0, i32 8
  %527 = load ptr, ptr %526, align 8, !tbaa !29
  %528 = load ptr, ptr %15, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.mz_zip_archive, ptr %528, i32 0, i32 10
  %530 = load ptr, ptr %529, align 8, !tbaa !28
  %531 = load ptr, ptr %49, align 8, !tbaa !5
  call void %527(ptr noundef %530, ptr noundef %531)
  %532 = load ptr, ptr %15, align 8, !tbaa !5
  %533 = call i32 @mz_zip_set_error(ptr noundef %532, i32 noundef 20)
  store i32 %533, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %570

534:                                              ; preds = %518
  %535 = load ptr, ptr %15, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.mz_zip_archive, ptr %535, i32 0, i32 12
  %537 = load ptr, ptr %536, align 8, !tbaa !25
  %538 = load ptr, ptr %15, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.mz_zip_archive, ptr %538, i32 0, i32 14
  %540 = load ptr, ptr %539, align 8, !tbaa !26
  %541 = load i64, ptr %37, align 8, !tbaa !9
  %542 = load ptr, ptr %49, align 8, !tbaa !5
  %543 = load i64, ptr %50, align 8, !tbaa !9
  %544 = call i64 %537(ptr noundef %540, i64 noundef %541, ptr noundef %542, i64 noundef %543)
  %545 = load i64, ptr %50, align 8, !tbaa !9
  %546 = icmp ne i64 %544, %545
  br i1 %546, label %547, label %557

547:                                              ; preds = %534
  %548 = load ptr, ptr %15, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.mz_zip_archive, ptr %548, i32 0, i32 8
  %550 = load ptr, ptr %549, align 8, !tbaa !29
  %551 = load ptr, ptr %15, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.mz_zip_archive, ptr %551, i32 0, i32 10
  %553 = load ptr, ptr %552, align 8, !tbaa !28
  %554 = load ptr, ptr %49, align 8, !tbaa !5
  call void %550(ptr noundef %553, ptr noundef %554)
  %555 = load ptr, ptr %15, align 8, !tbaa !5
  %556 = call i32 @mz_zip_set_error(ptr noundef %555, i32 noundef 19)
  store i32 %556, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %570

557:                                              ; preds = %534
  %558 = load i64, ptr %50, align 8, !tbaa !9
  %559 = load i64, ptr %46, align 8, !tbaa !9
  %560 = add i64 %559, %558
  store i64 %560, ptr %46, align 8, !tbaa !9
  %561 = load i32, ptr %29, align 4, !tbaa !13
  %562 = zext i32 %561 to i64
  %563 = load ptr, ptr %49, align 8, !tbaa !5
  %564 = load i64, ptr %50, align 8, !tbaa !9
  %565 = call i64 @mz_crc32(i64 noundef %562, ptr noundef %563, i64 noundef %564)
  %566 = trunc i64 %565 to i32
  store i32 %566, ptr %29, align 4, !tbaa !13
  %567 = load i64, ptr %50, align 8, !tbaa !9
  %568 = load i64, ptr %37, align 8, !tbaa !9
  %569 = add i64 %568, %567
  store i64 %569, ptr %37, align 8, !tbaa !9
  store i32 0, ptr %48, align 4
  br label %570

570:                                              ; preds = %557, %547, %524, %514
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  %571 = load i32, ptr %48, align 4
  switch i32 %571, label %725 [
    i32 0, label %572
    i32 3, label %573
  ]

572:                                              ; preds = %570
  br label %505

573:                                              ; preds = %570
  %574 = load i64, ptr %46, align 8, !tbaa !9
  store i64 %574, ptr %38, align 8, !tbaa !9
  %575 = load i64, ptr %38, align 8, !tbaa !9
  store i64 %575, ptr %39, align 8, !tbaa !9
  br label %717

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

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

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

607:                                              ; preds = %596
  %608 = load ptr, ptr %15, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.mz_zip_archive, ptr %608, i32 0, i32 8
  %610 = load ptr, ptr %609, align 8, !tbaa !29
  %611 = load ptr, ptr %15, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.mz_zip_archive, ptr %611, i32 0, i32 10
  %613 = load ptr, ptr %612, align 8, !tbaa !28
  %614 = load ptr, ptr %53, align 8, !tbaa !5
  call void %610(ptr noundef %613, ptr noundef %614)
  %615 = load ptr, ptr %15, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.mz_zip_archive, ptr %615, i32 0, i32 8
  %617 = load ptr, ptr %616, align 8, !tbaa !29
  %618 = load ptr, ptr %15, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.mz_zip_archive, ptr %618, i32 0, i32 10
  %620 = load ptr, ptr %619, align 8, !tbaa !28
  %621 = load ptr, ptr %49, align 8, !tbaa !5
  call void %617(ptr noundef %620, ptr noundef %621)
  %622 = load ptr, ptr %15, align 8, !tbaa !5
  %623 = call i32 @mz_zip_set_error(ptr noundef %622, i32 noundef 27)
  store i32 %623, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %714

624:                                              ; preds = %596
  br label %625

625:                                              ; preds = %689, %624
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  store i32 0, ptr %55, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %626 = load ptr, ptr %17, align 8, !tbaa !5
  %627 = load ptr, ptr %18, align 8, !tbaa !5
  %628 = load i64, ptr %46, align 8, !tbaa !9
  %629 = load ptr, ptr %49, align 8, !tbaa !5
  %630 = call i64 %626(ptr noundef %627, i64 noundef %628, ptr noundef %629, i64 noundef 65536)
  store i64 %630, ptr %56, align 8, !tbaa !9
  %631 = load i64, ptr %56, align 8, !tbaa !9
  %632 = icmp ugt i64 %631, 65536
  br i1 %632, label %639, label %633

633:                                              ; preds = %625
  %634 = load i64, ptr %46, align 8, !tbaa !9
  %635 = load i64, ptr %56, align 8, !tbaa !9
  %636 = add i64 %634, %635
  %637 = load i64, ptr %19, align 8, !tbaa !9
  %638 = icmp ugt i64 %636, %637
  br i1 %638, label %639, label %642

639:                                              ; preds = %633, %625
  %640 = load ptr, ptr %15, align 8, !tbaa !5
  %641 = call i32 @mz_zip_set_error(ptr noundef %640, i32 noundef 20)
  store i32 4, ptr %48, align 4
  br label %687

642:                                              ; preds = %633
  %643 = load i64, ptr %56, align 8, !tbaa !9
  %644 = load i64, ptr %46, align 8, !tbaa !9
  %645 = add i64 %644, %643
  store i64 %645, ptr %46, align 8, !tbaa !9
  %646 = load i32, ptr %29, align 4, !tbaa !13
  %647 = zext i32 %646 to i64
  %648 = load ptr, ptr %49, align 8, !tbaa !5
  %649 = load i64, ptr %56, align 8, !tbaa !9
  %650 = call i64 @mz_crc32(i64 noundef %647, ptr noundef %648, i64 noundef %649)
  %651 = trunc i64 %650 to i32
  store i32 %651, ptr %29, align 4, !tbaa !13
  %652 = load ptr, ptr %15, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.mz_zip_archive, ptr %652, i32 0, i32 13
  %654 = load ptr, ptr %653, align 8, !tbaa !34
  %655 = icmp ne ptr %654, null
  br i1 %655, label %656, label %666

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

665:                                              ; preds = %656
  store i32 3, ptr %55, align 4, !tbaa !13
  br label %666

666:                                              ; preds = %665, %656, %642
  %667 = load i64, ptr %56, align 8, !tbaa !9
  %668 = icmp eq i64 %667, 0
  br i1 %668, label %669, label %670

669:                                              ; preds = %666
  store i32 4, ptr %55, align 4, !tbaa !13
  br label %670

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

678:                                              ; preds = %670
  store i32 1, ptr %51, align 4, !tbaa !13
  store i32 4, ptr %48, align 4
  br label %687

679:                                              ; preds = %670
  %680 = load i32, ptr %54, align 4, !tbaa !13
  %681 = icmp ne i32 %680, 0
  br i1 %681, label %682, label %685

682:                                              ; preds = %679
  %683 = load ptr, ptr %15, align 8, !tbaa !5
  %684 = call i32 @mz_zip_set_error(ptr noundef %683, i32 noundef 12)
  store i32 4, ptr %48, align 4
  br label %687

685:                                              ; preds = %679
  br label %686

686:                                              ; preds = %685
  store i32 0, ptr %48, align 4
  br label %687

687:                                              ; preds = %686, %682, %678, %639
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  %688 = load i32, ptr %48, align 4
  switch i32 %688, label %969 [
    i32 0, label %689
    i32 4, label %690
  ]

689:                                              ; preds = %687
  br label %625

690:                                              ; preds = %687
  %691 = load ptr, ptr %15, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.mz_zip_archive, ptr %691, i32 0, i32 8
  %693 = load ptr, ptr %692, align 8, !tbaa !29
  %694 = load ptr, ptr %15, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.mz_zip_archive, ptr %694, i32 0, i32 10
  %696 = load ptr, ptr %695, align 8, !tbaa !28
  %697 = load ptr, ptr %53, align 8, !tbaa !5
  call void %693(ptr noundef %696, ptr noundef %697)
  %698 = load i32, ptr %51, align 4, !tbaa !13
  %699 = icmp ne i32 %698, 0
  br i1 %699, label %708, label %700

700:                                              ; preds = %690
  %701 = load ptr, ptr %15, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.mz_zip_archive, ptr %701, i32 0, i32 8
  %703 = load ptr, ptr %702, align 8, !tbaa !29
  %704 = load ptr, ptr %15, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.mz_zip_archive, ptr %704, i32 0, i32 10
  %706 = load ptr, ptr %705, align 8, !tbaa !28
  %707 = load ptr, ptr %49, align 8, !tbaa !5
  call void %703(ptr noundef %706, ptr noundef %707)
  store i32 0, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %714

708:                                              ; preds = %690
  %709 = load i64, ptr %46, align 8, !tbaa !9
  store i64 %709, ptr %38, align 8, !tbaa !9
  %710 = getelementptr inbounds %struct.mz_zip_writer_add_state, ptr %52, i32 0, i32 2
  %711 = load i64, ptr %710, align 8, !tbaa !33
  store i64 %711, ptr %39, align 8, !tbaa !9
  %712 = getelementptr inbounds %struct.mz_zip_writer_add_state, ptr %52, i32 0, i32 1
  %713 = load i64, ptr %712, align 8, !tbaa !32
  store i64 %713, ptr %37, align 8, !tbaa !9
  store i32 0, ptr %48, align 4
  br label %714

714:                                              ; preds = %708, %700, %607, %586
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  %715 = load i32, ptr %48, align 4
  switch i32 %715, label %725 [
    i32 0, label %716
  ]

716:                                              ; preds = %714
  br label %717

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

725:                                              ; preds = %717, %714, %570, %498
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  %726 = load i32, ptr %48, align 4
  switch i32 %726, label %967 [
    i32 0, label %727
  ]

727:                                              ; preds = %725
  br label %728

728:                                              ; preds = %727, %485
  %729 = load i32, ptr %23, align 4, !tbaa !13
  %730 = and i32 %729, 131072
  %731 = icmp ne i32 %730, 0
  br i1 %731, label %786, label %732

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

740:                                              ; preds = %732
  %741 = load i64, ptr %39, align 8, !tbaa !9
  %742 = icmp ugt i64 %741, 4294967295
  br i1 %742, label %743, label %746

743:                                              ; preds = %740
  %744 = load ptr, ptr %15, align 8, !tbaa !5
  %745 = call i32 @mz_zip_set_error(ptr noundef %744, i32 noundef 29)
  store i32 %745, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %783

746:                                              ; preds = %740
  %747 = getelementptr inbounds [24 x i8], ptr %57, i64 0, i64 0
  %748 = getelementptr inbounds i8, ptr %747, i64 8
  %749 = load i64, ptr %39, align 8, !tbaa !9
  %750 = trunc i64 %749 to i32
  call void @mz_write_le32(ptr noundef %748, i32 noundef %750)
  %751 = getelementptr inbounds [24 x i8], ptr %57, i64 0, i64 0
  %752 = getelementptr inbounds i8, ptr %751, i64 12
  %753 = load i64, ptr %38, align 8, !tbaa !9
  %754 = trunc i64 %753 to i32
  call void @mz_write_le32(ptr noundef %752, i32 noundef %754)
  br label %762

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

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

777:                                              ; preds = %762
  store i32 0, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %783

778:                                              ; preds = %762
  %779 = load i32, ptr %58, align 4, !tbaa !13
  %780 = zext i32 %779 to i64
  %781 = load i64, ptr %37, align 8, !tbaa !9
  %782 = add i64 %781, %780
  store i64 %782, ptr %37, align 8, !tbaa !9
  store i32 0, ptr %48, align 4
  br label %783

783:                                              ; preds = %778, %777, %743
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %57) #6
  %784 = load i32, ptr %48, align 4
  switch i32 %784, label %967 [
    i32 0, label %785
  ]

785:                                              ; preds = %783
  br label %786

786:                                              ; preds = %785, %728
  %787 = load i32, ptr %23, align 4, !tbaa !13
  %788 = and i32 %787, 131072
  %789 = icmp ne i32 %788, 0
  br i1 %789, label %790, label %910

790:                                              ; preds = %786
  %791 = load ptr, ptr %42, align 8, !tbaa !5
  %792 = icmp ne ptr %791, null
  br i1 %792, label %793, label %814

793:                                              ; preds = %790
  %794 = getelementptr inbounds [28 x i8], ptr %44, i64 0, i64 0
  %795 = load i64, ptr %19, align 8, !tbaa !9
  %796 = icmp uge i64 %795, 4294967295
  br i1 %796, label %797, label %798

797:                                              ; preds = %793
  br label %799

798:                                              ; preds = %793
  br label %799

799:                                              ; preds = %798, %797
  %800 = phi ptr [ %38, %797 ], [ null, %798 ]
  %801 = load i64, ptr %19, align 8, !tbaa !9
  %802 = icmp uge i64 %801, 4294967295
  br i1 %802, label %803, label %804

803:                                              ; preds = %799
  br label %805

804:                                              ; preds = %799
  br label %805

805:                                              ; preds = %804, %803
  %806 = phi ptr [ %39, %803 ], [ null, %804 ]
  %807 = load i64, ptr %36, align 8, !tbaa !9
  %808 = icmp uge i64 %807, 4294967295
  br i1 %808, label %809, label %810

809:                                              ; preds = %805
  br label %811

810:                                              ; preds = %805
  br label %811

811:                                              ; preds = %810, %809
  %812 = phi ptr [ %36, %809 ], [ null, %810 ]
  %813 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %794, ptr noundef %800, ptr noundef %806, ptr noundef %812)
  store i32 %813, ptr %43, align 4, !tbaa !13
  br label %814

814:                                              ; preds = %811, %790
  %815 = load ptr, ptr %15, align 8, !tbaa !5
  %816 = getelementptr inbounds [30 x i8], ptr %41, i64 0, i64 0
  %817 = load i64, ptr %40, align 8, !tbaa !9
  %818 = trunc i64 %817 to i16
  %819 = load i32, ptr %43, align 4, !tbaa !13
  %820 = load i32, ptr %25, align 4, !tbaa !13
  %821 = add i32 %819, %820
  %822 = trunc i32 %821 to i16
  %823 = load i64, ptr %19, align 8, !tbaa !9
  %824 = icmp uge i64 %823, 4294967295
  br i1 %824, label %825, label %826

825:                                              ; preds = %814
  br label %828

826:                                              ; preds = %814
  %827 = load i64, ptr %38, align 8, !tbaa !9
  br label %828

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

832:                                              ; preds = %828
  br label %835

833:                                              ; preds = %828
  %834 = load i64, ptr %39, align 8, !tbaa !9
  br label %835

835:                                              ; preds = %833, %832
  %836 = phi i64 [ 4294967295, %832 ], [ %834, %833 ]
  %837 = load i32, ptr %29, align 4, !tbaa !13
  %838 = load i16, ptr %32, align 2, !tbaa !11
  %839 = load i16, ptr %28, align 2, !tbaa !11
  %840 = load i16, ptr %33, align 2, !tbaa !11
  %841 = load i16, ptr %34, align 2, !tbaa !11
  %842 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef %815, ptr noundef %816, i16 noundef zeroext %818, i16 noundef zeroext %822, i64 noundef %829, i64 noundef %836, i32 noundef %837, i16 noundef zeroext %838, i16 noundef zeroext %839, i16 noundef zeroext %840, i16 noundef zeroext %841)
  %843 = icmp ne i32 %842, 0
  br i1 %843, label %847, label %844

844:                                              ; preds = %835
  %845 = load ptr, ptr %15, align 8, !tbaa !5
  %846 = call i32 @mz_zip_set_error(ptr noundef %845, i32 noundef 27)
  store i32 %846, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

847:                                              ; preds = %835
  %848 = load i64, ptr %36, align 8, !tbaa !9
  store i64 %848, ptr %47, align 8, !tbaa !9
  %849 = load ptr, ptr %15, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.mz_zip_archive, ptr %849, i32 0, i32 12
  %851 = load ptr, ptr %850, align 8, !tbaa !25
  %852 = load ptr, ptr %15, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.mz_zip_archive, ptr %852, i32 0, i32 14
  %854 = load ptr, ptr %853, align 8, !tbaa !26
  %855 = load i64, ptr %47, align 8, !tbaa !9
  %856 = getelementptr inbounds [30 x i8], ptr %41, i64 0, i64 0
  %857 = call i64 %851(ptr noundef %854, i64 noundef %855, ptr noundef %856, i64 noundef 30)
  %858 = icmp ne i64 %857, 30
  br i1 %858, label %859, label %862

859:                                              ; preds = %847
  %860 = load ptr, ptr %15, align 8, !tbaa !5
  %861 = call i32 @mz_zip_set_error(ptr noundef %860, i32 noundef 19)
  store i32 %861, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

862:                                              ; preds = %847
  %863 = load ptr, ptr %42, align 8, !tbaa !5
  %864 = icmp ne ptr %863, null
  br i1 %864, label %865, label %909

865:                                              ; preds = %862
  %866 = load i64, ptr %47, align 8, !tbaa !9
  %867 = add i64 %866, 30
  store i64 %867, ptr %47, align 8, !tbaa !9
  %868 = load ptr, ptr %15, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.mz_zip_archive, ptr %868, i32 0, i32 12
  %870 = load ptr, ptr %869, align 8, !tbaa !25
  %871 = load ptr, ptr %15, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.mz_zip_archive, ptr %871, i32 0, i32 14
  %873 = load ptr, ptr %872, align 8, !tbaa !26
  %874 = load i64, ptr %47, align 8, !tbaa !9
  %875 = load ptr, ptr %16, align 8, !tbaa !5
  %876 = load i64, ptr %40, align 8, !tbaa !9
  %877 = call i64 %870(ptr noundef %873, i64 noundef %874, ptr noundef %875, i64 noundef %876)
  %878 = load i64, ptr %40, align 8, !tbaa !9
  %879 = icmp ne i64 %877, %878
  br i1 %879, label %880, label %883

880:                                              ; preds = %865
  %881 = load ptr, ptr %15, align 8, !tbaa !5
  %882 = call i32 @mz_zip_set_error(ptr noundef %881, i32 noundef 19)
  store i32 %882, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

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

901:                                              ; preds = %883
  %902 = load ptr, ptr %15, align 8, !tbaa !5
  %903 = call i32 @mz_zip_set_error(ptr noundef %902, i32 noundef 19)
  store i32 %903, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

904:                                              ; preds = %883
  %905 = load i32, ptr %43, align 4, !tbaa !13
  %906 = zext i32 %905 to i64
  %907 = load i64, ptr %47, align 8, !tbaa !9
  %908 = add i64 %907, %906
  store i64 %908, ptr %47, align 8, !tbaa !9
  br label %909

909:                                              ; preds = %904, %862
  br label %910

910:                                              ; preds = %909, %786
  %911 = load ptr, ptr %42, align 8, !tbaa !5
  %912 = icmp ne ptr %911, null
  br i1 %912, label %913, label %934

913:                                              ; preds = %910
  %914 = getelementptr inbounds [28 x i8], ptr %44, i64 0, i64 0
  %915 = load i64, ptr %38, align 8, !tbaa !9
  %916 = icmp uge i64 %915, 4294967295
  br i1 %916, label %917, label %918

917:                                              ; preds = %913
  br label %919

918:                                              ; preds = %913
  br label %919

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

923:                                              ; preds = %919
  br label %925

924:                                              ; preds = %919
  br label %925

925:                                              ; preds = %924, %923
  %926 = phi ptr [ %39, %923 ], [ null, %924 ]
  %927 = load i64, ptr %36, align 8, !tbaa !9
  %928 = icmp uge i64 %927, 4294967295
  br i1 %928, label %929, label %930

929:                                              ; preds = %925
  br label %931

930:                                              ; preds = %925
  br label %931

931:                                              ; preds = %930, %929
  %932 = phi ptr [ %36, %929 ], [ null, %930 ]
  %933 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef %914, ptr noundef %920, ptr noundef %926, ptr noundef %932)
  store i32 %933, ptr %43, align 4, !tbaa !13
  br label %934

934:                                              ; preds = %931, %910
  %935 = load ptr, ptr %15, align 8, !tbaa !5
  %936 = load ptr, ptr %16, align 8, !tbaa !5
  %937 = load i64, ptr %40, align 8, !tbaa !9
  %938 = trunc i64 %937 to i16
  %939 = load ptr, ptr %42, align 8, !tbaa !5
  %940 = load i32, ptr %43, align 4, !tbaa !13
  %941 = trunc i32 %940 to i16
  %942 = load ptr, ptr %21, align 8, !tbaa !5
  %943 = load i16, ptr %22, align 2, !tbaa !11
  %944 = load i64, ptr %38, align 8, !tbaa !9
  %945 = load i64, ptr %39, align 8, !tbaa !9
  %946 = load i32, ptr %29, align 4, !tbaa !13
  %947 = load i16, ptr %32, align 2, !tbaa !11
  %948 = load i16, ptr %28, align 2, !tbaa !11
  %949 = load i16, ptr %33, align 2, !tbaa !11
  %950 = load i16, ptr %34, align 2, !tbaa !11
  %951 = load i64, ptr %36, align 8, !tbaa !9
  %952 = load i16, ptr %35, align 2, !tbaa !11
  %953 = zext i16 %952 to i32
  %954 = load ptr, ptr %26, align 8, !tbaa !5
  %955 = load i32, ptr %27, align 4, !tbaa !13
  %956 = call i32 @mz_zip_writer_add_to_central_dir(ptr noundef %935, ptr noundef %936, i16 noundef zeroext %938, ptr noundef %939, i16 noundef zeroext %941, ptr noundef %942, i16 noundef zeroext %943, i64 noundef %944, i64 noundef %945, i32 noundef %946, i16 noundef zeroext %947, i16 noundef zeroext %948, i16 noundef zeroext %949, i16 noundef zeroext %950, i64 noundef %951, i32 noundef %953, ptr noundef %954, i32 noundef %955)
  %957 = icmp ne i32 %956, 0
  br i1 %957, label %959, label %958

958:                                              ; preds = %934
  store i32 0, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

959:                                              ; preds = %934
  %960 = load ptr, ptr %15, align 8, !tbaa !5
  %961 = getelementptr inbounds %struct.mz_zip_archive, ptr %960, i32 0, i32 2
  %962 = load i32, ptr %961, align 8, !tbaa !22
  %963 = add i32 %962, 1
  store i32 %963, ptr %961, align 8, !tbaa !22
  %964 = load i64, ptr %37, align 8, !tbaa !9
  %965 = load ptr, ptr %15, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.mz_zip_archive, ptr %965, i32 0, i32 0
  store i64 %964, ptr %966, align 8, !tbaa !15
  store i32 1, ptr %14, align 4
  store i32 1, ptr %48, align 4
  br label %967

967:                                              ; preds = %959, %958, %901, %880, %859, %844, %783, %725, %477, %452, %434, %420, %404, %390, %369, %351, %337, %244, %185, %167, %149, %136, %129, %108
  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 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 28, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 30, 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 8, 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 2, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #6
  %968 = load i32, ptr %14, align 4
  ret i32 %968

969:                                              ; preds = %687
  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 [84 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 [210 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, ptr noundef %9, i32 noundef %10, ptr noundef %11, i32 noundef %12) local_unnamed_addr #1 {
  %14 = alloca i16, align 2
  %15 = alloca i16, align 2
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca [30 x i8], align 16
  %20 = alloca [28 x i8], align 16
  %21 = alloca %struct.mz_zip_writer_add_state, align 8
  %22 = alloca [24 x i8], align 16
  %23 = lshr i32 %8, 14
  %24 = trunc i32 %23 to i16
  %25 = and i16 %24, 8
  %26 = xor i16 %25, 8
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %14) #6
  store i16 0, ptr %14, align 2, !tbaa !5
  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 8, ptr nonnull %16) #6
  %27 = load i64, ptr %0, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  store i64 0, ptr %17, align 8, !tbaa !14
  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 30, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %20) #6
  %28 = and i32 %8, 65536
  %.not = icmp eq i32 %28, 0
  %29 = or disjoint i16 %26, 2048
  %spec.select = select i1 %.not, i16 %29, i16 %26
  %30 = icmp slt i32 %8, 0
  %spec.store.select = select i1 %30, i32 6, i32 %8
  %31 = and i32 %spec.store.select, 15
  %32 = getelementptr inbounds i8, ptr %0, i64 104
  %33 = load ptr, ptr %32, align 8, !tbaa !15
  %.not366 = icmp eq ptr %33, null
  br i1 %.not366, label %43, label %34

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

39:                                               ; preds = %34
  %40 = icmp ne i16 %7, 0
  %41 = icmp eq ptr %6, null
  %or.cond5.not369 = and i1 %41, %40
  %42 = icmp ugt i32 %31, 10
  %or.cond7 = or i1 %or.cond5.not369, %42
  br i1 %or.cond7, label %43, label %45

43:                                               ; preds = %39, %34, %13
  %44 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 24)
  br label %.thread441

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

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

51:                                               ; preds = %50, %45
  %52 = and i32 %spec.store.select, 1024
  %.not370 = icmp eq i32 %52, 0
  br i1 %.not370, label %55, label %53

53:                                               ; preds = %51
  %54 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 24)
  br label %.thread441

55:                                               ; preds = %51
  %56 = tail call i32 @mz_zip_writer_validate_archive_name(ptr noundef nonnull %1)
  %.not371 = icmp eq i32 %56, 0
  br i1 %.not371, label %57, label %59

57:                                               ; preds = %55
  %58 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 25)
  br label %.thread441

59:                                               ; preds = %55
  %60 = load i32, ptr %46, align 4, !tbaa !17
  %.not372 = icmp eq i32 %60, 0
  %61 = getelementptr inbounds i8, ptr %0, i64 16
  %62 = load i32, ptr %61, align 8, !tbaa !20
  br i1 %.not372, label %67, label %63

63:                                               ; preds = %59
  %64 = icmp eq i32 %62, -1
  br i1 %64, label %65, label %70

65:                                               ; preds = %63
  %66 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 2)
  br label %.thread441

67:                                               ; preds = %59
  %68 = icmp eq i32 %62, 65535
  br i1 %68, label %69, label %70

69:                                               ; preds = %67
  store i32 1, ptr %46, align 4, !tbaa !17
  br label %70

70:                                               ; preds = %67, %69, %63
  %71 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %1) #7
  %72 = icmp ugt i64 %71, 65535
  br i1 %72, label %73, label %75

73:                                               ; preds = %70
  %74 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 25)
  br label %.thread441

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

84:                                               ; preds = %75
  %85 = tail call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 15)
  br label %.thread441

86:                                               ; preds = %75
  %87 = load i32, ptr %46, align 4, !tbaa !17
  %.not373 = icmp eq i32 %87, 0
  br i1 %.not373, label %88, label %102

88:                                               ; preds = %86
  %89 = load i64, ptr %0, align 8, !tbaa !9
  %90 = zext i32 %76 to i64
  %91 = zext i32 %10 to i64
  %92 = zext i32 %12 to i64
  %factor = shl nuw nsw i64 %71, 1
  %93 = add nuw nsw i64 %79, 1138
  %94 = add nuw nsw i64 %93, %91
  %95 = add nuw nsw i64 %94, %92
  %96 = add nuw nsw i64 %95, %factor
  %97 = add nuw nsw i64 %96, %90
  %98 = add i64 %97, %78
  %99 = add i64 %98, %89
  %100 = icmp ugt i64 %99, 4294967295
  br i1 %100, label %101, label %102

101:                                              ; preds = %88
  store i32 1, ptr %46, align 4, !tbaa !17
  br label %102

102:                                              ; preds = %88, %101, %86
  %.not374 = icmp eq ptr %5, null
  br i1 %.not374, label %105, label %103

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

105:                                              ; preds = %103, %102
  %106 = icmp ult i64 %4, 4
  %spec.select405 = select i1 %106, i32 0, i32 %31
  %107 = call i32 @mz_zip_writer_write_zeros(ptr noundef nonnull %0, i64 noundef %27, i32 noundef %76)
  %.not375 = icmp eq i32 %107, 0
  br i1 %.not375, label %108, label %110

108:                                              ; preds = %105
  %109 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread441

110:                                              ; preds = %105
  %111 = zext i32 %76 to i64
  %112 = add i64 %27, %111
  store i64 %112, ptr %16, align 8, !tbaa !14
  %113 = getelementptr inbounds i8, ptr %0, i64 32
  %114 = load i64, ptr %113, align 8, !tbaa !22
  %.not376 = icmp eq i64 %114, 0
  br i1 %.not376, label %120, label %115

115:                                              ; preds = %110
  %116 = add i64 %114, -1
  %117 = and i64 %116, %112
  %118 = icmp eq i64 %117, 0
  br i1 %118, label %120, label %119

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

120:                                              ; preds = %115, %110
  %.not465 = icmp eq i64 %4, 0
  %.not466 = icmp eq i32 %spec.select405, 0
  %spec.select406 = select i1 %.not466, i16 0, i16 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(30) %19, i8 0, i64 30, i1 false)
  %121 = load i32, ptr %46, align 4, !tbaa !17
  %.not377 = icmp eq i32 %121, 0
  br i1 %.not377, label %167, label %122

122:                                              ; preds = %120
  %123 = icmp ugt i64 %4, 4294967294
  %124 = icmp ugt i64 %112, 4294967294
  %or.cond13 = select i1 %123, i1 true, i1 %124
  br i1 %or.cond13, label %125, label %133

125:                                              ; preds = %122
  %126 = and i32 %spec.store.select, 131072
  %.not381 = icmp eq i32 %126, 0
  br i1 %.not381, label %131, label %127

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

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

133:                                              ; preds = %127, %131, %122
  %.0335 = phi ptr [ %20, %127 ], [ %20, %131 ], [ null, %122 ]
  %.0330 = phi i32 [ %130, %127 ], [ %132, %131 ], [ 0, %122 ]
  %134 = trunc nuw i64 %71 to i16
  %135 = add i32 %.0330, %10
  %136 = trunc i32 %135 to i16
  %137 = load i16, ptr %14, align 2, !tbaa !5
  %138 = load i16, ptr %15, align 2, !tbaa !5
  %139 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef nonnull %0, ptr noundef nonnull %19, i16 noundef zeroext %134, i16 noundef zeroext %136, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %spec.select406, 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 %.thread441

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 %112, ptr noundef nonnull %19, 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 %.thread441

150:                                              ; preds = %142
  %151 = add i64 %112, 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 %71) #6
  %.not384 = icmp eq i64 %154, %71
  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 %.thread441

157:                                              ; preds = %150
  %158 = add i64 %151, %71
  %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 %20, 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 %.thread441

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

167:                                              ; preds = %120
  %168 = load i64, ptr %18, align 8, !tbaa !14
  %169 = icmp ugt i64 %168, 4294967295
  %170 = icmp ugt i64 %112, 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 %.thread441

173:                                              ; preds = %167
  %174 = trunc nuw i64 %71 to i16
  %175 = trunc i32 %10 to i16
  %176 = load i16, ptr %14, align 2, !tbaa !5
  %177 = load i16, ptr %15, align 2, !tbaa !5
  %178 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef nonnull %0, ptr noundef nonnull %19, i16 noundef zeroext %174, i16 noundef zeroext %175, i64 noundef 0, i64 noundef 0, i32 noundef 0, i16 noundef zeroext %spec.select406, i16 noundef zeroext %spec.select, i16 noundef zeroext %176, i16 noundef zeroext %177)
  %.not378 = icmp eq i32 %178, 0
  br i1 %.not378, label %179, label %181

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

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 %112, ptr noundef nonnull %19, i64 noundef 30) #6
  %.not379 = icmp eq i64 %186, 30
  br i1 %.not379, label %189, label %187

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

189:                                              ; preds = %181
  %190 = add nuw nsw i64 %112, 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 %71) #6
  %.not380 = icmp eq i64 %193, %71
  br i1 %.not380, label %196, label %194

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

196:                                              ; preds = %189
  %197 = add nuw nsw i64 %190, %71
  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 %10, 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 %10 to i64
  %205 = call i64 %201(ptr noundef %203, i64 noundef %.0337, ptr noundef %9, 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 %.thread441

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

210:                                              ; preds = %208, %198
  %.1338 = phi i64 [ %209, %208 ], [ %.0337, %198 ]
  br i1 %.not465, 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 %.thread441

219:                                              ; preds = %211
  br i1 %.not466, 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 ]
  %.0311483 = phi i64 [ 0, %.lr.ph ], [ %246, %244 ]
  %.0325482 = phi i64 [ 0, %.lr.ph ], [ %228, %244 ]
  %.2339481 = 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, %.0325482
  %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 %.thread441

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 %.2339481, 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 %.thread441

244:                                              ; preds = %235
  %245 = and i64 %.0311483, 4294967295
  %246 = call i64 @mz_crc32(i64 noundef %245, ptr noundef nonnull %216, i64 noundef %225)
  %247 = add i64 %225, %.2339481
  %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 %17, align 8, !tbaa !14
  store i64 %.0325.lcssa, ptr %18, align 8, !tbaa !14
  br label %304

251:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #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 %.thread435

260:                                              ; preds = %251
  store ptr %0, ptr %21, align 8, !tbaa !28
  %261 = getelementptr inbounds i8, ptr %21, i64 8
  store i64 %.1338, ptr %261, align 8, !tbaa !30
  %262 = getelementptr inbounds i8, ptr %21, i64 16
  store i64 0, ptr %262, align 8, !tbaa !31
  %263 = call i32 @tdefl_create_comp_flags_from_zip_params(i32 noundef %spec.select405, 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 %21, i32 noundef %263)
  %.not391 = icmp eq i32 %264, 0
  br i1 %.not391, label %.preheader467, label %267

.preheader467:                                    ; 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 %.thread435

274:                                              ; preds = %.preheader467, %287
  %.2327 = phi i64 [ %278, %287 ], [ 0, %.preheader467 ]
  %.2313 = phi i64 [ %282, %287 ], [ 0, %.preheader467 ]
  %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.select407 = select i1 %.not393, i32 0, i32 3
  br label %287

287:                                              ; preds = %284, %280
  %.0306 = phi i32 [ 0, %280 ], [ %spec.select407, %284 ]
  %288 = icmp eq i64 %275, 0
  %spec.select408 = 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.select408)
  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 %.thread435

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

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 %17, align 8, !tbaa !14
  %302 = load i64, ptr %262, align 8, !tbaa !31
  store i64 %302, ptr %18, align 8, !tbaa !14
  %303 = load i64, ptr %261, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #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 ]
  %309 = and i32 %spec.store.select, 131072
  %.not396 = icmp eq i32 %309, 0
  br i1 %.not396, label %310, label %335

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

313:                                              ; preds = %310
  %314 = load i64, ptr %18, align 8, !tbaa !14
  %315 = icmp ugt i64 %314, 4294967295
  br i1 %315, label %316, label %318

316:                                              ; preds = %313
  %317 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 29)
  br label %.thread448

318:                                              ; preds = %313
  %319 = getelementptr inbounds i8, ptr %22, i64 8
  %320 = trunc nuw i64 %314 to i32
  call void @mz_write_le32(ptr noundef nonnull %319, i32 noundef %320)
  %321 = getelementptr inbounds i8, ptr %22, i64 12
  %322 = load i64, ptr %17, align 8, !tbaa !14
  %323 = trunc i64 %322 to i32
  call void @mz_write_le32(ptr noundef nonnull %321, i32 noundef %323)
  br label %329

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

329:                                              ; preds = %324, %318
  %.0 = phi i64 [ 16, %318 ], [ 24, %324 ]
  %330 = getelementptr inbounds i8, ptr %0, i64 80
  %331 = load ptr, ptr %330, align 8, !tbaa !23
  %332 = getelementptr inbounds i8, ptr %0, i64 96
  %333 = load ptr, ptr %332, align 8, !tbaa !24
  %334 = call i64 %331(ptr noundef %333, i64 noundef %.7344, ptr noundef nonnull %22, i64 noundef %.0) #6
  %.not397 = icmp eq i64 %334, %.0
  br i1 %.not397, label %382, label %.thread448

.thread448:                                       ; preds = %316, %329
  %.6.ph = phi i32 [ 0, %329 ], [ %317, %316 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  br label %.thread441

335:                                              ; preds = %308
  %.not398 = icmp eq ptr %.1336, null
  br i1 %.not398, label %343, label %336

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

343:                                              ; preds = %336, %335
  %.2332 = phi i32 [ %342, %336 ], [ %.1331, %335 ]
  %344 = trunc nuw i64 %71 to i16
  %345 = add i32 %.2332, %10
  %346 = trunc i32 %345 to i16
  %347 = icmp ugt i64 %4, 4294967294
  %348 = load i64, ptr %17, align 8
  %349 = select i1 %347, i64 4294967295, i64 %348
  %350 = load i64, ptr %18, align 8
  %351 = select i1 %347, i64 4294967295, i64 %350
  %352 = load i16, ptr %14, align 2, !tbaa !5
  %353 = load i16, ptr %15, align 2, !tbaa !5
  %354 = call i32 @mz_zip_writer_create_local_dir_header(ptr noundef nonnull %0, ptr noundef nonnull %19, i16 noundef zeroext %344, i16 noundef zeroext %346, i64 noundef %349, i64 noundef %351, i32 noundef %.7318, i16 noundef zeroext %spec.select406, i16 noundef zeroext %spec.select, i16 noundef zeroext %352, i16 noundef zeroext %353)
  %.not399 = icmp eq i32 %354, 0
  br i1 %.not399, label %355, label %357

355:                                              ; preds = %343
  %356 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 27)
  br label %.thread441

357:                                              ; preds = %343
  %358 = load i64, ptr %16, align 8, !tbaa !14
  %359 = getelementptr inbounds i8, ptr %0, i64 80
  %360 = load ptr, ptr %359, align 8, !tbaa !23
  %361 = getelementptr inbounds i8, ptr %0, i64 96
  %362 = load ptr, ptr %361, align 8, !tbaa !24
  %363 = call i64 %360(ptr noundef %362, i64 noundef %358, ptr noundef nonnull %19, i64 noundef 30) #6
  %.not400 = icmp eq i64 %363, 30
  br i1 %.not400, label %366, label %364

364:                                              ; preds = %357
  %365 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread441

366:                                              ; preds = %357
  br i1 %.not398, label %.thread455, label %367

367:                                              ; preds = %366
  %368 = add i64 %358, 30
  %369 = load ptr, ptr %359, align 8, !tbaa !23
  %370 = load ptr, ptr %361, align 8, !tbaa !24
  %371 = call i64 %369(ptr noundef %370, i64 noundef %368, ptr noundef nonnull %1, i64 noundef %71) #6
  %.not401 = icmp eq i64 %371, %71
  br i1 %.not401, label %374, label %372

372:                                              ; preds = %367
  %373 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread441

374:                                              ; preds = %367
  %375 = add i64 %368, %71
  %376 = load ptr, ptr %359, align 8, !tbaa !23
  %377 = load ptr, ptr %361, align 8, !tbaa !24
  %378 = zext i32 %.2332 to i64
  %379 = call i64 %376(ptr noundef %377, i64 noundef %375, ptr noundef nonnull %20, i64 noundef %378) #6
  %.not402 = icmp eq i64 %379, %378
  br i1 %.not402, label %.thread460, label %380

380:                                              ; preds = %374
  %381 = call i32 @mz_zip_set_error(ptr noundef nonnull %0, i32 noundef 19)
  br label %.thread441

382:                                              ; preds = %329
  %383 = add i64 %.0, %.7344
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #6
  br i1 %312, label %.thread455, label %.thread460

.thread460:                                       ; preds = %374, %382
  %.9454464 = phi i64 [ %383, %382 ], [ %.7344, %374 ]
  %384 = load i64, ptr %17, align 8, !tbaa !14
  %385 = icmp ugt i64 %384, 4294967294
  %.18 = select i1 %385, ptr %17, ptr null
  %386 = select i1 %385, ptr %18, ptr null
  %387 = load i64, ptr %16, align 8, !tbaa !14
  %388 = icmp ugt i64 %387, 4294967294
  %389 = select i1 %388, ptr %16, ptr null
  %390 = call i32 @mz_zip_writer_create_zip64_extra_data(ptr noundef nonnull %20, ptr noundef %.18, ptr noundef %386, ptr noundef %389)
  br label %.thread455

.thread455:                                       ; preds = %366, %.thread460, %382
  %.9454459 = phi i64 [ %.9454464, %.thread460 ], [ %383, %382 ], [ %.7344, %366 ]
  %.4334 = phi i32 [ %390, %.thread460 ], [ %.1331, %382 ], [ %.2332, %366 ]
  %391 = trunc nuw i64 %71 to i16
  %392 = trunc i32 %.4334 to i16
  %393 = load i64, ptr %17, align 8, !tbaa !14
  %394 = load i64, ptr %18, align 8, !tbaa !14
  %395 = load i16, ptr %14, align 2, !tbaa !5
  %396 = load i16, ptr %15, align 2, !tbaa !5
  %397 = load i64, ptr %16, align 8, !tbaa !14
  %398 = call i32 @mz_zip_writer_add_to_central_dir(ptr noundef nonnull %0, ptr noundef nonnull %1, i16 noundef zeroext %391, ptr noundef %.1336, i16 noundef zeroext %392, ptr noundef %6, i16 noundef zeroext %7, i64 noundef %393, i64 noundef %394, i32 noundef %.7318, i16 noundef zeroext %spec.select406, i16 noundef zeroext %spec.select, i16 noundef zeroext %395, i16 noundef zeroext %396, i64 noundef %397, i32 noundef 0, ptr noundef %11, i32 noundef %12)
  %.not404 = icmp eq i32 %398, 0
  br i1 %.not404, label %.thread441, label %399

399:                                              ; preds = %.thread455
  %400 = getelementptr inbounds i8, ptr %0, i64 16
  %401 = load i32, ptr %400, align 8, !tbaa !20
  %402 = add i32 %401, 1
  store i32 %402, ptr %400, align 8, !tbaa !20
  store i64 %.9454459, ptr %0, align 8, !tbaa !9
  br label %.thread441

.thread441:                                       ; preds = %239, %230, %.thread435, %217, %.thread448, %.thread455, %399, %380, %372, %364, %355, %206, %194, %187, %179, %171, %163, %155, %148, %140, %108, %84, %73, %65, %57, %53, %43
  %.7 = phi i32 [ %44, %43 ], [ %54, %53 ], [ %66, %65 ], [ %74, %73 ], [ %85, %84 ], [ %149, %148 ], [ %156, %155 ], [ %164, %163 ], [ %207, %206 ], [ %365, %364 ], [ %373, %372 ], [ %381, %380 ], [ 1, %399 ], [ %356, %355 ], [ %141, %140 ], [ %172, %171 ], [ %188, %187 ], [ %195, %194 ], [ %180, %179 ], [ %109, %108 ], [ %58, %57 ], [ 0, %.thread455 ], [ %.6.ph, %.thread448 ], [ %.2.ph, %.thread435 ], [ %218, %217 ], [ %243, %239 ], [ %234, %230 ]
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 30, 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 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %14) #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