; LLVM IR from Overload-Technologies/Overload :: Dependencies/assimp/code/PostProcessing (SplitByBoneCountProcess)

; 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::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.12" = type { i8 }
%"class.std::vector.20" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.24" = type { i8 }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.std::pair.30" = type <{ %"struct.std::_Rb_tree_const_iterator", i8, [7 x i8] }>
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.35 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.35 = type { i64, [8 x i8] }
%"class.Assimp::Formatter::basic_formatter" = type { %"class.std::__cxx11::basic_ostringstream" }
%"class.std::__cxx11::basic_ostringstream" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"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::allocator.7" = type { i8 }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%"class.Assimp::SplitByBoneCountProcess" = type { %"class.Assimp::BaseProcess", i64, %"class.std::vector" }
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::vector<unsigned int>, std::allocator<std::vector<unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<unsigned int>, std::allocator<std::vector<unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<unsigned int>, std::allocator<std::vector<unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<unsigned int>, std::allocator<std::vector<unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.aiBone = type { %struct.aiString, i32, ptr, ptr, ptr, %class.aiMatrix4x4t }
%class.aiMatrix4x4t = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }
%struct.aiVertexWeight = type { i32, float }
%struct.aiFace = type { i32, ptr }
%"struct.std::pair" = type { i32, float }
%class.aiColor4t = type { float, float, float, float }
%struct.aiAnimMesh = type { %struct.aiString, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], i32, float }

@.str.7 = external hidden unnamed_addr constant [88 x i8], align 1
@_ZTI17DeadlyImportError = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [132 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [57 x i8], align 1

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Assimp23SplitByBoneCountProcess9SplitMeshEPK6aiMeshRSt6vectorIPS1_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2) #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::vector.10", align 8
  %8 = alloca %"class.std::allocator.12", align 1
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %"class.std::vector.20", align 8
  %18 = alloca i8, align 1
  %19 = alloca %"class.std::allocator.24", align 1
  %20 = alloca i32, align 4
  %21 = alloca %"class.std::vector.20", align 8
  %22 = alloca i8, align 1
  %23 = alloca %"class.std::allocator.24", align 1
  %24 = alloca %"class.std::vector.5", align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %"struct.std::_Bit_reference", align 8
  %28 = alloca %"class.std::set", align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %"struct.std::_Bit_reference", align 8
  %35 = alloca %"struct.std::pair.30", align 8
  %36 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %37 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %38 = alloca %"struct.std::_Bit_reference", align 8
  %39 = alloca %"struct.std::_Bit_reference", align 8
  %40 = alloca %"struct.std::_Bit_reference", align 8
  %41 = alloca ptr, align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.Assimp::Formatter::basic_formatter", align 8
  %44 = alloca i64, align 8
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca %"class.std::vector.5", align 8
  %49 = alloca i32, align 4
  %50 = alloca %"class.std::allocator.7", align 1
  %51 = alloca i32, align 4
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca %"class.std::vector.5", align 8
  %59 = alloca i32, align 4
  %60 = alloca %"class.std::allocator.7", align 1
  %61 = alloca i32, align 4
  %62 = alloca %"struct.std::_Bit_reference", align 8
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca ptr, align 8
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca ptr, align 8
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca ptr, align 8
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca ptr, align 8
  %78 = alloca i32, align 4
  %79 = alloca ptr, align 8
  %80 = alloca ptr, align 8
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %83 = load ptr, ptr %4, align 8
  %84 = load ptr, ptr %5, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.aiMesh, ptr %84, i32 0, i32 11
  %86 = load i32, ptr %85, align 8, !tbaa !9
  %87 = zext i32 %86 to i64
  %88 = getelementptr inbounds %"class.Assimp::SplitByBoneCountProcess", ptr %83, i32 0, i32 1
  %89 = load i64, ptr %88, align 8, !tbaa !17
  %90 = icmp ule i64 %87, %89
  br i1 %90, label %91, label %92

91:                                               ; preds = %3
  br label %1450

92:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #9
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.aiMesh, ptr %93, i32 0, i32 1
  %95 = load i32, ptr %94, align 4, !tbaa !25
  %96 = zext i32 %95 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #9
  call void @_ZNSaISt6vectorISt4pairIjfESaIS1_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #9
  invoke void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %96, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %97 unwind label %105

97:                                               ; preds = %92
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIjfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  store i32 0, ptr %11, align 4, !tbaa !26
  br label %98

98:                                               ; preds = %180, %97
  %99 = load i32, ptr %11, align 4, !tbaa !26
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.aiMesh, ptr %100, i32 0, i32 11
  %102 = load i32, ptr %101, align 8, !tbaa !9
  %103 = icmp ult i32 %99, %102
  br i1 %103, label %109, label %104

104:                                              ; preds = %98
  store i32 2, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %183

105:                                              ; preds = %92
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %9, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %10, align 4
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIjfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  br label %1453

109:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.aiMesh, ptr %110, i32 0, i32 12
  %112 = load ptr, ptr %111, align 8, !tbaa !27
  %113 = load i32, ptr %11, align 4, !tbaa !26
  %114 = zext i32 %113 to i64
  %115 = getelementptr inbounds ptr, ptr %112, i64 %114
  %116 = load ptr, ptr %115, align 8, !tbaa !5
  store ptr %116, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  store i32 0, ptr %14, align 4, !tbaa !26
  br label %117

117:                                              ; preds = %176, %109
  %118 = load i32, ptr %14, align 4, !tbaa !26
  %119 = load ptr, ptr %13, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.aiBone, ptr %119, i32 0, i32 1
  %121 = load i32, ptr %120, align 4, !tbaa !28
  %122 = icmp ult i32 %118, %121
  br i1 %122, label %124, label %123

123:                                              ; preds = %117
  store i32 5, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %179

124:                                              ; preds = %117
  %125 = load ptr, ptr %13, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.aiBone, ptr %125, i32 0, i32 4
  %127 = load ptr, ptr %126, align 8, !tbaa !31
  %128 = load i32, ptr %14, align 4, !tbaa !26
  %129 = zext i32 %128 to i64
  %130 = getelementptr inbounds %struct.aiVertexWeight, ptr %127, i64 %129
  %131 = getelementptr inbounds %struct.aiVertexWeight, ptr %130, i32 0, i32 1
  %132 = load float, ptr %131, align 4, !tbaa !32
  %133 = fcmp ogt float %132, 0.000000e+00
  br i1 %133, label %134, label %175

134:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %135 = load ptr, ptr %13, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.aiBone, ptr %135, i32 0, i32 4
  %137 = load ptr, ptr %136, align 8, !tbaa !31
  %138 = load i32, ptr %14, align 4, !tbaa !26
  %139 = zext i32 %138 to i64
  %140 = getelementptr inbounds %struct.aiVertexWeight, ptr %137, i64 %139
  %141 = getelementptr inbounds %struct.aiVertexWeight, ptr %140, i32 0, i32 0
  %142 = load i32, ptr %141, align 4, !tbaa !34
  store i32 %142, ptr %15, align 4, !tbaa !26
  %143 = load i32, ptr %15, align 4, !tbaa !26
  %144 = sext i32 %143 to i64
  %145 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %144) #9
  %146 = load ptr, ptr %13, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.aiBone, ptr %146, i32 0, i32 4
  %148 = load ptr, ptr %147, align 8, !tbaa !31
  %149 = load i32, ptr %14, align 4, !tbaa !26
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds %struct.aiVertexWeight, ptr %148, i64 %150
  %152 = getelementptr inbounds %struct.aiVertexWeight, ptr %151, i32 0, i32 1
  %153 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE12emplace_backIJRjRfEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %145, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %152)
          to label %154 unwind label %165

154:                                              ; preds = %134
  %155 = load i32, ptr %15, align 4, !tbaa !26
  %156 = sext i32 %155 to i64
  %157 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %156) #9
  %158 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %157) #9
  %159 = getelementptr inbounds %"class.Assimp::SplitByBoneCountProcess", ptr %83, i32 0, i32 1
  %160 = load i64, ptr %159, align 8, !tbaa !17
  %161 = icmp ugt i64 %158, %160
  br i1 %161, label %162, label %173

162:                                              ; preds = %154
  %163 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %163, ptr noundef @.str.7)
          to label %164 unwind label %169

164:                                              ; preds = %162
  invoke void @__cxa_throw(ptr %163, ptr @_ZTI17DeadlyImportError, ptr @_ZNSt13runtime_errorD2Ev) #10
          to label %1459 unwind label %165

165:                                              ; preds = %164, %134
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %9, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %10, align 4
  br label %174

169:                                              ; preds = %162
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %9, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %10, align 4
  call void @__cxa_free_exception(ptr %163) #9
  br label %174

173:                                              ; preds = %154
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  br label %175

174:                                              ; preds = %169, %165
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %1452

175:                                              ; preds = %173, %124
  br label %176

176:                                              ; preds = %175
  %177 = load i32, ptr %14, align 4, !tbaa !26
  %178 = add i32 %177, 1
  store i32 %178, ptr %14, align 4, !tbaa !26
  br label %117, !llvm.loop !35

179:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  br label %180

180:                                              ; preds = %179
  %181 = load i32, ptr %11, align 4, !tbaa !26
  %182 = add i32 %181, 1
  store i32 %182, ptr %11, align 4, !tbaa !26
  br label %98, !llvm.loop !37

183:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 0, ptr %16, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 40, ptr %17) #9
  %184 = load ptr, ptr %5, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.aiMesh, ptr %184, i32 0, i32 2
  %186 = load i32, ptr %185, align 8, !tbaa !38
  %187 = zext i32 %186 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #9
  store i8 0, ptr %18, align 1, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #9
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %17, i64 noundef %187, ptr noundef nonnull align 1 dereferenceable(1) %18, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %188 unwind label %213

188:                                              ; preds = %183
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  br label %189

189:                                              ; preds = %1440, %188
  %190 = load i32, ptr %16, align 4, !tbaa !26
  %191 = load ptr, ptr %5, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.aiMesh, ptr %191, i32 0, i32 2
  %193 = load i32, ptr %192, align 8, !tbaa !38
  %194 = icmp ult i32 %190, %193
  br i1 %194, label %195, label %1449

195:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store i32 0, ptr %20, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 40, ptr %21) #9
  %196 = load ptr, ptr %5, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.aiMesh, ptr %196, i32 0, i32 11
  %198 = load i32, ptr %197, align 8, !tbaa !9
  %199 = zext i32 %198 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #9
  store i8 0, ptr %22, align 1, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #9
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #9
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %21, i64 noundef %199, ptr noundef nonnull align 1 dereferenceable(1) %22, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %200 unwind label %217

200:                                              ; preds = %195
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #9
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  %201 = load ptr, ptr %5, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.aiMesh, ptr %201, i32 0, i32 2
  %203 = load i32, ptr %202, align 8, !tbaa !38
  %204 = zext i32 %203 to i64
  invoke void @_ZNSt6vectorIjSaIjEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %204)
          to label %205 unwind label %221

205:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  store i32 0, ptr %26, align 4, !tbaa !26
  br label %206

206:                                              ; preds = %387, %205
  %207 = load i32, ptr %26, align 4, !tbaa !26
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.aiMesh, ptr %208, i32 0, i32 2
  %210 = load i32, ptr %209, align 8, !tbaa !38
  %211 = icmp ult i32 %207, %210
  br i1 %211, label %225, label %212

212:                                              ; preds = %206
  store i32 10, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %400

213:                                              ; preds = %183
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %9, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  br label %1451

217:                                              ; preds = %195
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %9, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  br label %1448

221:                                              ; preds = %200
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %9, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %10, align 4
  br label %1447

225:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #9
  %226 = load i32, ptr %26, align 4, !tbaa !26
  %227 = zext i32 %226 to i64
  %228 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %17, i64 noundef %227)
          to label %229 unwind label %236

229:                                              ; preds = %225
  %230 = getelementptr inbounds { ptr, i64 }, ptr %27, i32 0, i32 0
  %231 = extractvalue { ptr, i64 } %228, 0
  store ptr %231, ptr %230, align 8
  %232 = getelementptr inbounds { ptr, i64 }, ptr %27, i32 0, i32 1
  %233 = extractvalue { ptr, i64 } %228, 1
  store i64 %233, ptr %232, align 8
  %234 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %27) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #9
  br i1 %234, label %235, label %240

235:                                              ; preds = %229
  br label %387

236:                                              ; preds = %225
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %9, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #9
  br label %399

240:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 48, ptr %28) #9
  call void @_ZNSt3setIjSt4lessIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %28) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %241 = load ptr, ptr %5, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.aiMesh, ptr %241, i32 0, i32 10
  %243 = load ptr, ptr %242, align 8, !tbaa !41
  %244 = load i32, ptr %26, align 4, !tbaa !26
  %245 = zext i32 %244 to i64
  %246 = getelementptr inbounds %struct.aiFace, ptr %243, i64 %245
  store ptr %246, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  store i32 0, ptr %30, align 4, !tbaa !26
  br label %247

247:                                              ; preds = %309, %240
  %248 = load i32, ptr %30, align 4, !tbaa !26
  %249 = load ptr, ptr %29, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.aiFace, ptr %249, i32 0, i32 0
  %251 = load i32, ptr %250, align 8, !tbaa !42
  %252 = icmp ult i32 %248, %251
  br i1 %252, label %254, label %253

253:                                              ; preds = %247
  store i32 13, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %312

254:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %255 = load ptr, ptr %29, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.aiFace, ptr %255, i32 0, i32 1
  %257 = load ptr, ptr %256, align 8, !tbaa !44
  %258 = load i32, ptr %30, align 4, !tbaa !26
  %259 = zext i32 %258 to i64
  %260 = getelementptr inbounds i32, ptr %257, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !26
  %262 = zext i32 %261 to i64
  %263 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %262) #9
  store ptr %263, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  store i32 0, ptr %32, align 4, !tbaa !26
  br label %264

264:                                              ; preds = %304, %254
  %265 = load i32, ptr %32, align 4, !tbaa !26
  %266 = zext i32 %265 to i64
  %267 = load ptr, ptr %31, align 8, !tbaa !5
  %268 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %267) #9
  %269 = icmp ult i64 %266, %268
  br i1 %269, label %271, label %270

270:                                              ; preds = %264
  store i32 16, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %308

271:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %272 = load ptr, ptr %31, align 8, !tbaa !5
  %273 = load i32, ptr %32, align 4, !tbaa !26
  %274 = zext i32 %273 to i64
  %275 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %272, i64 noundef %274) #9
  %276 = getelementptr inbounds %"struct.std::pair", ptr %275, i32 0, i32 0
  %277 = load i32, ptr %276, align 4, !tbaa !45
  store i32 %277, ptr %33, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #9
  %278 = load i32, ptr %33, align 4, !tbaa !26
  %279 = zext i32 %278 to i64
  %280 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %21, i64 noundef %279)
          to label %281 unwind label %295

281:                                              ; preds = %271
  %282 = getelementptr inbounds { ptr, i64 }, ptr %34, i32 0, i32 0
  %283 = extractvalue { ptr, i64 } %280, 0
  store ptr %283, ptr %282, align 8
  %284 = getelementptr inbounds { ptr, i64 }, ptr %34, i32 0, i32 1
  %285 = extractvalue { ptr, i64 } %280, 1
  store i64 %285, ptr %284, align 8
  %286 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %34) #9
  %287 = xor i1 %286, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  br i1 %287, label %288, label %303

288:                                              ; preds = %281
  %289 = invoke { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %28, ptr noundef nonnull align 4 dereferenceable(4) %33)
          to label %290 unwind label %299

290:                                              ; preds = %288
  %291 = getelementptr inbounds { ptr, i8 }, ptr %35, i32 0, i32 0
  %292 = extractvalue { ptr, i8 } %289, 0
  store ptr %292, ptr %291, align 8
  %293 = getelementptr inbounds { ptr, i8 }, ptr %35, i32 0, i32 1
  %294 = extractvalue { ptr, i8 } %289, 1
  store i8 %294, ptr %293, align 8
  br label %303

295:                                              ; preds = %271
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %9, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  br label %307

299:                                              ; preds = %288
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %9, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %10, align 4
  br label %307

303:                                              ; preds = %290, %281
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %304

304:                                              ; preds = %303
  %305 = load i32, ptr %32, align 4, !tbaa !26
  %306 = add i32 %305, 1
  store i32 %306, ptr %32, align 4, !tbaa !26
  br label %264, !llvm.loop !47

307:                                              ; preds = %299, %295
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %398

308:                                              ; preds = %270
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %309

309:                                              ; preds = %308
  %310 = load i32, ptr %30, align 4, !tbaa !26
  %311 = add i32 %310, 1
  store i32 %311, ptr %30, align 4, !tbaa !26
  br label %247, !llvm.loop !48

312:                                              ; preds = %253
  %313 = load i32, ptr %20, align 4, !tbaa !26
  %314 = zext i32 %313 to i64
  %315 = call noundef i64 @_ZNKSt3setIjSt4lessIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %28) #9
  %316 = add i64 %314, %315
  %317 = getelementptr inbounds %"class.Assimp::SplitByBoneCountProcess", ptr %83, i32 0, i32 1
  %318 = load i64, ptr %317, align 8, !tbaa !17
  %319 = icmp ugt i64 %316, %318
  br i1 %319, label %320, label %321

320:                                              ; preds = %312
  store i32 12, ptr %12, align 4
  br label %384

321:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %322 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %28) #9
  %323 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %36, i32 0, i32 0
  store ptr %322, ptr %323, align 8
  br label %324

324:                                              ; preds = %363, %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %325 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %28) #9
  %326 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %37, i32 0, i32 0
  store ptr %325, ptr %326, align 8
  %327 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br i1 %327, label %329, label %328

328:                                              ; preds = %324
  store i32 19, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %366

329:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #9
  %330 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #9
  %331 = load i32, ptr %330, align 4, !tbaa !26
  %332 = zext i32 %331 to i64
  %333 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %21, i64 noundef %332)
          to label %334 unwind label %354

334:                                              ; preds = %329
  %335 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 0
  %336 = extractvalue { ptr, i64 } %333, 0
  store ptr %336, ptr %335, align 8
  %337 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 1
  %338 = extractvalue { ptr, i64 } %333, 1
  store i64 %338, ptr %337, align 8
  %339 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %38) #9
  %340 = xor i1 %339, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #9
  br i1 %340, label %341, label %362

341:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #9
  %342 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #9
  %343 = load i32, ptr %342, align 4, !tbaa !26
  %344 = zext i32 %343 to i64
  %345 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %21, i64 noundef %344)
          to label %346 unwind label %358

346:                                              ; preds = %341
  %347 = getelementptr inbounds { ptr, i64 }, ptr %39, i32 0, i32 0
  %348 = extractvalue { ptr, i64 } %345, 0
  store ptr %348, ptr %347, align 8
  %349 = getelementptr inbounds { ptr, i64 }, ptr %39, i32 0, i32 1
  %350 = extractvalue { ptr, i64 } %345, 1
  store i64 %350, ptr %349, align 8
  %351 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %39, i1 noundef zeroext true) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #9
  %352 = load i32, ptr %20, align 4, !tbaa !26
  %353 = add i32 %352, 1
  store i32 %353, ptr %20, align 4, !tbaa !26
  br label %362

354:                                              ; preds = %329
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %9, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #9
  br label %365

358:                                              ; preds = %341
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %9, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #9
  br label %365

362:                                              ; preds = %346, %334
  br label %363

363:                                              ; preds = %362
  %364 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIjEppEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #9
  br label %324, !llvm.loop !49

365:                                              ; preds = %358, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %398

366:                                              ; preds = %328
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %367 unwind label %390

367:                                              ; preds = %366
  %368 = load ptr, ptr %29, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.aiFace, ptr %368, i32 0, i32 0
  %370 = load i32, ptr %369, align 8, !tbaa !42
  %371 = load i32, ptr %25, align 4, !tbaa !26
  %372 = add i32 %371, %370
  store i32 %372, ptr %25, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #9
  %373 = load i32, ptr %26, align 4, !tbaa !26
  %374 = zext i32 %373 to i64
  %375 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %17, i64 noundef %374)
          to label %376 unwind label %394

376:                                              ; preds = %367
  %377 = getelementptr inbounds { ptr, i64 }, ptr %40, i32 0, i32 0
  %378 = extractvalue { ptr, i64 } %375, 0
  store ptr %378, ptr %377, align 8
  %379 = getelementptr inbounds { ptr, i64 }, ptr %40, i32 0, i32 1
  %380 = extractvalue { ptr, i64 } %375, 1
  store i64 %380, ptr %379, align 8
  %381 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %40, i1 noundef zeroext true) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  %382 = load i32, ptr %16, align 4, !tbaa !26
  %383 = add i32 %382, 1
  store i32 %383, ptr %16, align 4, !tbaa !26
  store i32 0, ptr %12, align 4
  br label %384

384:                                              ; preds = %376, %320
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %28) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr %28) #9
  %385 = load i32, ptr %12, align 4
  switch i32 %385, label %1459 [
    i32 0, label %386
    i32 12, label %387
  ]

386:                                              ; preds = %384
  br label %387

387:                                              ; preds = %386, %384, %235
  %388 = load i32, ptr %26, align 4, !tbaa !26
  %389 = add i32 %388, 1
  store i32 %389, ptr %26, align 4, !tbaa !26
  br label %206, !llvm.loop !50

390:                                              ; preds = %366
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %9, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %10, align 4
  br label %398

394:                                              ; preds = %367
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %9, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  br label %398

398:                                              ; preds = %394, %390, %365, %307
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %28) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr %28) #9
  br label %399

399:                                              ; preds = %398, %236
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %1446

400:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %401 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1320) #11
          to label %402 unwind label %425

402:                                              ; preds = %400
  call void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %401) #9
  store ptr %401, ptr %41, align 8, !tbaa !5
  %403 = load ptr, ptr %5, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.aiMesh, ptr %403, i32 0, i32 14
  %405 = getelementptr inbounds %struct.aiString, ptr %404, i32 0, i32 0
  %406 = load i32, ptr %405, align 4, !tbaa !51
  %407 = icmp ugt i32 %406, 0
  br i1 %407, label %408, label %448

408:                                              ; preds = %402
  %409 = load ptr, ptr %41, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.aiMesh, ptr %409, i32 0, i32 14
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 376, ptr %43) #9
  invoke void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(376) %43)
          to label %411 unwind label %429

411:                                              ; preds = %408
  %412 = load ptr, ptr %5, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.aiMesh, ptr %412, i32 0, i32 14
  %414 = getelementptr inbounds %struct.aiString, ptr %413, i32 0, i32 1
  %415 = invoke noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA1024_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376) %43, ptr noundef nonnull align 1 dereferenceable(1024) %414)
          to label %416 unwind label %433

416:                                              ; preds = %411
  %417 = invoke noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA5_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376) %415, ptr noundef nonnull align 1 dereferenceable(5) @.str.8)
          to label %418 unwind label %433

418:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %419 = load ptr, ptr %6, align 8, !tbaa !5
  %420 = call noundef i64 @_ZNKSt6vectorIP6aiMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %419) #9
  store i64 %420, ptr %44, align 8, !tbaa !52
  %421 = invoke noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsImTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKS9_(ptr noundef nonnull align 8 dereferenceable(376) %417, ptr noundef nonnull align 8 dereferenceable(8) %44)
          to label %422 unwind label %437

422:                                              ; preds = %418
  invoke void @_ZNK6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEcvNSt7__cxx1112basic_stringIcS3_S4_EEEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(376) %421)
          to label %423 unwind label %437

423:                                              ; preds = %422
  invoke void @_ZN8aiString3SetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 4 dereferenceable(1028) %410, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %424 unwind label %441

424:                                              ; preds = %423
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(376) %43) #9
  call void @llvm.lifetime.end.p0(i64 376, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  br label %448

425:                                              ; preds = %653, %535, %517, %513, %492, %486, %461, %448, %400
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %9, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %10, align 4
  br label %1445

429:                                              ; preds = %408
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %9, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %10, align 4
  br label %447

433:                                              ; preds = %416, %411
  %434 = landingpad { ptr, i32 }
          cleanup
  %435 = extractvalue { ptr, i32 } %434, 0
  store ptr %435, ptr %9, align 8
  %436 = extractvalue { ptr, i32 } %434, 1
  store i32 %436, ptr %10, align 4
  br label %446

437:                                              ; preds = %422, %418
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %9, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, ptr %10, align 4
  br label %445

441:                                              ; preds = %423
  %442 = landingpad { ptr, i32 }
          cleanup
  %443 = extractvalue { ptr, i32 } %442, 0
  store ptr %443, ptr %9, align 8
  %444 = extractvalue { ptr, i32 } %442, 1
  store i32 %444, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  br label %445

445:                                              ; preds = %441, %437
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %446

446:                                              ; preds = %445, %433
  call void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(376) %43) #9
  br label %447

447:                                              ; preds = %446, %429
  call void @llvm.lifetime.end.p0(i64 376, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  br label %1445

448:                                              ; preds = %424, %402
  %449 = load ptr, ptr %5, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.aiMesh, ptr %449, i32 0, i32 13
  %451 = load i32, ptr %450, align 8, !tbaa !53
  %452 = load ptr, ptr %41, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.aiMesh, ptr %452, i32 0, i32 13
  store i32 %451, ptr %453, align 8, !tbaa !53
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.aiMesh, ptr %454, i32 0, i32 0
  %456 = load i32, ptr %455, align 8, !tbaa !54
  %457 = load ptr, ptr %41, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.aiMesh, ptr %457, i32 0, i32 0
  store i32 %456, ptr %458, align 8, !tbaa !54
  %459 = load ptr, ptr %6, align 8, !tbaa !5
  %460 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP6aiMeshSaIS1_EE12emplace_backIJRS1_EEES5_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %459, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %461 unwind label %425

461:                                              ; preds = %448
  %462 = load i32, ptr %25, align 4, !tbaa !26
  %463 = load ptr, ptr %41, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.aiMesh, ptr %463, i32 0, i32 1
  store i32 %462, ptr %464, align 4, !tbaa !25
  %465 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  %466 = trunc i64 %465 to i32
  %467 = load ptr, ptr %41, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.aiMesh, ptr %467, i32 0, i32 2
  store i32 %466, ptr %468, align 8, !tbaa !38
  %469 = load ptr, ptr %41, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.aiMesh, ptr %469, i32 0, i32 1
  %471 = load i32, ptr %470, align 4, !tbaa !25
  %472 = zext i32 %471 to i64
  %473 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %472, i64 12)
  %474 = extractvalue { i64, i1 } %473, 1
  %475 = extractvalue { i64, i1 } %473, 0
  %476 = select i1 %474, i64 -1, i64 %475
  %477 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %476) #11
          to label %478 unwind label %425

478:                                              ; preds = %461
  %479 = icmp eq i64 %472, 0
  br i1 %479, label %486, label %480

480:                                              ; preds = %478
  %481 = getelementptr inbounds %class.aiVector3t, ptr %477, i64 %472
  br label %482

482:                                              ; preds = %482, %480
  %483 = phi ptr [ %477, %480 ], [ %484, %482 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %483) #9
  %484 = getelementptr inbounds %class.aiVector3t, ptr %483, i64 1
  %485 = icmp eq ptr %484, %481
  br i1 %485, label %486, label %482

486:                                              ; preds = %482, %478
  %487 = load ptr, ptr %41, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.aiMesh, ptr %487, i32 0, i32 3
  store ptr %477, ptr %488, align 8, !tbaa !55
  %489 = load ptr, ptr %5, align 8, !tbaa !5
  %490 = invoke noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %489)
          to label %491 unwind label %425

491:                                              ; preds = %486
  br i1 %490, label %492, label %513

492:                                              ; preds = %491
  %493 = load ptr, ptr %41, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.aiMesh, ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 4, !tbaa !25
  %496 = zext i32 %495 to i64
  %497 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %496, i64 12)
  %498 = extractvalue { i64, i1 } %497, 1
  %499 = extractvalue { i64, i1 } %497, 0
  %500 = select i1 %498, i64 -1, i64 %499
  %501 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %500) #11
          to label %502 unwind label %425

502:                                              ; preds = %492
  %503 = icmp eq i64 %496, 0
  br i1 %503, label %510, label %504

504:                                              ; preds = %502
  %505 = getelementptr inbounds %class.aiVector3t, ptr %501, i64 %496
  br label %506

506:                                              ; preds = %506, %504
  %507 = phi ptr [ %501, %504 ], [ %508, %506 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %507) #9
  %508 = getelementptr inbounds %class.aiVector3t, ptr %507, i64 1
  %509 = icmp eq ptr %508, %505
  br i1 %509, label %510, label %506

510:                                              ; preds = %506, %502
  %511 = load ptr, ptr %41, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.aiMesh, ptr %511, i32 0, i32 4
  store ptr %501, ptr %512, align 8, !tbaa !56
  br label %513

513:                                              ; preds = %510, %491
  %514 = load ptr, ptr %5, align 8, !tbaa !5
  %515 = invoke noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %514)
          to label %516 unwind label %425

516:                                              ; preds = %513
  br i1 %515, label %517, label %558

517:                                              ; preds = %516
  %518 = load ptr, ptr %41, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.aiMesh, ptr %518, i32 0, i32 1
  %520 = load i32, ptr %519, align 4, !tbaa !25
  %521 = zext i32 %520 to i64
  %522 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %521, i64 12)
  %523 = extractvalue { i64, i1 } %522, 1
  %524 = extractvalue { i64, i1 } %522, 0
  %525 = select i1 %523, i64 -1, i64 %524
  %526 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %525) #11
          to label %527 unwind label %425

527:                                              ; preds = %517
  %528 = icmp eq i64 %521, 0
  br i1 %528, label %535, label %529

529:                                              ; preds = %527
  %530 = getelementptr inbounds %class.aiVector3t, ptr %526, i64 %521
  br label %531

531:                                              ; preds = %531, %529
  %532 = phi ptr [ %526, %529 ], [ %533, %531 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %532) #9
  %533 = getelementptr inbounds %class.aiVector3t, ptr %532, i64 1
  %534 = icmp eq ptr %533, %530
  br i1 %534, label %535, label %531

535:                                              ; preds = %531, %527
  %536 = load ptr, ptr %41, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.aiMesh, ptr %536, i32 0, i32 5
  store ptr %526, ptr %537, align 8, !tbaa !57
  %538 = load ptr, ptr %41, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.aiMesh, ptr %538, i32 0, i32 1
  %540 = load i32, ptr %539, align 4, !tbaa !25
  %541 = zext i32 %540 to i64
  %542 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %541, i64 12)
  %543 = extractvalue { i64, i1 } %542, 1
  %544 = extractvalue { i64, i1 } %542, 0
  %545 = select i1 %543, i64 -1, i64 %544
  %546 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %545) #11
          to label %547 unwind label %425

547:                                              ; preds = %535
  %548 = icmp eq i64 %541, 0
  br i1 %548, label %555, label %549

549:                                              ; preds = %547
  %550 = getelementptr inbounds %class.aiVector3t, ptr %546, i64 %541
  br label %551

551:                                              ; preds = %551, %549
  %552 = phi ptr [ %546, %549 ], [ %553, %551 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %552) #9
  %553 = getelementptr inbounds %class.aiVector3t, ptr %552, i64 1
  %554 = icmp eq ptr %553, %550
  br i1 %554, label %555, label %551

555:                                              ; preds = %551, %547
  %556 = load ptr, ptr %41, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.aiMesh, ptr %556, i32 0, i32 6
  store ptr %546, ptr %557, align 8, !tbaa !58
  br label %558

558:                                              ; preds = %555, %516
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store i32 0, ptr %45, align 4, !tbaa !26
  br label %559

559:                                              ; preds = %608, %558
  %560 = load i32, ptr %45, align 4, !tbaa !26
  %561 = icmp ult i32 %560, 8
  br i1 %561, label %563, label %562

562:                                              ; preds = %559
  store i32 22, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %611

563:                                              ; preds = %559
  %564 = load ptr, ptr %5, align 8, !tbaa !5
  %565 = load i32, ptr %45, align 4, !tbaa !26
  %566 = invoke noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %564, i32 noundef %565)
          to label %567 unwind label %592

567:                                              ; preds = %563
  br i1 %566, label %568, label %596

568:                                              ; preds = %567
  %569 = load ptr, ptr %41, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.aiMesh, ptr %569, i32 0, i32 1
  %571 = load i32, ptr %570, align 4, !tbaa !25
  %572 = zext i32 %571 to i64
  %573 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %572, i64 12)
  %574 = extractvalue { i64, i1 } %573, 1
  %575 = extractvalue { i64, i1 } %573, 0
  %576 = select i1 %574, i64 -1, i64 %575
  %577 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %576) #11
          to label %578 unwind label %592

578:                                              ; preds = %568
  %579 = icmp eq i64 %572, 0
  br i1 %579, label %586, label %580

580:                                              ; preds = %578
  %581 = getelementptr inbounds %class.aiVector3t, ptr %577, i64 %572
  br label %582

582:                                              ; preds = %582, %580
  %583 = phi ptr [ %577, %580 ], [ %584, %582 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %583) #9
  %584 = getelementptr inbounds %class.aiVector3t, ptr %583, i64 1
  %585 = icmp eq ptr %584, %581
  br i1 %585, label %586, label %582

586:                                              ; preds = %582, %578
  %587 = load ptr, ptr %41, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.aiMesh, ptr %587, i32 0, i32 8
  %589 = load i32, ptr %45, align 4, !tbaa !26
  %590 = zext i32 %589 to i64
  %591 = getelementptr inbounds [8 x ptr], ptr %588, i64 0, i64 %590
  store ptr %577, ptr %591, align 8, !tbaa !5
  br label %596

592:                                              ; preds = %568, %563
  %593 = landingpad { ptr, i32 }
          cleanup
  %594 = extractvalue { ptr, i32 } %593, 0
  store ptr %594, ptr %9, align 8
  %595 = extractvalue { ptr, i32 } %593, 1
  store i32 %595, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %1445

596:                                              ; preds = %586, %567
  %597 = load ptr, ptr %5, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.aiMesh, ptr %597, i32 0, i32 9
  %599 = load i32, ptr %45, align 4, !tbaa !26
  %600 = zext i32 %599 to i64
  %601 = getelementptr inbounds [8 x i32], ptr %598, i64 0, i64 %600
  %602 = load i32, ptr %601, align 4, !tbaa !26
  %603 = load ptr, ptr %41, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.aiMesh, ptr %603, i32 0, i32 9
  %605 = load i32, ptr %45, align 4, !tbaa !26
  %606 = zext i32 %605 to i64
  %607 = getelementptr inbounds [8 x i32], ptr %604, i64 0, i64 %606
  store i32 %602, ptr %607, align 4, !tbaa !26
  br label %608

608:                                              ; preds = %596
  %609 = load i32, ptr %45, align 4, !tbaa !26
  %610 = add i32 %609, 1
  store i32 %610, ptr %45, align 4, !tbaa !26
  br label %559, !llvm.loop !59

611:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  store i32 0, ptr %46, align 4, !tbaa !26
  br label %612

612:                                              ; preds = %650, %611
  %613 = load i32, ptr %46, align 4, !tbaa !26
  %614 = icmp ult i32 %613, 8
  br i1 %614, label %616, label %615

615:                                              ; preds = %612
  store i32 25, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %653

616:                                              ; preds = %612
  %617 = load ptr, ptr %5, align 8, !tbaa !5
  %618 = load i32, ptr %46, align 4, !tbaa !26
  %619 = invoke noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %617, i32 noundef %618)
          to label %620 unwind label %645

620:                                              ; preds = %616
  br i1 %619, label %621, label %649

621:                                              ; preds = %620
  %622 = load ptr, ptr %41, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.aiMesh, ptr %622, i32 0, i32 1
  %624 = load i32, ptr %623, align 4, !tbaa !25
  %625 = zext i32 %624 to i64
  %626 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %625, i64 16)
  %627 = extractvalue { i64, i1 } %626, 1
  %628 = extractvalue { i64, i1 } %626, 0
  %629 = select i1 %627, i64 -1, i64 %628
  %630 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %629) #11
          to label %631 unwind label %645

631:                                              ; preds = %621
  %632 = icmp eq i64 %625, 0
  br i1 %632, label %639, label %633

633:                                              ; preds = %631
  %634 = getelementptr inbounds %class.aiColor4t, ptr %630, i64 %625
  br label %635

635:                                              ; preds = %635, %633
  %636 = phi ptr [ %630, %633 ], [ %637, %635 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %636) #9
  %637 = getelementptr inbounds %class.aiColor4t, ptr %636, i64 1
  %638 = icmp eq ptr %637, %634
  br i1 %638, label %639, label %635

639:                                              ; preds = %635, %631
  %640 = load ptr, ptr %41, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.aiMesh, ptr %640, i32 0, i32 7
  %642 = load i32, ptr %46, align 4, !tbaa !26
  %643 = zext i32 %642 to i64
  %644 = getelementptr inbounds [8 x ptr], ptr %641, i64 0, i64 %643
  store ptr %630, ptr %644, align 8, !tbaa !5
  br label %649

645:                                              ; preds = %621, %616
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %9, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %1445

649:                                              ; preds = %639, %620
  br label %650

650:                                              ; preds = %649
  %651 = load i32, ptr %46, align 4, !tbaa !26
  %652 = add i32 %651, 1
  store i32 %652, ptr %46, align 4, !tbaa !26
  br label %612, !llvm.loop !60

653:                                              ; preds = %615
  %654 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  %655 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %654, i64 16)
  %656 = extractvalue { i64, i1 } %655, 1
  %657 = extractvalue { i64, i1 } %655, 0
  %658 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %657, i64 8)
  %659 = extractvalue { i64, i1 } %658, 1
  %660 = or i1 %656, %659
  %661 = extractvalue { i64, i1 } %658, 0
  %662 = select i1 %660, i64 -1, i64 %661
  %663 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %662) #11
          to label %664 unwind label %425

664:                                              ; preds = %653
  store i64 %654, ptr %663, align 16
  %665 = getelementptr inbounds i8, ptr %663, i64 8
  %666 = icmp eq i64 %654, 0
  br i1 %666, label %673, label %667

667:                                              ; preds = %664
  %668 = getelementptr inbounds %struct.aiFace, ptr %665, i64 %654
  br label %669

669:                                              ; preds = %669, %667
  %670 = phi ptr [ %665, %667 ], [ %671, %669 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %670) #9
  %671 = getelementptr inbounds %struct.aiFace, ptr %670, i64 1
  %672 = icmp eq ptr %671, %668
  br i1 %672, label %673, label %669

673:                                              ; preds = %669, %664
  %674 = load ptr, ptr %41, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.aiMesh, ptr %674, i32 0, i32 10
  store ptr %665, ptr %675, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  store i32 0, ptr %47, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 24, ptr %48) #9
  %676 = load i32, ptr %25, align 4, !tbaa !26
  %677 = zext i32 %676 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %678 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #9
  store i32 %678, ptr %49, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #9
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #9
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %677, ptr noundef nonnull align 4 dereferenceable(4) %49, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %679 unwind label %686

679:                                              ; preds = %673
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  store i32 0, ptr %51, align 4, !tbaa !26
  br label %680

680:                                              ; preds = %896, %679
  %681 = load i32, ptr %51, align 4, !tbaa !26
  %682 = zext i32 %681 to i64
  %683 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  %684 = icmp ult i64 %682, %683
  br i1 %684, label %690, label %685

685:                                              ; preds = %680
  store i32 28, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  br label %900

686:                                              ; preds = %673
  %687 = landingpad { ptr, i32 }
          cleanup
  %688 = extractvalue { ptr, i32 } %687, 0
  store ptr %688, ptr %9, align 8
  %689 = extractvalue { ptr, i32 } %687, 1
  store i32 %689, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %1444

690:                                              ; preds = %680
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %691 = load ptr, ptr %5, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.aiMesh, ptr %691, i32 0, i32 10
  %693 = load ptr, ptr %692, align 8, !tbaa !41
  %694 = load i32, ptr %51, align 4, !tbaa !26
  %695 = zext i32 %694 to i64
  %696 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %695) #9
  %697 = load i32, ptr %696, align 4, !tbaa !26
  %698 = zext i32 %697 to i64
  %699 = getelementptr inbounds %struct.aiFace, ptr %693, i64 %698
  store ptr %699, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %700 = load ptr, ptr %41, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.aiMesh, ptr %700, i32 0, i32 10
  %702 = load ptr, ptr %701, align 8, !tbaa !41
  %703 = load i32, ptr %51, align 4, !tbaa !26
  %704 = zext i32 %703 to i64
  %705 = getelementptr inbounds %struct.aiFace, ptr %702, i64 %704
  store ptr %705, ptr %53, align 8, !tbaa !5
  %706 = load ptr, ptr %52, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.aiFace, ptr %706, i32 0, i32 0
  %708 = load i32, ptr %707, align 8, !tbaa !42
  %709 = load ptr, ptr %53, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.aiFace, ptr %709, i32 0, i32 0
  store i32 %708, ptr %710, align 8, !tbaa !42
  %711 = load ptr, ptr %53, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.aiFace, ptr %711, i32 0, i32 0
  %713 = load i32, ptr %712, align 8, !tbaa !42
  %714 = zext i32 %713 to i64
  %715 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %714, i64 4)
  %716 = extractvalue { i64, i1 } %715, 1
  %717 = extractvalue { i64, i1 } %715, 0
  %718 = select i1 %716, i64 -1, i64 %717
  %719 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %718) #11
          to label %720 unwind label %730

720:                                              ; preds = %690
  %721 = load ptr, ptr %53, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.aiFace, ptr %721, i32 0, i32 1
  store ptr %719, ptr %722, align 8, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  store i32 0, ptr %54, align 4, !tbaa !26
  br label %723

723:                                              ; preds = %891, %720
  %724 = load i32, ptr %54, align 4, !tbaa !26
  %725 = load ptr, ptr %53, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.aiFace, ptr %725, i32 0, i32 0
  %727 = load i32, ptr %726, align 8, !tbaa !42
  %728 = icmp ult i32 %724, %727
  br i1 %728, label %734, label %729

729:                                              ; preds = %723
  store i32 31, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %895

730:                                              ; preds = %690
  %731 = landingpad { ptr, i32 }
          cleanup
  %732 = extractvalue { ptr, i32 } %731, 0
  store ptr %732, ptr %9, align 8
  %733 = extractvalue { ptr, i32 } %731, 1
  store i32 %733, ptr %10, align 4
  br label %899

734:                                              ; preds = %723
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %735 = load ptr, ptr %52, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.aiFace, ptr %735, i32 0, i32 1
  %737 = load ptr, ptr %736, align 8, !tbaa !44
  %738 = load i32, ptr %54, align 4, !tbaa !26
  %739 = zext i32 %738 to i64
  %740 = getelementptr inbounds i32, ptr %737, i64 %739
  %741 = load i32, ptr %740, align 4, !tbaa !26
  store i32 %741, ptr %55, align 4, !tbaa !26
  %742 = load i32, ptr %47, align 4, !tbaa !26
  %743 = load ptr, ptr %53, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.aiFace, ptr %743, i32 0, i32 1
  %745 = load ptr, ptr %744, align 8, !tbaa !44
  %746 = load i32, ptr %54, align 4, !tbaa !26
  %747 = zext i32 %746 to i64
  %748 = getelementptr inbounds i32, ptr %745, i64 %747
  store i32 %742, ptr %748, align 4, !tbaa !26
  %749 = load i32, ptr %55, align 4, !tbaa !26
  %750 = load i32, ptr %47, align 4, !tbaa !26
  %751 = zext i32 %750 to i64
  %752 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %751) #9
  store i32 %749, ptr %752, align 4, !tbaa !26
  %753 = load ptr, ptr %5, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.aiMesh, ptr %753, i32 0, i32 3
  %755 = load ptr, ptr %754, align 8, !tbaa !55
  %756 = load i32, ptr %55, align 4, !tbaa !26
  %757 = zext i32 %756 to i64
  %758 = getelementptr inbounds %class.aiVector3t, ptr %755, i64 %757
  %759 = load ptr, ptr %41, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.aiMesh, ptr %759, i32 0, i32 3
  %761 = load ptr, ptr %760, align 8, !tbaa !55
  %762 = load i32, ptr %47, align 4, !tbaa !26
  %763 = zext i32 %762 to i64
  %764 = getelementptr inbounds %class.aiVector3t, ptr %761, i64 %763
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %764, ptr align 4 %758, i64 12, i1 false), !tbaa.struct !61
  %765 = load ptr, ptr %5, align 8, !tbaa !5
  %766 = invoke noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %765)
          to label %767 unwind label %781

767:                                              ; preds = %734
  br i1 %766, label %768, label %785

768:                                              ; preds = %767
  %769 = load ptr, ptr %5, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.aiMesh, ptr %769, i32 0, i32 4
  %771 = load ptr, ptr %770, align 8, !tbaa !56
  %772 = load i32, ptr %55, align 4, !tbaa !26
  %773 = zext i32 %772 to i64
  %774 = getelementptr inbounds %class.aiVector3t, ptr %771, i64 %773
  %775 = load ptr, ptr %41, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.aiMesh, ptr %775, i32 0, i32 4
  %777 = load ptr, ptr %776, align 8, !tbaa !56
  %778 = load i32, ptr %47, align 4, !tbaa !26
  %779 = zext i32 %778 to i64
  %780 = getelementptr inbounds %class.aiVector3t, ptr %777, i64 %779
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %780, ptr align 4 %774, i64 12, i1 false), !tbaa.struct !61
  br label %785

781:                                              ; preds = %785, %734
  %782 = landingpad { ptr, i32 }
          cleanup
  %783 = extractvalue { ptr, i32 } %782, 0
  store ptr %783, ptr %9, align 8
  %784 = extractvalue { ptr, i32 } %782, 1
  store i32 %784, ptr %10, align 4
  br label %894

785:                                              ; preds = %768, %767
  %786 = load ptr, ptr %5, align 8, !tbaa !5
  %787 = invoke noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %786)
          to label %788 unwind label %781

788:                                              ; preds = %785
  br i1 %787, label %789, label %814

789:                                              ; preds = %788
  %790 = load ptr, ptr %5, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.aiMesh, ptr %790, i32 0, i32 5
  %792 = load ptr, ptr %791, align 8, !tbaa !57
  %793 = load i32, ptr %55, align 4, !tbaa !26
  %794 = zext i32 %793 to i64
  %795 = getelementptr inbounds %class.aiVector3t, ptr %792, i64 %794
  %796 = load ptr, ptr %41, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.aiMesh, ptr %796, i32 0, i32 5
  %798 = load ptr, ptr %797, align 8, !tbaa !57
  %799 = load i32, ptr %47, align 4, !tbaa !26
  %800 = zext i32 %799 to i64
  %801 = getelementptr inbounds %class.aiVector3t, ptr %798, i64 %800
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %801, ptr align 4 %795, i64 12, i1 false), !tbaa.struct !61
  %802 = load ptr, ptr %5, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.aiMesh, ptr %802, i32 0, i32 6
  %804 = load ptr, ptr %803, align 8, !tbaa !58
  %805 = load i32, ptr %55, align 4, !tbaa !26
  %806 = zext i32 %805 to i64
  %807 = getelementptr inbounds %class.aiVector3t, ptr %804, i64 %806
  %808 = load ptr, ptr %41, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.aiMesh, ptr %808, i32 0, i32 6
  %810 = load ptr, ptr %809, align 8, !tbaa !58
  %811 = load i32, ptr %47, align 4, !tbaa !26
  %812 = zext i32 %811 to i64
  %813 = getelementptr inbounds %class.aiVector3t, ptr %810, i64 %812
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %813, ptr align 4 %807, i64 12, i1 false), !tbaa.struct !61
  br label %814

814:                                              ; preds = %789, %788
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  store i32 0, ptr %56, align 4, !tbaa !26
  br label %815

815:                                              ; preds = %848, %814
  %816 = load i32, ptr %56, align 4, !tbaa !26
  %817 = icmp ult i32 %816, 8
  br i1 %817, label %819, label %818

818:                                              ; preds = %815
  store i32 34, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %851

819:                                              ; preds = %815
  %820 = load ptr, ptr %5, align 8, !tbaa !5
  %821 = load i32, ptr %56, align 4, !tbaa !26
  %822 = invoke noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %820, i32 noundef %821)
          to label %823 unwind label %843

823:                                              ; preds = %819
  br i1 %822, label %824, label %847

824:                                              ; preds = %823
  %825 = load ptr, ptr %5, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.aiMesh, ptr %825, i32 0, i32 8
  %827 = load i32, ptr %56, align 4, !tbaa !26
  %828 = zext i32 %827 to i64
  %829 = getelementptr inbounds [8 x ptr], ptr %826, i64 0, i64 %828
  %830 = load ptr, ptr %829, align 8, !tbaa !5
  %831 = load i32, ptr %55, align 4, !tbaa !26
  %832 = zext i32 %831 to i64
  %833 = getelementptr inbounds %class.aiVector3t, ptr %830, i64 %832
  %834 = load ptr, ptr %41, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.aiMesh, ptr %834, i32 0, i32 8
  %836 = load i32, ptr %56, align 4, !tbaa !26
  %837 = zext i32 %836 to i64
  %838 = getelementptr inbounds [8 x ptr], ptr %835, i64 0, i64 %837
  %839 = load ptr, ptr %838, align 8, !tbaa !5
  %840 = load i32, ptr %47, align 4, !tbaa !26
  %841 = zext i32 %840 to i64
  %842 = getelementptr inbounds %class.aiVector3t, ptr %839, i64 %841
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %842, ptr align 4 %833, i64 12, i1 false), !tbaa.struct !61
  br label %847

843:                                              ; preds = %819
  %844 = landingpad { ptr, i32 }
          cleanup
  %845 = extractvalue { ptr, i32 } %844, 0
  store ptr %845, ptr %9, align 8
  %846 = extractvalue { ptr, i32 } %844, 1
  store i32 %846, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %894

847:                                              ; preds = %824, %823
  br label %848

848:                                              ; preds = %847
  %849 = load i32, ptr %56, align 4, !tbaa !26
  %850 = add i32 %849, 1
  store i32 %850, ptr %56, align 4, !tbaa !26
  br label %815, !llvm.loop !63

851:                                              ; preds = %818
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  store i32 0, ptr %57, align 4, !tbaa !26
  br label %852

852:                                              ; preds = %885, %851
  %853 = load i32, ptr %57, align 4, !tbaa !26
  %854 = icmp ult i32 %853, 8
  br i1 %854, label %856, label %855

855:                                              ; preds = %852
  store i32 37, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %888

856:                                              ; preds = %852
  %857 = load ptr, ptr %5, align 8, !tbaa !5
  %858 = load i32, ptr %57, align 4, !tbaa !26
  %859 = invoke noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %857, i32 noundef %858)
          to label %860 unwind label %880

860:                                              ; preds = %856
  br i1 %859, label %861, label %884

861:                                              ; preds = %860
  %862 = load ptr, ptr %5, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.aiMesh, ptr %862, i32 0, i32 7
  %864 = load i32, ptr %57, align 4, !tbaa !26
  %865 = zext i32 %864 to i64
  %866 = getelementptr inbounds [8 x ptr], ptr %863, i64 0, i64 %865
  %867 = load ptr, ptr %866, align 8, !tbaa !5
  %868 = load i32, ptr %55, align 4, !tbaa !26
  %869 = zext i32 %868 to i64
  %870 = getelementptr inbounds %class.aiColor4t, ptr %867, i64 %869
  %871 = load ptr, ptr %41, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.aiMesh, ptr %871, i32 0, i32 7
  %873 = load i32, ptr %57, align 4, !tbaa !26
  %874 = zext i32 %873 to i64
  %875 = getelementptr inbounds [8 x ptr], ptr %872, i64 0, i64 %874
  %876 = load ptr, ptr %875, align 8, !tbaa !5
  %877 = load i32, ptr %47, align 4, !tbaa !26
  %878 = zext i32 %877 to i64
  %879 = getelementptr inbounds %class.aiColor4t, ptr %876, i64 %878
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %879, ptr align 4 %870, i64 16, i1 false), !tbaa.struct !64
  br label %884

880:                                              ; preds = %856
  %881 = landingpad { ptr, i32 }
          cleanup
  %882 = extractvalue { ptr, i32 } %881, 0
  store ptr %882, ptr %9, align 8
  %883 = extractvalue { ptr, i32 } %881, 1
  store i32 %883, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %894

884:                                              ; preds = %861, %860
  br label %885

885:                                              ; preds = %884
  %886 = load i32, ptr %57, align 4, !tbaa !26
  %887 = add i32 %886, 1
  store i32 %887, ptr %57, align 4, !tbaa !26
  br label %852, !llvm.loop !65

888:                                              ; preds = %855
  %889 = load i32, ptr %47, align 4, !tbaa !26
  %890 = add i32 %889, 1
  store i32 %890, ptr %47, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %891

891:                                              ; preds = %888
  %892 = load i32, ptr %54, align 4, !tbaa !26
  %893 = add i32 %892, 1
  store i32 %893, ptr %54, align 4, !tbaa !26
  br label %723, !llvm.loop !66

894:                                              ; preds = %880, %843, %781
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %899

895:                                              ; preds = %729
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  br label %896

896:                                              ; preds = %895
  %897 = load i32, ptr %51, align 4, !tbaa !26
  %898 = add i32 %897, 1
  store i32 %898, ptr %51, align 4, !tbaa !26
  br label %680, !llvm.loop !67

899:                                              ; preds = %894, %730
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  br label %1443

900:                                              ; preds = %685
  %901 = load i32, ptr %47, align 4, !tbaa !26
  %902 = load i32, ptr %25, align 4, !tbaa !26
  %903 = icmp eq i32 %901, %902
  br i1 %903, label %906, label %904

904:                                              ; preds = %900
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.9, ptr noundef @.str.10, i32 noundef 286)
          to label %905 unwind label %933

905:                                              ; preds = %904
  br label %906

906:                                              ; preds = %905, %900
  %907 = phi i1 [ true, %900 ], [ false, %905 ]
  %908 = load ptr, ptr %41, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.aiMesh, ptr %908, i32 0, i32 11
  store i32 0, ptr %909, align 8, !tbaa !9
  %910 = load i32, ptr %20, align 4, !tbaa !26
  %911 = zext i32 %910 to i64
  %912 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %911, i64 8)
  %913 = extractvalue { i64, i1 } %912, 1
  %914 = extractvalue { i64, i1 } %912, 0
  %915 = select i1 %913, i64 -1, i64 %914
  %916 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %915) #11
          to label %917 unwind label %933

917:                                              ; preds = %906
  %918 = load ptr, ptr %41, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.aiMesh, ptr %918, i32 0, i32 12
  store ptr %916, ptr %919, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 24, ptr %58) #9
  %920 = load ptr, ptr %5, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.aiMesh, ptr %920, i32 0, i32 11
  %922 = load i32, ptr %921, align 8, !tbaa !9
  %923 = zext i32 %922 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %924 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #9
  store i32 %924, ptr %59, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #9
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #9
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %923, ptr noundef nonnull align 4 dereferenceable(4) %59, ptr noundef nonnull align 1 dereferenceable(1) %60)
          to label %925 unwind label %937

925:                                              ; preds = %917
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  store i32 0, ptr %61, align 4, !tbaa !26
  br label %926

926:                                              ; preds = %995, %925
  %927 = load i32, ptr %61, align 4, !tbaa !26
  %928 = load ptr, ptr %5, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.aiMesh, ptr %928, i32 0, i32 11
  %930 = load i32, ptr %929, align 8, !tbaa !9
  %931 = icmp ult i32 %927, %930
  br i1 %931, label %941, label %932

932:                                              ; preds = %926
  store i32 40, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %1003

933:                                              ; preds = %906, %904
  %934 = landingpad { ptr, i32 }
          cleanup
  %935 = extractvalue { ptr, i32 } %934, 0
  store ptr %935, ptr %9, align 8
  %936 = extractvalue { ptr, i32 } %934, 1
  store i32 %936, ptr %10, align 4
  br label %1443

937:                                              ; preds = %917
  %938 = landingpad { ptr, i32 }
          cleanup
  %939 = extractvalue { ptr, i32 } %938, 0
  store ptr %939, ptr %9, align 8
  %940 = extractvalue { ptr, i32 } %938, 1
  store i32 %940, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  br label %1442

941:                                              ; preds = %926
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #9
  %942 = load i32, ptr %61, align 4, !tbaa !26
  %943 = zext i32 %942 to i64
  %944 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %21, i64 noundef %943)
          to label %945 unwind label %953

945:                                              ; preds = %941
  %946 = getelementptr inbounds { ptr, i64 }, ptr %62, i32 0, i32 0
  %947 = extractvalue { ptr, i64 } %944, 0
  store ptr %947, ptr %946, align 8
  %948 = getelementptr inbounds { ptr, i64 }, ptr %62, i32 0, i32 1
  %949 = extractvalue { ptr, i64 } %944, 1
  store i64 %949, ptr %948, align 8
  %950 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %62) #9
  %951 = xor i1 %950, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #9
  br i1 %951, label %952, label %957

952:                                              ; preds = %945
  br label %995

953:                                              ; preds = %941
  %954 = landingpad { ptr, i32 }
          cleanup
  %955 = extractvalue { ptr, i32 } %954, 0
  store ptr %955, ptr %9, align 8
  %956 = extractvalue { ptr, i32 } %954, 1
  store i32 %956, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #9
  br label %1002

957:                                              ; preds = %945
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %958 = load ptr, ptr %5, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.aiMesh, ptr %958, i32 0, i32 12
  %960 = load ptr, ptr %959, align 8, !tbaa !27
  %961 = load i32, ptr %61, align 4, !tbaa !26
  %962 = zext i32 %961 to i64
  %963 = getelementptr inbounds ptr, ptr %960, i64 %962
  %964 = load ptr, ptr %963, align 8, !tbaa !5
  store ptr %964, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %965 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1120) #11
          to label %966 unwind label %998

966:                                              ; preds = %957
  call void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120) %965) #9
  store ptr %965, ptr %64, align 8, !tbaa !5
  %967 = load ptr, ptr %41, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct.aiMesh, ptr %967, i32 0, i32 11
  %969 = load i32, ptr %968, align 8, !tbaa !9
  %970 = load i32, ptr %61, align 4, !tbaa !26
  %971 = zext i32 %970 to i64
  %972 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %971) #9
  store i32 %969, ptr %972, align 4, !tbaa !26
  %973 = load ptr, ptr %64, align 8, !tbaa !5
  %974 = load ptr, ptr %41, align 8, !tbaa !5
  %975 = getelementptr inbounds %struct.aiMesh, ptr %974, i32 0, i32 12
  %976 = load ptr, ptr %975, align 8, !tbaa !27
  %977 = load ptr, ptr %41, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.aiMesh, ptr %977, i32 0, i32 11
  %979 = load i32, ptr %978, align 8, !tbaa !9
  %980 = add i32 %979, 1
  store i32 %980, ptr %978, align 8, !tbaa !9
  %981 = zext i32 %979 to i64
  %982 = getelementptr inbounds ptr, ptr %976, i64 %981
  store ptr %973, ptr %982, align 8, !tbaa !5
  %983 = load ptr, ptr %63, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.aiBone, ptr %983, i32 0, i32 0
  %985 = load ptr, ptr %64, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.aiBone, ptr %985, i32 0, i32 0
  %987 = invoke noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %986, ptr noundef nonnull align 4 dereferenceable(1028) %984)
          to label %988 unwind label %998

988:                                              ; preds = %966
  %989 = load ptr, ptr %63, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.aiBone, ptr %989, i32 0, i32 5
  %991 = load ptr, ptr %64, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.aiBone, ptr %991, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %992, ptr align 8 %990, i64 64, i1 false), !tbaa.struct !68
  %993 = load ptr, ptr %64, align 8, !tbaa !5
  %994 = getelementptr inbounds %struct.aiBone, ptr %993, i32 0, i32 1
  store i32 0, ptr %994, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  br label %995

995:                                              ; preds = %988, %952
  %996 = load i32, ptr %61, align 4, !tbaa !26
  %997 = add i32 %996, 1
  store i32 %997, ptr %61, align 4, !tbaa !26
  br label %926, !llvm.loop !69

998:                                              ; preds = %966, %957
  %999 = landingpad { ptr, i32 }
          cleanup
  %1000 = extractvalue { ptr, i32 } %999, 0
  store ptr %1000, ptr %9, align 8
  %1001 = extractvalue { ptr, i32 } %999, 1
  store i32 %1001, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  br label %1002

1002:                                             ; preds = %998, %953
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %1441

1003:                                             ; preds = %932
  %1004 = load ptr, ptr %41, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.aiMesh, ptr %1004, i32 0, i32 11
  %1006 = load i32, ptr %1005, align 8, !tbaa !9
  %1007 = load i32, ptr %20, align 4, !tbaa !26
  %1008 = icmp eq i32 %1006, %1007
  br i1 %1008, label %1011, label %1009

1009:                                             ; preds = %1003
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.11, ptr noundef @.str.10, i32 noundef 308)
          to label %1010 unwind label %1018

1010:                                             ; preds = %1009
  br label %1011

1011:                                             ; preds = %1010, %1003
  %1012 = phi i1 [ true, %1003 ], [ false, %1010 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #9
  store i32 0, ptr %65, align 4, !tbaa !26
  br label %1013

1013:                                             ; preds = %1066, %1011
  %1014 = load i32, ptr %65, align 4, !tbaa !26
  %1015 = load i32, ptr %25, align 4, !tbaa !26
  %1016 = icmp ult i32 %1014, %1015
  br i1 %1016, label %1022, label %1017

1017:                                             ; preds = %1013
  store i32 43, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %1069

1018:                                             ; preds = %1217, %1009
  %1019 = landingpad { ptr, i32 }
          cleanup
  %1020 = extractvalue { ptr, i32 } %1019, 0
  store ptr %1020, ptr %9, align 8
  %1021 = extractvalue { ptr, i32 } %1019, 1
  store i32 %1021, ptr %10, align 4
  br label %1441

1022:                                             ; preds = %1013
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #9
  %1023 = load i32, ptr %65, align 4, !tbaa !26
  %1024 = zext i32 %1023 to i64
  %1025 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %1024) #9
  %1026 = load i32, ptr %1025, align 4, !tbaa !26
  store i32 %1026, ptr %66, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %1027 = load i32, ptr %66, align 4, !tbaa !26
  %1028 = zext i32 %1027 to i64
  %1029 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %1028) #9
  store ptr %1029, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  store i32 0, ptr %68, align 4, !tbaa !26
  br label %1030

1030:                                             ; preds = %1062, %1022
  %1031 = load i32, ptr %68, align 4, !tbaa !26
  %1032 = zext i32 %1031 to i64
  %1033 = load ptr, ptr %67, align 8, !tbaa !5
  %1034 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1033) #9
  %1035 = icmp ult i64 %1032, %1034
  br i1 %1035, label %1037, label %1036

1036:                                             ; preds = %1030
  store i32 46, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  br label %1065

1037:                                             ; preds = %1030
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  %1038 = load ptr, ptr %67, align 8, !tbaa !5
  %1039 = load i32, ptr %68, align 4, !tbaa !26
  %1040 = zext i32 %1039 to i64
  %1041 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1038, i64 noundef %1040) #9
  %1042 = getelementptr inbounds %"struct.std::pair", ptr %1041, i32 0, i32 0
  %1043 = load i32, ptr %1042, align 4, !tbaa !45
  %1044 = zext i32 %1043 to i64
  %1045 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %1044) #9
  %1046 = load i32, ptr %1045, align 4, !tbaa !26
  store i32 %1046, ptr %69, align 4, !tbaa !26
  %1047 = load i32, ptr %69, align 4, !tbaa !26
  %1048 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #9
  %1049 = icmp ne i32 %1047, %1048
  br i1 %1049, label %1050, label %1061

1050:                                             ; preds = %1037
  %1051 = load ptr, ptr %41, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.aiMesh, ptr %1051, i32 0, i32 12
  %1053 = load ptr, ptr %1052, align 8, !tbaa !27
  %1054 = load i32, ptr %69, align 4, !tbaa !26
  %1055 = zext i32 %1054 to i64
  %1056 = getelementptr inbounds ptr, ptr %1053, i64 %1055
  %1057 = load ptr, ptr %1056, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.aiBone, ptr %1057, i32 0, i32 1
  %1059 = load i32, ptr %1058, align 4, !tbaa !28
  %1060 = add i32 %1059, 1
  store i32 %1060, ptr %1058, align 4, !tbaa !28
  br label %1061

1061:                                             ; preds = %1050, %1037
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  br label %1062

1062:                                             ; preds = %1061
  %1063 = load i32, ptr %68, align 4, !tbaa !26
  %1064 = add i32 %1063, 1
  store i32 %1064, ptr %68, align 4, !tbaa !26
  br label %1030, !llvm.loop !70

1065:                                             ; preds = %1036
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #9
  br label %1066

1066:                                             ; preds = %1065
  %1067 = load i32, ptr %65, align 4, !tbaa !26
  %1068 = add i32 %1067, 1
  store i32 %1068, ptr %65, align 4, !tbaa !26
  br label %1013, !llvm.loop !71

1069:                                             ; preds = %1017
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #9
  store i32 0, ptr %70, align 4, !tbaa !26
  br label %1070

1070:                                             ; preds = %1115, %1069
  %1071 = load i32, ptr %70, align 4, !tbaa !26
  %1072 = load ptr, ptr %41, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.aiMesh, ptr %1072, i32 0, i32 11
  %1074 = load i32, ptr %1073, align 8, !tbaa !9
  %1075 = icmp ult i32 %1071, %1074
  br i1 %1075, label %1077, label %1076

1076:                                             ; preds = %1070
  store i32 49, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  br label %1122

1077:                                             ; preds = %1070
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %1078 = load ptr, ptr %41, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.aiMesh, ptr %1078, i32 0, i32 12
  %1080 = load ptr, ptr %1079, align 8, !tbaa !27
  %1081 = load i32, ptr %70, align 4, !tbaa !26
  %1082 = zext i32 %1081 to i64
  %1083 = getelementptr inbounds ptr, ptr %1080, i64 %1082
  %1084 = load ptr, ptr %1083, align 8, !tbaa !5
  store ptr %1084, ptr %71, align 8, !tbaa !5
  %1085 = load ptr, ptr %71, align 8, !tbaa !5
  %1086 = getelementptr inbounds %struct.aiBone, ptr %1085, i32 0, i32 1
  %1087 = load i32, ptr %1086, align 4, !tbaa !28
  %1088 = icmp ugt i32 %1087, 0
  br i1 %1088, label %1091, label %1089

1089:                                             ; preds = %1077
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.12, ptr noundef @.str.10, i32 noundef 326)
          to label %1090 unwind label %1118

1090:                                             ; preds = %1089
  br label %1091

1091:                                             ; preds = %1090, %1077
  %1092 = phi i1 [ true, %1077 ], [ false, %1090 ]
  %1093 = load ptr, ptr %71, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct.aiBone, ptr %1093, i32 0, i32 1
  %1095 = load i32, ptr %1094, align 4, !tbaa !28
  %1096 = zext i32 %1095 to i64
  %1097 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1096, i64 8)
  %1098 = extractvalue { i64, i1 } %1097, 1
  %1099 = extractvalue { i64, i1 } %1097, 0
  %1100 = select i1 %1098, i64 -1, i64 %1099
  %1101 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1100) #11
          to label %1102 unwind label %1118

1102:                                             ; preds = %1091
  %1103 = icmp eq i64 %1096, 0
  br i1 %1103, label %1110, label %1104

1104:                                             ; preds = %1102
  %1105 = getelementptr inbounds %struct.aiVertexWeight, ptr %1101, i64 %1096
  br label %1106

1106:                                             ; preds = %1106, %1104
  %1107 = phi ptr [ %1101, %1104 ], [ %1108, %1106 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %1107) #9
  %1108 = getelementptr inbounds %struct.aiVertexWeight, ptr %1107, i64 1
  %1109 = icmp eq ptr %1108, %1105
  br i1 %1109, label %1110, label %1106

1110:                                             ; preds = %1106, %1102
  %1111 = load ptr, ptr %71, align 8, !tbaa !5
  %1112 = getelementptr inbounds %struct.aiBone, ptr %1111, i32 0, i32 4
  store ptr %1101, ptr %1112, align 8, !tbaa !31
  %1113 = load ptr, ptr %71, align 8, !tbaa !5
  %1114 = getelementptr inbounds %struct.aiBone, ptr %1113, i32 0, i32 1
  store i32 0, ptr %1114, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %1115

1115:                                             ; preds = %1110
  %1116 = load i32, ptr %70, align 4, !tbaa !26
  %1117 = add i32 %1116, 1
  store i32 %1117, ptr %70, align 4, !tbaa !26
  br label %1070, !llvm.loop !72

1118:                                             ; preds = %1091, %1089
  %1119 = landingpad { ptr, i32 }
          cleanup
  %1120 = extractvalue { ptr, i32 } %1119, 0
  store ptr %1120, ptr %9, align 8
  %1121 = extractvalue { ptr, i32 } %1119, 1
  store i32 %1121, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  br label %1441

1122:                                             ; preds = %1076
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #9
  store i32 0, ptr %72, align 4, !tbaa !26
  br label %1123

1123:                                             ; preds = %1209, %1122
  %1124 = load i32, ptr %72, align 4, !tbaa !26
  %1125 = load i32, ptr %25, align 4, !tbaa !26
  %1126 = icmp ult i32 %1124, %1125
  br i1 %1126, label %1128, label %1127

1127:                                             ; preds = %1123
  store i32 52, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #9
  br label %1212

1128:                                             ; preds = %1123
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #9
  %1129 = load i32, ptr %72, align 4, !tbaa !26
  %1130 = zext i32 %1129 to i64
  %1131 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %1130) #9
  %1132 = load i32, ptr %1131, align 4, !tbaa !26
  store i32 %1132, ptr %73, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %1133 = load i32, ptr %73, align 4, !tbaa !26
  %1134 = zext i32 %1133 to i64
  %1135 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %1134) #9
  store ptr %1135, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  store i32 0, ptr %75, align 4, !tbaa !26
  br label %1136

1136:                                             ; preds = %1201, %1128
  %1137 = load i32, ptr %75, align 4, !tbaa !26
  %1138 = zext i32 %1137 to i64
  %1139 = load ptr, ptr %74, align 8, !tbaa !5
  %1140 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1139) #9
  %1141 = icmp ult i64 %1138, %1140
  br i1 %1141, label %1143, label %1142

1142:                                             ; preds = %1136
  store i32 55, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1208

1143:                                             ; preds = %1136
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #9
  %1144 = load ptr, ptr %74, align 8, !tbaa !5
  %1145 = load i32, ptr %75, align 4, !tbaa !26
  %1146 = zext i32 %1145 to i64
  %1147 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1144, i64 noundef %1146) #9
  %1148 = getelementptr inbounds %"struct.std::pair", ptr %1147, i32 0, i32 0
  %1149 = load i32, ptr %1148, align 4, !tbaa !45
  %1150 = zext i32 %1149 to i64
  %1151 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %1150) #9
  %1152 = load i32, ptr %1151, align 4, !tbaa !26
  store i32 %1152, ptr %76, align 4, !tbaa !26
  %1153 = load i32, ptr %76, align 4, !tbaa !26
  %1154 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #9
  %1155 = icmp ne i32 %1153, %1154
  br i1 %1155, label %1158, label %1156

1156:                                             ; preds = %1143
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.13, ptr noundef @.str.10, i32 noundef 341)
          to label %1157 unwind label %1204

1157:                                             ; preds = %1156
  br label %1158

1158:                                             ; preds = %1157, %1143
  %1159 = phi i1 [ true, %1143 ], [ false, %1157 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %1160 = load ptr, ptr %41, align 8, !tbaa !5
  %1161 = getelementptr inbounds %struct.aiMesh, ptr %1160, i32 0, i32 12
  %1162 = load ptr, ptr %1161, align 8, !tbaa !27
  %1163 = load i32, ptr %76, align 4, !tbaa !26
  %1164 = zext i32 %1163 to i64
  %1165 = getelementptr inbounds ptr, ptr %1162, i64 %1164
  %1166 = load ptr, ptr %1165, align 8, !tbaa !5
  %1167 = getelementptr inbounds %struct.aiBone, ptr %1166, i32 0, i32 4
  %1168 = load ptr, ptr %1167, align 8, !tbaa !31
  %1169 = load ptr, ptr %41, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct.aiMesh, ptr %1169, i32 0, i32 12
  %1171 = load ptr, ptr %1170, align 8, !tbaa !27
  %1172 = load i32, ptr %76, align 4, !tbaa !26
  %1173 = zext i32 %1172 to i64
  %1174 = getelementptr inbounds ptr, ptr %1171, i64 %1173
  %1175 = load ptr, ptr %1174, align 8, !tbaa !5
  %1176 = getelementptr inbounds %struct.aiBone, ptr %1175, i32 0, i32 1
  %1177 = load i32, ptr %1176, align 4, !tbaa !28
  %1178 = zext i32 %1177 to i64
  %1179 = getelementptr inbounds %struct.aiVertexWeight, ptr %1168, i64 %1178
  store ptr %1179, ptr %77, align 8, !tbaa !5
  %1180 = load ptr, ptr %41, align 8, !tbaa !5
  %1181 = getelementptr inbounds %struct.aiMesh, ptr %1180, i32 0, i32 12
  %1182 = load ptr, ptr %1181, align 8, !tbaa !27
  %1183 = load i32, ptr %76, align 4, !tbaa !26
  %1184 = zext i32 %1183 to i64
  %1185 = getelementptr inbounds ptr, ptr %1182, i64 %1184
  %1186 = load ptr, ptr %1185, align 8, !tbaa !5
  %1187 = getelementptr inbounds %struct.aiBone, ptr %1186, i32 0, i32 1
  %1188 = load i32, ptr %1187, align 4, !tbaa !28
  %1189 = add i32 %1188, 1
  store i32 %1189, ptr %1187, align 4, !tbaa !28
  %1190 = load i32, ptr %72, align 4, !tbaa !26
  %1191 = load ptr, ptr %77, align 8, !tbaa !5
  %1192 = getelementptr inbounds %struct.aiVertexWeight, ptr %1191, i32 0, i32 0
  store i32 %1190, ptr %1192, align 4, !tbaa !34
  %1193 = load ptr, ptr %74, align 8, !tbaa !5
  %1194 = load i32, ptr %75, align 4, !tbaa !26
  %1195 = zext i32 %1194 to i64
  %1196 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1193, i64 noundef %1195) #9
  %1197 = getelementptr inbounds %"struct.std::pair", ptr %1196, i32 0, i32 1
  %1198 = load float, ptr %1197, align 4, !tbaa !73
  %1199 = load ptr, ptr %77, align 8, !tbaa !5
  %1200 = getelementptr inbounds %struct.aiVertexWeight, ptr %1199, i32 0, i32 1
  store float %1198, ptr %1200, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  br label %1201

1201:                                             ; preds = %1158
  %1202 = load i32, ptr %75, align 4, !tbaa !26
  %1203 = add i32 %1202, 1
  store i32 %1203, ptr %75, align 4, !tbaa !26
  br label %1136, !llvm.loop !74

1204:                                             ; preds = %1156
  %1205 = landingpad { ptr, i32 }
          cleanup
  %1206 = extractvalue { ptr, i32 } %1205, 0
  store ptr %1206, ptr %9, align 8
  %1207 = extractvalue { ptr, i32 } %1205, 1
  store i32 %1207, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #9
  br label %1441

1208:                                             ; preds = %1142
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #9
  br label %1209

1209:                                             ; preds = %1208
  %1210 = load i32, ptr %72, align 4, !tbaa !26
  %1211 = add i32 %1210, 1
  store i32 %1211, ptr %72, align 4, !tbaa !26
  br label %1123, !llvm.loop !75

1212:                                             ; preds = %1127
  %1213 = load ptr, ptr %5, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.aiMesh, ptr %1213, i32 0, i32 15
  %1215 = load i32, ptr %1214, align 8, !tbaa !76
  %1216 = icmp ugt i32 %1215, 0
  br i1 %1216, label %1217, label %1440

1217:                                             ; preds = %1212
  %1218 = load ptr, ptr %5, align 8, !tbaa !5
  %1219 = getelementptr inbounds %struct.aiMesh, ptr %1218, i32 0, i32 15
  %1220 = load i32, ptr %1219, align 8, !tbaa !76
  %1221 = load ptr, ptr %41, align 8, !tbaa !5
  %1222 = getelementptr inbounds %struct.aiMesh, ptr %1221, i32 0, i32 15
  store i32 %1220, ptr %1222, align 8, !tbaa !76
  %1223 = load ptr, ptr %41, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct.aiMesh, ptr %1223, i32 0, i32 15
  %1225 = load i32, ptr %1224, align 8, !tbaa !76
  %1226 = zext i32 %1225 to i64
  %1227 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1226, i64 8)
  %1228 = extractvalue { i64, i1 } %1227, 1
  %1229 = extractvalue { i64, i1 } %1227, 0
  %1230 = select i1 %1228, i64 -1, i64 %1229
  %1231 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1230) #11
          to label %1232 unwind label %1018

1232:                                             ; preds = %1217
  %1233 = load ptr, ptr %41, align 8, !tbaa !5
  %1234 = getelementptr inbounds %struct.aiMesh, ptr %1233, i32 0, i32 16
  store ptr %1231, ptr %1234, align 8, !tbaa !77
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  store i32 0, ptr %78, align 4, !tbaa !26
  br label %1235

1235:                                             ; preds = %1435, %1232
  %1236 = load i32, ptr %78, align 4, !tbaa !26
  %1237 = load ptr, ptr %41, align 8, !tbaa !5
  %1238 = getelementptr inbounds %struct.aiMesh, ptr %1237, i32 0, i32 15
  %1239 = load i32, ptr %1238, align 8, !tbaa !76
  %1240 = icmp ult i32 %1236, %1239
  br i1 %1240, label %1242, label %1241

1241:                                             ; preds = %1235
  store i32 58, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  br label %1439

1242:                                             ; preds = %1235
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #9
  %1243 = load ptr, ptr %5, align 8, !tbaa !5
  %1244 = getelementptr inbounds %struct.aiMesh, ptr %1243, i32 0, i32 16
  %1245 = load ptr, ptr %1244, align 8, !tbaa !77
  %1246 = load i32, ptr %78, align 4, !tbaa !26
  %1247 = zext i32 %1246 to i64
  %1248 = getelementptr inbounds ptr, ptr %1245, i64 %1247
  %1249 = load ptr, ptr %1248, align 8, !tbaa !5
  store ptr %1249, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %1250 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1200) #11
          to label %1251 unwind label %1313

1251:                                             ; preds = %1242
  call void @_ZN10aiAnimMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1200) %1250) #9
  store ptr %1250, ptr %80, align 8, !tbaa !5
  %1252 = load ptr, ptr %79, align 8, !tbaa !5
  %1253 = getelementptr inbounds %struct.aiAnimMesh, ptr %1252, i32 0, i32 0
  %1254 = load ptr, ptr %80, align 8, !tbaa !5
  %1255 = getelementptr inbounds %struct.aiAnimMesh, ptr %1254, i32 0, i32 0
  %1256 = invoke noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %1255, ptr noundef nonnull align 4 dereferenceable(1028) %1253)
          to label %1257 unwind label %1313

1257:                                             ; preds = %1251
  %1258 = load ptr, ptr %79, align 8, !tbaa !5
  %1259 = getelementptr inbounds %struct.aiAnimMesh, ptr %1258, i32 0, i32 8
  %1260 = load float, ptr %1259, align 4, !tbaa !78
  %1261 = load ptr, ptr %80, align 8, !tbaa !5
  %1262 = getelementptr inbounds %struct.aiAnimMesh, ptr %1261, i32 0, i32 8
  store float %1260, ptr %1262, align 4, !tbaa !78
  %1263 = load i32, ptr %25, align 4, !tbaa !26
  %1264 = load ptr, ptr %80, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.aiAnimMesh, ptr %1264, i32 0, i32 7
  store i32 %1263, ptr %1265, align 8, !tbaa !80
  %1266 = load i32, ptr %25, align 4, !tbaa !26
  %1267 = zext i32 %1266 to i64
  %1268 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1267, i64 12)
  %1269 = extractvalue { i64, i1 } %1268, 1
  %1270 = extractvalue { i64, i1 } %1268, 0
  %1271 = select i1 %1269, i64 -1, i64 %1270
  %1272 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1271) #11
          to label %1273 unwind label %1313

1273:                                             ; preds = %1257
  %1274 = icmp eq i64 %1267, 0
  br i1 %1274, label %1281, label %1275

1275:                                             ; preds = %1273
  %1276 = getelementptr inbounds %class.aiVector3t, ptr %1272, i64 %1267
  br label %1277

1277:                                             ; preds = %1277, %1275
  %1278 = phi ptr [ %1272, %1275 ], [ %1279, %1277 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1278) #9
  %1279 = getelementptr inbounds %class.aiVector3t, ptr %1278, i64 1
  %1280 = icmp eq ptr %1279, %1276
  br i1 %1280, label %1281, label %1277

1281:                                             ; preds = %1277, %1273
  %1282 = load ptr, ptr %80, align 8, !tbaa !5
  %1283 = getelementptr inbounds %struct.aiAnimMesh, ptr %1282, i32 0, i32 1
  store ptr %1272, ptr %1283, align 8, !tbaa !81
  %1284 = load ptr, ptr %80, align 8, !tbaa !5
  %1285 = load ptr, ptr %41, align 8, !tbaa !5
  %1286 = getelementptr inbounds %struct.aiMesh, ptr %1285, i32 0, i32 16
  %1287 = load ptr, ptr %1286, align 8, !tbaa !77
  %1288 = load i32, ptr %78, align 4, !tbaa !26
  %1289 = zext i32 %1288 to i64
  %1290 = getelementptr inbounds ptr, ptr %1287, i64 %1289
  store ptr %1284, ptr %1290, align 8, !tbaa !5
  %1291 = load ptr, ptr %79, align 8, !tbaa !5
  %1292 = invoke noundef zeroext i1 @_ZNK10aiAnimMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1291)
          to label %1293 unwind label %1313

1293:                                             ; preds = %1281
  br i1 %1292, label %1294, label %1317

1294:                                             ; preds = %1293
  %1295 = load i32, ptr %25, align 4, !tbaa !26
  %1296 = zext i32 %1295 to i64
  %1297 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1296, i64 12)
  %1298 = extractvalue { i64, i1 } %1297, 1
  %1299 = extractvalue { i64, i1 } %1297, 0
  %1300 = select i1 %1298, i64 -1, i64 %1299
  %1301 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1300) #11
          to label %1302 unwind label %1313

1302:                                             ; preds = %1294
  %1303 = icmp eq i64 %1296, 0
  br i1 %1303, label %1310, label %1304

1304:                                             ; preds = %1302
  %1305 = getelementptr inbounds %class.aiVector3t, ptr %1301, i64 %1296
  br label %1306

1306:                                             ; preds = %1306, %1304
  %1307 = phi ptr [ %1301, %1304 ], [ %1308, %1306 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1307) #9
  %1308 = getelementptr inbounds %class.aiVector3t, ptr %1307, i64 1
  %1309 = icmp eq ptr %1308, %1305
  br i1 %1309, label %1310, label %1306

1310:                                             ; preds = %1306, %1302
  %1311 = load ptr, ptr %80, align 8, !tbaa !5
  %1312 = getelementptr inbounds %struct.aiAnimMesh, ptr %1311, i32 0, i32 2
  store ptr %1301, ptr %1312, align 8, !tbaa !82
  br label %1317

1313:                                             ; preds = %1337, %1321, %1317, %1294, %1281, %1257, %1251, %1242
  %1314 = landingpad { ptr, i32 }
          cleanup
  %1315 = extractvalue { ptr, i32 } %1314, 0
  store ptr %1315, ptr %9, align 8
  %1316 = extractvalue { ptr, i32 } %1314, 1
  store i32 %1316, ptr %10, align 4
  br label %1438

1317:                                             ; preds = %1310, %1293
  %1318 = load ptr, ptr %79, align 8, !tbaa !5
  %1319 = invoke noundef zeroext i1 @_ZNK10aiAnimMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1318)
          to label %1320 unwind label %1313

1320:                                             ; preds = %1317
  br i1 %1319, label %1321, label %1358

1321:                                             ; preds = %1320
  %1322 = load i32, ptr %25, align 4, !tbaa !26
  %1323 = zext i32 %1322 to i64
  %1324 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1323, i64 12)
  %1325 = extractvalue { i64, i1 } %1324, 1
  %1326 = extractvalue { i64, i1 } %1324, 0
  %1327 = select i1 %1325, i64 -1, i64 %1326
  %1328 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1327) #11
          to label %1329 unwind label %1313

1329:                                             ; preds = %1321
  %1330 = icmp eq i64 %1323, 0
  br i1 %1330, label %1337, label %1331

1331:                                             ; preds = %1329
  %1332 = getelementptr inbounds %class.aiVector3t, ptr %1328, i64 %1323
  br label %1333

1333:                                             ; preds = %1333, %1331
  %1334 = phi ptr [ %1328, %1331 ], [ %1335, %1333 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1334) #9
  %1335 = getelementptr inbounds %class.aiVector3t, ptr %1334, i64 1
  %1336 = icmp eq ptr %1335, %1332
  br i1 %1336, label %1337, label %1333

1337:                                             ; preds = %1333, %1329
  %1338 = load ptr, ptr %80, align 8, !tbaa !5
  %1339 = getelementptr inbounds %struct.aiAnimMesh, ptr %1338, i32 0, i32 3
  store ptr %1328, ptr %1339, align 8, !tbaa !83
  %1340 = load i32, ptr %25, align 4, !tbaa !26
  %1341 = zext i32 %1340 to i64
  %1342 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1341, i64 12)
  %1343 = extractvalue { i64, i1 } %1342, 1
  %1344 = extractvalue { i64, i1 } %1342, 0
  %1345 = select i1 %1343, i64 -1, i64 %1344
  %1346 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1345) #11
          to label %1347 unwind label %1313

1347:                                             ; preds = %1337
  %1348 = icmp eq i64 %1341, 0
  br i1 %1348, label %1355, label %1349

1349:                                             ; preds = %1347
  %1350 = getelementptr inbounds %class.aiVector3t, ptr %1346, i64 %1341
  br label %1351

1351:                                             ; preds = %1351, %1349
  %1352 = phi ptr [ %1346, %1349 ], [ %1353, %1351 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1352) #9
  %1353 = getelementptr inbounds %class.aiVector3t, ptr %1352, i64 1
  %1354 = icmp eq ptr %1353, %1350
  br i1 %1354, label %1355, label %1351

1355:                                             ; preds = %1351, %1347
  %1356 = load ptr, ptr %80, align 8, !tbaa !5
  %1357 = getelementptr inbounds %struct.aiAnimMesh, ptr %1356, i32 0, i32 4
  store ptr %1346, ptr %1357, align 8, !tbaa !84
  br label %1358

1358:                                             ; preds = %1355, %1320
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  store i32 0, ptr %81, align 4, !tbaa !26
  br label %1359

1359:                                             ; preds = %1431, %1358
  %1360 = load i32, ptr %81, align 4, !tbaa !26
  %1361 = load i32, ptr %25, align 4, !tbaa !26
  %1362 = icmp ult i32 %1360, %1361
  br i1 %1362, label %1364, label %1363

1363:                                             ; preds = %1359
  store i32 61, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  br label %1434

1364:                                             ; preds = %1359
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #9
  %1365 = load i32, ptr %81, align 4, !tbaa !26
  %1366 = zext i32 %1365 to i64
  %1367 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %1366) #9
  %1368 = load i32, ptr %1367, align 4, !tbaa !26
  store i32 %1368, ptr %82, align 4, !tbaa !26
  %1369 = load ptr, ptr %79, align 8, !tbaa !5
  %1370 = getelementptr inbounds %struct.aiAnimMesh, ptr %1369, i32 0, i32 1
  %1371 = load ptr, ptr %1370, align 8, !tbaa !81
  %1372 = load i32, ptr %82, align 4, !tbaa !26
  %1373 = zext i32 %1372 to i64
  %1374 = getelementptr inbounds %class.aiVector3t, ptr %1371, i64 %1373
  %1375 = load ptr, ptr %80, align 8, !tbaa !5
  %1376 = getelementptr inbounds %struct.aiAnimMesh, ptr %1375, i32 0, i32 1
  %1377 = load ptr, ptr %1376, align 8, !tbaa !81
  %1378 = load i32, ptr %81, align 4, !tbaa !26
  %1379 = zext i32 %1378 to i64
  %1380 = getelementptr inbounds %class.aiVector3t, ptr %1377, i64 %1379
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1380, ptr align 4 %1374, i64 12, i1 false), !tbaa.struct !61
  %1381 = load ptr, ptr %80, align 8, !tbaa !5
  %1382 = invoke noundef zeroext i1 @_ZNK10aiAnimMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1381)
          to label %1383 unwind label %1397

1383:                                             ; preds = %1364
  br i1 %1382, label %1384, label %1401

1384:                                             ; preds = %1383
  %1385 = load ptr, ptr %79, align 8, !tbaa !5
  %1386 = getelementptr inbounds %struct.aiAnimMesh, ptr %1385, i32 0, i32 2
  %1387 = load ptr, ptr %1386, align 8, !tbaa !82
  %1388 = load i32, ptr %82, align 4, !tbaa !26
  %1389 = zext i32 %1388 to i64
  %1390 = getelementptr inbounds %class.aiVector3t, ptr %1387, i64 %1389
  %1391 = load ptr, ptr %80, align 8, !tbaa !5
  %1392 = getelementptr inbounds %struct.aiAnimMesh, ptr %1391, i32 0, i32 2
  %1393 = load ptr, ptr %1392, align 8, !tbaa !82
  %1394 = load i32, ptr %81, align 4, !tbaa !26
  %1395 = zext i32 %1394 to i64
  %1396 = getelementptr inbounds %class.aiVector3t, ptr %1393, i64 %1395
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1396, ptr align 4 %1390, i64 12, i1 false), !tbaa.struct !61
  br label %1401

1397:                                             ; preds = %1401, %1364
  %1398 = landingpad { ptr, i32 }
          cleanup
  %1399 = extractvalue { ptr, i32 } %1398, 0
  store ptr %1399, ptr %9, align 8
  %1400 = extractvalue { ptr, i32 } %1398, 1
  store i32 %1400, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  br label %1438

1401:                                             ; preds = %1384, %1383
  %1402 = load ptr, ptr %80, align 8, !tbaa !5
  %1403 = invoke noundef zeroext i1 @_ZNK10aiAnimMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1402)
          to label %1404 unwind label %1397

1404:                                             ; preds = %1401
  br i1 %1403, label %1405, label %1430

1405:                                             ; preds = %1404
  %1406 = load ptr, ptr %79, align 8, !tbaa !5
  %1407 = getelementptr inbounds %struct.aiAnimMesh, ptr %1406, i32 0, i32 3
  %1408 = load ptr, ptr %1407, align 8, !tbaa !83
  %1409 = load i32, ptr %82, align 4, !tbaa !26
  %1410 = zext i32 %1409 to i64
  %1411 = getelementptr inbounds %class.aiVector3t, ptr %1408, i64 %1410
  %1412 = load ptr, ptr %80, align 8, !tbaa !5
  %1413 = getelementptr inbounds %struct.aiAnimMesh, ptr %1412, i32 0, i32 3
  %1414 = load ptr, ptr %1413, align 8, !tbaa !83
  %1415 = load i32, ptr %81, align 4, !tbaa !26
  %1416 = zext i32 %1415 to i64
  %1417 = getelementptr inbounds %class.aiVector3t, ptr %1414, i64 %1416
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1417, ptr align 4 %1411, i64 12, i1 false), !tbaa.struct !61
  %1418 = load ptr, ptr %79, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct.aiAnimMesh, ptr %1418, i32 0, i32 4
  %1420 = load ptr, ptr %1419, align 8, !tbaa !84
  %1421 = load i32, ptr %82, align 4, !tbaa !26
  %1422 = zext i32 %1421 to i64
  %1423 = getelementptr inbounds %class.aiVector3t, ptr %1420, i64 %1422
  %1424 = load ptr, ptr %80, align 8, !tbaa !5
  %1425 = getelementptr inbounds %struct.aiAnimMesh, ptr %1424, i32 0, i32 4
  %1426 = load ptr, ptr %1425, align 8, !tbaa !84
  %1427 = load i32, ptr %81, align 4, !tbaa !26
  %1428 = zext i32 %1427 to i64
  %1429 = getelementptr inbounds %class.aiVector3t, ptr %1426, i64 %1428
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1429, ptr align 4 %1423, i64 12, i1 false), !tbaa.struct !61
  br label %1430

1430:                                             ; preds = %1405, %1404
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  br label %1431

1431:                                             ; preds = %1430
  %1432 = load i32, ptr %81, align 4, !tbaa !26
  %1433 = add i32 %1432, 1
  store i32 %1433, ptr %81, align 4, !tbaa !26
  br label %1359, !llvm.loop !85

1434:                                             ; preds = %1363
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  br label %1435

1435:                                             ; preds = %1434
  %1436 = load i32, ptr %78, align 4, !tbaa !26
  %1437 = add i32 %1436, 1
  store i32 %1437, ptr %78, align 4, !tbaa !26
  br label %1235, !llvm.loop !86

1438:                                             ; preds = %1397, %1313
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  br label %1441

1439:                                             ; preds = %1241
  br label %1440

1440:                                             ; preds = %1439, %1212
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #9
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #9
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %21) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %189, !llvm.loop !87

1441:                                             ; preds = %1438, %1204, %1118, %1018, %1002
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #9
  br label %1442

1442:                                             ; preds = %1441, %937
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #9
  br label %1443

1443:                                             ; preds = %1442, %933, %899
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #9
  br label %1444

1444:                                             ; preds = %1443, %686
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %1445

1445:                                             ; preds = %1444, %645, %592, %447, %425
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %1446

1446:                                             ; preds = %1445, %399
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %1447

1447:                                             ; preds = %1446, %221
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #9
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %21) #9
  br label %1448

1448:                                             ; preds = %1447, %217
  call void @llvm.lifetime.end.p0(i64 40, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #9
  br label %1451

1449:                                             ; preds = %189
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #9
  br label %1450

1450:                                             ; preds = %1449, %91
  ret void

1451:                                             ; preds = %1448, %213
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %1452

1452:                                             ; preds = %1451, %174
  call void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  br label %1453

1453:                                             ; preds = %1452, %105
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #9
  br label %1454

1454:                                             ; preds = %1453
  %1455 = load ptr, ptr %9, align 8
  %1456 = load i32, ptr %10, align 4
  %1457 = insertvalue { ptr, i32 } poison, ptr %1455, 0
  %1458 = insertvalue { ptr, i32 } %1457, i32 %1456, 1
  resume { ptr, i32 } %1458

1459:                                             ; preds = %384, %164
  unreachable
}

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #3

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE12emplace_backIJRjRfEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

declare ptr @__cxa_allocate_exception(i64)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #1 align 2

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5

declare void @__cxa_throw(ptr, ptr, ptr)

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIjSt4lessIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt3setIjSt4lessIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIjEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8aiString3SetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 4 dereferenceable(1028), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(376)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA1024_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376), ptr noundef nonnull align 1 dereferenceable(1024)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA5_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376), ptr noundef nonnull align 1 dereferenceable(5)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsImTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKS9_(ptr noundef nonnull align 8 dereferenceable(376), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEcvNSt7__cxx1112basic_stringIcS3_S4_EEEv(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(376)) #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(376)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP6aiMeshSaIS1_EE12emplace_backIJRS1_EEES5_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320), i32 noundef) #2 align 2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #2 align 2

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

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

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

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

declare void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef, ptr noundef, i32 noundef) #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028), ptr noundef nonnull align 4 dereferenceable(1028)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10aiAnimMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1200)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10aiAnimMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1200)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10aiAnimMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1200)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2 align 2

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { "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 = { noreturn }
attributes #11 = { builtin allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 216}
!10 = !{!"_ZTS6aiMesh", !11, i64 0, !11, i64 4, !11, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !6, i64 208, !11, i64 216, !6, i64 224, !11, i64 232, !12, i64 236, !11, i64 1264, !6, i64 1272, !13, i64 1280, !14, i64 1284, !6, i64 1312}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTS8aiString", !11, i64 0, !7, i64 4}
!13 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!14 = !{!"_ZTS6aiAABB", !15, i64 0, !15, i64 12}
!15 = !{!"_ZTS10aiVector3tIfE", !16, i64 0, !16, i64 4, !16, i64 8}
!16 = !{!"float", !7, i64 0}
!17 = !{!18, !20, i64 24}
!18 = !{!"_ZTSN6Assimp23SplitByBoneCountProcessE", !19, i64 0, !20, i64 24, !21, i64 32}
!19 = !{!"_ZTSN6Assimp11BaseProcessE", !6, i64 8, !6, i64 16}
!20 = !{!"long", !7, i64 0}
!21 = !{!"_ZTSSt6vectorIS_IjSaIjEESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseISt6vectorIjSaIjEESaIS2_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseISt6vectorIjSaIjEESaIS2_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseISt6vectorIjSaIjEESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!10, !11, i64 4}
!26 = !{!11, !11, i64 0}
!27 = !{!10, !6, i64 224}
!28 = !{!29, !11, i64 1028}
!29 = !{!"_ZTS6aiBone", !12, i64 0, !11, i64 1028, !6, i64 1032, !6, i64 1040, !6, i64 1048, !30, i64 1056}
!30 = !{!"_ZTS12aiMatrix4x4tIfE", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24, !16, i64 28, !16, i64 32, !16, i64 36, !16, i64 40, !16, i64 44, !16, i64 48, !16, i64 52, !16, i64 56, !16, i64 60}
!31 = !{!29, !6, i64 1048}
!32 = !{!33, !16, i64 4}
!33 = !{!"_ZTS14aiVertexWeight", !11, i64 0, !16, i64 4}
!34 = !{!33, !11, i64 0}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !36}
!38 = !{!10, !11, i64 8}
!39 = !{!40, !40, i64 0}
!40 = !{!"bool", !7, i64 0}
!41 = !{!10, !6, i64 208}
!42 = !{!43, !11, i64 0}
!43 = !{!"_ZTS6aiFace", !11, i64 0, !6, i64 8}
!44 = !{!43, !6, i64 8}
!45 = !{!46, !11, i64 0}
!46 = !{!"_ZTSSt4pairIjfE", !11, i64 0, !16, i64 4}
!47 = distinct !{!47, !36}
!48 = distinct !{!48, !36}
!49 = distinct !{!49, !36}
!50 = distinct !{!50, !36}
!51 = !{!10, !11, i64 236}
!52 = !{!20, !20, i64 0}
!53 = !{!10, !11, i64 232}
!54 = !{!10, !11, i64 0}
!55 = !{!10, !6, i64 16}
!56 = !{!10, !6, i64 24}
!57 = !{!10, !6, i64 32}
!58 = !{!10, !6, i64 40}
!59 = distinct !{!59, !36}
!60 = distinct !{!60, !36}
!61 = !{i64 0, i64 4, !62, i64 4, i64 4, !62, i64 8, i64 4, !62}
!62 = !{!16, !16, i64 0}
!63 = distinct !{!63, !36}
!64 = !{i64 0, i64 4, !62, i64 4, i64 4, !62, i64 8, i64 4, !62, i64 12, i64 4, !62}
!65 = distinct !{!65, !36}
!66 = distinct !{!66, !36}
!67 = distinct !{!67, !36}
!68 = !{i64 0, i64 4, !62, i64 4, i64 4, !62, i64 8, i64 4, !62, i64 12, i64 4, !62, i64 16, i64 4, !62, i64 20, i64 4, !62, i64 24, i64 4, !62, i64 28, i64 4, !62, i64 32, i64 4, !62, i64 36, i64 4, !62, i64 40, i64 4, !62, i64 44, i64 4, !62, i64 48, i64 4, !62, i64 52, i64 4, !62, i64 56, i64 4, !62, i64 60, i64 4, !62}
!69 = distinct !{!69, !36}
!70 = distinct !{!70, !36}
!71 = distinct !{!71, !36}
!72 = distinct !{!72, !36}
!73 = !{!46, !16, i64 4}
!74 = distinct !{!74, !36}
!75 = distinct !{!75, !36}
!76 = !{!10, !11, i64 1264}
!77 = !{!10, !6, i64 1272}
!78 = !{!79, !16, i64 1196}
!79 = !{!"_ZTS10aiAnimMesh", !12, i64 0, !6, i64 1032, !6, i64 1040, !6, i64 1048, !6, i64 1056, !7, i64 1064, !7, i64 1128, !11, i64 1192, !16, i64 1196}
!80 = !{!79, !11, i64 1192}
!81 = !{!79, !6, i64 1032}
!82 = !{!79, !6, i64 1040}
!83 = !{!79, !6, i64 1048}
!84 = !{!79, !6, i64 1056}
!85 = distinct !{!85, !36}
!86 = distinct !{!86, !36}
!87 = distinct !{!87, !36}


; 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::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<std::pair<unsigned int, float>>, std::allocator<std::vector<std::pair<unsigned int, float>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.12" = type { i8 }
%"class.std::vector.20" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.24" = type { i8 }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.35 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.35 = type { i64, [8 x i8] }
%"class.Assimp::Formatter::basic_formatter" = type { %"class.std::__cxx11::basic_ostringstream" }
%"class.std::__cxx11::basic_ostringstream" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"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::allocator.7" = type { i8 }
%struct.aiVertexWeight = type { i32, float }
%struct.aiFace = type { i32, ptr }
%class.aiVector3t = type { float, float, float }
%class.aiColor4t = type { float, float, float, float }

@.str.7 = external hidden unnamed_addr constant [88 x i8], align 1
@_ZTI17DeadlyImportError = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [132 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [57 x i8], align 1

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Assimp23SplitByBoneCountProcess9SplitMeshEPK6aiMeshRSt6vectorIPS1_SaIS5_EE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(56) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::vector.10", align 8
  %5 = alloca %"class.std::allocator.12", align 1
  %6 = alloca i32, align 4
  %7 = alloca %"class.std::vector.20", align 8
  %8 = alloca i8, align 1
  %9 = alloca %"class.std::allocator.24", align 1
  %10 = alloca %"class.std::vector.20", align 8
  %11 = alloca i8, align 1
  %12 = alloca %"class.std::allocator.24", align 1
  %13 = alloca %"class.std::vector.5", align 8
  %14 = alloca i32, align 4
  %15 = alloca %"struct.std::_Bit_reference", align 8
  %16 = alloca %"class.std::set", align 8
  %17 = alloca i32, align 4
  %18 = alloca %"struct.std::_Bit_reference", align 8
  %19 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %20 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %21 = alloca %"struct.std::_Bit_reference", align 8
  %22 = alloca %"struct.std::_Bit_reference", align 8
  %23 = alloca %"struct.std::_Bit_reference", align 8
  %24 = alloca ptr, align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.Assimp::Formatter::basic_formatter", align 8
  %27 = alloca i64, align 8
  %28 = alloca %"class.std::vector.5", align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.std::allocator.7", align 1
  %31 = alloca %"class.std::vector.5", align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::allocator.7", align 1
  %34 = alloca %"struct.std::_Bit_reference", align 8
  %35 = getelementptr inbounds i8, ptr %1, i64 216
  %36 = load i32, ptr %35, align 8, !tbaa !5
  %37 = zext i32 %36 to i64
  %38 = getelementptr inbounds i8, ptr %0, i64 24
  %39 = load i64, ptr %38, align 8, !tbaa !16
  %.not = icmp ult i64 %39, %37
  br i1 %.not, label %40, label %1178

40:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #8
  %41 = getelementptr inbounds i8, ptr %1, i64 4
  %42 = load i32, ptr %41, align 4, !tbaa !24
  %43 = zext i32 %42 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #8
  call void @_ZNSaISt6vectorISt4pairIjfESaIS1_EEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #8
  invoke void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %43, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %44 unwind label %50

44:                                               ; preds = %40
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIjfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #8
  store i32 0, ptr %6, align 4, !tbaa !25
  %45 = load i32, ptr %35, align 8, !tbaa !5
  %.not430 = icmp eq i32 %45, 0
  br i1 %.not430, label %._crit_edge360, label %.lr.ph359

.lr.ph359:                                        ; preds = %44
  %46 = getelementptr inbounds i8, ptr %1, i64 224
  br label %52

._crit_edge360:                                   ; preds = %._crit_edge, %44
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #8
  %47 = getelementptr inbounds i8, ptr %1, i64 8
  %48 = load i32, ptr %47, align 8, !tbaa !26
  %49 = zext i32 %48 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #8
  store i8 0, ptr %8, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #8
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %49, ptr noundef nonnull align 1 dereferenceable(1) %8, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %94 unwind label %146

50:                                               ; preds = %40
  %51 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorISt6vectorISt4pairIjfESaIS2_EEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #8
  br label %1181

52:                                               ; preds = %.lr.ph359, %._crit_edge
  %53 = phi i32 [ %45, %.lr.ph359 ], [ %61, %._crit_edge ]
  %storemerge357 = phi i32 [ 0, %.lr.ph359 ], [ %63, %._crit_edge ]
  %54 = load ptr, ptr %46, align 8, !tbaa !29
  %55 = zext i32 %storemerge357 to i64
  %56 = getelementptr inbounds ptr, ptr %54, i64 %55
  %57 = load ptr, ptr %56, align 8, !tbaa !30
  %58 = getelementptr inbounds i8, ptr %57, i64 1028
  %59 = load i32, ptr %58, align 4, !tbaa !31
  %.not431 = icmp eq i32 %59, 0
  br i1 %.not431, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %52
  %60 = getelementptr inbounds i8, ptr %57, i64 1048
  br label %65

._crit_edge.loopexit:                             ; preds = %90
  %.pre488 = load i32, ptr %6, align 4, !tbaa !25
  %.pre489 = load i32, ptr %35, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %52
  %61 = phi i32 [ %.pre489, %._crit_edge.loopexit ], [ %53, %52 ]
  %62 = phi i32 [ %.pre488, %._crit_edge.loopexit ], [ %storemerge357, %52 ]
  %63 = add i32 %62, 1
  store i32 %63, ptr %6, align 4, !tbaa !25
  %64 = icmp ult i32 %63, %61
  br i1 %64, label %52, label %._crit_edge360, !llvm.loop !34

65:                                               ; preds = %.lr.ph, %90
  %66 = phi i32 [ %59, %.lr.ph ], [ %91, %90 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %90 ]
  %67 = load ptr, ptr %60, align 8, !tbaa !36
  %68 = getelementptr inbounds %struct.aiVertexWeight, ptr %67, i64 %indvars.iv
  %69 = getelementptr inbounds i8, ptr %68, i64 4
  %70 = load float, ptr %69, align 4, !tbaa !37
  %71 = fcmp ogt float %70, 0.000000e+00
  br i1 %71, label %72, label %90

72:                                               ; preds = %65
  %73 = load i32, ptr %68, align 4, !tbaa !39
  %74 = sext i32 %73 to i64
  %75 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %74) #8
  %76 = load ptr, ptr %60, align 8, !tbaa !36
  %77 = getelementptr inbounds %struct.aiVertexWeight, ptr %76, i64 %indvars.iv, i32 1
  %78 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE12emplace_backIJRjRfEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %75, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %77)
          to label %79 unwind label %.loopexit331

79:                                               ; preds = %72
  %80 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %74) #8
  %81 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %80) #8
  %82 = load i64, ptr %38, align 8, !tbaa !16
  %83 = icmp ugt i64 %81, %82
  br i1 %83, label %84, label %._crit_edge487

._crit_edge487:                                   ; preds = %79
  %.pre = load i32, ptr %58, align 4, !tbaa !31
  br label %90

84:                                               ; preds = %79
  %85 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %85, ptr noundef nonnull @.str.7)
          to label %86 unwind label %87

86:                                               ; preds = %84
  invoke void @__cxa_throw(ptr nonnull %85, ptr nonnull @_ZTI17DeadlyImportError, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
          to label %1182 unwind label %.loopexit.split-lp

.loopexit331:                                     ; preds = %72
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %89

.loopexit.split-lp:                               ; preds = %86
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %89

87:                                               ; preds = %84
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %85) #8
  br label %89

89:                                               ; preds = %.loopexit331, %.loopexit.split-lp, %87
  %.pn312 = phi { ptr, i32 } [ %88, %87 ], [ %lpad.loopexit, %.loopexit331 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #8
  br label %1180

90:                                               ; preds = %._crit_edge487, %65
  %91 = phi i32 [ %.pre, %._crit_edge487 ], [ %66, %65 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %92 = zext i32 %91 to i64
  %93 = icmp ult i64 %indvars.iv.next, %92
  br i1 %93, label %65, label %._crit_edge.loopexit, !llvm.loop !40

94:                                               ; preds = %._crit_edge360
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  %95 = load i32, ptr %47, align 8, !tbaa !26
  %.not432 = icmp eq i32 %95, 0
  br i1 %.not432, label %._crit_edge429, label %.lr.ph428

.lr.ph428:                                        ; preds = %94
  %96 = getelementptr inbounds i8, ptr %15, i64 8
  %97 = getelementptr inbounds i8, ptr %1, i64 208
  %98 = getelementptr inbounds i8, ptr %18, i64 8
  %99 = getelementptr inbounds i8, ptr %21, i64 8
  %100 = getelementptr inbounds i8, ptr %22, i64 8
  %101 = getelementptr inbounds i8, ptr %23, i64 8
  %102 = getelementptr inbounds i8, ptr %1, i64 236
  %103 = getelementptr inbounds i8, ptr %1, i64 240
  %104 = getelementptr inbounds i8, ptr %1, i64 232
  %105 = getelementptr inbounds i8, ptr %1, i64 176
  %106 = getelementptr inbounds i8, ptr %1, i64 16
  %107 = getelementptr inbounds i8, ptr %1, i64 24
  %108 = getelementptr inbounds i8, ptr %1, i64 32
  %109 = getelementptr inbounds i8, ptr %1, i64 40
  %110 = getelementptr inbounds i8, ptr %1, i64 112
  %111 = getelementptr inbounds i8, ptr %1, i64 48
  %112 = getelementptr inbounds i8, ptr %34, i64 8
  %113 = getelementptr inbounds i8, ptr %1, i64 224
  %114 = getelementptr inbounds i8, ptr %1, i64 1264
  %115 = getelementptr inbounds i8, ptr %1, i64 1272
  %116 = getelementptr inbounds i8, ptr %1, i64 180
  %117 = getelementptr inbounds i8, ptr %1, i64 184
  %118 = getelementptr inbounds i8, ptr %1, i64 188
  %119 = getelementptr inbounds i8, ptr %1, i64 192
  %120 = getelementptr inbounds i8, ptr %1, i64 196
  %121 = getelementptr inbounds i8, ptr %1, i64 200
  %122 = getelementptr inbounds i8, ptr %1, i64 204
  %123 = getelementptr inbounds i8, ptr %1, i64 120
  %124 = getelementptr inbounds i8, ptr %1, i64 128
  %125 = getelementptr inbounds i8, ptr %1, i64 136
  %126 = getelementptr inbounds i8, ptr %1, i64 144
  %127 = getelementptr inbounds i8, ptr %1, i64 152
  %128 = getelementptr inbounds i8, ptr %1, i64 160
  %129 = getelementptr inbounds i8, ptr %1, i64 168
  %130 = getelementptr inbounds i8, ptr %1, i64 56
  %131 = getelementptr inbounds i8, ptr %1, i64 64
  %132 = getelementptr inbounds i8, ptr %1, i64 72
  %133 = getelementptr inbounds i8, ptr %1, i64 80
  %134 = getelementptr inbounds i8, ptr %1, i64 88
  %135 = getelementptr inbounds i8, ptr %1, i64 96
  %136 = getelementptr inbounds i8, ptr %1, i64 104
  br label %137

137:                                              ; preds = %.lr.ph428, %.loopexit322
  %.0238426 = phi i32 [ 0, %.lr.ph428 ], [ %.1239.lcssa, %.loopexit322 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #8
  %138 = load i32, ptr %35, align 8, !tbaa !5
  %139 = zext i32 %138 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #8
  store i8 0, ptr %11, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #8
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %139, ptr noundef nonnull align 1 dereferenceable(1) %11, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %140 unwind label %148

140:                                              ; preds = %137
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %141 = load i32, ptr %47, align 8, !tbaa !26
  %142 = zext i32 %141 to i64
  invoke void @_ZNSt6vectorIjSaIjEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %142)
          to label %143 unwind label %150

143:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #8
  store i32 0, ptr %14, align 4, !tbaa !25
  %144 = load i32, ptr %47, align 8, !tbaa !26
  %.not433 = icmp eq i32 %144, 0
  br i1 %.not433, label %._crit_edge379, label %.lr.ph378

._crit_edge379:                                   ; preds = %246, %143
  %.0248.lcssa = phi i32 [ 0, %143 ], [ %.2250, %246 ]
  %.0243.lcssa = phi i32 [ 0, %143 ], [ %.4247, %246 ]
  %.1239.lcssa = phi i32 [ %.0238426, %143 ], [ %.3241, %246 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  %145 = invoke noalias noundef nonnull dereferenceable(1320) ptr @_Znwm(i64 noundef 1320) #10
          to label %257 unwind label %270

146:                                              ; preds = %._crit_edge360
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  br label %1179

148:                                              ; preds = %137
  %149 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  br label %1177

150:                                              ; preds = %140
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %1176

.lr.ph378:                                        ; preds = %143, %246
  %.1239376 = phi i32 [ %.3241, %246 ], [ %.0238426, %143 ]
  %.0243375 = phi i32 [ %.4247, %246 ], [ 0, %143 ]
  %.0248374 = phi i32 [ %.2250, %246 ], [ 0, %143 ]
  %storemerge285373 = phi i32 [ %248, %246 ], [ 0, %143 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  %152 = zext i32 %storemerge285373 to i64
  %153 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %152)
          to label %154 unwind label %158

154:                                              ; preds = %.lr.ph378
  %155 = extractvalue { ptr, i64 } %153, 0
  store ptr %155, ptr %15, align 8
  %156 = extractvalue { ptr, i64 } %153, 1
  store i64 %156, ptr %96, align 8
  %157 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %15) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  br i1 %157, label %246, label %160

158:                                              ; preds = %.lr.ph378
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  br label %256

160:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %16) #8
  call void @_ZNSt3setIjSt4lessIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  %161 = load ptr, ptr %97, align 8, !tbaa !41
  %162 = load i32, ptr %14, align 4, !tbaa !25
  %163 = zext i32 %162 to i64
  %164 = getelementptr inbounds %struct.aiFace, ptr %161, i64 %163
  %165 = load i32, ptr %164, align 8, !tbaa !42
  %.not434 = icmp eq i32 %165, 0
  br i1 %.not434, label %._crit_edge368, label %.lr.ph367

.lr.ph367:                                        ; preds = %160
  %166 = getelementptr inbounds i8, ptr %164, i64 8
  br label %172

._crit_edge368:                                   ; preds = %._crit_edge364, %160
  %167 = zext i32 %.0243375 to i64
  %168 = call noundef i64 @_ZNKSt3setIjSt4lessIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  %169 = add i64 %168, %167
  %170 = load i64, ptr %38, align 8, !tbaa !16
  %171 = icmp ugt i64 %169, %170
  br i1 %171, label %245, label %203

172:                                              ; preds = %.lr.ph367, %._crit_edge364
  %indvars.iv447 = phi i64 [ 0, %.lr.ph367 ], [ %indvars.iv.next448, %._crit_edge364 ]
  %173 = load ptr, ptr %166, align 8, !tbaa !44
  %174 = getelementptr inbounds i32, ptr %173, i64 %indvars.iv447
  %175 = load i32, ptr %174, align 4, !tbaa !25
  %176 = zext i32 %175 to i64
  %177 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %176) #8
  %178 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %177) #8
  %.not435 = icmp eq i64 %178, 0
  br i1 %.not435, label %._crit_edge364, label %.lr.ph363

._crit_edge364:                                   ; preds = %197, %172
  %indvars.iv.next448 = add nuw nsw i64 %indvars.iv447, 1
  %179 = load i32, ptr %164, align 8, !tbaa !42
  %180 = zext i32 %179 to i64
  %181 = icmp ult i64 %indvars.iv.next448, %180
  br i1 %181, label %172, label %._crit_edge368, !llvm.loop !45

.lr.ph363:                                        ; preds = %172, %197
  %182 = phi i64 [ %199, %197 ], [ 0, %172 ]
  %.0254361 = phi i32 [ %198, %197 ], [ 0, %172 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  %183 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %177, i64 noundef %182) #8
  %184 = load i32, ptr %183, align 4, !tbaa !46
  store i32 %184, ptr %17, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #8
  %185 = zext i32 %184 to i64
  %186 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %185)
          to label %187 unwind label %193

187:                                              ; preds = %.lr.ph363
  %188 = extractvalue { ptr, i64 } %186, 0
  store ptr %188, ptr %18, align 8
  %189 = extractvalue { ptr, i64 } %186, 1
  store i64 %189, ptr %98, align 8
  %190 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  br i1 %190, label %197, label %191

191:                                              ; preds = %187
  %192 = invoke { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48) %16, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %197 unwind label %195

193:                                              ; preds = %.lr.ph363
  %194 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  br label %202

195:                                              ; preds = %191
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %202

197:                                              ; preds = %191, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  %198 = add i32 %.0254361, 1
  %199 = zext i32 %198 to i64
  %200 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %177) #8
  %201 = icmp ugt i64 %200, %199
  br i1 %201, label %.lr.ph363, label %._crit_edge364, !llvm.loop !48

202:                                              ; preds = %195, %193
  %.pn304 = phi { ptr, i32 } [ %196, %195 ], [ %194, %193 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  br label %255

203:                                              ; preds = %._crit_edge368
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  %204 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  store ptr %204, ptr %19, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %205 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  store ptr %205, ptr %20, align 8
  %206 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br i1 %206, label %.lr.ph371, label %._crit_edge372

._crit_edge372:                                   ; preds = %229, %203
  %.1244.lcssa = phi i32 [ %.0243375, %203 ], [ %.2245, %229 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %234 unwind label %251

.lr.ph371:                                        ; preds = %203, %229
  %.1244369 = phi i32 [ %.2245, %229 ], [ %.0243375, %203 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #8
  %207 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  %208 = load i32, ptr %207, align 4, !tbaa !25
  %209 = zext i32 %208 to i64
  %210 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %209)
          to label %211 unwind label %225

211:                                              ; preds = %.lr.ph371
  %212 = extractvalue { ptr, i64 } %210, 0
  store ptr %212, ptr %21, align 8
  %213 = extractvalue { ptr, i64 } %210, 1
  store i64 %213, ptr %99, align 8
  %214 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %21) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #8
  br i1 %214, label %229, label %215

215:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #8
  %216 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  %217 = load i32, ptr %216, align 4, !tbaa !25
  %218 = zext i32 %217 to i64
  %219 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %218)
          to label %220 unwind label %227

220:                                              ; preds = %215
  %221 = extractvalue { ptr, i64 } %219, 0
  store ptr %221, ptr %22, align 8
  %222 = extractvalue { ptr, i64 } %219, 1
  store i64 %222, ptr %100, align 8
  %223 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %22, i1 noundef zeroext true) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #8
  %224 = add i32 %.1244369, 1
  br label %229

225:                                              ; preds = %.lr.ph371
  %226 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #8
  br label %233

227:                                              ; preds = %215
  %228 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #8
  br label %233

229:                                              ; preds = %211, %220
  %.2245 = phi i32 [ %224, %220 ], [ %.1244369, %211 ]
  %230 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIjEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %231 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  store ptr %231, ptr %20, align 8
  %232 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br i1 %232, label %.lr.ph371, label %._crit_edge372, !llvm.loop !49

233:                                              ; preds = %227, %225
  %.pn302 = phi { ptr, i32 } [ %228, %227 ], [ %226, %225 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  br label %255

234:                                              ; preds = %._crit_edge372
  %235 = load i32, ptr %164, align 8, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #8
  %236 = load i32, ptr %14, align 4, !tbaa !25
  %237 = zext i32 %236 to i64
  %238 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %237)
          to label %239 unwind label %253

239:                                              ; preds = %234
  %240 = add i32 %235, %.0248374
  %241 = extractvalue { ptr, i64 } %238, 0
  store ptr %241, ptr %23, align 8
  %242 = extractvalue { ptr, i64 } %238, 1
  store i64 %242, ptr %101, align 8
  %243 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %23, i1 noundef zeroext true) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #8
  %244 = add i32 %.1239376, 1
  br label %245

245:                                              ; preds = %._crit_edge368, %239
  %.1249 = phi i32 [ %240, %239 ], [ %.0248374, %._crit_edge368 ]
  %.3246 = phi i32 [ %.1244.lcssa, %239 ], [ %.0243375, %._crit_edge368 ]
  %.2240 = phi i32 [ %244, %239 ], [ %.1239376, %._crit_edge368 ]
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %16) #8
  br label %246

246:                                              ; preds = %245, %154
  %.2250 = phi i32 [ %.0248374, %154 ], [ %.1249, %245 ]
  %.4247 = phi i32 [ %.0243375, %154 ], [ %.3246, %245 ]
  %.3241 = phi i32 [ %.1239376, %154 ], [ %.2240, %245 ]
  %247 = load i32, ptr %14, align 4, !tbaa !25
  %248 = add i32 %247, 1
  store i32 %248, ptr %14, align 4, !tbaa !25
  %249 = load i32, ptr %47, align 8, !tbaa !26
  %250 = icmp ult i32 %248, %249
  br i1 %250, label %.lr.ph378, label %._crit_edge379, !llvm.loop !50

251:                                              ; preds = %._crit_edge372
  %252 = landingpad { ptr, i32 }
          cleanup
  br label %255

253:                                              ; preds = %234
  %254 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #8
  br label %255

255:                                              ; preds = %253, %251, %233, %202
  %.pn304.pn = phi { ptr, i32 } [ %.pn304, %202 ], [ %.pn302, %233 ], [ %254, %253 ], [ %252, %251 ]
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %16) #8
  br label %256

256:                                              ; preds = %255, %158
  %.pn304.pn.pn = phi { ptr, i32 } [ %.pn304.pn, %255 ], [ %159, %158 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  br label %1176

257:                                              ; preds = %._crit_edge379
  call void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %145) #8
  store ptr %145, ptr %24, align 8, !tbaa !30
  %258 = load i32, ptr %102, align 4, !tbaa !51
  %.not286 = icmp eq i32 %258, 0
  br i1 %.not286, label %280, label %259

259:                                              ; preds = %257
  %260 = getelementptr inbounds i8, ptr %145, i64 236
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #8
  call void @llvm.lifetime.start.p0(i64 376, ptr nonnull %26) #8
  invoke void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(376) %26)
          to label %261 unwind label %272

261:                                              ; preds = %259
  %262 = invoke noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA1024_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376) %26, ptr noundef nonnull align 1 dereferenceable(1024) %103)
          to label %263 unwind label %274

263:                                              ; preds = %261
  %264 = invoke noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA5_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376) %262, ptr noundef nonnull align 1 dereferenceable(5) @.str.8)
          to label %265 unwind label %274

265:                                              ; preds = %263
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #8
  %266 = call noundef i64 @_ZNKSt6vectorIP6aiMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  store i64 %266, ptr %27, align 8, !tbaa !52
  %267 = invoke noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsImTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKS9_(ptr noundef nonnull align 8 dereferenceable(376) %264, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %268 unwind label %276

268:                                              ; preds = %265
  invoke void @_ZNK6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEcvNSt7__cxx1112basic_stringIcS3_S4_EEEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(376) %267)
          to label %269 unwind label %276

269:                                              ; preds = %268
  call void @_ZN8aiString3SetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 4 dereferenceable(1028) %260, ptr noundef nonnull align 8 dereferenceable(32) %25)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  call void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(376) %26) #8
  call void @llvm.lifetime.end.p0(i64 376, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  %.pre490 = load ptr, ptr %24, align 8, !tbaa !30
  br label %280

270:                                              ; preds = %676, %.loopexit328, %328, %309, %286, %280, %._crit_edge379
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %1175

272:                                              ; preds = %259
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %279

274:                                              ; preds = %263, %261
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %278

276:                                              ; preds = %268, %265
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  br label %278

278:                                              ; preds = %276, %274
  %.pn = phi { ptr, i32 } [ %277, %276 ], [ %275, %274 ]
  call void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(376) %26) #8
  br label %279

279:                                              ; preds = %278, %272
  %.pn.pn = phi { ptr, i32 } [ %.pn, %278 ], [ %273, %272 ]
  call void @llvm.lifetime.end.p0(i64 376, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %1175

280:                                              ; preds = %269, %257
  %281 = phi ptr [ %.pre490, %269 ], [ %145, %257 ]
  %282 = load i32, ptr %104, align 8, !tbaa !53
  %283 = getelementptr inbounds i8, ptr %281, i64 232
  store i32 %282, ptr %283, align 8, !tbaa !53
  %284 = load i32, ptr %1, align 8, !tbaa !54
  store i32 %284, ptr %281, align 8, !tbaa !54
  %285 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP6aiMeshSaIS1_EE12emplace_backIJRS1_EEES5_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %286 unwind label %270

286:                                              ; preds = %280
  %287 = load ptr, ptr %24, align 8, !tbaa !30
  %288 = getelementptr inbounds i8, ptr %287, i64 4
  store i32 %.0248.lcssa, ptr %288, align 4, !tbaa !24
  %289 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %290 = trunc i64 %289 to i32
  %291 = load ptr, ptr %24, align 8, !tbaa !30
  %292 = getelementptr inbounds i8, ptr %291, i64 8
  store i32 %290, ptr %292, align 8, !tbaa !26
  %293 = getelementptr inbounds i8, ptr %291, i64 4
  %294 = load i32, ptr %293, align 4, !tbaa !24
  %295 = zext i32 %294 to i64
  %296 = mul nuw nsw i64 %295, 12
  %297 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %296) #10
          to label %298 unwind label %270

298:                                              ; preds = %286
  %299 = icmp eq i32 %294, 0
  br i1 %299, label %.loopexit330, label %300

300:                                              ; preds = %298
  %301 = getelementptr inbounds %class.aiVector3t, ptr %297, i64 %295
  br label %302

302:                                              ; preds = %302, %300
  %303 = phi ptr [ %297, %300 ], [ %304, %302 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %303) #8
  %304 = getelementptr inbounds i8, ptr %303, i64 12
  %305 = icmp eq ptr %304, %301
  br i1 %305, label %.loopexit330.loopexit, label %302

.loopexit330.loopexit:                            ; preds = %302
  %.pre491 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit330

.loopexit330:                                     ; preds = %.loopexit330.loopexit, %298
  %306 = phi ptr [ %.pre491, %.loopexit330.loopexit ], [ %291, %298 ]
  %307 = getelementptr inbounds i8, ptr %306, i64 16
  store ptr %297, ptr %307, align 8, !tbaa !55
  %308 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %308, label %309, label %326

309:                                              ; preds = %.loopexit330
  %310 = load ptr, ptr %24, align 8, !tbaa !30
  %311 = getelementptr inbounds i8, ptr %310, i64 4
  %312 = load i32, ptr %311, align 4, !tbaa !24
  %313 = zext i32 %312 to i64
  %314 = mul nuw nsw i64 %313, 12
  %315 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %314) #10
          to label %316 unwind label %270

316:                                              ; preds = %309
  %317 = icmp eq i32 %312, 0
  br i1 %317, label %.loopexit329, label %318

318:                                              ; preds = %316
  %319 = getelementptr inbounds %class.aiVector3t, ptr %315, i64 %313
  br label %320

320:                                              ; preds = %320, %318
  %321 = phi ptr [ %315, %318 ], [ %322, %320 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %321) #8
  %322 = getelementptr inbounds i8, ptr %321, i64 12
  %323 = icmp eq ptr %322, %319
  br i1 %323, label %.loopexit329.loopexit, label %320

.loopexit329.loopexit:                            ; preds = %320
  %.pre492 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit329

.loopexit329:                                     ; preds = %.loopexit329.loopexit, %316
  %324 = phi ptr [ %.pre492, %.loopexit329.loopexit ], [ %310, %316 ]
  %325 = getelementptr inbounds i8, ptr %324, i64 24
  store ptr %315, ptr %325, align 8, !tbaa !56
  br label %326

326:                                              ; preds = %.loopexit329, %.loopexit330
  %327 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %327, label %328, label %360

328:                                              ; preds = %326
  %329 = load ptr, ptr %24, align 8, !tbaa !30
  %330 = getelementptr inbounds i8, ptr %329, i64 4
  %331 = load i32, ptr %330, align 4, !tbaa !24
  %332 = zext i32 %331 to i64
  %333 = mul nuw nsw i64 %332, 12
  %334 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %333) #10
          to label %335 unwind label %270

335:                                              ; preds = %328
  %336 = icmp eq i32 %331, 0
  br i1 %336, label %.loopexit328, label %337

337:                                              ; preds = %335
  %338 = getelementptr inbounds %class.aiVector3t, ptr %334, i64 %332
  br label %339

339:                                              ; preds = %339, %337
  %340 = phi ptr [ %334, %337 ], [ %341, %339 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %340) #8
  %341 = getelementptr inbounds i8, ptr %340, i64 12
  %342 = icmp eq ptr %341, %338
  br i1 %342, label %.loopexit328.loopexit, label %339

.loopexit328.loopexit:                            ; preds = %339
  %.pre493 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit328

.loopexit328:                                     ; preds = %.loopexit328.loopexit, %335
  %343 = phi ptr [ %.pre493, %.loopexit328.loopexit ], [ %329, %335 ]
  %344 = getelementptr inbounds i8, ptr %343, i64 32
  store ptr %334, ptr %344, align 8, !tbaa !57
  %345 = getelementptr inbounds i8, ptr %343, i64 4
  %346 = load i32, ptr %345, align 4, !tbaa !24
  %347 = zext i32 %346 to i64
  %348 = mul nuw nsw i64 %347, 12
  %349 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %348) #10
          to label %350 unwind label %270

350:                                              ; preds = %.loopexit328
  %351 = icmp eq i32 %346, 0
  br i1 %351, label %.loopexit327, label %352

352:                                              ; preds = %350
  %353 = getelementptr inbounds %class.aiVector3t, ptr %349, i64 %347
  br label %354

354:                                              ; preds = %354, %352
  %355 = phi ptr [ %349, %352 ], [ %356, %354 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %355) #8
  %356 = getelementptr inbounds i8, ptr %355, i64 12
  %357 = icmp eq ptr %356, %353
  br i1 %357, label %.loopexit327.loopexit, label %354

.loopexit327.loopexit:                            ; preds = %354
  %.pre494 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit327

.loopexit327:                                     ; preds = %.loopexit327.loopexit, %350
  %358 = phi ptr [ %.pre494, %.loopexit327.loopexit ], [ %343, %350 ]
  %359 = getelementptr inbounds i8, ptr %358, i64 40
  store ptr %349, ptr %359, align 8, !tbaa !58
  br label %360

360:                                              ; preds = %.loopexit327, %326
  %361 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  %.pre496 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %361, label %362, label %380

362:                                              ; preds = %360
  %363 = getelementptr inbounds i8, ptr %.pre496, i64 4
  %364 = load i32, ptr %363, align 4, !tbaa !24
  %365 = zext i32 %364 to i64
  %366 = mul nuw nsw i64 %365, 12
  %367 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %366) #10
          to label %368 unwind label %378

368:                                              ; preds = %362
  %369 = icmp eq i32 %364, 0
  br i1 %369, label %.loopexit321, label %370

370:                                              ; preds = %368
  %371 = getelementptr inbounds %class.aiVector3t, ptr %367, i64 %365
  br label %372

372:                                              ; preds = %372, %370
  %373 = phi ptr [ %367, %370 ], [ %374, %372 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %373) #8
  %374 = getelementptr inbounds i8, ptr %373, i64 12
  %375 = icmp eq ptr %374, %371
  br i1 %375, label %.loopexit321.loopexit, label %372

.loopexit321.loopexit:                            ; preds = %372
  %.pre495 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321

.loopexit321:                                     ; preds = %.loopexit321.loopexit, %368
  %376 = phi ptr [ %.pre495, %.loopexit321.loopexit ], [ %.pre496, %368 ]
  %377 = getelementptr inbounds i8, ptr %376, i64 112
  store ptr %367, ptr %377, align 8, !tbaa !30
  br label %380

378:                                              ; preds = %511, %490, %469, %448, %427, %406, %385, %362
  %379 = landingpad { ptr, i32 }
          cleanup
  br label %1175

380:                                              ; preds = %.loopexit321, %360
  %381 = phi ptr [ %376, %.loopexit321 ], [ %.pre496, %360 ]
  %382 = load i32, ptr %105, align 4, !tbaa !25
  %383 = getelementptr inbounds i8, ptr %381, i64 176
  store i32 %382, ptr %383, align 4, !tbaa !25
  %384 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 1)
  %.pre498 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %384, label %385, label %401

385:                                              ; preds = %380
  %386 = getelementptr inbounds i8, ptr %.pre498, i64 4
  %387 = load i32, ptr %386, align 4, !tbaa !24
  %388 = zext i32 %387 to i64
  %389 = mul nuw nsw i64 %388, 12
  %390 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %389) #10
          to label %391 unwind label %378

391:                                              ; preds = %385
  %392 = icmp eq i32 %387, 0
  br i1 %392, label %.loopexit321.1, label %393

393:                                              ; preds = %391
  %394 = getelementptr inbounds %class.aiVector3t, ptr %390, i64 %388
  br label %395

395:                                              ; preds = %395, %393
  %396 = phi ptr [ %390, %393 ], [ %397, %395 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %396) #8
  %397 = getelementptr inbounds i8, ptr %396, i64 12
  %398 = icmp eq ptr %397, %394
  br i1 %398, label %.loopexit321.loopexit.1, label %395

.loopexit321.loopexit.1:                          ; preds = %395
  %.pre497 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321.1

.loopexit321.1:                                   ; preds = %.loopexit321.loopexit.1, %391
  %399 = phi ptr [ %.pre497, %.loopexit321.loopexit.1 ], [ %.pre498, %391 ]
  %400 = getelementptr inbounds i8, ptr %399, i64 120
  store ptr %390, ptr %400, align 8, !tbaa !30
  br label %401

401:                                              ; preds = %.loopexit321.1, %380
  %402 = phi ptr [ %399, %.loopexit321.1 ], [ %.pre498, %380 ]
  %403 = load i32, ptr %116, align 4, !tbaa !25
  %404 = getelementptr inbounds i8, ptr %402, i64 180
  store i32 %403, ptr %404, align 4, !tbaa !25
  %405 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 2)
  %.pre500 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %405, label %406, label %422

406:                                              ; preds = %401
  %407 = getelementptr inbounds i8, ptr %.pre500, i64 4
  %408 = load i32, ptr %407, align 4, !tbaa !24
  %409 = zext i32 %408 to i64
  %410 = mul nuw nsw i64 %409, 12
  %411 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %410) #10
          to label %412 unwind label %378

412:                                              ; preds = %406
  %413 = icmp eq i32 %408, 0
  br i1 %413, label %.loopexit321.2, label %414

414:                                              ; preds = %412
  %415 = getelementptr inbounds %class.aiVector3t, ptr %411, i64 %409
  br label %416

416:                                              ; preds = %416, %414
  %417 = phi ptr [ %411, %414 ], [ %418, %416 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %417) #8
  %418 = getelementptr inbounds i8, ptr %417, i64 12
  %419 = icmp eq ptr %418, %415
  br i1 %419, label %.loopexit321.loopexit.2, label %416

.loopexit321.loopexit.2:                          ; preds = %416
  %.pre499 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321.2

.loopexit321.2:                                   ; preds = %.loopexit321.loopexit.2, %412
  %420 = phi ptr [ %.pre499, %.loopexit321.loopexit.2 ], [ %.pre500, %412 ]
  %421 = getelementptr inbounds i8, ptr %420, i64 128
  store ptr %411, ptr %421, align 8, !tbaa !30
  br label %422

422:                                              ; preds = %.loopexit321.2, %401
  %423 = phi ptr [ %420, %.loopexit321.2 ], [ %.pre500, %401 ]
  %424 = load i32, ptr %117, align 4, !tbaa !25
  %425 = getelementptr inbounds i8, ptr %423, i64 184
  store i32 %424, ptr %425, align 4, !tbaa !25
  %426 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 3)
  %.pre502 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %426, label %427, label %443

427:                                              ; preds = %422
  %428 = getelementptr inbounds i8, ptr %.pre502, i64 4
  %429 = load i32, ptr %428, align 4, !tbaa !24
  %430 = zext i32 %429 to i64
  %431 = mul nuw nsw i64 %430, 12
  %432 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %431) #10
          to label %433 unwind label %378

433:                                              ; preds = %427
  %434 = icmp eq i32 %429, 0
  br i1 %434, label %.loopexit321.3, label %435

435:                                              ; preds = %433
  %436 = getelementptr inbounds %class.aiVector3t, ptr %432, i64 %430
  br label %437

437:                                              ; preds = %437, %435
  %438 = phi ptr [ %432, %435 ], [ %439, %437 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %438) #8
  %439 = getelementptr inbounds i8, ptr %438, i64 12
  %440 = icmp eq ptr %439, %436
  br i1 %440, label %.loopexit321.loopexit.3, label %437

.loopexit321.loopexit.3:                          ; preds = %437
  %.pre501 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321.3

.loopexit321.3:                                   ; preds = %.loopexit321.loopexit.3, %433
  %441 = phi ptr [ %.pre501, %.loopexit321.loopexit.3 ], [ %.pre502, %433 ]
  %442 = getelementptr inbounds i8, ptr %441, i64 136
  store ptr %432, ptr %442, align 8, !tbaa !30
  br label %443

443:                                              ; preds = %.loopexit321.3, %422
  %444 = phi ptr [ %441, %.loopexit321.3 ], [ %.pre502, %422 ]
  %445 = load i32, ptr %118, align 4, !tbaa !25
  %446 = getelementptr inbounds i8, ptr %444, i64 188
  store i32 %445, ptr %446, align 4, !tbaa !25
  %447 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 4)
  %.pre504 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %447, label %448, label %464

448:                                              ; preds = %443
  %449 = getelementptr inbounds i8, ptr %.pre504, i64 4
  %450 = load i32, ptr %449, align 4, !tbaa !24
  %451 = zext i32 %450 to i64
  %452 = mul nuw nsw i64 %451, 12
  %453 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %452) #10
          to label %454 unwind label %378

454:                                              ; preds = %448
  %455 = icmp eq i32 %450, 0
  br i1 %455, label %.loopexit321.4, label %456

456:                                              ; preds = %454
  %457 = getelementptr inbounds %class.aiVector3t, ptr %453, i64 %451
  br label %458

458:                                              ; preds = %458, %456
  %459 = phi ptr [ %453, %456 ], [ %460, %458 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %459) #8
  %460 = getelementptr inbounds i8, ptr %459, i64 12
  %461 = icmp eq ptr %460, %457
  br i1 %461, label %.loopexit321.loopexit.4, label %458

.loopexit321.loopexit.4:                          ; preds = %458
  %.pre503 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321.4

.loopexit321.4:                                   ; preds = %.loopexit321.loopexit.4, %454
  %462 = phi ptr [ %.pre503, %.loopexit321.loopexit.4 ], [ %.pre504, %454 ]
  %463 = getelementptr inbounds i8, ptr %462, i64 144
  store ptr %453, ptr %463, align 8, !tbaa !30
  br label %464

464:                                              ; preds = %.loopexit321.4, %443
  %465 = phi ptr [ %462, %.loopexit321.4 ], [ %.pre504, %443 ]
  %466 = load i32, ptr %119, align 4, !tbaa !25
  %467 = getelementptr inbounds i8, ptr %465, i64 192
  store i32 %466, ptr %467, align 4, !tbaa !25
  %468 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 5)
  %.pre506 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %468, label %469, label %485

469:                                              ; preds = %464
  %470 = getelementptr inbounds i8, ptr %.pre506, i64 4
  %471 = load i32, ptr %470, align 4, !tbaa !24
  %472 = zext i32 %471 to i64
  %473 = mul nuw nsw i64 %472, 12
  %474 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %473) #10
          to label %475 unwind label %378

475:                                              ; preds = %469
  %476 = icmp eq i32 %471, 0
  br i1 %476, label %.loopexit321.5, label %477

477:                                              ; preds = %475
  %478 = getelementptr inbounds %class.aiVector3t, ptr %474, i64 %472
  br label %479

479:                                              ; preds = %479, %477
  %480 = phi ptr [ %474, %477 ], [ %481, %479 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %480) #8
  %481 = getelementptr inbounds i8, ptr %480, i64 12
  %482 = icmp eq ptr %481, %478
  br i1 %482, label %.loopexit321.loopexit.5, label %479

.loopexit321.loopexit.5:                          ; preds = %479
  %.pre505 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321.5

.loopexit321.5:                                   ; preds = %.loopexit321.loopexit.5, %475
  %483 = phi ptr [ %.pre505, %.loopexit321.loopexit.5 ], [ %.pre506, %475 ]
  %484 = getelementptr inbounds i8, ptr %483, i64 152
  store ptr %474, ptr %484, align 8, !tbaa !30
  br label %485

485:                                              ; preds = %.loopexit321.5, %464
  %486 = phi ptr [ %483, %.loopexit321.5 ], [ %.pre506, %464 ]
  %487 = load i32, ptr %120, align 4, !tbaa !25
  %488 = getelementptr inbounds i8, ptr %486, i64 196
  store i32 %487, ptr %488, align 4, !tbaa !25
  %489 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 6)
  %.pre508 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %489, label %490, label %506

490:                                              ; preds = %485
  %491 = getelementptr inbounds i8, ptr %.pre508, i64 4
  %492 = load i32, ptr %491, align 4, !tbaa !24
  %493 = zext i32 %492 to i64
  %494 = mul nuw nsw i64 %493, 12
  %495 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %494) #10
          to label %496 unwind label %378

496:                                              ; preds = %490
  %497 = icmp eq i32 %492, 0
  br i1 %497, label %.loopexit321.6, label %498

498:                                              ; preds = %496
  %499 = getelementptr inbounds %class.aiVector3t, ptr %495, i64 %493
  br label %500

500:                                              ; preds = %500, %498
  %501 = phi ptr [ %495, %498 ], [ %502, %500 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %501) #8
  %502 = getelementptr inbounds i8, ptr %501, i64 12
  %503 = icmp eq ptr %502, %499
  br i1 %503, label %.loopexit321.loopexit.6, label %500

.loopexit321.loopexit.6:                          ; preds = %500
  %.pre507 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321.6

.loopexit321.6:                                   ; preds = %.loopexit321.loopexit.6, %496
  %504 = phi ptr [ %.pre507, %.loopexit321.loopexit.6 ], [ %.pre508, %496 ]
  %505 = getelementptr inbounds i8, ptr %504, i64 160
  store ptr %495, ptr %505, align 8, !tbaa !30
  br label %506

506:                                              ; preds = %.loopexit321.6, %485
  %507 = phi ptr [ %504, %.loopexit321.6 ], [ %.pre508, %485 ]
  %508 = load i32, ptr %121, align 4, !tbaa !25
  %509 = getelementptr inbounds i8, ptr %507, i64 200
  store i32 %508, ptr %509, align 4, !tbaa !25
  %510 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 7)
  %.pre510 = load ptr, ptr %24, align 8, !tbaa !30
  br i1 %510, label %511, label %.preheader326.preheader

511:                                              ; preds = %506
  %512 = getelementptr inbounds i8, ptr %.pre510, i64 4
  %513 = load i32, ptr %512, align 4, !tbaa !24
  %514 = zext i32 %513 to i64
  %515 = mul nuw nsw i64 %514, 12
  %516 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %515) #10
          to label %517 unwind label %378

517:                                              ; preds = %511
  %518 = icmp eq i32 %513, 0
  br i1 %518, label %.loopexit321.7, label %519

519:                                              ; preds = %517
  %520 = getelementptr inbounds %class.aiVector3t, ptr %516, i64 %514
  br label %521

521:                                              ; preds = %521, %519
  %522 = phi ptr [ %516, %519 ], [ %523, %521 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %522) #8
  %523 = getelementptr inbounds i8, ptr %522, i64 12
  %524 = icmp eq ptr %523, %520
  br i1 %524, label %.loopexit321.loopexit.7, label %521

.loopexit321.loopexit.7:                          ; preds = %521
  %.pre509 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit321.7

.loopexit321.7:                                   ; preds = %.loopexit321.loopexit.7, %517
  %525 = phi ptr [ %.pre509, %.loopexit321.loopexit.7 ], [ %.pre510, %517 ]
  %526 = getelementptr inbounds i8, ptr %525, i64 168
  store ptr %516, ptr %526, align 8, !tbaa !30
  br label %.preheader326.preheader

.preheader326.preheader:                          ; preds = %.loopexit321.7, %506
  %527 = phi ptr [ %525, %.loopexit321.7 ], [ %.pre510, %506 ]
  %528 = load i32, ptr %122, align 4, !tbaa !25
  %529 = getelementptr inbounds i8, ptr %527, i64 204
  store i32 %528, ptr %529, align 4, !tbaa !25
  %530 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %530, label %531, label %.preheader326.1

531:                                              ; preds = %.preheader326.preheader
  %532 = load ptr, ptr %24, align 8, !tbaa !30
  %533 = getelementptr inbounds i8, ptr %532, i64 4
  %534 = load i32, ptr %533, align 4, !tbaa !24
  %535 = zext i32 %534 to i64
  %536 = shl nuw nsw i64 %535, 4
  %537 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %536) #10
          to label %538 unwind label %548

538:                                              ; preds = %531
  %539 = icmp eq i32 %534, 0
  br i1 %539, label %.loopexit320, label %540

540:                                              ; preds = %538
  %541 = getelementptr inbounds %class.aiColor4t, ptr %537, i64 %535
  br label %542

542:                                              ; preds = %542, %540
  %543 = phi ptr [ %537, %540 ], [ %544, %542 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %543) #8
  %544 = getelementptr inbounds i8, ptr %543, i64 16
  %545 = icmp eq ptr %544, %541
  br i1 %545, label %.loopexit320.loopexit, label %542

.loopexit320.loopexit:                            ; preds = %542
  %.pre511 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320

.loopexit320:                                     ; preds = %.loopexit320.loopexit, %538
  %546 = phi ptr [ %.pre511, %.loopexit320.loopexit ], [ %532, %538 ]
  %547 = getelementptr inbounds i8, ptr %546, i64 48
  store ptr %537, ptr %547, align 8, !tbaa !30
  br label %.preheader326.1

548:                                              ; preds = %659, %641, %623, %605, %587, %569, %551, %531
  %549 = landingpad { ptr, i32 }
          cleanup
  br label %1175

.preheader326.1:                                  ; preds = %.preheader326.preheader, %.loopexit320
  %550 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 1)
  br i1 %550, label %551, label %.preheader326.2

551:                                              ; preds = %.preheader326.1
  %552 = load ptr, ptr %24, align 8, !tbaa !30
  %553 = getelementptr inbounds i8, ptr %552, i64 4
  %554 = load i32, ptr %553, align 4, !tbaa !24
  %555 = zext i32 %554 to i64
  %556 = shl nuw nsw i64 %555, 4
  %557 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %556) #10
          to label %558 unwind label %548

558:                                              ; preds = %551
  %559 = icmp eq i32 %554, 0
  br i1 %559, label %.loopexit320.1, label %560

560:                                              ; preds = %558
  %561 = getelementptr inbounds %class.aiColor4t, ptr %557, i64 %555
  br label %562

562:                                              ; preds = %562, %560
  %563 = phi ptr [ %557, %560 ], [ %564, %562 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %563) #8
  %564 = getelementptr inbounds i8, ptr %563, i64 16
  %565 = icmp eq ptr %564, %561
  br i1 %565, label %.loopexit320.loopexit.1, label %562

.loopexit320.loopexit.1:                          ; preds = %562
  %.pre512 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320.1

.loopexit320.1:                                   ; preds = %.loopexit320.loopexit.1, %558
  %566 = phi ptr [ %.pre512, %.loopexit320.loopexit.1 ], [ %552, %558 ]
  %567 = getelementptr inbounds i8, ptr %566, i64 56
  store ptr %557, ptr %567, align 8, !tbaa !30
  br label %.preheader326.2

.preheader326.2:                                  ; preds = %.loopexit320.1, %.preheader326.1
  %568 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 2)
  br i1 %568, label %569, label %.preheader326.3

569:                                              ; preds = %.preheader326.2
  %570 = load ptr, ptr %24, align 8, !tbaa !30
  %571 = getelementptr inbounds i8, ptr %570, i64 4
  %572 = load i32, ptr %571, align 4, !tbaa !24
  %573 = zext i32 %572 to i64
  %574 = shl nuw nsw i64 %573, 4
  %575 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %574) #10
          to label %576 unwind label %548

576:                                              ; preds = %569
  %577 = icmp eq i32 %572, 0
  br i1 %577, label %.loopexit320.2, label %578

578:                                              ; preds = %576
  %579 = getelementptr inbounds %class.aiColor4t, ptr %575, i64 %573
  br label %580

580:                                              ; preds = %580, %578
  %581 = phi ptr [ %575, %578 ], [ %582, %580 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %581) #8
  %582 = getelementptr inbounds i8, ptr %581, i64 16
  %583 = icmp eq ptr %582, %579
  br i1 %583, label %.loopexit320.loopexit.2, label %580

.loopexit320.loopexit.2:                          ; preds = %580
  %.pre513 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320.2

.loopexit320.2:                                   ; preds = %.loopexit320.loopexit.2, %576
  %584 = phi ptr [ %.pre513, %.loopexit320.loopexit.2 ], [ %570, %576 ]
  %585 = getelementptr inbounds i8, ptr %584, i64 64
  store ptr %575, ptr %585, align 8, !tbaa !30
  br label %.preheader326.3

.preheader326.3:                                  ; preds = %.loopexit320.2, %.preheader326.2
  %586 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 3)
  br i1 %586, label %587, label %.preheader326.4

587:                                              ; preds = %.preheader326.3
  %588 = load ptr, ptr %24, align 8, !tbaa !30
  %589 = getelementptr inbounds i8, ptr %588, i64 4
  %590 = load i32, ptr %589, align 4, !tbaa !24
  %591 = zext i32 %590 to i64
  %592 = shl nuw nsw i64 %591, 4
  %593 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %592) #10
          to label %594 unwind label %548

594:                                              ; preds = %587
  %595 = icmp eq i32 %590, 0
  br i1 %595, label %.loopexit320.3, label %596

596:                                              ; preds = %594
  %597 = getelementptr inbounds %class.aiColor4t, ptr %593, i64 %591
  br label %598

598:                                              ; preds = %598, %596
  %599 = phi ptr [ %593, %596 ], [ %600, %598 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %599) #8
  %600 = getelementptr inbounds i8, ptr %599, i64 16
  %601 = icmp eq ptr %600, %597
  br i1 %601, label %.loopexit320.loopexit.3, label %598

.loopexit320.loopexit.3:                          ; preds = %598
  %.pre514 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320.3

.loopexit320.3:                                   ; preds = %.loopexit320.loopexit.3, %594
  %602 = phi ptr [ %.pre514, %.loopexit320.loopexit.3 ], [ %588, %594 ]
  %603 = getelementptr inbounds i8, ptr %602, i64 72
  store ptr %593, ptr %603, align 8, !tbaa !30
  br label %.preheader326.4

.preheader326.4:                                  ; preds = %.loopexit320.3, %.preheader326.3
  %604 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 4)
  br i1 %604, label %605, label %.preheader326.5

605:                                              ; preds = %.preheader326.4
  %606 = load ptr, ptr %24, align 8, !tbaa !30
  %607 = getelementptr inbounds i8, ptr %606, i64 4
  %608 = load i32, ptr %607, align 4, !tbaa !24
  %609 = zext i32 %608 to i64
  %610 = shl nuw nsw i64 %609, 4
  %611 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %610) #10
          to label %612 unwind label %548

612:                                              ; preds = %605
  %613 = icmp eq i32 %608, 0
  br i1 %613, label %.loopexit320.4, label %614

614:                                              ; preds = %612
  %615 = getelementptr inbounds %class.aiColor4t, ptr %611, i64 %609
  br label %616

616:                                              ; preds = %616, %614
  %617 = phi ptr [ %611, %614 ], [ %618, %616 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %617) #8
  %618 = getelementptr inbounds i8, ptr %617, i64 16
  %619 = icmp eq ptr %618, %615
  br i1 %619, label %.loopexit320.loopexit.4, label %616

.loopexit320.loopexit.4:                          ; preds = %616
  %.pre515 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320.4

.loopexit320.4:                                   ; preds = %.loopexit320.loopexit.4, %612
  %620 = phi ptr [ %.pre515, %.loopexit320.loopexit.4 ], [ %606, %612 ]
  %621 = getelementptr inbounds i8, ptr %620, i64 80
  store ptr %611, ptr %621, align 8, !tbaa !30
  br label %.preheader326.5

.preheader326.5:                                  ; preds = %.loopexit320.4, %.preheader326.4
  %622 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 5)
  br i1 %622, label %623, label %.preheader326.6

623:                                              ; preds = %.preheader326.5
  %624 = load ptr, ptr %24, align 8, !tbaa !30
  %625 = getelementptr inbounds i8, ptr %624, i64 4
  %626 = load i32, ptr %625, align 4, !tbaa !24
  %627 = zext i32 %626 to i64
  %628 = shl nuw nsw i64 %627, 4
  %629 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %628) #10
          to label %630 unwind label %548

630:                                              ; preds = %623
  %631 = icmp eq i32 %626, 0
  br i1 %631, label %.loopexit320.5, label %632

632:                                              ; preds = %630
  %633 = getelementptr inbounds %class.aiColor4t, ptr %629, i64 %627
  br label %634

634:                                              ; preds = %634, %632
  %635 = phi ptr [ %629, %632 ], [ %636, %634 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %635) #8
  %636 = getelementptr inbounds i8, ptr %635, i64 16
  %637 = icmp eq ptr %636, %633
  br i1 %637, label %.loopexit320.loopexit.5, label %634

.loopexit320.loopexit.5:                          ; preds = %634
  %.pre516 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320.5

.loopexit320.5:                                   ; preds = %.loopexit320.loopexit.5, %630
  %638 = phi ptr [ %.pre516, %.loopexit320.loopexit.5 ], [ %624, %630 ]
  %639 = getelementptr inbounds i8, ptr %638, i64 88
  store ptr %629, ptr %639, align 8, !tbaa !30
  br label %.preheader326.6

.preheader326.6:                                  ; preds = %.loopexit320.5, %.preheader326.5
  %640 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 6)
  br i1 %640, label %641, label %.preheader326.7

641:                                              ; preds = %.preheader326.6
  %642 = load ptr, ptr %24, align 8, !tbaa !30
  %643 = getelementptr inbounds i8, ptr %642, i64 4
  %644 = load i32, ptr %643, align 4, !tbaa !24
  %645 = zext i32 %644 to i64
  %646 = shl nuw nsw i64 %645, 4
  %647 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %646) #10
          to label %648 unwind label %548

648:                                              ; preds = %641
  %649 = icmp eq i32 %644, 0
  br i1 %649, label %.loopexit320.6, label %650

650:                                              ; preds = %648
  %651 = getelementptr inbounds %class.aiColor4t, ptr %647, i64 %645
  br label %652

652:                                              ; preds = %652, %650
  %653 = phi ptr [ %647, %650 ], [ %654, %652 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %653) #8
  %654 = getelementptr inbounds i8, ptr %653, i64 16
  %655 = icmp eq ptr %654, %651
  br i1 %655, label %.loopexit320.loopexit.6, label %652

.loopexit320.loopexit.6:                          ; preds = %652
  %.pre517 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320.6

.loopexit320.6:                                   ; preds = %.loopexit320.loopexit.6, %648
  %656 = phi ptr [ %.pre517, %.loopexit320.loopexit.6 ], [ %642, %648 ]
  %657 = getelementptr inbounds i8, ptr %656, i64 96
  store ptr %647, ptr %657, align 8, !tbaa !30
  br label %.preheader326.7

.preheader326.7:                                  ; preds = %.loopexit320.6, %.preheader326.6
  %658 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 7)
  br i1 %658, label %659, label %676

659:                                              ; preds = %.preheader326.7
  %660 = load ptr, ptr %24, align 8, !tbaa !30
  %661 = getelementptr inbounds i8, ptr %660, i64 4
  %662 = load i32, ptr %661, align 4, !tbaa !24
  %663 = zext i32 %662 to i64
  %664 = shl nuw nsw i64 %663, 4
  %665 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %664) #10
          to label %666 unwind label %548

666:                                              ; preds = %659
  %667 = icmp eq i32 %662, 0
  br i1 %667, label %.loopexit320.7, label %668

668:                                              ; preds = %666
  %669 = getelementptr inbounds %class.aiColor4t, ptr %665, i64 %663
  br label %670

670:                                              ; preds = %670, %668
  %671 = phi ptr [ %665, %668 ], [ %672, %670 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %671) #8
  %672 = getelementptr inbounds i8, ptr %671, i64 16
  %673 = icmp eq ptr %672, %669
  br i1 %673, label %.loopexit320.loopexit.7, label %670

.loopexit320.loopexit.7:                          ; preds = %670
  %.pre518 = load ptr, ptr %24, align 8, !tbaa !30
  br label %.loopexit320.7

.loopexit320.7:                                   ; preds = %.loopexit320.loopexit.7, %666
  %674 = phi ptr [ %.pre518, %.loopexit320.loopexit.7 ], [ %660, %666 ]
  %675 = getelementptr inbounds i8, ptr %674, i64 104
  store ptr %665, ptr %675, align 8, !tbaa !30
  br label %676

676:                                              ; preds = %.loopexit320.7, %.preheader326.7
  %677 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %678 = icmp ugt i64 %677, 1152921504606846975
  %679 = shl nuw i64 %677, 4
  %680 = or disjoint i64 %679, 8
  %681 = select i1 %678, i64 -1, i64 %680
  %682 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %681) #10
          to label %683 unwind label %270

683:                                              ; preds = %676
  store i64 %677, ptr %682, align 16
  %684 = getelementptr inbounds i8, ptr %682, i64 8
  %685 = icmp eq i64 %677, 0
  br i1 %685, label %.loopexit325, label %686

686:                                              ; preds = %683
  %687 = getelementptr inbounds %struct.aiFace, ptr %684, i64 %677
  br label %688

688:                                              ; preds = %688, %686
  %689 = phi ptr [ %684, %686 ], [ %690, %688 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %689) #8
  %690 = getelementptr inbounds i8, ptr %689, i64 16
  %691 = icmp eq ptr %690, %687
  br i1 %691, label %.loopexit325, label %688

.loopexit325:                                     ; preds = %688, %683
  %692 = load ptr, ptr %24, align 8, !tbaa !30
  %693 = getelementptr inbounds i8, ptr %692, i64 208
  store ptr %684, ptr %693, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %28) #8
  %694 = zext i32 %.0248.lcssa to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #8
  %695 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #8
  store i32 %695, ptr %29, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #8
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %694, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %696 unwind label %699

696:                                              ; preds = %.loopexit325
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #8
  %697 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %.not436 = icmp eq i64 %697, 0
  br i1 %.not436, label %._crit_edge397, label %.lr.ph396

._crit_edge397:                                   ; preds = %._crit_edge391, %696
  %.0259.lcssa = phi i32 [ 0, %696 ], [ %.1260.lcssa, %._crit_edge391 ]
  %698 = icmp eq i32 %.0259.lcssa, %.0248.lcssa
  br i1 %698, label %904, label %903

699:                                              ; preds = %.loopexit325
  %700 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #8
  br label %1174

.lr.ph396:                                        ; preds = %696, %._crit_edge391
  %701 = phi i64 [ %720, %._crit_edge391 ], [ 0, %696 ]
  %.0259394 = phi i32 [ %.1260.lcssa, %._crit_edge391 ], [ 0, %696 ]
  %.0261393 = phi i32 [ %719, %._crit_edge391 ], [ 0, %696 ]
  %702 = load ptr, ptr %97, align 8, !tbaa !41
  %703 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %701) #8
  %704 = load i32, ptr %703, align 4, !tbaa !25
  %705 = zext i32 %704 to i64
  %706 = getelementptr inbounds %struct.aiFace, ptr %702, i64 %705
  %707 = load ptr, ptr %24, align 8, !tbaa !30
  %708 = getelementptr inbounds i8, ptr %707, i64 208
  %709 = load ptr, ptr %708, align 8, !tbaa !41
  %710 = getelementptr inbounds %struct.aiFace, ptr %709, i64 %701
  %711 = load i32, ptr %706, align 8, !tbaa !42
  store i32 %711, ptr %710, align 8, !tbaa !42
  %712 = zext i32 %711 to i64
  %713 = shl nuw nsw i64 %712, 2
  %714 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %713) #10
          to label %715 unwind label %723

715:                                              ; preds = %.lr.ph396
  %716 = getelementptr inbounds i8, ptr %710, i64 8
  store ptr %714, ptr %716, align 8, !tbaa !44
  %717 = load i32, ptr %710, align 8, !tbaa !42
  %.not437 = icmp eq i32 %717, 0
  br i1 %.not437, label %._crit_edge391, label %.lr.ph390

.lr.ph390:                                        ; preds = %715
  %718 = getelementptr inbounds i8, ptr %706, i64 8
  br label %725

._crit_edge391:                                   ; preds = %898, %715
  %.1260.lcssa = phi i32 [ %.0259394, %715 ], [ %899, %898 ]
  %719 = add i32 %.0261393, 1
  %720 = zext i32 %719 to i64
  %721 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %722 = icmp ugt i64 %721, %720
  br i1 %722, label %.lr.ph396, label %._crit_edge397, !llvm.loop !59

723:                                              ; preds = %.lr.ph396
  %724 = landingpad { ptr, i32 }
          cleanup
  br label %1173

725:                                              ; preds = %.lr.ph390, %898
  %indvars.iv462 = phi i64 [ 0, %.lr.ph390 ], [ %indvars.iv.next463, %898 ]
  %.1260388 = phi i32 [ %.0259394, %.lr.ph390 ], [ %899, %898 ]
  %726 = load ptr, ptr %718, align 8, !tbaa !44
  %727 = getelementptr inbounds i32, ptr %726, i64 %indvars.iv462
  %728 = load i32, ptr %727, align 4, !tbaa !25
  %729 = load ptr, ptr %716, align 8, !tbaa !44
  %730 = getelementptr inbounds i32, ptr %729, i64 %indvars.iv462
  store i32 %.1260388, ptr %730, align 4, !tbaa !25
  %731 = zext i32 %.1260388 to i64
  %732 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %731) #8
  store i32 %728, ptr %732, align 4, !tbaa !25
  %733 = load ptr, ptr %106, align 8, !tbaa !55
  %734 = zext i32 %728 to i64
  %735 = getelementptr inbounds %class.aiVector3t, ptr %733, i64 %734
  %736 = load ptr, ptr %24, align 8, !tbaa !30
  %737 = getelementptr inbounds i8, ptr %736, i64 16
  %738 = load ptr, ptr %737, align 8, !tbaa !55
  %739 = getelementptr inbounds %class.aiVector3t, ptr %738, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %739, ptr noundef nonnull align 4 dereferenceable(12) %735, i64 12, i1 false), !tbaa.struct !60
  %740 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %740, label %741, label %748

741:                                              ; preds = %725
  %742 = load ptr, ptr %107, align 8, !tbaa !56
  %743 = getelementptr inbounds %class.aiVector3t, ptr %742, i64 %734
  %744 = load ptr, ptr %24, align 8, !tbaa !30
  %745 = getelementptr inbounds i8, ptr %744, i64 24
  %746 = load ptr, ptr %745, align 8, !tbaa !56
  %747 = getelementptr inbounds %class.aiVector3t, ptr %746, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %747, ptr noundef nonnull align 4 dereferenceable(12) %743, i64 12, i1 false), !tbaa.struct !60
  br label %748

748:                                              ; preds = %741, %725
  %749 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %749, label %750, label %762

750:                                              ; preds = %748
  %751 = load ptr, ptr %108, align 8, !tbaa !57
  %752 = getelementptr inbounds %class.aiVector3t, ptr %751, i64 %734
  %753 = load ptr, ptr %24, align 8, !tbaa !30
  %754 = getelementptr inbounds i8, ptr %753, i64 32
  %755 = load ptr, ptr %754, align 8, !tbaa !57
  %756 = getelementptr inbounds %class.aiVector3t, ptr %755, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %756, ptr noundef nonnull align 4 dereferenceable(12) %752, i64 12, i1 false), !tbaa.struct !60
  %757 = load ptr, ptr %109, align 8, !tbaa !58
  %758 = getelementptr inbounds %class.aiVector3t, ptr %757, i64 %734
  %759 = getelementptr inbounds i8, ptr %753, i64 40
  %760 = load ptr, ptr %759, align 8, !tbaa !58
  %761 = getelementptr inbounds %class.aiVector3t, ptr %760, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %761, ptr noundef nonnull align 4 dereferenceable(12) %758, i64 12, i1 false), !tbaa.struct !60
  br label %762

762:                                              ; preds = %750, %748
  %763 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %763, label %764, label %771

764:                                              ; preds = %762
  %765 = load ptr, ptr %110, align 8, !tbaa !30
  %766 = getelementptr inbounds %class.aiVector3t, ptr %765, i64 %734
  %767 = load ptr, ptr %24, align 8, !tbaa !30
  %768 = getelementptr inbounds i8, ptr %767, i64 112
  %769 = load ptr, ptr %768, align 8, !tbaa !30
  %770 = getelementptr inbounds %class.aiVector3t, ptr %769, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %770, ptr noundef nonnull align 4 dereferenceable(12) %766, i64 12, i1 false), !tbaa.struct !60
  br label %771

771:                                              ; preds = %762, %764
  %772 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 1)
  br i1 %772, label %773, label %780

773:                                              ; preds = %771
  %774 = load ptr, ptr %123, align 8, !tbaa !30
  %775 = getelementptr inbounds %class.aiVector3t, ptr %774, i64 %734
  %776 = load ptr, ptr %24, align 8, !tbaa !30
  %777 = getelementptr inbounds i8, ptr %776, i64 120
  %778 = load ptr, ptr %777, align 8, !tbaa !30
  %779 = getelementptr inbounds %class.aiVector3t, ptr %778, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %779, ptr noundef nonnull align 4 dereferenceable(12) %775, i64 12, i1 false), !tbaa.struct !60
  br label %780

780:                                              ; preds = %773, %771
  %781 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 2)
  br i1 %781, label %782, label %789

782:                                              ; preds = %780
  %783 = load ptr, ptr %124, align 8, !tbaa !30
  %784 = getelementptr inbounds %class.aiVector3t, ptr %783, i64 %734
  %785 = load ptr, ptr %24, align 8, !tbaa !30
  %786 = getelementptr inbounds i8, ptr %785, i64 128
  %787 = load ptr, ptr %786, align 8, !tbaa !30
  %788 = getelementptr inbounds %class.aiVector3t, ptr %787, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %788, ptr noundef nonnull align 4 dereferenceable(12) %784, i64 12, i1 false), !tbaa.struct !60
  br label %789

789:                                              ; preds = %782, %780
  %790 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 3)
  br i1 %790, label %791, label %798

791:                                              ; preds = %789
  %792 = load ptr, ptr %125, align 8, !tbaa !30
  %793 = getelementptr inbounds %class.aiVector3t, ptr %792, i64 %734
  %794 = load ptr, ptr %24, align 8, !tbaa !30
  %795 = getelementptr inbounds i8, ptr %794, i64 136
  %796 = load ptr, ptr %795, align 8, !tbaa !30
  %797 = getelementptr inbounds %class.aiVector3t, ptr %796, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %797, ptr noundef nonnull align 4 dereferenceable(12) %793, i64 12, i1 false), !tbaa.struct !60
  br label %798

798:                                              ; preds = %791, %789
  %799 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 4)
  br i1 %799, label %800, label %807

800:                                              ; preds = %798
  %801 = load ptr, ptr %126, align 8, !tbaa !30
  %802 = getelementptr inbounds %class.aiVector3t, ptr %801, i64 %734
  %803 = load ptr, ptr %24, align 8, !tbaa !30
  %804 = getelementptr inbounds i8, ptr %803, i64 144
  %805 = load ptr, ptr %804, align 8, !tbaa !30
  %806 = getelementptr inbounds %class.aiVector3t, ptr %805, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %806, ptr noundef nonnull align 4 dereferenceable(12) %802, i64 12, i1 false), !tbaa.struct !60
  br label %807

807:                                              ; preds = %800, %798
  %808 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 5)
  br i1 %808, label %809, label %816

809:                                              ; preds = %807
  %810 = load ptr, ptr %127, align 8, !tbaa !30
  %811 = getelementptr inbounds %class.aiVector3t, ptr %810, i64 %734
  %812 = load ptr, ptr %24, align 8, !tbaa !30
  %813 = getelementptr inbounds i8, ptr %812, i64 152
  %814 = load ptr, ptr %813, align 8, !tbaa !30
  %815 = getelementptr inbounds %class.aiVector3t, ptr %814, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %815, ptr noundef nonnull align 4 dereferenceable(12) %811, i64 12, i1 false), !tbaa.struct !60
  br label %816

816:                                              ; preds = %809, %807
  %817 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 6)
  br i1 %817, label %818, label %825

818:                                              ; preds = %816
  %819 = load ptr, ptr %128, align 8, !tbaa !30
  %820 = getelementptr inbounds %class.aiVector3t, ptr %819, i64 %734
  %821 = load ptr, ptr %24, align 8, !tbaa !30
  %822 = getelementptr inbounds i8, ptr %821, i64 160
  %823 = load ptr, ptr %822, align 8, !tbaa !30
  %824 = getelementptr inbounds %class.aiVector3t, ptr %823, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %824, ptr noundef nonnull align 4 dereferenceable(12) %820, i64 12, i1 false), !tbaa.struct !60
  br label %825

825:                                              ; preds = %818, %816
  %826 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 7)
  br i1 %826, label %827, label %.preheader.preheader

827:                                              ; preds = %825
  %828 = load ptr, ptr %129, align 8, !tbaa !30
  %829 = getelementptr inbounds %class.aiVector3t, ptr %828, i64 %734
  %830 = load ptr, ptr %24, align 8, !tbaa !30
  %831 = getelementptr inbounds i8, ptr %830, i64 168
  %832 = load ptr, ptr %831, align 8, !tbaa !30
  %833 = getelementptr inbounds %class.aiVector3t, ptr %832, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %833, ptr noundef nonnull align 4 dereferenceable(12) %829, i64 12, i1 false), !tbaa.struct !60
  br label %.preheader.preheader

.preheader.preheader:                             ; preds = %827, %825
  %834 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %834, label %835, label %.preheader.1

835:                                              ; preds = %.preheader.preheader
  %836 = load ptr, ptr %111, align 8, !tbaa !30
  %837 = getelementptr inbounds %class.aiColor4t, ptr %836, i64 %734
  %838 = load ptr, ptr %24, align 8, !tbaa !30
  %839 = getelementptr inbounds i8, ptr %838, i64 48
  %840 = load ptr, ptr %839, align 8, !tbaa !30
  %841 = getelementptr inbounds %class.aiColor4t, ptr %840, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %841, ptr noundef nonnull align 4 dereferenceable(16) %837, i64 16, i1 false), !tbaa.struct !62
  br label %.preheader.1

.preheader.1:                                     ; preds = %.preheader.preheader, %835
  %842 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 1)
  br i1 %842, label %843, label %.preheader.2

843:                                              ; preds = %.preheader.1
  %844 = load ptr, ptr %130, align 8, !tbaa !30
  %845 = getelementptr inbounds %class.aiColor4t, ptr %844, i64 %734
  %846 = load ptr, ptr %24, align 8, !tbaa !30
  %847 = getelementptr inbounds i8, ptr %846, i64 56
  %848 = load ptr, ptr %847, align 8, !tbaa !30
  %849 = getelementptr inbounds %class.aiColor4t, ptr %848, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %849, ptr noundef nonnull align 4 dereferenceable(16) %845, i64 16, i1 false), !tbaa.struct !62
  br label %.preheader.2

.preheader.2:                                     ; preds = %843, %.preheader.1
  %850 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 2)
  br i1 %850, label %851, label %.preheader.3

851:                                              ; preds = %.preheader.2
  %852 = load ptr, ptr %131, align 8, !tbaa !30
  %853 = getelementptr inbounds %class.aiColor4t, ptr %852, i64 %734
  %854 = load ptr, ptr %24, align 8, !tbaa !30
  %855 = getelementptr inbounds i8, ptr %854, i64 64
  %856 = load ptr, ptr %855, align 8, !tbaa !30
  %857 = getelementptr inbounds %class.aiColor4t, ptr %856, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %857, ptr noundef nonnull align 4 dereferenceable(16) %853, i64 16, i1 false), !tbaa.struct !62
  br label %.preheader.3

.preheader.3:                                     ; preds = %851, %.preheader.2
  %858 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 3)
  br i1 %858, label %859, label %.preheader.4

859:                                              ; preds = %.preheader.3
  %860 = load ptr, ptr %132, align 8, !tbaa !30
  %861 = getelementptr inbounds %class.aiColor4t, ptr %860, i64 %734
  %862 = load ptr, ptr %24, align 8, !tbaa !30
  %863 = getelementptr inbounds i8, ptr %862, i64 72
  %864 = load ptr, ptr %863, align 8, !tbaa !30
  %865 = getelementptr inbounds %class.aiColor4t, ptr %864, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %865, ptr noundef nonnull align 4 dereferenceable(16) %861, i64 16, i1 false), !tbaa.struct !62
  br label %.preheader.4

.preheader.4:                                     ; preds = %859, %.preheader.3
  %866 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 4)
  br i1 %866, label %867, label %.preheader.5

867:                                              ; preds = %.preheader.4
  %868 = load ptr, ptr %133, align 8, !tbaa !30
  %869 = getelementptr inbounds %class.aiColor4t, ptr %868, i64 %734
  %870 = load ptr, ptr %24, align 8, !tbaa !30
  %871 = getelementptr inbounds i8, ptr %870, i64 80
  %872 = load ptr, ptr %871, align 8, !tbaa !30
  %873 = getelementptr inbounds %class.aiColor4t, ptr %872, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %873, ptr noundef nonnull align 4 dereferenceable(16) %869, i64 16, i1 false), !tbaa.struct !62
  br label %.preheader.5

.preheader.5:                                     ; preds = %867, %.preheader.4
  %874 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 5)
  br i1 %874, label %875, label %.preheader.6

875:                                              ; preds = %.preheader.5
  %876 = load ptr, ptr %134, align 8, !tbaa !30
  %877 = getelementptr inbounds %class.aiColor4t, ptr %876, i64 %734
  %878 = load ptr, ptr %24, align 8, !tbaa !30
  %879 = getelementptr inbounds i8, ptr %878, i64 88
  %880 = load ptr, ptr %879, align 8, !tbaa !30
  %881 = getelementptr inbounds %class.aiColor4t, ptr %880, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %881, ptr noundef nonnull align 4 dereferenceable(16) %877, i64 16, i1 false), !tbaa.struct !62
  br label %.preheader.6

.preheader.6:                                     ; preds = %875, %.preheader.5
  %882 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 6)
  br i1 %882, label %883, label %.preheader.7

883:                                              ; preds = %.preheader.6
  %884 = load ptr, ptr %135, align 8, !tbaa !30
  %885 = getelementptr inbounds %class.aiColor4t, ptr %884, i64 %734
  %886 = load ptr, ptr %24, align 8, !tbaa !30
  %887 = getelementptr inbounds i8, ptr %886, i64 96
  %888 = load ptr, ptr %887, align 8, !tbaa !30
  %889 = getelementptr inbounds %class.aiColor4t, ptr %888, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %889, ptr noundef nonnull align 4 dereferenceable(16) %885, i64 16, i1 false), !tbaa.struct !62
  br label %.preheader.7

.preheader.7:                                     ; preds = %883, %.preheader.6
  %890 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 7)
  br i1 %890, label %891, label %898

891:                                              ; preds = %.preheader.7
  %892 = load ptr, ptr %136, align 8, !tbaa !30
  %893 = getelementptr inbounds %class.aiColor4t, ptr %892, i64 %734
  %894 = load ptr, ptr %24, align 8, !tbaa !30
  %895 = getelementptr inbounds i8, ptr %894, i64 104
  %896 = load ptr, ptr %895, align 8, !tbaa !30
  %897 = getelementptr inbounds %class.aiColor4t, ptr %896, i64 %731
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %897, ptr noundef nonnull align 4 dereferenceable(16) %893, i64 16, i1 false), !tbaa.struct !62
  br label %898

898:                                              ; preds = %891, %.preheader.7
  %899 = add i32 %.1260388, 1
  %indvars.iv.next463 = add nuw nsw i64 %indvars.iv462, 1
  %900 = load i32, ptr %710, align 8, !tbaa !42
  %901 = zext i32 %900 to i64
  %902 = icmp ult i64 %indvars.iv.next463, %901
  br i1 %902, label %725, label %._crit_edge391, !llvm.loop !63

903:                                              ; preds = %._crit_edge397
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, i32 noundef 286)
          to label %904 unwind label %921

904:                                              ; preds = %903, %._crit_edge397
  %905 = load ptr, ptr %24, align 8, !tbaa !30
  %906 = getelementptr inbounds i8, ptr %905, i64 216
  store i32 0, ptr %906, align 8, !tbaa !5
  %907 = zext i32 %.0243.lcssa to i64
  %908 = shl nuw nsw i64 %907, 3
  %909 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %908) #10
          to label %910 unwind label %921

910:                                              ; preds = %904
  %911 = getelementptr inbounds i8, ptr %905, i64 224
  store ptr %909, ptr %911, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %31) #8
  %912 = load i32, ptr %35, align 8, !tbaa !5
  %913 = zext i32 %912 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #8
  %914 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #8
  store i32 %914, ptr %32, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #8
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %913, ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %915 unwind label %923

915:                                              ; preds = %910
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  %916 = load i32, ptr %35, align 8, !tbaa !5
  %.not438 = icmp eq i32 %916, 0
  br i1 %.not438, label %._crit_edge402, label %.lr.ph401

._crit_edge402:                                   ; preds = %954, %915
  %917 = load ptr, ptr %24, align 8, !tbaa !30
  %918 = getelementptr inbounds i8, ptr %917, i64 216
  %919 = load i32, ptr %918, align 8, !tbaa !5
  %920 = icmp eq i32 %919, %.0243.lcssa
  br i1 %920, label %961, label %960

921:                                              ; preds = %904, %903
  %922 = landingpad { ptr, i32 }
          cleanup
  br label %1173

923:                                              ; preds = %910
  %924 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  br label %1172

.lr.ph401:                                        ; preds = %915, %954
  %indvars.iv465 = phi i64 [ %indvars.iv.next466, %954 ], [ 0, %915 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #8
  %925 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %indvars.iv465)
          to label %926 unwind label %930

926:                                              ; preds = %.lr.ph401
  %927 = extractvalue { ptr, i64 } %925, 0
  store ptr %927, ptr %34, align 8
  %928 = extractvalue { ptr, i64 } %925, 1
  store i64 %928, ptr %112, align 8
  %929 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %34) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #8
  br i1 %929, label %932, label %954

930:                                              ; preds = %.lr.ph401
  %931 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #8
  br label %1171

932:                                              ; preds = %926
  %933 = load ptr, ptr %113, align 8, !tbaa !29
  %934 = getelementptr inbounds ptr, ptr %933, i64 %indvars.iv465
  %935 = load ptr, ptr %934, align 8, !tbaa !30
  %936 = invoke noalias noundef nonnull dereferenceable(1120) ptr @_Znwm(i64 noundef 1120) #10
          to label %937 unwind label %958

937:                                              ; preds = %932
  call void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120) %936) #8
  %938 = load ptr, ptr %24, align 8, !tbaa !30
  %939 = getelementptr inbounds i8, ptr %938, i64 216
  %940 = load i32, ptr %939, align 8, !tbaa !5
  %941 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %indvars.iv465) #8
  store i32 %940, ptr %941, align 4, !tbaa !25
  %942 = load ptr, ptr %24, align 8, !tbaa !30
  %943 = getelementptr inbounds i8, ptr %942, i64 224
  %944 = load ptr, ptr %943, align 8, !tbaa !29
  %945 = getelementptr inbounds i8, ptr %942, i64 216
  %946 = load i32, ptr %945, align 8, !tbaa !5
  %947 = add i32 %946, 1
  store i32 %947, ptr %945, align 8, !tbaa !5
  %948 = zext i32 %946 to i64
  %949 = getelementptr inbounds ptr, ptr %944, i64 %948
  store ptr %936, ptr %949, align 8, !tbaa !30
  %950 = call noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %936, ptr noundef nonnull align 4 dereferenceable(1028) %935)
  %951 = getelementptr inbounds i8, ptr %935, i64 1056
  %952 = getelementptr inbounds i8, ptr %936, i64 1056
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %952, ptr noundef nonnull align 8 dereferenceable(64) %951, i64 64, i1 false), !tbaa.struct !64
  %953 = getelementptr inbounds i8, ptr %936, i64 1028
  store i32 0, ptr %953, align 4, !tbaa !31
  br label %954

954:                                              ; preds = %926, %937
  %indvars.iv.next466 = add nuw nsw i64 %indvars.iv465, 1
  %955 = load i32, ptr %35, align 8, !tbaa !5
  %956 = zext i32 %955 to i64
  %957 = icmp ult i64 %indvars.iv.next466, %956
  br i1 %957, label %.lr.ph401, label %._crit_edge402, !llvm.loop !65

958:                                              ; preds = %932
  %959 = landingpad { ptr, i32 }
          cleanup
  br label %1171

960:                                              ; preds = %._crit_edge402
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.10, i32 noundef 308)
          to label %961 unwind label %965

961:                                              ; preds = %960, %._crit_edge402
  %.not439 = icmp eq i32 %.0248.lcssa, 0
  br i1 %.not439, label %.preheader324, label %.lr.ph409

.preheader324:                                    ; preds = %._crit_edge406, %961
  %962 = load ptr, ptr %24, align 8, !tbaa !30
  %963 = getelementptr inbounds i8, ptr %962, i64 216
  %964 = load i32, ptr %963, align 8, !tbaa !5
  %.not441 = icmp eq i32 %964, 0
  br i1 %.not441, label %.preheader323, label %.lr.ph411

965:                                              ; preds = %1062, %960
  %966 = landingpad { ptr, i32 }
          cleanup
  br label %1171

.lr.ph409:                                        ; preds = %961, %._crit_edge406
  %indvars.iv468 = phi i64 [ %indvars.iv.next469, %._crit_edge406 ], [ 0, %961 ]
  %967 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv468) #8
  %968 = load i32, ptr %967, align 4, !tbaa !25
  %969 = zext i32 %968 to i64
  %970 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %969) #8
  %971 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %970) #8
  %.not440 = icmp eq i64 %971, 0
  br i1 %.not440, label %._crit_edge406, label %.lr.ph405

._crit_edge406:                                   ; preds = %989, %.lr.ph409
  %indvars.iv.next469 = add nuw nsw i64 %indvars.iv468, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next469, %694
  br i1 %exitcond.not, label %.preheader324, label %.lr.ph409, !llvm.loop !66

.lr.ph405:                                        ; preds = %.lr.ph409, %989
  %972 = phi i64 [ %991, %989 ], [ 0, %.lr.ph409 ]
  %.0255403 = phi i32 [ %990, %989 ], [ 0, %.lr.ph409 ]
  %973 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %970, i64 noundef %972) #8
  %974 = load i32, ptr %973, align 4, !tbaa !46
  %975 = zext i32 %974 to i64
  %976 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %975) #8
  %977 = load i32, ptr %976, align 4, !tbaa !25
  %978 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #8
  %.not292 = icmp eq i32 %977, %978
  br i1 %.not292, label %989, label %979

979:                                              ; preds = %.lr.ph405
  %980 = load ptr, ptr %24, align 8, !tbaa !30
  %981 = getelementptr inbounds i8, ptr %980, i64 224
  %982 = load ptr, ptr %981, align 8, !tbaa !29
  %983 = zext i32 %977 to i64
  %984 = getelementptr inbounds ptr, ptr %982, i64 %983
  %985 = load ptr, ptr %984, align 8, !tbaa !30
  %986 = getelementptr inbounds i8, ptr %985, i64 1028
  %987 = load i32, ptr %986, align 4, !tbaa !31
  %988 = add i32 %987, 1
  store i32 %988, ptr %986, align 4, !tbaa !31
  br label %989

989:                                              ; preds = %979, %.lr.ph405
  %990 = add i32 %.0255403, 1
  %991 = zext i32 %990 to i64
  %992 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %970) #8
  %993 = icmp ugt i64 %992, %991
  br i1 %993, label %.lr.ph405, label %._crit_edge406, !llvm.loop !67

.preheader323:                                    ; preds = %.loopexit319, %.preheader324
  br i1 %.not439, label %._crit_edge418, label %.lr.ph417

.lr.ph411:                                        ; preds = %.preheader324, %.loopexit319
  %indvars.iv471 = phi i64 [ %indvars.iv.next472, %.loopexit319 ], [ 0, %.preheader324 ]
  %994 = phi ptr [ %1016, %.loopexit319 ], [ %962, %.preheader324 ]
  %995 = getelementptr inbounds i8, ptr %994, i64 224
  %996 = load ptr, ptr %995, align 8, !tbaa !29
  %997 = getelementptr inbounds ptr, ptr %996, i64 %indvars.iv471
  %998 = load ptr, ptr %997, align 8, !tbaa !30
  %999 = getelementptr inbounds i8, ptr %998, i64 1028
  %1000 = load i32, ptr %999, align 4, !tbaa !31
  %.not291 = icmp eq i32 %1000, 0
  br i1 %.not291, label %1001, label %1002

1001:                                             ; preds = %.lr.ph411
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.10, i32 noundef 326)
          to label %thread-pre-split unwind label %1021

thread-pre-split:                                 ; preds = %1001
  %.pr = load i32, ptr %999, align 4, !tbaa !31
  br label %1002

1002:                                             ; preds = %thread-pre-split, %.lr.ph411
  %1003 = phi i32 [ %.pr, %thread-pre-split ], [ %1000, %.lr.ph411 ]
  %1004 = zext i32 %1003 to i64
  %1005 = shl nuw nsw i64 %1004, 3
  %1006 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1005) #10
          to label %1007 unwind label %1021

1007:                                             ; preds = %1002
  %1008 = icmp eq i32 %1003, 0
  br i1 %1008, label %.loopexit319, label %1009

1009:                                             ; preds = %1007
  %1010 = getelementptr inbounds %struct.aiVertexWeight, ptr %1006, i64 %1004
  br label %1011

1011:                                             ; preds = %1011, %1009
  %1012 = phi ptr [ %1006, %1009 ], [ %1013, %1011 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %1012) #8
  %1013 = getelementptr inbounds i8, ptr %1012, i64 8
  %1014 = icmp eq ptr %1013, %1010
  br i1 %1014, label %.loopexit319, label %1011

.loopexit319:                                     ; preds = %1011, %1007
  %1015 = getelementptr inbounds i8, ptr %998, i64 1048
  store ptr %1006, ptr %1015, align 8, !tbaa !36
  store i32 0, ptr %999, align 4, !tbaa !31
  %indvars.iv.next472 = add nuw nsw i64 %indvars.iv471, 1
  %1016 = load ptr, ptr %24, align 8, !tbaa !30
  %1017 = getelementptr inbounds i8, ptr %1016, i64 216
  %1018 = load i32, ptr %1017, align 8, !tbaa !5
  %1019 = zext i32 %1018 to i64
  %1020 = icmp ult i64 %indvars.iv.next472, %1019
  br i1 %1020, label %.lr.ph411, label %.preheader323, !llvm.loop !68

1021:                                             ; preds = %1002, %1001
  %1022 = landingpad { ptr, i32 }
          cleanup
  br label %1171

._crit_edge418:                                   ; preds = %._crit_edge415, %.preheader323
  %1023 = load i32, ptr %114, align 8, !tbaa !69
  %.not289 = icmp eq i32 %1023, 0
  br i1 %.not289, label %.loopexit322, label %1062

.lr.ph417:                                        ; preds = %.preheader323, %._crit_edge415
  %indvars.iv474 = phi i64 [ %indvars.iv.next475, %._crit_edge415 ], [ 0, %.preheader323 ]
  %1024 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv474) #8
  %1025 = load i32, ptr %1024, align 4, !tbaa !25
  %1026 = zext i32 %1025 to i64
  %1027 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %1026) #8
  %1028 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1027) #8
  %.not443 = icmp eq i64 %1028, 0
  br i1 %.not443, label %._crit_edge415, label %.lr.ph414.preheader

.lr.ph414.preheader:                              ; preds = %.lr.ph417
  %1029 = trunc nuw i64 %indvars.iv474 to i32
  br label %.lr.ph414

._crit_edge415:                                   ; preds = %1038, %.lr.ph417
  %indvars.iv.next475 = add nuw nsw i64 %indvars.iv474, 1
  %exitcond478.not = icmp eq i64 %indvars.iv.next475, %694
  br i1 %exitcond478.not, label %._crit_edge418, label %.lr.ph417, !llvm.loop !70

.lr.ph414:                                        ; preds = %.lr.ph414.preheader, %1038
  %1030 = phi i64 [ %1057, %1038 ], [ 0, %.lr.ph414.preheader ]
  %.0242412 = phi i32 [ %1056, %1038 ], [ 0, %.lr.ph414.preheader ]
  %1031 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1027, i64 noundef %1030) #8
  %1032 = load i32, ptr %1031, align 4, !tbaa !46
  %1033 = zext i32 %1032 to i64
  %1034 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %1033) #8
  %1035 = load i32, ptr %1034, align 4, !tbaa !25
  %1036 = call noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() #8
  %.not290 = icmp eq i32 %1035, %1036
  br i1 %.not290, label %1037, label %1038

1037:                                             ; preds = %.lr.ph414
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.10, i32 noundef 341)
          to label %1038 unwind label %1060

1038:                                             ; preds = %1037, %.lr.ph414
  %1039 = load ptr, ptr %24, align 8, !tbaa !30
  %1040 = getelementptr inbounds i8, ptr %1039, i64 224
  %1041 = load ptr, ptr %1040, align 8, !tbaa !29
  %1042 = zext i32 %1035 to i64
  %1043 = getelementptr inbounds ptr, ptr %1041, i64 %1042
  %1044 = load ptr, ptr %1043, align 8, !tbaa !30
  %1045 = getelementptr inbounds i8, ptr %1044, i64 1048
  %1046 = load ptr, ptr %1045, align 8, !tbaa !36
  %1047 = getelementptr inbounds i8, ptr %1044, i64 1028
  %1048 = load i32, ptr %1047, align 4, !tbaa !31
  %1049 = zext i32 %1048 to i64
  %1050 = getelementptr inbounds %struct.aiVertexWeight, ptr %1046, i64 %1049
  %1051 = add i32 %1048, 1
  store i32 %1051, ptr %1047, align 4, !tbaa !31
  store i32 %1029, ptr %1050, align 4, !tbaa !39
  %1052 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt6vectorISt4pairIjfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1027, i64 noundef %1030) #8
  %1053 = getelementptr inbounds i8, ptr %1052, i64 4
  %1054 = load float, ptr %1053, align 4, !tbaa !71
  %1055 = getelementptr inbounds i8, ptr %1050, i64 4
  store float %1054, ptr %1055, align 4, !tbaa !37
  %1056 = add i32 %.0242412, 1
  %1057 = zext i32 %1056 to i64
  %1058 = call noundef i64 @_ZNKSt6vectorISt4pairIjfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1027) #8
  %1059 = icmp ugt i64 %1058, %1057
  br i1 %1059, label %.lr.ph414, label %._crit_edge415, !llvm.loop !72

1060:                                             ; preds = %1037
  %1061 = landingpad { ptr, i32 }
          cleanup
  br label %1171

1062:                                             ; preds = %._crit_edge418
  %1063 = load ptr, ptr %24, align 8, !tbaa !30
  %1064 = getelementptr inbounds i8, ptr %1063, i64 1264
  store i32 %1023, ptr %1064, align 8, !tbaa !69
  %1065 = zext i32 %1023 to i64
  %1066 = shl nuw nsw i64 %1065, 3
  %1067 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1066) #10
          to label %1068 unwind label %965

1068:                                             ; preds = %1062
  %1069 = getelementptr inbounds i8, ptr %1063, i64 1272
  store ptr %1067, ptr %1069, align 8, !tbaa !73
  %1070 = load i32, ptr %1064, align 8, !tbaa !69
  %.not444 = icmp eq i32 %1070, 0
  br i1 %.not444, label %.loopexit322, label %.lr.ph425

.lr.ph425:                                        ; preds = %1068
  %1071 = mul nuw nsw i64 %694, 12
  br label %1072

1072:                                             ; preds = %.lr.ph425, %._crit_edge422
  %indvars.iv484 = phi i64 [ 0, %.lr.ph425 ], [ %indvars.iv.next485, %._crit_edge422 ]
  %1073 = load ptr, ptr %115, align 8, !tbaa !73
  %1074 = getelementptr inbounds ptr, ptr %1073, i64 %indvars.iv484
  %1075 = load ptr, ptr %1074, align 8, !tbaa !30
  %1076 = invoke noalias noundef nonnull dereferenceable(1200) ptr @_Znwm(i64 noundef 1200) #10
          to label %1077 unwind label %1107

1077:                                             ; preds = %1072
  call void @_ZN10aiAnimMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1200) %1076) #8
  %1078 = call noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %1076, ptr noundef nonnull align 4 dereferenceable(1028) %1075)
  %1079 = getelementptr inbounds i8, ptr %1075, i64 1196
  %1080 = load float, ptr %1079, align 4, !tbaa !74
  %1081 = getelementptr inbounds i8, ptr %1076, i64 1196
  store float %1080, ptr %1081, align 4, !tbaa !74
  %1082 = getelementptr inbounds i8, ptr %1076, i64 1192
  store i32 %.0248.lcssa, ptr %1082, align 8, !tbaa !76
  %1083 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1071) #10
          to label %1084 unwind label %1107

1084:                                             ; preds = %1077
  br i1 %.not439, label %.loopexit318, label %1085

1085:                                             ; preds = %1084
  %1086 = getelementptr inbounds %class.aiVector3t, ptr %1083, i64 %694
  br label %1087

1087:                                             ; preds = %1087, %1085
  %1088 = phi ptr [ %1083, %1085 ], [ %1089, %1087 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1088) #8
  %1089 = getelementptr inbounds i8, ptr %1088, i64 12
  %1090 = icmp eq ptr %1089, %1086
  br i1 %1090, label %.loopexit318, label %1087

.loopexit318:                                     ; preds = %1087, %1084
  %1091 = getelementptr inbounds i8, ptr %1076, i64 1032
  store ptr %1083, ptr %1091, align 8, !tbaa !77
  %1092 = load ptr, ptr %24, align 8, !tbaa !30
  %1093 = getelementptr inbounds i8, ptr %1092, i64 1272
  %1094 = load ptr, ptr %1093, align 8, !tbaa !73
  %1095 = getelementptr inbounds ptr, ptr %1094, i64 %indvars.iv484
  store ptr %1076, ptr %1095, align 8, !tbaa !30
  %1096 = call noundef zeroext i1 @_ZNK10aiAnimMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1075)
  br i1 %1096, label %1097, label %1109

1097:                                             ; preds = %.loopexit318
  %1098 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1071) #10
          to label %1099 unwind label %1107

1099:                                             ; preds = %1097
  br i1 %.not439, label %.loopexit317, label %1100

1100:                                             ; preds = %1099
  %1101 = getelementptr inbounds %class.aiVector3t, ptr %1098, i64 %694
  br label %1102

1102:                                             ; preds = %1102, %1100
  %1103 = phi ptr [ %1098, %1100 ], [ %1104, %1102 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1103) #8
  %1104 = getelementptr inbounds i8, ptr %1103, i64 12
  %1105 = icmp eq ptr %1104, %1101
  br i1 %1105, label %.loopexit317, label %1102

.loopexit317:                                     ; preds = %1102, %1099
  %1106 = getelementptr inbounds i8, ptr %1076, i64 1040
  store ptr %1098, ptr %1106, align 8, !tbaa !78
  br label %1109

1107:                                             ; preds = %.loopexit316, %1111, %1097, %1077, %1072
  %1108 = landingpad { ptr, i32 }
          cleanup
  br label %1171

1109:                                             ; preds = %.loopexit317, %.loopexit318
  %1110 = call noundef zeroext i1 @_ZNK10aiAnimMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1075)
  br i1 %1110, label %1111, label %1130

1111:                                             ; preds = %1109
  %1112 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1071) #10
          to label %1113 unwind label %1107

1113:                                             ; preds = %1111
  br i1 %.not439, label %.loopexit316, label %1114

1114:                                             ; preds = %1113
  %1115 = getelementptr inbounds %class.aiVector3t, ptr %1112, i64 %694
  br label %1116

1116:                                             ; preds = %1116, %1114
  %1117 = phi ptr [ %1112, %1114 ], [ %1118, %1116 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1117) #8
  %1118 = getelementptr inbounds i8, ptr %1117, i64 12
  %1119 = icmp eq ptr %1118, %1115
  br i1 %1119, label %.loopexit316, label %1116

.loopexit316:                                     ; preds = %1116, %1113
  %1120 = getelementptr inbounds i8, ptr %1076, i64 1048
  store ptr %1112, ptr %1120, align 8, !tbaa !79
  %1121 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %1071) #10
          to label %1122 unwind label %1107

1122:                                             ; preds = %.loopexit316
  br i1 %.not439, label %.loopexit, label %1123

1123:                                             ; preds = %1122
  %1124 = getelementptr inbounds %class.aiVector3t, ptr %1121, i64 %694
  br label %1125

1125:                                             ; preds = %1125, %1123
  %1126 = phi ptr [ %1121, %1123 ], [ %1127, %1125 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %1126) #8
  %1127 = getelementptr inbounds i8, ptr %1126, i64 12
  %1128 = icmp eq ptr %1127, %1124
  br i1 %1128, label %.loopexit, label %1125

.loopexit:                                        ; preds = %1125, %1122
  %1129 = getelementptr inbounds i8, ptr %1076, i64 1056
  store ptr %1121, ptr %1129, align 8, !tbaa !80
  br label %1130

1130:                                             ; preds = %.loopexit, %1109
  br i1 %.not439, label %._crit_edge422, label %.lr.ph421

.lr.ph421:                                        ; preds = %1130
  %1131 = getelementptr inbounds i8, ptr %1075, i64 1032
  %1132 = getelementptr inbounds i8, ptr %1075, i64 1040
  %1133 = getelementptr inbounds i8, ptr %1076, i64 1040
  %1134 = getelementptr inbounds i8, ptr %1075, i64 1048
  %1135 = getelementptr inbounds i8, ptr %1076, i64 1048
  %1136 = getelementptr inbounds i8, ptr %1075, i64 1056
  %1137 = getelementptr inbounds i8, ptr %1076, i64 1056
  br label %1143

._crit_edge422:                                   ; preds = %1168, %1130
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %1138 = load ptr, ptr %24, align 8, !tbaa !30
  %1139 = getelementptr inbounds i8, ptr %1138, i64 1264
  %1140 = load i32, ptr %1139, align 8, !tbaa !69
  %1141 = zext i32 %1140 to i64
  %1142 = icmp ult i64 %indvars.iv.next485, %1141
  br i1 %1142, label %1072, label %.loopexit322, !llvm.loop !81

1143:                                             ; preds = %.lr.ph421, %1168
  %indvars.iv479 = phi i64 [ 0, %.lr.ph421 ], [ %indvars.iv.next480, %1168 ]
  %1144 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv479) #8
  %1145 = load i32, ptr %1144, align 4, !tbaa !25
  %1146 = load ptr, ptr %1131, align 8, !tbaa !77
  %1147 = zext i32 %1145 to i64
  %1148 = getelementptr inbounds %class.aiVector3t, ptr %1146, i64 %1147
  %1149 = load ptr, ptr %1091, align 8, !tbaa !77
  %1150 = getelementptr inbounds %class.aiVector3t, ptr %1149, i64 %indvars.iv479
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %1150, ptr noundef nonnull align 4 dereferenceable(12) %1148, i64 12, i1 false), !tbaa.struct !60
  %1151 = call noundef zeroext i1 @_ZNK10aiAnimMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1076)
  br i1 %1151, label %1152, label %1157

1152:                                             ; preds = %1143
  %1153 = load ptr, ptr %1132, align 8, !tbaa !78
  %1154 = getelementptr inbounds %class.aiVector3t, ptr %1153, i64 %1147
  %1155 = load ptr, ptr %1133, align 8, !tbaa !78
  %1156 = getelementptr inbounds %class.aiVector3t, ptr %1155, i64 %indvars.iv479
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %1156, ptr noundef nonnull align 4 dereferenceable(12) %1154, i64 12, i1 false), !tbaa.struct !60
  br label %1157

1157:                                             ; preds = %1152, %1143
  %1158 = call noundef zeroext i1 @_ZNK10aiAnimMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1200) %1076)
  br i1 %1158, label %1159, label %1168

1159:                                             ; preds = %1157
  %1160 = load ptr, ptr %1134, align 8, !tbaa !79
  %1161 = getelementptr inbounds %class.aiVector3t, ptr %1160, i64 %1147
  %1162 = load ptr, ptr %1135, align 8, !tbaa !79
  %1163 = getelementptr inbounds %class.aiVector3t, ptr %1162, i64 %indvars.iv479
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %1163, ptr noundef nonnull align 4 dereferenceable(12) %1161, i64 12, i1 false), !tbaa.struct !60
  %1164 = load ptr, ptr %1136, align 8, !tbaa !80
  %1165 = getelementptr inbounds %class.aiVector3t, ptr %1164, i64 %1147
  %1166 = load ptr, ptr %1137, align 8, !tbaa !80
  %1167 = getelementptr inbounds %class.aiVector3t, ptr %1166, i64 %indvars.iv479
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %1167, ptr noundef nonnull align 4 dereferenceable(12) %1165, i64 12, i1 false), !tbaa.struct !60
  br label %1168

1168:                                             ; preds = %1159, %1157
  %indvars.iv.next480 = add nuw nsw i64 %indvars.iv479, 1
  %exitcond483.not = icmp eq i64 %indvars.iv.next480, %694
  br i1 %exitcond483.not, label %._crit_edge422, label %1143, !llvm.loop !82

.loopexit322:                                     ; preds = %._crit_edge422, %1068, %._crit_edge418
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #8
  %1169 = load i32, ptr %47, align 8, !tbaa !26
  %1170 = icmp ult i32 %.1239.lcssa, %1169
  br i1 %1170, label %137, label %._crit_edge429, !llvm.loop !83

1171:                                             ; preds = %930, %958, %1107, %1060, %1021, %965
  %.pn293.pn = phi { ptr, i32 } [ %1022, %1021 ], [ %1061, %1060 ], [ %1108, %1107 ], [ %966, %965 ], [ %959, %958 ], [ %931, %930 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #8
  br label %1172

1172:                                             ; preds = %1171, %923
  %.pn293.pn.pn = phi { ptr, i32 } [ %.pn293.pn, %1171 ], [ %924, %923 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #8
  br label %1173

1173:                                             ; preds = %1172, %921, %723
  %.pn297 = phi { ptr, i32 } [ %724, %723 ], [ %.pn293.pn.pn, %1172 ], [ %922, %921 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #8
  br label %1174

1174:                                             ; preds = %1173, %699
  %.pn297.pn = phi { ptr, i32 } [ %.pn297, %1173 ], [ %700, %699 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #8
  br label %1175

1175:                                             ; preds = %1174, %548, %378, %279, %270
  %.pn300 = phi { ptr, i32 } [ %379, %378 ], [ %549, %548 ], [ %.pn297.pn, %1174 ], [ %271, %270 ], [ %.pn.pn, %279 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  br label %1176

1176:                                             ; preds = %256, %1175, %150
  %.pn304.pn.pn.pn.pn = phi { ptr, i32 } [ %151, %150 ], [ %.pn304.pn.pn, %256 ], [ %.pn300, %1175 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #8
  br label %1177

1177:                                             ; preds = %1176, %148
  %.pn304.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn304.pn.pn.pn.pn, %1176 ], [ %149, %148 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #8
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #8
  br label %1179

._crit_edge429:                                   ; preds = %.loopexit322, %94
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #8
  call void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #8
  br label %1178

1178:                                             ; preds = %3, %._crit_edge429
  ret void

1179:                                             ; preds = %1177, %146
  %.pn304.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn304.pn.pn.pn.pn.pn, %1177 ], [ %147, %146 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #8
  br label %1180

1180:                                             ; preds = %1179, %89
  %.pn312.pn = phi { ptr, i32 } [ %.pn312, %89 ], [ %.pn304.pn.pn.pn.pn.pn.pn, %1179 ]
  call void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  br label %1181

1181:                                             ; preds = %1180, %50
  %.pn312.pn.pn = phi { ptr, i32 } [ %.pn312.pn, %1180 ], [ %51, %50 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #8
  resume { ptr, i32 } %.pn312.pn.pn

1182:                                             ; preds = %86
  unreachable
}

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_ISt4pairIjfESaIS1_EESaIS3_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE12emplace_backIJRjRfEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #1 align 2

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIjSt4lessIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIjSt4lessIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt3setIjSt4lessIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8aiString3SetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 4 dereferenceable(1028), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(376)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA1024_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376), ptr noundef nonnull align 1 dereferenceable(1024)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsIA5_cTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKSA_(ptr noundef nonnull align 8 dereferenceable(376), ptr noundef nonnull align 1 dereferenceable(5)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(376) ptr @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEElsImTnPNSt9enable_ifIXntsr3std10is_base_ofISt9exceptionT_EE5valueEvE4typeELPv0EEERS5_RKS9_(ptr noundef nonnull align 8 dereferenceable(376), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEEcvNSt7__cxx1112basic_stringIcS3_S4_EEEv(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(376)) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6Assimp9Formatter15basic_formatterIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(376)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP6aiMeshSaIS1_EE12emplace_backIJRS1_EEES5_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320), i32 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt14numeric_limitsIjE3maxEv() local_unnamed_addr #2 align 2

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

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

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

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

declare void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028), ptr noundef nonnull align 4 dereferenceable(1028)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10aiAnimMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1200)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10aiAnimMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1200)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10aiAnimMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1200)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2 align 2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 216}
!6 = !{!"_ZTS6aiMesh", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !8, i64 48, !8, i64 112, !8, i64 176, !10, i64 208, !7, i64 216, !10, i64 224, !7, i64 232, !11, i64 236, !7, i64 1264, !10, i64 1272, !12, i64 1280, !13, i64 1284, !10, i64 1312}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"_ZTS8aiString", !7, i64 0, !8, i64 4}
!12 = !{!"_ZTS16aiMorphingMethod", !8, i64 0}
!13 = !{!"_ZTS6aiAABB", !14, i64 0, !14, i64 12}
!14 = !{!"_ZTS10aiVector3tIfE", !15, i64 0, !15, i64 4, !15, i64 8}
!15 = !{!"float", !8, i64 0}
!16 = !{!17, !19, i64 24}
!17 = !{!"_ZTSN6Assimp23SplitByBoneCountProcessE", !18, i64 0, !19, i64 24, !20, i64 32}
!18 = !{!"_ZTSN6Assimp11BaseProcessE", !10, i64 8, !10, i64 16}
!19 = !{!"long", !8, i64 0}
!20 = !{!"_ZTSSt6vectorIS_IjSaIjEESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseISt6vectorIjSaIjEESaIS2_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseISt6vectorIjSaIjEESaIS2_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseISt6vectorIjSaIjEESaIS2_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!24 = !{!6, !7, i64 4}
!25 = !{!7, !7, i64 0}
!26 = !{!6, !7, i64 8}
!27 = !{!28, !28, i64 0}
!28 = !{!"bool", !8, i64 0}
!29 = !{!6, !10, i64 224}
!30 = !{!10, !10, i64 0}
!31 = !{!32, !7, i64 1028}
!32 = !{!"_ZTS6aiBone", !11, i64 0, !7, i64 1028, !10, i64 1032, !10, i64 1040, !10, i64 1048, !33, i64 1056}
!33 = !{!"_ZTS12aiMatrix4x4tIfE", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !15, i64 36, !15, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !15, i64 56, !15, i64 60}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!32, !10, i64 1048}
!37 = !{!38, !15, i64 4}
!38 = !{!"_ZTS14aiVertexWeight", !7, i64 0, !15, i64 4}
!39 = !{!38, !7, i64 0}
!40 = distinct !{!40, !35}
!41 = !{!6, !10, i64 208}
!42 = !{!43, !7, i64 0}
!43 = !{!"_ZTS6aiFace", !7, i64 0, !10, i64 8}
!44 = !{!43, !10, i64 8}
!45 = distinct !{!45, !35}
!46 = !{!47, !7, i64 0}
!47 = !{!"_ZTSSt4pairIjfE", !7, i64 0, !15, i64 4}
!48 = distinct !{!48, !35}
!49 = distinct !{!49, !35}
!50 = distinct !{!50, !35}
!51 = !{!6, !7, i64 236}
!52 = !{!19, !19, i64 0}
!53 = !{!6, !7, i64 232}
!54 = !{!6, !7, i64 0}
!55 = !{!6, !10, i64 16}
!56 = !{!6, !10, i64 24}
!57 = !{!6, !10, i64 32}
!58 = !{!6, !10, i64 40}
!59 = distinct !{!59, !35}
!60 = !{i64 0, i64 4, !61, i64 4, i64 4, !61, i64 8, i64 4, !61}
!61 = !{!15, !15, i64 0}
!62 = !{i64 0, i64 4, !61, i64 4, i64 4, !61, i64 8, i64 4, !61, i64 12, i64 4, !61}
!63 = distinct !{!63, !35}
!64 = !{i64 0, i64 4, !61, i64 4, i64 4, !61, i64 8, i64 4, !61, i64 12, i64 4, !61, i64 16, i64 4, !61, i64 20, i64 4, !61, i64 24, i64 4, !61, i64 28, i64 4, !61, i64 32, i64 4, !61, i64 36, i64 4, !61, i64 40, i64 4, !61, i64 44, i64 4, !61, i64 48, i64 4, !61, i64 52, i64 4, !61, i64 56, i64 4, !61, i64 60, i64 4, !61}
!65 = distinct !{!65, !35}
!66 = distinct !{!66, !35}
!67 = distinct !{!67, !35}
!68 = distinct !{!68, !35}
!69 = !{!6, !7, i64 1264}
!70 = distinct !{!70, !35}
!71 = !{!47, !15, i64 4}
!72 = distinct !{!72, !35}
!73 = !{!6, !10, i64 1272}
!74 = !{!75, !15, i64 1196}
!75 = !{!"_ZTS10aiAnimMesh", !11, i64 0, !10, i64 1032, !10, i64 1040, !10, i64 1048, !10, i64 1056, !8, i64 1064, !8, i64 1128, !7, i64 1192, !15, i64 1196}
!76 = !{!75, !7, i64 1192}
!77 = !{!75, !10, i64 1032}
!78 = !{!75, !10, i64 1040}
!79 = !{!75, !10, i64 1048}
!80 = !{!75, !10, i64 1056}
!81 = distinct !{!81, !35}
!82 = distinct !{!82, !35}
!83 = distinct !{!83, !35}


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