<commit_before>(function(window, document, undefined) {
	var noop = function() {};

	//Minify optimizations
	var _parseInt = parseInt;
	var _parseFloat = parseFloat;
	var hasProp = Object.prototype.hasOwnProperty;

	var rxTrim = /^\s*(.*)\s$/;
	var rxKeyframeAttribute = /^data(-end)?-?(\d+)?$/;
	var rxPropSplit = /:|;/g;
	var rxPropEasing = /^([a-z-]+)\[(\w+)\]$/;
	var rxCamelCase = /-([a-z])/g;
	var rxNumericValue = /(?:^|\s+)((?:-|\+)?[0-9.]+)(%|px|em|ex|pt|in|cm|mm|pc|deg)?/g;
	var rxTransformValue = /((?:rotate)|(?:scale(?:X|Y)?)|(?:skew(?:X|Y)?))\((.+?)\)/g;
	var rxColorValue = /^((?:rgba?)|(?:hsla?))\(((?:-|\+)?\d+)\s*,\s*(\d{1,3})%?\s*,\s*(\d{1,3})%?\s*(?:,\s*([0-9.]+))?\)$/;

	var supportsCSS3Colors = true;
	try {
		//IE will throw an exception
		document.createElement('a').style.color = 'hsl(0,0%,0%)';
	} catch(e) {
		supportsCSS3Colors = false;
	}

	var bounceHelper = function(x, a) {
		return 1 - Math.abs(3 * Math.cos(x * a * 1.028) / a);
	};

	var easings = {
		begin: function() {
			return 0;
		},
		end: function() {
			return 1;
		},
		linear: function(p) {
			return p;
		},
		quadratic: function(p) {
			return p * p;
		},
		cubic: function(p) {
			return p * p * p * p;
		},
		swing: function(p) {
			return (-Math.cos(p * Math.PI) / 2) + .5;
		},
		//see https://www.desmos.com/calculator/tbr20s8vd2 for how I did this
		bounce: function(p, a) {
			switch(true) {
				case (p <= .5083):
					a = 3; break;
				case (p <= .8489):
					a = 9; break;
				case (p <= .96208):
					a = 27; break;
				case (p <= .99981):
					a = 91; break;
				default:
					return 1;
			}

			return bounceHelper(p, a);
		}
	};

	/**
	 * List of parser and steps for different kind of value types.
	 * Parser: Parses a value to a specific format which a Step can handle.
	 * Step: A function which gets the output of two Parsers and interpolates the value for a given progress.
	 */
	var parsersAndSteps = {
		//Simple constant values which won't be interpolated.
		constant: {
			/**
			* Doesn't interpolate at all.
			*/
			step: function(val) {
				return val;
			}
		},
		//Simple numeric values with unit which can easily be interpolated.
		//Not used directly, only by composedNumeric.
		numeric: {
			/**
			 * Parses a single numeric value with optional unit.<commit_msg>bounce easing optimizations<commit_after>(function(window, document, undefined) {
	var noop = function() {};

	//Minify optimizations
	var _parseInt = parseInt;
	var _parseFloat = parseFloat;
	var hasProp = Object.prototype.hasOwnProperty;

	var rxTrim = /^\s*(.*)\s$/;
	var rxKeyframeAttribute = /^data(-end)?-?(\d+)?$/;
	var rxPropSplit = /:|;/g;
	var rxPropEasing = /^([a-z-]+)\[(\w+)\]$/;
	var rxCamelCase = /-([a-z])/g;
	var rxNumericValue = /(?:^|\s+)((?:-|\+)?[0-9.]+)(%|px|em|ex|pt|in|cm|mm|pc|deg)?/g;
	var rxTransformValue = /((?:rotate)|(?:scale(?:X|Y)?)|(?:skew(?:X|Y)?))\((.+?)\)/g;
	var rxColorValue = /^((?:rgba?)|(?:hsla?))\(((?:-|\+)?\d+)\s*,\s*(\d{1,3})%?\s*,\s*(\d{1,3})%?\s*(?:,\s*([0-9.]+))?\)$/;

	var supportsCSS3Colors = true;
	try {
		//IE will throw an exception
		document.createElement('a').style.color = 'hsl(0,0%,0%)';
	} catch(e) {
		supportsCSS3Colors = false;
	}

	var easings = {
		begin: function() {
			return 0;
		},
		end: function() {
			return 1;
		},
		linear: function(p) {
			return p;
		},
		quadratic: function(p) {
			return p * p;
		},
		cubic: function(p) {
			return p * p * p * p;
		},
		swing: function(p) {
			return (-Math.cos(p * Math.PI) / 2) + .5;
		},
		//see https://www.desmos.com/calculator/tbr20s8vd2 for how I did this
		bounce: function(p, a) {
			switch(true) {
				case (p <= .5083):
					a = 3; break;
				case (p <= .8489):
					a = 9; break;
				case (p <= .96208):
					a = 27; break;
				case (p <= .99981):
					a = 91; break;
				default:
					return 1;
			}

			return 1 - Math.abs(3 * Math.cos(p * a * 1.028) / a);
		}
	};

	/**
	 * List of parser and steps for different kind of value types.
	 * Parser: Parses a value to a specific format which a Step can handle.
	 * Step: A function which gets the output of two Parsers and interpolates the value for a given progress.
	 */
	var parsersAndSteps = {
		//Simple constant values which won't be interpolated.
		constant: {
			/**
			* Doesn't interpolate at all.
			*/
			step: function(val) {
				return val;
			}
		},
		//Simple numeric values with unit which can easily be interpolated.
		//Not used directly, only by composedNumeric.
		numeric: {
			/**
			 * Parses a single numeric value with optional unit.
{'fraction_non_alphanumeric': 0.2076804237475171, 'fraction_numerical': 0.02295299050982123, 'mean_word_length': 2.8668941979522184, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6360229', 'n_tokens_mistral': 2049, 'n_tokens_neox': 1752, 'n_words': 444}