code: function() {
  
  		var times = this.times,
  			values = this.values,
  			stride = this.getValueSize(),
  
  			writeIndex = 1;
  
  		for( var i = 1, n = times.length - 1; i <= n; ++ i ) {
  
  			var keep = false;
  
  			var time = times[ i ];
  			var timeNext = times[ i + 1 ];
  
  			// remove adjacent keyframes scheduled at the same time
  
  			if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {
  
  				// remove unnecessary keyframes same as their neighbors
  				var offset = i * stride,
  					offsetP = offset - stride,
  					offsetN = offset + stride;
  
  				for ( var j = 0; j !== stride; ++ j ) {
  
  					var value = values[ offset + j ];
  
  					if ( value !== values[ offsetP + j ] ||
  							value !== values[ offsetN + j ] ) {
  
  						keep = true;
  						break;
  
  					}
  
  				}
  
  			}
  
  			// in-place compaction
  
  			if ( keep ) {
  
  				if ( i !== writeIndex ) {
  
  					times[ writeIndex ] = times[ i ];
  
  					var readOffset = i * stride,
  						writeOffset = writeIndex * stride;
  
  					for ( var j = 0; j !== stride; ++ j ) {
  
  						values[ writeOffset + j ] = values[ readOffset + j ];
  
  					}
  
  
  				}
  
  				++ writeIndex;
  
  			}
  
  		}
  
  		if ( writeIndex !== times.length ) {
  
  			this.times = THREE.AnimationUtils.arraySlice( times, 0, writeIndex );
  			this.values = THREE.AnimationUtils.arraySlice( values, 0, writeIndex * stride );
  
  		}
  
  		return this;
  
  	}
docs: removes equivalent sequential keys as common in morph target sequences (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)