@ -612,6 +612,8 @@ int jar_xm_create_context(jar_xm_context_t** ctxp, const char* moddata, uint32_t  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    return  jar_xm_create_context_safe ( ctxp ,  moddata ,  SIZE_MAX ,  rate ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			}  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			# define ALIGN(x, b) (((x) + ((b) - 1)) & ~((b) - 1))  
			
		 
		
	
		
			
			 
			 
			
			 
			
			# define ALIGN_PTR(x, b) (void*)(((uintptr_t)(x) + ((b) - 1)) & ~((b) - 1))  
			
		 
		
	
		
			
			 
			 
			
			 
			
			int  jar_xm_create_context_safe ( jar_xm_context_t * *  ctxp ,  const  char *  moddata ,  size_t  moddata_length ,  uint32_t  rate )  {  
			
		 
		
	
		
			
			 
			 
			
			 
			
			# if JAR_XM_DEFENSIVE  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  ret ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -644,9 +646,11 @@ int jar_xm_create_context_safe(jar_xm_context_t** ctxp, const char* moddata, siz  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ctx - > rate  =  rate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  =  jar_xm_load_module ( ctx ,  moddata ,  moddata_length ,  mempool ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  =  ALIGN_PTR ( mempool ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ctx - > channels  =  ( jar_xm_channel_context_t * ) mempool ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  + =  ctx - > module . num_channels  *  sizeof ( jar_xm_channel_context_t ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  =  ALIGN_PTR ( mempool ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ctx - > global_volume  =  1.f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ctx - > amplification  =  .25f ;  /* XXX: some bad modules may still clip. Find out something better. */   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -671,6 +675,7 @@ int jar_xm_create_context_safe(jar_xm_context_t** ctxp, const char* moddata, siz  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        ch - > actual_panning  =  .5f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  =  ALIGN_PTR ( mempool ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ctx - > row_loop_count  =  ( uint8_t * ) mempool ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  + =  MAX_NUM_ROWS  *  sizeof ( uint8_t ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -856,9 +861,11 @@ size_t jar_xm_get_memory_needed_for_context(const char* moddata, size_t moddata_  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    num_patterns  =  READ_U16 ( offset  +  10 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    memory_needed  + =  num_patterns  *  sizeof ( jar_xm_pattern_t ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    memory_needed   =  ALIGN ( memory_needed ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    num_instruments  =  READ_U16 ( offset  +  12 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    memory_needed  + =  num_instruments  *  sizeof ( jar_xm_instrument_t ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    memory_needed   =  ALIGN ( memory_needed ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    memory_needed  + =  MAX_NUM_ROWS  *  READ_U16 ( offset  +  4 )  *  sizeof ( uint8_t ) ;  /* Module length */   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -875,6 +882,7 @@ size_t jar_xm_get_memory_needed_for_context(const char* moddata, size_t moddata_  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        /* Pattern header length + packed pattern data size */   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        offset  + =  READ_U32 ( offset )  +  READ_U16 ( offset  +  7 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    memory_needed   =  ALIGN ( memory_needed ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    /* Read instrument headers */   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    for ( uint16_t  i  =  0 ;  i  <  num_instruments ;  + + i )  {   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -940,9 +948,11 @@ char* jar_xm_load_module(jar_xm_context_t* ctx, const char* moddata, size_t modd  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mod - > patterns  =  ( jar_xm_pattern_t * ) mempool ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  + =  mod - > num_patterns  *  sizeof ( jar_xm_pattern_t ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  =  ALIGN_PTR ( mempool ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mod - > instruments  =  ( jar_xm_instrument_t * ) mempool ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  + =  mod - > num_instruments  *  sizeof ( jar_xm_instrument_t ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  =  ALIGN_PTR ( mempool ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    uint16_t  flags  =  READ_U32 ( offset  +  14 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mod - > frequency_type  =  ( flags  &  ( 1  < <  0 ) )  ?  jar_xm_LINEAR_FREQUENCIES  :  jar_xm_AMIGA_FREQUENCIES ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1032,6 +1042,7 @@ char* jar_xm_load_module(jar_xm_context_t* ctx, const char* moddata, size_t modd  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        offset  + =  packed_patterndata_size ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    mempool  =  ALIGN_PTR ( mempool ,  16 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    /* Read instruments */   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    for ( uint16_t  i  =  0 ;  i  <  ctx - > module . num_instruments ;  + + i )  {