; LLVM IR from JayXon/Leanify :: formats/zip.ll (ZN3Zip7LeanifyEm)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%struct.LodePNGDecompressSettings = type { i32, i32, i64, ptr, ptr, ptr }
%"struct.(anonymous namespace)::EOCD" = type <{ [4 x i8], i16, i16, i16, i16, i32, i32, i16 }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl" }
%"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl" = type { %"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl_data" }
%"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }
%class.Format = type { ptr, ptr, i64 }
%"struct.(anonymous namespace)::CDHeader" = type <{ [4 x i8], i16, i16, i16, i16, i16, i16, i32, i32, i32, i16, i16, i16, i16, i16, i32, i32 }>
%"struct.(anonymous namespace)::LocalHeader" = type <{ [4 x i8], i16, i16, i16, i16, i16, i32, i32, i32, i16, i16 }>
%class.Zip = type { %class.Format, %struct.ZopfliOptions }
%struct.ZopfliOptions = type { i32, i32, i32, i32, i32, i32 }

@_ZN3Zip12header_magicE = external dso_local constant [4 x i8], align 1
@_ZN3Zip14force_deflate_E = external dso_local global i8, align 1
@depth = external global i32, align 4
@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1
@max_depth = external global i32, align 4
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@is_fast = external global i8, align 1
@lodepng_default_decompress_settings = external global %struct.LodePNGDecompressSettings, align 8
@.str.5 = external hidden unnamed_addr constant [60 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i64 @_ZN3Zip7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(48) %0, i64 noundef %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i64, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca %"struct.(anonymous namespace)::EOCD", align 1
  %11 = alloca %"class.std::vector", align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i64, align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator.0", align 1
  %31 = alloca i32, align 4
  %32 = alloca i8, align 1
  %33 = alloca ptr, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca i8, align 1
  %39 = alloca ptr, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %44 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i64 %1, ptr %5, align 8, !tbaa !9
  %45 = load ptr, ptr %4, align 8
  %46 = load i32, ptr @depth, align 4, !tbaa !11
  %47 = add nsw i32 %46, 1
  store i32 %47, ptr @depth, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #9
  %48 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %49 = load ptr, ptr %48, align 8, !tbaa !13
  %50 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %51 = load ptr, ptr %50, align 8, !tbaa !13
  %52 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 2
  %53 = load i64, ptr %52, align 8, !tbaa !15
  %54 = getelementptr inbounds i8, ptr %51, i64 %53
  %55 = call noundef ptr @_ZSt3endIKhLm4EEPT_RAT0__S1_(ptr noundef nonnull align 1 dereferenceable(4) @_ZN3Zip12header_magicE) #9
  %56 = call noundef ptr @_ZSt6searchIPhPKhET_S3_S3_T0_S4_(ptr noundef %49, ptr noundef %54, ptr noundef @_ZN3Zip12header_magicE, ptr noundef %55)
  store ptr %56, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %59 = load ptr, ptr %58, align 8, !tbaa !13
  %60 = ptrtoint ptr %57 to i64
  %61 = ptrtoint ptr %59 to i64
  %62 = sub i64 %60, %61
  store i64 %62, ptr %7, align 8, !tbaa !9
  %63 = load i64, ptr %7, align 8, !tbaa !9
  %64 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 2
  %65 = load i64, ptr %64, align 8, !tbaa !15
  %66 = icmp eq i64 %63, %65
  br i1 %66, label %67, label %72

67:                                               ; preds = %2
  %68 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str)
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %70 = load i64, ptr %5, align 8, !tbaa !9
  %71 = call noundef i64 @_ZN6Format7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef %70)
  store i64 %71, ptr %3, align 8
  store i32 1, ptr %8, align 4
  br label %728

72:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  store i64 0, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 22, ptr %10) #9
  call void @_ZN12_GLOBAL__N_14EOCDC2Ev(ptr noundef nonnull align 1 dereferenceable(22) %10) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #9
  call void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  %73 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %74 = load ptr, ptr %73, align 8, !tbaa !13
  %75 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 2
  %76 = load i64, ptr %75, align 8, !tbaa !15
  %77 = getelementptr inbounds i8, ptr %74, i64 %76
  store ptr %77, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %78 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %79 = load ptr, ptr %12, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %79, i64 -65535
  %81 = getelementptr inbounds i8, ptr %80, i64 -4
  store ptr %81, ptr %14, align 8, !tbaa !5
  %82 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIPhERKT_S3_S3_(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %83 unwind label %109

83:                                               ; preds = %72
  %84 = load ptr, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  store ptr %84, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  store ptr null, ptr %17, align 8, !tbaa !5
  br label %85

85:                                               ; preds = %175, %173, %142, %83
  br label %86

86:                                               ; preds = %85
  %87 = load ptr, ptr %17, align 8, !tbaa !5
  %88 = icmp ne ptr %87, null
  br i1 %88, label %89, label %117

89:                                               ; preds = %86
  %90 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.1)
          to label %91 unwind label %113

91:                                               ; preds = %89
  %92 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %90, ptr noundef @_ZSt3hexRSt8ios_base)
          to label %93 unwind label %113

93:                                               ; preds = %91
  %94 = load ptr, ptr %17, align 8, !tbaa !5
  %95 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %96 = load ptr, ptr %95, align 8, !tbaa !13
  %97 = ptrtoint ptr %94 to i64
  %98 = ptrtoint ptr %96 to i64
  %99 = sub i64 %97, %98
  %100 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8) %92, i64 noundef %99)
          to label %101 unwind label %113

101:                                              ; preds = %93
  %102 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %100, ptr noundef @_ZSt3decRSt8ios_base)
          to label %103 unwind label %113

103:                                              ; preds = %101
  %104 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %102, ptr noundef @.str.2)
          to label %105 unwind label %113

105:                                              ; preds = %103
  %106 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %104, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %107 unwind label %113

107:                                              ; preds = %105
  %108 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %108, ptr %12, align 8, !tbaa !5
  br label %117

109:                                              ; preds = %72
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %15, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  br label %727

113:                                              ; preds = %133, %131, %129, %117, %105, %103, %101, %93, %91, %89
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %15, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %16, align 4
  br label %726

117:                                              ; preds = %107, %86
  %118 = load ptr, ptr %13, align 8, !tbaa !5
  %119 = load ptr, ptr %12, align 8, !tbaa !5
  %120 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 0
  %121 = getelementptr inbounds [4 x i8], ptr %120, i64 0, i64 0
  %122 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 0
  %123 = call noundef ptr @_ZSt3endIhLm4EEPT_RAT0__S0_(ptr noundef nonnull align 1 dereferenceable(4) %122) #9
  %124 = invoke noundef ptr @_ZSt8find_endIPhS0_ET_S1_S1_T0_S2_(ptr noundef %118, ptr noundef %119, ptr noundef %121, ptr noundef %123)
          to label %125 unwind label %113

125:                                              ; preds = %117
  store ptr %124, ptr %17, align 8, !tbaa !5
  %126 = load ptr, ptr %17, align 8, !tbaa !5
  %127 = load ptr, ptr %12, align 8, !tbaa !5
  %128 = icmp eq ptr %126, %127
  br i1 %128, label %129, label %137

129:                                              ; preds = %125
  %130 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.3)
          to label %131 unwind label %113

131:                                              ; preds = %129
  %132 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %130, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %133 unwind label %113

133:                                              ; preds = %131
  %134 = load i64, ptr %5, align 8, !tbaa !9
  %135 = invoke noundef i64 @_ZN6Format7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(24) %45, i64 noundef %134)
          to label %136 unwind label %113

136:                                              ; preds = %133
  store i64 %135, ptr %3, align 8
  store i32 1, ptr %8, align 4
  br label %725

137:                                              ; preds = %125
  %138 = load ptr, ptr %17, align 8, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %138, i64 22
  %140 = load ptr, ptr %12, align 8, !tbaa !5
  %141 = icmp ugt ptr %139, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %137
  br label %85, !llvm.loop !16

143:                                              ; preds = %137
  %144 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %10, ptr align 1 %144, i64 22, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %145 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %146 = load ptr, ptr %145, align 8, !tbaa !13
  %147 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 6
  %148 = load i32, ptr %147, align 1, !tbaa !18
  %149 = zext i32 %148 to i64
  %150 = getelementptr inbounds i8, ptr %146, i64 %149
  %151 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 5
  %152 = load i32, ptr %151, align 1, !tbaa !21
  %153 = zext i32 %152 to i64
  %154 = getelementptr inbounds i8, ptr %150, i64 %153
  store ptr %154, ptr %18, align 8, !tbaa !5
  %155 = load ptr, ptr %18, align 8, !tbaa !5
  %156 = load ptr, ptr %17, align 8, !tbaa !5
  %157 = icmp ugt ptr %155, %156
  br i1 %157, label %158, label %159

158:                                              ; preds = %143
  store i32 2, ptr %8, align 4
  br label %173, !llvm.loop !16

159:                                              ; preds = %143
  %160 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %161 = load ptr, ptr %160, align 8, !tbaa !13
  %162 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 2
  %163 = load i64, ptr %162, align 8, !tbaa !15
  %164 = load i64, ptr %7, align 8, !tbaa !9
  %165 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_112GetCDHeadersEPKhmRKNS_4EOCDEmPSt6vectorINS_8CDHeaderESaIS6_EEPm(ptr noundef %161, i64 noundef %163, ptr noundef nonnull align 1 dereferenceable(22) %10, i64 noundef %164, ptr noundef %11, ptr noundef %9)
          to label %166 unwind label %168

166:                                              ; preds = %159
  br i1 %165, label %167, label %172

167:                                              ; preds = %166
  store i32 3, ptr %8, align 4
  br label %173

168:                                              ; preds = %159
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %15, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %726

172:                                              ; preds = %166
  store i32 0, ptr %8, align 4
  br label %173

173:                                              ; preds = %172, %167, %158
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  %174 = load i32, ptr %8, align 4
  switch i32 %174, label %735 [
    i32 0, label %175
    i32 2, label %85
    i32 3, label %176
  ]

175:                                              ; preds = %173
  br label %85, !llvm.loop !16

176:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %177 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %178 = load ptr, ptr %177, align 8, !tbaa !13
  %179 = load i64, ptr %5, align 8, !tbaa !9
  %180 = sub i64 0, %179
  %181 = getelementptr inbounds i8, ptr %178, i64 %180
  store ptr %181, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %182 = load ptr, ptr %19, align 8, !tbaa !5
  %183 = load i64, ptr %9, align 8, !tbaa !9
  %184 = getelementptr inbounds i8, ptr %182, i64 %183
  store ptr %184, ptr %20, align 8, !tbaa !5
  %185 = load ptr, ptr %19, align 8, !tbaa !5
  %186 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %187 = load ptr, ptr %186, align 8, !tbaa !13
  %188 = load i64, ptr %7, align 8, !tbaa !9
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %185, ptr align 1 %187, i64 %188, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %189 = load ptr, ptr %19, align 8, !tbaa !5
  %190 = load i64, ptr %7, align 8, !tbaa !9
  %191 = getelementptr inbounds i8, ptr %189, i64 %190
  store ptr %191, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  store ptr %11, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %192 = load ptr, ptr %22, align 8, !tbaa !5
  %193 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %192) #9
  %194 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %23, i32 0, i32 0
  store ptr %193, ptr %194, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %195 = load ptr, ptr %22, align 8, !tbaa !5
  %196 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %195) #9
  %197 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %24, i32 0, i32 0
  store ptr %196, ptr %197, align 8
  br label %198

198:                                              ; preds = %637, %176
  %199 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  br i1 %199, label %201, label %200

200:                                              ; preds = %198
  store i32 4, ptr %8, align 4
  br label %643

201:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %202 = call noundef nonnull align 1 dereferenceable(46) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #9
  store ptr %202, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %203 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %204 = load ptr, ptr %203, align 8, !tbaa !13
  %205 = load i64, ptr %9, align 8, !tbaa !9
  %206 = getelementptr inbounds i8, ptr %204, i64 %205
  %207 = load ptr, ptr %25, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %207, i32 0, i32 16
  %209 = load i32, ptr %208, align 1, !tbaa !22
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds i8, ptr %206, i64 %210
  store ptr %211, ptr %26, align 8, !tbaa !5
  %212 = load ptr, ptr %21, align 8, !tbaa !5
  %213 = load ptr, ptr %20, align 8, !tbaa !5
  %214 = ptrtoint ptr %212 to i64
  %215 = ptrtoint ptr %213 to i64
  %216 = sub i64 %214, %215
  %217 = trunc i64 %216 to i32
  %218 = load ptr, ptr %25, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %218, i32 0, i32 16
  store i32 %217, ptr %219, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %220 = load ptr, ptr %25, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %220, i32 0, i32 10
  %222 = load i16, ptr %221, align 1, !tbaa !24
  %223 = zext i16 %222 to i64
  %224 = add i64 30, %223
  store i64 %224, ptr %27, align 8, !tbaa !9
  %225 = load ptr, ptr %21, align 8, !tbaa !5
  %226 = load ptr, ptr %26, align 8, !tbaa !5
  %227 = load i64, ptr %27, align 8, !tbaa !9
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %225, ptr align 1 %226, i64 %227, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %228 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %228, ptr %28, align 8, !tbaa !5
  %229 = load ptr, ptr %28, align 8, !tbaa !5
  %230 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %229, i32 0, i32 10
  %231 = load i16, ptr %230, align 1, !tbaa !25
  %232 = icmp ne i16 %231, 0
  br i1 %232, label %233, label %243

233:                                              ; preds = %201
  %234 = load ptr, ptr %28, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %234, i32 0, i32 10
  %236 = load i16, ptr %235, align 1, !tbaa !25
  %237 = zext i16 %236 to i32
  %238 = load ptr, ptr %26, align 8, !tbaa !5
  %239 = sext i32 %237 to i64
  %240 = getelementptr inbounds i8, ptr %238, i64 %239
  store ptr %240, ptr %26, align 8, !tbaa !5
  %241 = load ptr, ptr %28, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %241, i32 0, i32 10
  store i16 0, ptr %242, align 1, !tbaa !25
  br label %243

243:                                              ; preds = %233, %201
  %244 = load ptr, ptr %28, align 8, !tbaa !5
  %245 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %244, i32 0, i32 2
  %246 = load i16, ptr %245, align 1, !tbaa !27
  %247 = zext i16 %246 to i32
  %248 = and i32 %247, 8
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %278

250:                                              ; preds = %243
  %251 = load ptr, ptr %28, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %251, i32 0, i32 2
  %253 = load i16, ptr %252, align 1, !tbaa !27
  %254 = zext i16 %253 to i32
  %255 = and i32 %254, -9
  %256 = trunc i32 %255 to i16
  store i16 %256, ptr %252, align 1, !tbaa !27
  %257 = load ptr, ptr %25, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %257, i32 0, i32 3
  %259 = load i16, ptr %258, align 1, !tbaa !28
  %260 = zext i16 %259 to i32
  %261 = and i32 %260, -9
  %262 = trunc i32 %261 to i16
  store i16 %262, ptr %258, align 1, !tbaa !28
  %263 = load ptr, ptr %25, align 8, !tbaa !5
  %264 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %263, i32 0, i32 7
  %265 = load i32, ptr %264, align 1, !tbaa !29
  %266 = load ptr, ptr %28, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %266, i32 0, i32 6
  store i32 %265, ptr %267, align 1, !tbaa !30
  %268 = load ptr, ptr %25, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %268, i32 0, i32 8
  %270 = load i32, ptr %269, align 1, !tbaa !31
  %271 = load ptr, ptr %28, align 8, !tbaa !5
  %272 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %271, i32 0, i32 7
  store i32 %270, ptr %272, align 1, !tbaa !32
  %273 = load ptr, ptr %25, align 8, !tbaa !5
  %274 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %273, i32 0, i32 9
  %275 = load i32, ptr %274, align 1, !tbaa !33
  %276 = load ptr, ptr %28, align 8, !tbaa !5
  %277 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %276, i32 0, i32 8
  store i32 %275, ptr %277, align 1, !tbaa !34
  br label %278

278:                                              ; preds = %250, %243
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #9
  %279 = load ptr, ptr %28, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 30
  %281 = load ptr, ptr %28, align 8, !tbaa !5
  %282 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %281, i32 0, i32 9
  %283 = load i16, ptr %282, align 1, !tbaa !35
  %284 = zext i16 %283 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef %280, i64 noundef %284, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %285 unwind label %301

285:                                              ; preds = %278
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #9
  %286 = load ptr, ptr %28, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %286, i32 0, i32 7
  %288 = load i32, ptr %287, align 1, !tbaa !32
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %295, label %290

290:                                              ; preds = %285
  %291 = load ptr, ptr %28, align 8, !tbaa !5
  %292 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %291, i32 0, i32 3
  %293 = load i16, ptr %292, align 1, !tbaa !36
  %294 = icmp ne i16 %293, 0
  br i1 %294, label %295, label %309

295:                                              ; preds = %290, %285
  %296 = load i32, ptr @depth, align 4, !tbaa !11
  %297 = load i32, ptr @max_depth, align 4, !tbaa !11
  %298 = icmp sle i32 %296, %297
  br i1 %298, label %299, label %309

299:                                              ; preds = %295
  invoke void @_Z13PrintFileNameRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %300 unwind label %305

300:                                              ; preds = %299
  br label %309

301:                                              ; preds = %278
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %15, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %16, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #9
  br label %642

305:                                              ; preds = %331, %326, %324, %299
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %15, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %16, align 4
  br label %641

309:                                              ; preds = %300, %295, %290
  %310 = load i64, ptr %27, align 8, !tbaa !9
  %311 = load ptr, ptr %26, align 8, !tbaa !5
  %312 = getelementptr inbounds i8, ptr %311, i64 %310
  store ptr %312, ptr %26, align 8, !tbaa !5
  %313 = load i64, ptr %27, align 8, !tbaa !9
  %314 = load ptr, ptr %21, align 8, !tbaa !5
  %315 = getelementptr inbounds i8, ptr %314, i64 %313
  store ptr %315, ptr %21, align 8, !tbaa !5
  %316 = load ptr, ptr %26, align 8, !tbaa !5
  %317 = load ptr, ptr %28, align 8, !tbaa !5
  %318 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %317, i32 0, i32 7
  %319 = load i32, ptr %318, align 1, !tbaa !32
  %320 = zext i32 %319 to i64
  %321 = getelementptr inbounds i8, ptr %316, i64 %320
  %322 = load ptr, ptr %12, align 8, !tbaa !5
  %323 = icmp ugt ptr %321, %322
  br i1 %323, label %324, label %334

324:                                              ; preds = %309
  %325 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.4)
          to label %326 unwind label %305

326:                                              ; preds = %324
  %327 = load ptr, ptr %28, align 8, !tbaa !5
  %328 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %327, i32 0, i32 7
  %329 = load i32, ptr %328, align 1, !tbaa !32
  %330 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %325, i32 noundef %329)
          to label %331 unwind label %305

331:                                              ; preds = %326
  %332 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %330, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %333 unwind label %305

333:                                              ; preds = %331
  store i32 4, ptr %8, align 4
  br label %631

334:                                              ; preds = %309
  %335 = load ptr, ptr %28, align 8, !tbaa !5
  %336 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %335, i32 0, i32 3
  %337 = load i16, ptr %336, align 1, !tbaa !36
  %338 = zext i16 %337 to i32
  %339 = icmp eq i32 %338, 0
  br i1 %339, label %340, label %426

340:                                              ; preds = %334
  %341 = load ptr, ptr %28, align 8, !tbaa !5
  %342 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %341, i32 0, i32 7
  %343 = load i32, ptr %342, align 1, !tbaa !32
  %344 = icmp ne i32 %343, 0
  br i1 %344, label %345, label %425

345:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %346 = load ptr, ptr %26, align 8, !tbaa !5
  %347 = load ptr, ptr %28, align 8, !tbaa !5
  %348 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %347, i32 0, i32 7
  %349 = load i32, ptr %348, align 1, !tbaa !32
  %350 = zext i32 %349 to i64
  %351 = load ptr, ptr %26, align 8, !tbaa !5
  %352 = load ptr, ptr %21, align 8, !tbaa !5
  %353 = ptrtoint ptr %351 to i64
  %354 = ptrtoint ptr %352 to i64
  %355 = sub i64 %353, %354
  %356 = invoke noundef i64 @_Z11LeanifyFilePvmmRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef %346, i64 noundef %350, i64 noundef %355, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %357 unwind label %404

357:                                              ; preds = %345
  %358 = trunc i64 %356 to i32
  store i32 %358, ptr %31, align 4, !tbaa !11
  %359 = load ptr, ptr %21, align 8, !tbaa !5
  %360 = load i32, ptr %31, align 4, !tbaa !11
  %361 = zext i32 %360 to i64
  %362 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef %359, i64 noundef %361)
          to label %363 unwind label %404

363:                                              ; preds = %357
  %364 = load ptr, ptr %28, align 8, !tbaa !5
  %365 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %364, i32 0, i32 6
  store i32 %362, ptr %365, align 1, !tbaa !30
  %366 = load ptr, ptr %25, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %366, i32 0, i32 7
  store i32 %362, ptr %367, align 1, !tbaa !29
  %368 = load i32, ptr %31, align 4, !tbaa !11
  %369 = load ptr, ptr %28, align 8, !tbaa !5
  %370 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %369, i32 0, i32 7
  store i32 %368, ptr %370, align 1, !tbaa !32
  %371 = load ptr, ptr %25, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %371, i32 0, i32 8
  store i32 %368, ptr %372, align 1, !tbaa !31
  %373 = load i32, ptr %31, align 4, !tbaa !11
  %374 = load ptr, ptr %28, align 8, !tbaa !5
  %375 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %374, i32 0, i32 8
  store i32 %373, ptr %375, align 1, !tbaa !34
  %376 = load ptr, ptr %25, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %376, i32 0, i32 9
  store i32 %373, ptr %377, align 1, !tbaa !33
  %378 = load i8, ptr @_ZN3Zip14force_deflate_E, align 1, !tbaa !37, !range !39, !noundef !40
  %379 = trunc i8 %378 to i1
  br i1 %379, label %380, label %417

380:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #9
  store i8 0, ptr %32, align 1, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  store ptr null, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  store i64 0, ptr %34, align 8, !tbaa !9
  %381 = getelementptr inbounds %class.Zip, ptr %45, i32 0, i32 1
  %382 = load ptr, ptr %21, align 8, !tbaa !5
  %383 = load i32, ptr %31, align 4, !tbaa !11
  %384 = zext i32 %383 to i64
  invoke void @ZopfliDeflate(ptr noundef %381, i32 noundef 2, i32 noundef 1, ptr noundef %382, i64 noundef %384, ptr noundef %32, ptr noundef %33, ptr noundef %34)
          to label %385 unwind label %408

385:                                              ; preds = %380
  %386 = load i64, ptr %34, align 8, !tbaa !9
  %387 = load i32, ptr %31, align 4, !tbaa !11
  %388 = zext i32 %387 to i64
  %389 = icmp ult i64 %386, %388
  br i1 %389, label %390, label %412

390:                                              ; preds = %385
  %391 = load ptr, ptr %28, align 8, !tbaa !5
  %392 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %391, i32 0, i32 3
  store i16 8, ptr %392, align 1, !tbaa !36
  %393 = load ptr, ptr %25, align 8, !tbaa !5
  %394 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %393, i32 0, i32 4
  store i16 8, ptr %394, align 1, !tbaa !42
  %395 = load i64, ptr %34, align 8, !tbaa !9
  %396 = trunc i64 %395 to i32
  %397 = load ptr, ptr %28, align 8, !tbaa !5
  %398 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %397, i32 0, i32 7
  store i32 %396, ptr %398, align 1, !tbaa !32
  %399 = load ptr, ptr %25, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %399, i32 0, i32 8
  store i32 %396, ptr %400, align 1, !tbaa !31
  %401 = load ptr, ptr %21, align 8, !tbaa !5
  %402 = load ptr, ptr %33, align 8, !tbaa !5
  %403 = load i64, ptr %34, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %401, ptr align 1 %402, i64 %403, i1 false)
  br label %412

404:                                              ; preds = %357, %345
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %15, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %16, align 4
  br label %424

408:                                              ; preds = %380
  %409 = landingpad { ptr, i32 }
          cleanup
  %410 = extractvalue { ptr, i32 } %409, 0
  store ptr %410, ptr %15, align 8
  %411 = extractvalue { ptr, i32 } %409, 1
  store i32 %411, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  br label %424

412:                                              ; preds = %390, %385
  %413 = load ptr, ptr %33, align 8, !tbaa !5
  %414 = icmp eq ptr %413, null
  br i1 %414, label %416, label %415

415:                                              ; preds = %412
  call void @_ZdaPv(ptr noundef %413) #10
  br label %416

416:                                              ; preds = %415, %412
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  br label %417

417:                                              ; preds = %416, %363
  %418 = load ptr, ptr %28, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %418, i32 0, i32 7
  %420 = load i32, ptr %419, align 1, !tbaa !32
  %421 = load ptr, ptr %21, align 8, !tbaa !5
  %422 = zext i32 %420 to i64
  %423 = getelementptr inbounds i8, ptr %421, i64 %422
  store ptr %423, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %425

424:                                              ; preds = %408, %404
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %641

425:                                              ; preds = %417, %340
  store i32 5, ptr %8, align 4
  br label %631

426:                                              ; preds = %334
  %427 = load ptr, ptr %28, align 8, !tbaa !5
  %428 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %427, i32 0, i32 3
  %429 = load i16, ptr %428, align 1, !tbaa !36
  %430 = zext i16 %429 to i32
  %431 = icmp ne i32 %430, 8
  br i1 %431, label %442, label %432

432:                                              ; preds = %426
  %433 = load i8, ptr @is_fast, align 1, !tbaa !37, !range !39, !noundef !40
  %434 = trunc i8 %433 to i1
  br i1 %434, label %442, label %435

435:                                              ; preds = %432
  %436 = load ptr, ptr %28, align 8, !tbaa !5
  %437 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %436, i32 0, i32 2
  %438 = load i16, ptr %437, align 1, !tbaa !27
  %439 = zext i16 %438 to i32
  %440 = and i32 %439, 1
  %441 = icmp ne i32 %440, 0
  br i1 %441, label %442, label %455

442:                                              ; preds = %435, %432, %426
  %443 = load ptr, ptr %21, align 8, !tbaa !5
  %444 = load ptr, ptr %26, align 8, !tbaa !5
  %445 = load ptr, ptr %28, align 8, !tbaa !5
  %446 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %445, i32 0, i32 7
  %447 = load i32, ptr %446, align 1, !tbaa !32
  %448 = zext i32 %447 to i64
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %443, ptr align 1 %444, i64 %448, i1 false)
  %449 = load ptr, ptr %28, align 8, !tbaa !5
  %450 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %449, i32 0, i32 7
  %451 = load i32, ptr %450, align 1, !tbaa !32
  %452 = load ptr, ptr %21, align 8, !tbaa !5
  %453 = zext i32 %451 to i64
  %454 = getelementptr inbounds i8, ptr %452, i64 %453
  store ptr %454, ptr %21, align 8, !tbaa !5
  store i32 5, ptr %8, align 4
  br label %631

455:                                              ; preds = %435
  %456 = load ptr, ptr %28, align 8, !tbaa !5
  %457 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %456, i32 0, i32 8
  %458 = load i32, ptr %457, align 1, !tbaa !34
  %459 = icmp eq i32 %458, 0
  br i1 %459, label %460, label %469

460:                                              ; preds = %455
  %461 = load ptr, ptr %28, align 8, !tbaa !5
  %462 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %461, i32 0, i32 3
  store i16 0, ptr %462, align 1, !tbaa !36
  %463 = load ptr, ptr %25, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %463, i32 0, i32 4
  store i16 0, ptr %464, align 1, !tbaa !42
  %465 = load ptr, ptr %28, align 8, !tbaa !5
  %466 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %465, i32 0, i32 7
  store i32 0, ptr %466, align 1, !tbaa !32
  %467 = load ptr, ptr %25, align 8, !tbaa !5
  %468 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %467, i32 0, i32 8
  store i32 0, ptr %468, align 1, !tbaa !31
  store i32 5, ptr %8, align 4
  br label %631

469:                                              ; preds = %455
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  store i64 0, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  store ptr null, ptr %36, align 8, !tbaa !5
  %470 = load ptr, ptr %26, align 8, !tbaa !5
  %471 = load ptr, ptr %28, align 8, !tbaa !5
  %472 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %471, i32 0, i32 7
  %473 = load i32, ptr %472, align 1, !tbaa !32
  %474 = zext i32 %473 to i64
  %475 = invoke noundef i32 @_Z15lodepng_inflatePPhPmPKhmPK25LodePNGDecompressSettings(ptr noundef %36, ptr noundef %35, ptr noundef %470, i64 noundef %474, ptr noundef @lodepng_default_decompress_settings)
          to label %476 unwind label %518

476:                                              ; preds = %469
  %477 = icmp ne i32 %475, 0
  br i1 %477, label %500, label %478

478:                                              ; preds = %476
  %479 = load ptr, ptr %36, align 8, !tbaa !5
  %480 = icmp ne ptr %479, null
  br i1 %480, label %481, label %500

481:                                              ; preds = %478
  %482 = load i64, ptr %35, align 8, !tbaa !9
  %483 = load ptr, ptr %28, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %483, i32 0, i32 8
  %485 = load i32, ptr %484, align 1, !tbaa !34
  %486 = zext i32 %485 to i64
  %487 = icmp ne i64 %482, %486
  br i1 %487, label %500, label %488

488:                                              ; preds = %481
  %489 = load ptr, ptr %28, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %489, i32 0, i32 6
  %491 = load i32, ptr %490, align 1, !tbaa !30
  %492 = load ptr, ptr %36, align 8, !tbaa !5
  %493 = load ptr, ptr %28, align 8, !tbaa !5
  %494 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %493, i32 0, i32 8
  %495 = load i32, ptr %494, align 1, !tbaa !34
  %496 = zext i32 %495 to i64
  %497 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef %492, i64 noundef %496)
          to label %498 unwind label %518

498:                                              ; preds = %488
  %499 = icmp ne i32 %491, %497
  br i1 %499, label %500, label %522

500:                                              ; preds = %498, %481, %478, %476
  %501 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.5)
          to label %502 unwind label %518

502:                                              ; preds = %500
  %503 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %501, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %504 unwind label %518

504:                                              ; preds = %502
  %505 = load ptr, ptr %36, align 8, !tbaa !5
  call void @free(ptr noundef %505) #9
  %506 = load ptr, ptr %21, align 8, !tbaa !5
  %507 = load ptr, ptr %26, align 8, !tbaa !5
  %508 = load ptr, ptr %28, align 8, !tbaa !5
  %509 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %508, i32 0, i32 7
  %510 = load i32, ptr %509, align 1, !tbaa !32
  %511 = zext i32 %510 to i64
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %506, ptr align 1 %507, i64 %511, i1 false)
  %512 = load ptr, ptr %28, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %512, i32 0, i32 7
  %514 = load i32, ptr %513, align 1, !tbaa !32
  %515 = load ptr, ptr %21, align 8, !tbaa !5
  %516 = zext i32 %514 to i64
  %517 = getelementptr inbounds i8, ptr %515, i64 %516
  store ptr %517, ptr %21, align 8, !tbaa !5
  store i32 5, ptr %8, align 4
  br label %630

518:                                              ; preds = %502, %500, %488, %469
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %15, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %16, align 4
  br label %640

522:                                              ; preds = %498
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  %523 = load ptr, ptr %36, align 8, !tbaa !5
  %524 = load i64, ptr %35, align 8, !tbaa !9
  %525 = invoke noundef i64 @_Z11LeanifyFilePvmmRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef %523, i64 noundef %524, i64 noundef 0, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %526 unwind label %571

526:                                              ; preds = %522
  %527 = trunc i64 %525 to i32
  store i32 %527, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #9
  store i8 0, ptr %38, align 1, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  store ptr null, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  store i64 0, ptr %40, align 8, !tbaa !9
  %528 = getelementptr inbounds %class.Zip, ptr %45, i32 0, i32 1
  %529 = load ptr, ptr %36, align 8, !tbaa !5
  %530 = load i32, ptr %37, align 4, !tbaa !11
  %531 = zext i32 %530 to i64
  invoke void @ZopfliDeflate(ptr noundef %528, i32 noundef 2, i32 noundef 1, ptr noundef %529, i64 noundef %531, ptr noundef %38, ptr noundef %39, ptr noundef %40)
          to label %532 unwind label %575

532:                                              ; preds = %526
  %533 = load i32, ptr %37, align 4, !tbaa !11
  %534 = zext i32 %533 to i64
  %535 = load i64, ptr %40, align 8, !tbaa !9
  %536 = icmp ule i64 %534, %535
  br i1 %536, label %537, label %579

537:                                              ; preds = %532
  %538 = load i32, ptr %37, align 4, !tbaa !11
  %539 = load ptr, ptr %28, align 8, !tbaa !5
  %540 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %539, i32 0, i32 7
  %541 = load i32, ptr %540, align 1, !tbaa !32
  %542 = icmp ule i32 %538, %541
  br i1 %542, label %543, label %579

543:                                              ; preds = %537
  %544 = load ptr, ptr %28, align 8, !tbaa !5
  %545 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %544, i32 0, i32 3
  store i16 0, ptr %545, align 1, !tbaa !36
  %546 = load ptr, ptr %25, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %546, i32 0, i32 4
  store i16 0, ptr %547, align 1, !tbaa !42
  %548 = load ptr, ptr %36, align 8, !tbaa !5
  %549 = load i32, ptr %37, align 4, !tbaa !11
  %550 = zext i32 %549 to i64
  %551 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef %548, i64 noundef %550)
          to label %552 unwind label %575

552:                                              ; preds = %543
  %553 = load ptr, ptr %28, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %553, i32 0, i32 6
  store i32 %551, ptr %554, align 1, !tbaa !30
  %555 = load ptr, ptr %25, align 8, !tbaa !5
  %556 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %555, i32 0, i32 7
  store i32 %551, ptr %556, align 1, !tbaa !29
  %557 = load i32, ptr %37, align 4, !tbaa !11
  %558 = load ptr, ptr %28, align 8, !tbaa !5
  %559 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %558, i32 0, i32 7
  store i32 %557, ptr %559, align 1, !tbaa !32
  %560 = load ptr, ptr %25, align 8, !tbaa !5
  %561 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %560, i32 0, i32 8
  store i32 %557, ptr %561, align 1, !tbaa !31
  %562 = load i32, ptr %37, align 4, !tbaa !11
  %563 = load ptr, ptr %28, align 8, !tbaa !5
  %564 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %563, i32 0, i32 8
  store i32 %562, ptr %564, align 1, !tbaa !34
  %565 = load ptr, ptr %25, align 8, !tbaa !5
  %566 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %565, i32 0, i32 9
  store i32 %562, ptr %566, align 1, !tbaa !33
  %567 = load ptr, ptr %21, align 8, !tbaa !5
  %568 = load ptr, ptr %36, align 8, !tbaa !5
  %569 = load i32, ptr %37, align 4, !tbaa !11
  %570 = zext i32 %569 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %567, ptr align 1 %568, i64 %570, i1 false)
  br label %618

571:                                              ; preds = %522
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %15, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %16, align 4
  br label %639

575:                                              ; preds = %586, %543, %526
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %15, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  br label %639

579:                                              ; preds = %537, %532
  %580 = load i64, ptr %40, align 8, !tbaa !9
  %581 = load ptr, ptr %28, align 8, !tbaa !5
  %582 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %581, i32 0, i32 7
  %583 = load i32, ptr %582, align 1, !tbaa !32
  %584 = zext i32 %583 to i64
  %585 = icmp ult i64 %580, %584
  br i1 %585, label %586, label %610

586:                                              ; preds = %579
  %587 = load ptr, ptr %36, align 8, !tbaa !5
  %588 = load i32, ptr %37, align 4, !tbaa !11
  %589 = zext i32 %588 to i64
  %590 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef %587, i64 noundef %589)
          to label %591 unwind label %575

591:                                              ; preds = %586
  %592 = load ptr, ptr %28, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %592, i32 0, i32 6
  store i32 %590, ptr %593, align 1, !tbaa !30
  %594 = load ptr, ptr %25, align 8, !tbaa !5
  %595 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %594, i32 0, i32 7
  store i32 %590, ptr %595, align 1, !tbaa !29
  %596 = load i64, ptr %40, align 8, !tbaa !9
  %597 = trunc i64 %596 to i32
  %598 = load ptr, ptr %28, align 8, !tbaa !5
  %599 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %598, i32 0, i32 7
  store i32 %597, ptr %599, align 1, !tbaa !32
  %600 = load ptr, ptr %25, align 8, !tbaa !5
  %601 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %600, i32 0, i32 8
  store i32 %597, ptr %601, align 1, !tbaa !31
  %602 = load i32, ptr %37, align 4, !tbaa !11
  %603 = load ptr, ptr %28, align 8, !tbaa !5
  %604 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %603, i32 0, i32 8
  store i32 %602, ptr %604, align 1, !tbaa !34
  %605 = load ptr, ptr %25, align 8, !tbaa !5
  %606 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %605, i32 0, i32 9
  store i32 %602, ptr %606, align 1, !tbaa !33
  %607 = load ptr, ptr %21, align 8, !tbaa !5
  %608 = load ptr, ptr %39, align 8, !tbaa !5
  %609 = load i64, ptr %40, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %607, ptr align 1 %608, i64 %609, i1 false)
  br label %617

610:                                              ; preds = %579
  %611 = load ptr, ptr %21, align 8, !tbaa !5
  %612 = load ptr, ptr %26, align 8, !tbaa !5
  %613 = load ptr, ptr %28, align 8, !tbaa !5
  %614 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %613, i32 0, i32 7
  %615 = load i32, ptr %614, align 1, !tbaa !32
  %616 = zext i32 %615 to i64
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %611, ptr align 1 %612, i64 %616, i1 false)
  br label %617

617:                                              ; preds = %610, %591
  br label %618

618:                                              ; preds = %617, %552
  %619 = load ptr, ptr %28, align 8, !tbaa !5
  %620 = getelementptr inbounds %"struct.(anonymous namespace)::LocalHeader", ptr %619, i32 0, i32 7
  %621 = load i32, ptr %620, align 1, !tbaa !32
  %622 = load ptr, ptr %21, align 8, !tbaa !5
  %623 = zext i32 %621 to i64
  %624 = getelementptr inbounds i8, ptr %622, i64 %623
  store ptr %624, ptr %21, align 8, !tbaa !5
  %625 = load ptr, ptr %36, align 8, !tbaa !5
  call void @free(ptr noundef %625) #9
  %626 = load ptr, ptr %39, align 8, !tbaa !5
  %627 = icmp eq ptr %626, null
  br i1 %627, label %629, label %628

628:                                              ; preds = %618
  call void @_ZdaPv(ptr noundef %626) #10
  br label %629

629:                                              ; preds = %628, %618
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  store i32 0, ptr %8, align 4
  br label %630

630:                                              ; preds = %629, %504
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %631

631:                                              ; preds = %630, %460, %442, %425, %333
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  %632 = load i32, ptr %8, align 4
  switch i32 %632, label %634 [
    i32 0, label %633
  ]

633:                                              ; preds = %631
  store i32 0, ptr %8, align 4
  br label %634

634:                                              ; preds = %633, %631
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  %635 = load i32, ptr %8, align 4
  switch i32 %635, label %643 [
    i32 0, label %636
    i32 5, label %637
  ]

636:                                              ; preds = %634
  br label %637

637:                                              ; preds = %636, %634
  %638 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #9
  br label %198

639:                                              ; preds = %575, %571
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  br label %640

640:                                              ; preds = %639, %518
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %641

641:                                              ; preds = %640, %424, %305
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #9
  br label %642

642:                                              ; preds = %641, %301
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %726

643:                                              ; preds = %634, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %644

644:                                              ; preds = %643
  %645 = load ptr, ptr %21, align 8, !tbaa !5
  %646 = load ptr, ptr %20, align 8, !tbaa !5
  %647 = ptrtoint ptr %645 to i64
  %648 = ptrtoint ptr %646 to i64
  %649 = sub i64 %647, %648
  %650 = trunc i64 %649 to i32
  %651 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 6
  store i32 %650, ptr %651, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  store ptr %11, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %652 = load ptr, ptr %41, align 8, !tbaa !5
  %653 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %652) #9
  %654 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %42, i32 0, i32 0
  store ptr %653, ptr %654, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %655 = load ptr, ptr %41, align 8, !tbaa !5
  %656 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %655) #9
  %657 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %43, i32 0, i32 0
  store ptr %656, ptr %657, align 8
  br label %658

658:                                              ; preds = %690, %644
  %659 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %43) #9
  br i1 %659, label %661, label %660

660:                                              ; preds = %658
  store i32 6, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %692

661:                                              ; preds = %658
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %662 = call noundef nonnull align 1 dereferenceable(46) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #9
  store ptr %662, ptr %44, align 8, !tbaa !5
  %663 = load ptr, ptr %44, align 8, !tbaa !5
  %664 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %663, i32 0, i32 12
  store i16 0, ptr %664, align 1, !tbaa !43
  %665 = load ptr, ptr %44, align 8, !tbaa !5
  %666 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %665, i32 0, i32 11
  store i16 0, ptr %666, align 1, !tbaa !44
  %667 = load ptr, ptr %21, align 8, !tbaa !5
  %668 = load ptr, ptr %44, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %667, ptr align 1 %668, i64 46, i1 false)
  %669 = load ptr, ptr %21, align 8, !tbaa !5
  %670 = getelementptr inbounds i8, ptr %669, i64 46
  store ptr %670, ptr %21, align 8, !tbaa !5
  %671 = load ptr, ptr %21, align 8, !tbaa !5
  %672 = load ptr, ptr %20, align 8, !tbaa !5
  %673 = load ptr, ptr %44, align 8, !tbaa !5
  %674 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %673, i32 0, i32 16
  %675 = load i32, ptr %674, align 1, !tbaa !22
  %676 = zext i32 %675 to i64
  %677 = getelementptr inbounds i8, ptr %672, i64 %676
  %678 = getelementptr inbounds i8, ptr %677, i64 30
  %679 = load ptr, ptr %44, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %679, i32 0, i32 10
  %681 = load i16, ptr %680, align 1, !tbaa !24
  %682 = zext i16 %681 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %671, ptr align 1 %678, i64 %682, i1 false)
  %683 = load ptr, ptr %44, align 8, !tbaa !5
  %684 = getelementptr inbounds %"struct.(anonymous namespace)::CDHeader", ptr %683, i32 0, i32 10
  %685 = load i16, ptr %684, align 1, !tbaa !24
  %686 = zext i16 %685 to i32
  %687 = load ptr, ptr %21, align 8, !tbaa !5
  %688 = sext i32 %686 to i64
  %689 = getelementptr inbounds i8, ptr %687, i64 %688
  store ptr %689, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %690

690:                                              ; preds = %661
  %691 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #9
  br label %658

692:                                              ; preds = %660
  %693 = call noundef i64 @_ZNKSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #9
  %694 = trunc i64 %693 to i16
  %695 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 4
  store i16 %694, ptr %695, align 1, !tbaa !45
  %696 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 3
  store i16 %694, ptr %696, align 1, !tbaa !46
  %697 = load ptr, ptr %21, align 8, !tbaa !5
  %698 = load ptr, ptr %20, align 8, !tbaa !5
  %699 = ptrtoint ptr %697 to i64
  %700 = ptrtoint ptr %698 to i64
  %701 = sub i64 %699, %700
  %702 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 6
  %703 = load i32, ptr %702, align 1, !tbaa !18
  %704 = zext i32 %703 to i64
  %705 = sub nsw i64 %701, %704
  %706 = trunc i64 %705 to i32
  %707 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 5
  store i32 %706, ptr %707, align 1, !tbaa !21
  %708 = getelementptr inbounds %"struct.(anonymous namespace)::EOCD", ptr %10, i32 0, i32 7
  store i16 0, ptr %708, align 1, !tbaa !47
  %709 = load ptr, ptr %21, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %709, ptr align 1 %10, i64 22, i1 false)
  %710 = load i64, ptr %5, align 8, !tbaa !9
  %711 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %712 = load ptr, ptr %711, align 8, !tbaa !13
  %713 = sub i64 0, %710
  %714 = getelementptr inbounds i8, ptr %712, i64 %713
  store ptr %714, ptr %711, align 8, !tbaa !13
  %715 = load ptr, ptr %21, align 8, !tbaa !5
  %716 = getelementptr inbounds i8, ptr %715, i64 22
  %717 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 1
  %718 = load ptr, ptr %717, align 8, !tbaa !13
  %719 = ptrtoint ptr %716 to i64
  %720 = ptrtoint ptr %718 to i64
  %721 = sub i64 %719, %720
  %722 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 2
  store i64 %721, ptr %722, align 8, !tbaa !15
  %723 = getelementptr inbounds %class.Format, ptr %45, i32 0, i32 2
  %724 = load i64, ptr %723, align 8, !tbaa !15
  store i64 %724, ptr %3, align 8
  store i32 1, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %725

725:                                              ; preds = %692, %136
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 22, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  br label %728

726:                                              ; preds = %642, %168, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %727

727:                                              ; preds = %726, %109
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 22, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  br label %730

728:                                              ; preds = %725, %67
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  %729 = load i64, ptr %3, align 8
  ret i64 %729

730:                                              ; preds = %727
  %731 = load ptr, ptr %15, align 8
  %732 = load i32, ptr %16, align 4
  %733 = insertvalue { ptr, i32 } poison, ptr %731, 0
  %734 = insertvalue { ptr, i32 } %733, i32 %732, 1
  resume { ptr, i32 } %734

735:                                              ; preds = %173
  unreachable
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt6searchIPhPKhET_S3_S3_T0_S4_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIKhLm4EEPT_RAT0__S1_(ptr noundef nonnull align 1 dereferenceable(4)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN6Format7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZN12_GLOBAL__N_14EOCDC2Ev(ptr noundef nonnull align 1 dereferenceable(22)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIPhERKT_S3_S3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3hexRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3decRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt8find_endIPhS0_ET_S1_S1_T0_S2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIhLm4EEPT_RAT0__S0_(ptr noundef nonnull align 1 dereferenceable(4)) #3

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_112GetCDHeadersEPKhmRKNS_4EOCDEmPSt6vectorINS_8CDHeaderESaIS6_EEPm(ptr noundef, i64 noundef, ptr noundef nonnull align 1 dereferenceable(22), i64 noundef, ptr noundef, ptr noundef) #0

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 1 dereferenceable(46) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

declare void @_Z13PrintFileNameRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32)) #6

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #0 align 2

declare noundef i64 @_Z11LeanifyFilePvmmRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef, i64 noundef, i64 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #6

declare noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef, i64 noundef) #6

declare void @ZopfliDeflate(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) #6

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #7

declare noundef i32 @_Z15lodepng_inflatePPhPmPKhmPK25LodePNGDecompressSettings(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) #6

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i64 @_ZNKSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress 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 #3 = { inlinehint mustprogress 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 #4 = { mustprogress 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nobuiltin 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 #8 = { 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 #9 = { nounwind }
attributes #10 = { builtin 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 8}
!14 = !{!"_ZTS6Format", !6, i64 8, !10, i64 16}
!15 = !{!14, !10, i64 16}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !12, i64 16}
!19 = !{!"_ZTSN12_GLOBAL__N_14EOCDE", !7, i64 0, !20, i64 4, !20, i64 6, !20, i64 8, !20, i64 10, !12, i64 12, !12, i64 16, !20, i64 20}
!20 = !{!"short", !7, i64 0}
!21 = !{!19, !12, i64 12}
!22 = !{!23, !12, i64 42}
!23 = !{!"_ZTSN12_GLOBAL__N_18CDHeaderE", !7, i64 0, !20, i64 4, !20, i64 6, !20, i64 8, !20, i64 10, !20, i64 12, !20, i64 14, !12, i64 16, !12, i64 20, !12, i64 24, !20, i64 28, !20, i64 30, !20, i64 32, !20, i64 34, !20, i64 36, !12, i64 38, !12, i64 42}
!24 = !{!23, !20, i64 28}
!25 = !{!26, !20, i64 28}
!26 = !{!"_ZTSN12_GLOBAL__N_111LocalHeaderE", !7, i64 0, !20, i64 4, !20, i64 6, !20, i64 8, !20, i64 10, !20, i64 12, !12, i64 14, !12, i64 18, !12, i64 22, !20, i64 26, !20, i64 28}
!27 = !{!26, !20, i64 6}
!28 = !{!23, !20, i64 8}
!29 = !{!23, !12, i64 16}
!30 = !{!26, !12, i64 14}
!31 = !{!23, !12, i64 20}
!32 = !{!26, !12, i64 18}
!33 = !{!23, !12, i64 24}
!34 = !{!26, !12, i64 22}
!35 = !{!26, !20, i64 26}
!36 = !{!26, !20, i64 8}
!37 = !{!38, !38, i64 0}
!38 = !{!"bool", !7, i64 0}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = !{!7, !7, i64 0}
!42 = !{!23, !20, i64 10}
!43 = !{!23, !20, i64 32}
!44 = !{!23, !20, i64 30}
!45 = !{!19, !20, i64 10}
!46 = !{!19, !20, i64 8}
!47 = !{!19, !20, i64 20}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%struct.LodePNGDecompressSettings = type { i32, i32, i64, ptr, ptr, ptr }
%"struct.(anonymous namespace)::EOCD" = type <{ [4 x i8], i16, i16, i16, i16, i32, i32, i16 }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl" }
%"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl" = type { %"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl_data" }
%"struct.std::_Vector_base<(anonymous namespace)::CDHeader, std::allocator<(anonymous namespace)::CDHeader>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.0" = type { i8 }

@_ZN3Zip12header_magicE = external dso_local constant [4 x i8], align 1
@_ZN3Zip14force_deflate_E = external dso_local local_unnamed_addr global i8, align 1
@depth = external local_unnamed_addr global i32, align 4
@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1
@max_depth = external local_unnamed_addr global i32, align 4
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@is_fast = external local_unnamed_addr global i8, align 1
@lodepng_default_decompress_settings = external global %struct.LodePNGDecompressSettings, align 8
@.str.5 = external hidden unnamed_addr constant [60 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i64 @_ZN3Zip7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(48) %0, i64 noundef %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i64, align 8
  %4 = alloca %"struct.(anonymous namespace)::EOCD", align 1
  %5 = alloca %"class.std::vector", align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::allocator.0", align 1
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = load i32, ptr @depth, align 4, !tbaa !5
  %22 = add nsw i32 %21, 1
  store i32 %22, ptr @depth, align 4, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %0, i64 8
  %24 = load ptr, ptr %23, align 8, !tbaa !9
  %25 = getelementptr inbounds i8, ptr %0, i64 16
  %26 = load i64, ptr %25, align 8, !tbaa !13
  %27 = getelementptr inbounds i8, ptr %24, i64 %26
  %28 = tail call noundef ptr @_ZSt3endIKhLm4EEPT_RAT0__S1_(ptr noundef nonnull align 1 dereferenceable(4) @_ZN3Zip12header_magicE) #9
  %29 = tail call noundef ptr @_ZSt6searchIPhPKhET_S3_S3_T0_S4_(ptr noundef %24, ptr noundef %27, ptr noundef nonnull @_ZN3Zip12header_magicE, ptr noundef %28)
  %30 = load ptr, ptr %23, align 8, !tbaa !9
  %31 = ptrtoint ptr %29 to i64
  %32 = ptrtoint ptr %30 to i64
  %33 = sub i64 %31, %32
  %34 = load i64, ptr %25, align 8, !tbaa !13
  %35 = icmp eq i64 %33, %34
  br i1 %35, label %36, label %40

36:                                               ; preds = %2
  %37 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str)
  %38 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %39 = tail call noundef i64 @_ZN6Format7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %1)
  br label %348

40:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  store i64 0, ptr %3, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 22, ptr nonnull %4) #9
  call void @_ZN12_GLOBAL__N_14EOCDC2Ev(ptr noundef nonnull align 1 dereferenceable(22) %4) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  %41 = load ptr, ptr %23, align 8, !tbaa !9
  %42 = load i64, ptr %25, align 8, !tbaa !13
  %43 = getelementptr inbounds i8, ptr %41, i64 %42
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #9
  %44 = getelementptr inbounds i8, ptr %43, i64 -65539
  store ptr %44, ptr %6, align 8, !tbaa !15
  %45 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIPhERKT_S3_S3_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %6)
  %46 = load ptr, ptr %45, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  %47 = getelementptr inbounds i8, ptr %4, i64 16
  %48 = getelementptr inbounds i8, ptr %4, i64 12
  br label %.critedge

.critedge:                                        ; preds = %.critedge.backedge, %40
  %.0180 = phi ptr [ null, %40 ], [ %67, %.critedge.backedge ]
  %.0169 = phi ptr [ %43, %40 ], [ %.1170, %.critedge.backedge ]
  %.not = icmp eq ptr %.0180, null
  br i1 %.not, label %65, label %49

49:                                               ; preds = %.critedge
  %50 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.1)
          to label %51 unwind label %.loopexit231

51:                                               ; preds = %49
  %52 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull @_ZSt3hexRSt8ios_base)
          to label %53 unwind label %.loopexit231

53:                                               ; preds = %51
  %54 = load ptr, ptr %23, align 8, !tbaa !9
  %55 = ptrtoint ptr %.0180 to i64
  %56 = ptrtoint ptr %54 to i64
  %57 = sub i64 %55, %56
  %58 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8) %52, i64 noundef %57)
          to label %59 unwind label %.loopexit231

59:                                               ; preds = %53
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %61 unwind label %.loopexit231

61:                                               ; preds = %59
  %62 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef nonnull @.str.2)
          to label %63 unwind label %.loopexit231

63:                                               ; preds = %61
  %64 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %65 unwind label %.loopexit231

.loopexit231:                                     ; preds = %49, %51, %53, %59, %61, %63, %65
  %lpad.loopexit233 = landingpad { ptr, i32 }
          cleanup
  br label %347

.loopexit.split-lp232:                            ; preds = %70, %72
  %lpad.loopexit.split-lp234 = landingpad { ptr, i32 }
          cleanup
  br label %347

65:                                               ; preds = %63, %.critedge
  %.1170 = phi ptr [ %.0169, %.critedge ], [ %.0180, %63 ]
  %66 = call noundef ptr @_ZSt3endIhLm4EEPT_RAT0__S0_(ptr noundef nonnull align 1 dereferenceable(4) %4) #9
  %67 = invoke noundef ptr @_ZSt8find_endIPhS0_ET_S1_S1_T0_S2_(ptr noundef %46, ptr noundef %.1170, ptr noundef nonnull %4, ptr noundef %66)
          to label %68 unwind label %.loopexit231

68:                                               ; preds = %65
  %69 = icmp eq ptr %67, %.1170
  br i1 %69, label %70, label %76

70:                                               ; preds = %68
  %71 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.3)
          to label %72 unwind label %.loopexit.split-lp232

72:                                               ; preds = %70
  %73 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %71, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %74 unwind label %.loopexit.split-lp232

74:                                               ; preds = %72
  %75 = call noundef i64 @_ZN6Format7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %1)
  br label %346

76:                                               ; preds = %68
  %77 = getelementptr inbounds i8, ptr %67, i64 22
  %78 = icmp ugt ptr %77, %.1170
  br i1 %78, label %.critedge.backedge, label %79

.critedge.backedge:                               ; preds = %76, %93, %79
  br label %.critedge, !llvm.loop !16

79:                                               ; preds = %76
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(22) %4, ptr noundef nonnull align 1 dereferenceable(22) %67, i64 22, i1 false)
  %80 = load ptr, ptr %23, align 8, !tbaa !9
  %81 = load i32, ptr %47, align 1, !tbaa !18
  %82 = zext i32 %81 to i64
  %83 = getelementptr inbounds i8, ptr %80, i64 %82
  %84 = load i32, ptr %48, align 1, !tbaa !21
  %85 = zext i32 %84 to i64
  %86 = getelementptr inbounds i8, ptr %83, i64 %85
  %87 = icmp ugt ptr %86, %67
  br i1 %87, label %.critedge.backedge, label %88

88:                                               ; preds = %79
  %89 = load i64, ptr %25, align 8, !tbaa !13
  %90 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_112GetCDHeadersEPKhmRKNS_4EOCDEmPSt6vectorINS_8CDHeaderESaIS6_EEPm(ptr noundef %80, i64 noundef %89, ptr noundef nonnull align 1 dereferenceable(22) %4, i64 noundef %33, ptr noundef nonnull %5, ptr noundef nonnull %3)
          to label %93 unwind label %91

91:                                               ; preds = %88
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %347

93:                                               ; preds = %88
  br i1 %90, label %94, label %.critedge.backedge

94:                                               ; preds = %93
  %95 = load ptr, ptr %23, align 8, !tbaa !9
  %96 = sub i64 0, %1
  %97 = getelementptr inbounds i8, ptr %95, i64 %96
  %98 = load i64, ptr %3, align 8, !tbaa !14
  %99 = getelementptr inbounds i8, ptr %97, i64 %98
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %97, ptr align 1 %95, i64 %33, i1 false)
  %100 = getelementptr inbounds i8, ptr %97, i64 %33
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  %101 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %101, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  %102 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %102, ptr %8, align 8
  %103 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  %104 = ptrtoint ptr %99 to i64
  br i1 %103, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %94
  %105 = getelementptr inbounds i8, ptr %0, i64 24
  br label %106

106:                                              ; preds = %.lr.ph, %303
  %.0182261 = phi ptr [ %100, %.lr.ph ], [ %.3185224, %303 ]
  %107 = call noundef nonnull align 1 dereferenceable(46) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  %108 = load ptr, ptr %23, align 8, !tbaa !9
  %109 = load i64, ptr %3, align 8, !tbaa !14
  %110 = getelementptr inbounds i8, ptr %108, i64 %109
  %111 = getelementptr inbounds i8, ptr %107, i64 42
  %112 = load i32, ptr %111, align 1, !tbaa !22
  %113 = zext i32 %112 to i64
  %114 = getelementptr inbounds i8, ptr %110, i64 %113
  %115 = ptrtoint ptr %.0182261 to i64
  %116 = sub i64 %115, %104
  %117 = trunc i64 %116 to i32
  store i32 %117, ptr %111, align 1, !tbaa !22
  %118 = getelementptr inbounds i8, ptr %107, i64 28
  %119 = load i16, ptr %118, align 1, !tbaa !24
  %120 = zext i16 %119 to i64
  %121 = add nuw nsw i64 %120, 30
  call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %.0182261, ptr noundef nonnull align 1 dereferenceable(1) %114, i64 %121, i1 false)
  %122 = getelementptr inbounds i8, ptr %.0182261, i64 28
  %123 = load i16, ptr %122, align 1, !tbaa !25
  %.not199 = icmp eq i16 %123, 0
  br i1 %.not199, label %127, label %124

124:                                              ; preds = %106
  %125 = zext i16 %123 to i64
  %126 = getelementptr inbounds i8, ptr %114, i64 %125
  store i16 0, ptr %122, align 1, !tbaa !25
  br label %127

127:                                              ; preds = %124, %106
  %.0181 = phi ptr [ %126, %124 ], [ %114, %106 ]
  %128 = getelementptr inbounds i8, ptr %.0182261, i64 6
  %129 = load i16, ptr %128, align 1, !tbaa !27
  %130 = and i16 %129, 8
  %.not200 = icmp eq i16 %130, 0
  br i1 %.not200, label %142, label %131

131:                                              ; preds = %127
  %132 = and i16 %129, -9
  store i16 %132, ptr %128, align 1, !tbaa !27
  %133 = getelementptr inbounds i8, ptr %107, i64 8
  %134 = load i16, ptr %133, align 1, !tbaa !28
  %135 = and i16 %134, -9
  store i16 %135, ptr %133, align 1, !tbaa !28
  %136 = getelementptr inbounds i8, ptr %107, i64 16
  %137 = getelementptr inbounds i8, ptr %.0182261, i64 14
  %138 = load <2 x i32>, ptr %136, align 1, !tbaa !5
  store <2 x i32> %138, ptr %137, align 1, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %107, i64 24
  %140 = load i32, ptr %139, align 1, !tbaa !29
  %141 = getelementptr inbounds i8, ptr %.0182261, i64 22
  store i32 %140, ptr %141, align 1, !tbaa !30
  br label %142

142:                                              ; preds = %131, %127
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #9
  %143 = getelementptr inbounds i8, ptr %.0182261, i64 30
  %144 = getelementptr inbounds i8, ptr %.0182261, i64 26
  %145 = load i16, ptr %144, align 1, !tbaa !31
  %146 = zext i16 %145 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull %143, i64 noundef %146, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %147 unwind label %157

147:                                              ; preds = %142
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  %148 = getelementptr inbounds i8, ptr %.0182261, i64 18
  %149 = load i32, ptr %148, align 1, !tbaa !32
  %.not201 = icmp eq i32 %149, 0
  br i1 %.not201, label %150, label %153

150:                                              ; preds = %147
  %151 = getelementptr inbounds i8, ptr %.0182261, i64 8
  %152 = load i16, ptr %151, align 1, !tbaa !33
  %.not202 = icmp eq i16 %152, 0
  br i1 %.not202, label %159, label %153

153:                                              ; preds = %150, %147
  %154 = load i32, ptr @depth, align 4, !tbaa !5
  %155 = load i32, ptr @max_depth, align 4, !tbaa !5
  %.not203 = icmp sgt i32 %154, %155
  br i1 %.not203, label %159, label %156

156:                                              ; preds = %153
  invoke void @_Z13PrintFileNameRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %._crit_edge282 unwind label %.loopexit230

._crit_edge282:                                   ; preds = %156
  %.pre = load i32, ptr %148, align 1, !tbaa !32
  br label %159

157:                                              ; preds = %142
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  br label %308

.loopexit230:                                     ; preds = %156
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %307

.loopexit.split-lp:                               ; preds = %166, %168, %171
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %307

159:                                              ; preds = %._crit_edge282, %153, %150
  %160 = phi i32 [ %.pre, %._crit_edge282 ], [ %149, %153 ], [ 0, %150 ]
  %161 = getelementptr inbounds i8, ptr %.0181, i64 %121
  %162 = getelementptr inbounds i8, ptr %.0182261, i64 %121
  %163 = zext i32 %160 to i64
  %164 = getelementptr inbounds i8, ptr %161, i64 %163
  %165 = icmp ugt ptr %164, %.1170
  br i1 %165, label %166, label %173

166:                                              ; preds = %159
  %167 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.4)
          to label %168 unwind label %.loopexit.split-lp

168:                                              ; preds = %166
  %169 = load i32, ptr %148, align 1, !tbaa !32
  %170 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %167, i32 noundef %169)
          to label %171 unwind label %.loopexit.split-lp

171:                                              ; preds = %168
  %172 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %170, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.thread225 unwind label %.loopexit.split-lp

.thread225:                                       ; preds = %171
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  br label %.loopexit

173:                                              ; preds = %159
  %174 = getelementptr inbounds i8, ptr %.0182261, i64 8
  %175 = load i16, ptr %174, align 1, !tbaa !33
  switch i16 %175, label %221 [
    i16 0, label %176
    i16 8, label %215
  ]

176:                                              ; preds = %173
  %.not214 = icmp eq i32 %160, 0
  br i1 %.not214, label %.thread, label %177

177:                                              ; preds = %176
  %178 = ptrtoint ptr %161 to i64
  %179 = ptrtoint ptr %162 to i64
  %180 = sub i64 %178, %179
  %181 = invoke noundef i64 @_Z11LeanifyFilePvmmRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull %161, i64 noundef %163, i64 noundef %180, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %182 unwind label %202

182:                                              ; preds = %177
  %183 = and i64 %181, 4294967295
  %184 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef nonnull %162, i64 noundef %183)
          to label %185 unwind label %202

185:                                              ; preds = %182
  %186 = trunc i64 %181 to i32
  %187 = getelementptr inbounds i8, ptr %.0182261, i64 14
  store i32 %184, ptr %187, align 1, !tbaa !34
  %188 = getelementptr inbounds i8, ptr %107, i64 16
  store i32 %184, ptr %188, align 1, !tbaa !35
  store i32 %186, ptr %148, align 1, !tbaa !32
  %189 = getelementptr inbounds i8, ptr %107, i64 20
  store i32 %186, ptr %189, align 1, !tbaa !36
  %190 = getelementptr inbounds i8, ptr %.0182261, i64 22
  store i32 %186, ptr %190, align 1, !tbaa !30
  %191 = getelementptr inbounds i8, ptr %107, i64 24
  store i32 %186, ptr %191, align 1, !tbaa !29
  %192 = load i8, ptr @_ZN3Zip14force_deflate_E, align 1, !tbaa !37, !range !39, !noundef !40
  %193 = trunc nuw i8 %192 to i1
  br i1 %193, label %194, label %211

194:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #9
  store i8 0, ptr %11, align 1, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #9
  store ptr null, ptr %12, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  store i64 0, ptr %13, align 8, !tbaa !14
  invoke void @ZopfliDeflate(ptr noundef nonnull %105, i32 noundef 2, i32 noundef 1, ptr noundef nonnull %162, i64 noundef %183, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13)
          to label %195 unwind label %204

195:                                              ; preds = %194
  %196 = load i64, ptr %13, align 8, !tbaa !14
  %197 = icmp ult i64 %196, %183
  br i1 %197, label %198, label %206

198:                                              ; preds = %195
  store i16 8, ptr %174, align 1, !tbaa !33
  %199 = getelementptr inbounds i8, ptr %107, i64 10
  store i16 8, ptr %199, align 1, !tbaa !42
  %200 = trunc i64 %196 to i32
  store i32 %200, ptr %148, align 1, !tbaa !32
  store i32 %200, ptr %189, align 1, !tbaa !36
  %201 = load ptr, ptr %12, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %162, ptr align 1 %201, i64 %196, i1 false)
  br label %206

202:                                              ; preds = %182, %177
  %203 = landingpad { ptr, i32 }
          cleanup
  br label %307

204:                                              ; preds = %194
  %205 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  br label %307

206:                                              ; preds = %198, %195
  %207 = load ptr, ptr %12, align 8, !tbaa !15
  %208 = icmp eq ptr %207, null
  br i1 %208, label %210, label %209

209:                                              ; preds = %206
  call void @_ZdaPv(ptr noundef nonnull %207) #10
  br label %210

210:                                              ; preds = %209, %206
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #9
  %.pre284 = load i32, ptr %148, align 1, !tbaa !32
  br label %211

211:                                              ; preds = %210, %185
  %212 = phi i32 [ %.pre284, %210 ], [ %186, %185 ]
  %213 = zext i32 %212 to i64
  %214 = getelementptr inbounds i8, ptr %162, i64 %213
  br label %.thread

215:                                              ; preds = %173
  %216 = load i8, ptr @is_fast, align 1, !tbaa !37, !range !39, !noundef !40
  %217 = trunc nuw i8 %216 to i1
  br i1 %217, label %221, label %218

218:                                              ; preds = %215
  %219 = load i16, ptr %128, align 1, !tbaa !27
  %220 = and i16 %219, 1
  %.not205 = icmp eq i16 %220, 0
  br i1 %.not205, label %225, label %221

221:                                              ; preds = %173, %218, %215
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %162, ptr nonnull align 1 %161, i64 %163, i1 false)
  %222 = load i32, ptr %148, align 1, !tbaa !32
  %223 = zext i32 %222 to i64
  %224 = getelementptr inbounds i8, ptr %162, i64 %223
  br label %.thread

225:                                              ; preds = %218
  %226 = getelementptr inbounds i8, ptr %.0182261, i64 22
  %227 = load i32, ptr %226, align 1, !tbaa !30
  %228 = icmp eq i32 %227, 0
  br i1 %228, label %229, label %232

229:                                              ; preds = %225
  store i16 0, ptr %174, align 1, !tbaa !33
  %230 = getelementptr inbounds i8, ptr %107, i64 10
  store i16 0, ptr %230, align 1, !tbaa !42
  store i32 0, ptr %148, align 1, !tbaa !32
  %231 = getelementptr inbounds i8, ptr %107, i64 20
  store i32 0, ptr %231, align 1, !tbaa !36
  br label %.thread

232:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  store i64 0, ptr %14, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  store ptr null, ptr %15, align 8, !tbaa !15
  %233 = invoke noundef i32 @_Z15lodepng_inflatePPhPmPKhmPK25LodePNGDecompressSettings(ptr noundef nonnull %15, ptr noundef nonnull %14, ptr noundef nonnull %161, i64 noundef %163, ptr noundef nonnull @lodepng_default_decompress_settings)
          to label %234 unwind label %256

234:                                              ; preds = %232
  %235 = icmp eq i32 %233, 0
  %236 = load ptr, ptr %15, align 8
  %237 = icmp ne ptr %236, null
  %or.cond = select i1 %235, i1 %237, i1 false
  br i1 %or.cond, label %238, label %247

238:                                              ; preds = %234
  %239 = load i64, ptr %14, align 8, !tbaa !14
  %240 = load i32, ptr %226, align 1, !tbaa !30
  %241 = zext i32 %240 to i64
  %.not206 = icmp eq i64 %239, %241
  br i1 %.not206, label %242, label %247

242:                                              ; preds = %238
  %243 = getelementptr inbounds i8, ptr %.0182261, i64 14
  %244 = load i32, ptr %243, align 1, !tbaa !34
  %245 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef nonnull %236, i64 noundef %239)
          to label %246 unwind label %256

246:                                              ; preds = %242
  %.not207 = icmp eq i32 %244, %245
  br i1 %.not207, label %258, label %247

247:                                              ; preds = %246, %238, %234
  %248 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.5)
          to label %249 unwind label %256

249:                                              ; preds = %247
  %250 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %248, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %251 unwind label %256

251:                                              ; preds = %249
  %252 = load ptr, ptr %15, align 8, !tbaa !15
  call void @free(ptr noundef %252) #9
  %253 = load i32, ptr %148, align 1, !tbaa !32
  %254 = zext i32 %253 to i64
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %162, ptr nonnull align 1 %161, i64 %254, i1 false)
  %255 = load i32, ptr %148, align 1, !tbaa !32
  br label %302

256:                                              ; preds = %249, %247, %242, %232
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %306

258:                                              ; preds = %246
  %259 = load ptr, ptr %15, align 8, !tbaa !15
  %260 = load i64, ptr %14, align 8, !tbaa !14
  %261 = invoke noundef i64 @_Z11LeanifyFilePvmmRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef %259, i64 noundef %260, i64 noundef 0, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %262 unwind label %277

262:                                              ; preds = %258
  %263 = trunc i64 %261 to i32
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #9
  store i8 0, ptr %16, align 1, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #9
  store ptr null, ptr %17, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #9
  store i64 0, ptr %18, align 8, !tbaa !14
  %264 = load ptr, ptr %15, align 8, !tbaa !15
  %265 = and i64 %261, 4294967295
  invoke void @ZopfliDeflate(ptr noundef nonnull %105, i32 noundef 2, i32 noundef 1, ptr noundef %264, i64 noundef %265, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %18)
          to label %266 unwind label %279

266:                                              ; preds = %262
  %267 = load i64, ptr %18, align 8, !tbaa !14
  %.not208 = icmp ugt i64 %265, %267
  %.pre283 = load i32, ptr %148, align 1, !tbaa !32
  %.not209 = icmp ult i32 %.pre283, %263
  %or.cond305 = select i1 %.not208, i1 true, i1 %.not209
  br i1 %or.cond305, label %281, label %268

268:                                              ; preds = %266
  store i16 0, ptr %174, align 1, !tbaa !33
  %269 = getelementptr inbounds i8, ptr %107, i64 10
  store i16 0, ptr %269, align 1, !tbaa !42
  %270 = load ptr, ptr %15, align 8, !tbaa !15
  %271 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef %270, i64 noundef %265)
          to label %272 unwind label %279

272:                                              ; preds = %268
  store i32 %271, ptr %243, align 1, !tbaa !34
  %273 = getelementptr inbounds i8, ptr %107, i64 16
  store i32 %271, ptr %273, align 1, !tbaa !35
  store i32 %263, ptr %148, align 1, !tbaa !32
  %274 = getelementptr inbounds i8, ptr %107, i64 20
  store i32 %263, ptr %274, align 1, !tbaa !36
  store i32 %263, ptr %226, align 1, !tbaa !30
  %275 = getelementptr inbounds i8, ptr %107, i64 24
  store i32 %263, ptr %275, align 1, !tbaa !29
  %276 = load ptr, ptr %15, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %162, ptr align 1 %276, i64 %265, i1 false)
  br label %295

277:                                              ; preds = %258
  %278 = landingpad { ptr, i32 }
          cleanup
  br label %306

279:                                              ; preds = %284, %268, %262
  %280 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #9
  br label %306

281:                                              ; preds = %266
  %282 = zext i32 %.pre283 to i64
  %283 = icmp ult i64 %267, %282
  br i1 %283, label %284, label %294

284:                                              ; preds = %281
  %285 = load ptr, ptr %15, align 8, !tbaa !15
  %286 = invoke noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef %285, i64 noundef %265)
          to label %287 unwind label %279

287:                                              ; preds = %284
  store i32 %286, ptr %243, align 1, !tbaa !34
  %288 = getelementptr inbounds i8, ptr %107, i64 16
  store i32 %286, ptr %288, align 1, !tbaa !35
  %289 = load i64, ptr %18, align 8, !tbaa !14
  %290 = trunc i64 %289 to i32
  store i32 %290, ptr %148, align 1, !tbaa !32
  %291 = getelementptr inbounds i8, ptr %107, i64 20
  store i32 %290, ptr %291, align 1, !tbaa !36
  store i32 %263, ptr %226, align 1, !tbaa !30
  %292 = getelementptr inbounds i8, ptr %107, i64 24
  store i32 %263, ptr %292, align 1, !tbaa !29
  %293 = load ptr, ptr %17, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %162, ptr align 1 %293, i64 %289, i1 false)
  br label %295

294:                                              ; preds = %281
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %162, ptr nonnull align 1 %161, i64 %282, i1 false)
  br label %295

295:                                              ; preds = %287, %294, %272
  %296 = load i32, ptr %148, align 1, !tbaa !32
  %297 = load ptr, ptr %15, align 8, !tbaa !15
  call void @free(ptr noundef %297) #9
  %298 = load ptr, ptr %17, align 8, !tbaa !15
  %299 = icmp eq ptr %298, null
  br i1 %299, label %301, label %300

300:                                              ; preds = %295
  call void @_ZdaPv(ptr noundef nonnull %298) #10
  br label %301

301:                                              ; preds = %300, %295
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #9
  br label %302

.thread:                                          ; preds = %221, %229, %211, %176
  %.3185.ph = phi ptr [ %162, %176 ], [ %214, %211 ], [ %162, %229 ], [ %224, %221 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  br label %303

302:                                              ; preds = %251, %301
  %.pn213.in = phi i32 [ %255, %251 ], [ %296, %301 ]
  %.pn213 = zext i32 %.pn213.in to i64
  %.2184 = getelementptr inbounds i8, ptr %162, i64 %.pn213
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  br label %303

303:                                              ; preds = %302, %.thread
  %.3185224 = phi ptr [ %.3185.ph, %.thread ], [ %.2184, %302 ]
  %304 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  %305 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  br i1 %305, label %106, label %.loopexit

306:                                              ; preds = %277, %279, %256
  %.pn211 = phi { ptr, i32 } [ %257, %256 ], [ %280, %279 ], [ %278, %277 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  br label %307

307:                                              ; preds = %.loopexit230, %.loopexit.split-lp, %202, %204, %306
  %.pn217 = phi { ptr, i32 } [ %.pn211, %306 ], [ %205, %204 ], [ %203, %202 ], [ %lpad.loopexit, %.loopexit230 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  br label %308

308:                                              ; preds = %307, %157
  %.pn217.pn = phi { ptr, i32 } [ %.pn217, %307 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  br label %347

.loopexit:                                        ; preds = %303, %94, %.thread225
  %.4186 = phi ptr [ %162, %.thread225 ], [ %100, %94 ], [ %.3185224, %303 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  %309 = ptrtoint ptr %.4186 to i64
  %310 = sub i64 %309, %104
  %311 = trunc i64 %310 to i32
  store i32 %311, ptr %47, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #9
  %312 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %312, ptr %19, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #9
  %313 = call ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  store ptr %313, ptr %20, align 8
  %invariant.gep = getelementptr inbounds i8, ptr %99, i64 30
  %314 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  br i1 %314, label %.lr.ph263, label %._crit_edge

._crit_edge.loopexit:                             ; preds = %.lr.ph263
  %.pre285 = ptrtoint ptr %343 to i64
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.loopexit
  %.pre-phi = phi i64 [ %.pre285, %._crit_edge.loopexit ], [ %309, %.loopexit ]
  %.5187.lcssa = phi ptr [ %343, %._crit_edge.loopexit ], [ %.4186, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #9
  %315 = call noundef i64 @_ZNKSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  %316 = trunc i64 %315 to i16
  %317 = getelementptr inbounds i8, ptr %4, i64 10
  store i16 %316, ptr %317, align 1, !tbaa !43
  %318 = getelementptr inbounds i8, ptr %4, i64 8
  store i16 %316, ptr %318, align 1, !tbaa !44
  %319 = load i32, ptr %47, align 1, !tbaa !18
  %320 = zext i32 %319 to i64
  %321 = add i64 %104, %320
  %322 = sub i64 %.pre-phi, %321
  %323 = trunc i64 %322 to i32
  store i32 %323, ptr %48, align 1, !tbaa !21
  %324 = getelementptr inbounds i8, ptr %4, i64 20
  store i16 0, ptr %324, align 1, !tbaa !45
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(22) %.5187.lcssa, ptr noundef nonnull align 1 dereferenceable(22) %4, i64 22, i1 false)
  %325 = load ptr, ptr %23, align 8, !tbaa !9
  %326 = getelementptr inbounds i8, ptr %325, i64 %96
  store ptr %326, ptr %23, align 8, !tbaa !9
  %327 = getelementptr inbounds i8, ptr %.5187.lcssa, i64 22
  %328 = ptrtoint ptr %327 to i64
  %329 = ptrtoint ptr %326 to i64
  %330 = sub i64 %328, %329
  store i64 %330, ptr %25, align 8, !tbaa !13
  br label %346

.lr.ph263:                                        ; preds = %.loopexit, %.lr.ph263
  %.5187262 = phi ptr [ %343, %.lr.ph263 ], [ %.4186, %.loopexit ]
  %331 = call noundef nonnull align 1 dereferenceable(46) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  %332 = getelementptr inbounds i8, ptr %331, i64 32
  store i16 0, ptr %332, align 1, !tbaa !46
  %333 = getelementptr inbounds i8, ptr %331, i64 30
  store i16 0, ptr %333, align 1, !tbaa !47
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(46) %.5187262, ptr noundef nonnull align 1 dereferenceable(46) %331, i64 46, i1 false)
  %334 = getelementptr inbounds i8, ptr %.5187262, i64 46
  %335 = getelementptr inbounds i8, ptr %331, i64 42
  %336 = load i32, ptr %335, align 1, !tbaa !22
  %337 = zext i32 %336 to i64
  %gep = getelementptr inbounds i8, ptr %invariant.gep, i64 %337
  %338 = getelementptr inbounds i8, ptr %331, i64 28
  %339 = load i16, ptr %338, align 1, !tbaa !24
  %340 = zext i16 %339 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %334, ptr nonnull align 1 %gep, i64 %340, i1 false)
  %341 = load i16, ptr %338, align 1, !tbaa !24
  %342 = zext i16 %341 to i64
  %343 = getelementptr inbounds i8, ptr %334, i64 %342
  %344 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #9
  %345 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  br i1 %345, label %.lr.ph263, label %._crit_edge.loopexit

346:                                              ; preds = %._crit_edge, %74
  %.0 = phi i64 [ %75, %74 ], [ %330, %._crit_edge ]
  call void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 22, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  br label %348

347:                                              ; preds = %.loopexit231, %.loopexit.split-lp232, %308, %91
  %.pn220 = phi { ptr, i32 } [ %.pn217.pn, %308 ], [ %92, %91 ], [ %lpad.loopexit233, %.loopexit231 ], [ %lpad.loopexit.split-lp234, %.loopexit.split-lp232 ]
  call void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 22, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  resume { ptr, i32 } %.pn220

348:                                              ; preds = %346, %36
  %.1 = phi i64 [ %39, %36 ], [ %.0, %346 ]
  ret i64 %.1
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt6searchIPhPKhET_S3_S3_T0_S4_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIKhLm4EEPT_RAT0__S1_(ptr noundef nonnull align 1 dereferenceable(4)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN6Format7LeanifyEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZN12_GLOBAL__N_14EOCDC2Ev(ptr noundef nonnull align 1 dereferenceable(22)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIPhERKT_S3_S3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3hexRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3decRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt8find_endIPhS0_ET_S1_S1_T0_S2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIhLm4EEPT_RAT0__S0_(ptr noundef nonnull align 1 dereferenceable(4)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_112GetCDHeadersEPKhmRKNS_4EOCDEmPSt6vectorINS_8CDHeaderESaIS6_EEPm(ptr noundef, i64 noundef, ptr noundef nonnull align 1 dereferenceable(22), i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden ptr @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN9__gnu_cxxneIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 1 dereferenceable(46) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

declare void @_Z13PrintFileNameRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #0 align 2

declare noundef i64 @_Z11LeanifyFilePvmmRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef, i64 noundef, i64 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6

declare noundef i32 @_Z13lodepng_crc32PKhm(ptr noundef, i64 noundef) local_unnamed_addr #6

declare void @ZopfliDeflate(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #7

declare noundef i32 @_Z15lodepng_inflatePPhPmPKhmPK25LodePNGDecompressSettings(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #6

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_18CDHeaderESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i64 @_ZNKSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt6vectorIN12_GLOBAL__N_18CDHeaderESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress 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 #3 = { inlinehint mustprogress 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 #4 = { mustprogress 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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nobuiltin 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 #8 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 8}
!10 = !{!"_ZTS6Format", !11, i64 8, !12, i64 16}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!10, !12, i64 16}
!14 = !{!12, !12, i64 0}
!15 = !{!11, !11, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !6, i64 16}
!19 = !{!"_ZTSN12_GLOBAL__N_14EOCDE", !7, i64 0, !20, i64 4, !20, i64 6, !20, i64 8, !20, i64 10, !6, i64 12, !6, i64 16, !20, i64 20}
!20 = !{!"short", !7, i64 0}
!21 = !{!19, !6, i64 12}
!22 = !{!23, !6, i64 42}
!23 = !{!"_ZTSN12_GLOBAL__N_18CDHeaderE", !7, i64 0, !20, i64 4, !20, i64 6, !20, i64 8, !20, i64 10, !20, i64 12, !20, i64 14, !6, i64 16, !6, i64 20, !6, i64 24, !20, i64 28, !20, i64 30, !20, i64 32, !20, i64 34, !20, i64 36, !6, i64 38, !6, i64 42}
!24 = !{!23, !20, i64 28}
!25 = !{!26, !20, i64 28}
!26 = !{!"_ZTSN12_GLOBAL__N_111LocalHeaderE", !7, i64 0, !20, i64 4, !20, i64 6, !20, i64 8, !20, i64 10, !20, i64 12, !6, i64 14, !6, i64 18, !6, i64 22, !20, i64 26, !20, i64 28}
!27 = !{!26, !20, i64 6}
!28 = !{!23, !20, i64 8}
!29 = !{!23, !6, i64 24}
!30 = !{!26, !6, i64 22}
!31 = !{!26, !20, i64 26}
!32 = !{!26, !6, i64 18}
!33 = !{!26, !20, i64 8}
!34 = !{!26, !6, i64 14}
!35 = !{!23, !6, i64 16}
!36 = !{!23, !6, i64 20}
!37 = !{!38, !38, i64 0}
!38 = !{!"bool", !7, i64 0}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = !{!7, !7, i64 0}
!42 = !{!23, !20, i64 10}
!43 = !{!19, !20, i64 10}
!44 = !{!19, !20, i64 8}
!45 = !{!19, !20, i64 20}
!46 = !{!23, !20, i64 32}
!47 = !{!23, !20, i64 30}


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