1. Descriptive Statistics: Measures of Central
Tendency
Measures of central tendency summarize a dataset by identifying the
center of the data distribution.
a. Mean
The mean, or arithmetic average, is one of the most
common measures of central tendency. It is calculated by summing all
data points and dividing by the total number of points. The formula is:
\[
\text{Mean} = \frac{\sum X}{n}
\] where \(X\) represents
individual data points, and \(n\) is
the total number of data points.
Advantages:
Disadvantages:
Applications:
- Commonly used in fields like economics, engineering, and education
to provide an average value, e.g., calculating the average income in a
region.
Example:
# Sample data
data <- c(5, 8, 10, 6, 7, 8, 9)
# Calculate mean
mean_value <- mean(data)
mean_value # Output: 7.571429
[1] 7.571429
c. Mode
The mode is the most frequently occurring value in a
dataset. A dataset may have one mode (unimodal), more than one mode
(bimodal, multimodal), or no mode at all.
Advantages:
Disadvantages:
- May not exist or may not be unique in a dataset with no repeated
values.
Applications:
- Commonly used in marketing to determine the most frequent consumer
preferences.
R does not have a built-in function for mode, so we need to create
one.
Example:
# Custom function to calculate mode
get_mode <- function(v) {
uniq_v <- unique(v)
uniq_v[which.max(tabulate(match(v, uniq_v)))]
}
# Calculate mode
mode_value <- get_mode(data)
mode_value # Output: 8
[1] 8
2. Measures of Dispersion
These measures describe the spread or variability within a
dataset.
a. Standard Deviation
The standard deviation measures the amount of
variation in a dataset. It is the square root of the variance, and its
formula is: \[
\text{Standard Deviation} = \sqrt{\frac{\sum (X - \text{Mean})^2}{n}}
\]
Advantages:
- Provides insight into how spread out the values are from the
mean.
Disadvantages:
- Can be difficult to interpret without context, especially for skewed
distributions.
Applications:
- Widely used in finance to measure market volatility.
Example:
# Calculate standard deviation
sd_value <- sd(data)
sd_value # Output: 1.718249
[1] 1.718249
b. Variance
Variance is the average of the squared differences
from the mean. It provides a squared measure of dispersion.
Advantages:
- A comprehensive measure of variability.
Disadvantages:
- Squaring can distort the perception of scale, making it hard to
interpret compared to standard deviation.
Applications:
- Used in various statistical models, including machine learning
algorithms.
Example:
# Calculate variance
variance_value <- var(data)
variance_value # Output: 2.952381
[1] 2.952381
c. Range
The range is the difference between the maximum and
minimum values in the dataset.
Advantages:
- Simple to calculate and understand.
Disadvantages:
- Doesn’t account for distribution between the extremes.
Applications:
- Used in quick assessments of variability, such as stock price
analysis.
Example:
# Calculate range
range_value <- range(data)
range_value_diff <- diff(range_value)
range_value_diff # Output: 5
[1] 5
3. Interquartile Range (IQR)
The Interquartile Range (IQR) measures the spread of
the middle 50% of data points. It is calculated as the difference
between the third quartile (Q3) 75th percentile and the first quartile
(Q1) 25th percentile: \[
\text{IQR} = Q3 - Q1
\] The IQR is a robust measure of spread, particularly for skewed
distributions, since it is not affected by outliers.
Advantages:
- Resistant to outliers, making it ideal for skewed datasets.
Disadvantages:
- Ignores extreme values, which might be important in some
analyses.
Applications:
- Commonly used in box plots to highlight data dispersion and detect
outliers in fields like data science and economics.
Example:
# Calculate IQR
iqr_value <- IQR(data)
iqr_value # Output: 2.5
[1] 2
4. Sampling Distribution
A sampling distribution refers to the probability
distribution of a given statistic based on a random sample from a
population. The sampling distribution of the sample mean, for example,
describes the spread of sample means if many samples are drawn from the
population.
Advantages:
- Allows for inferences about population parameters.
Disadvantages:
- Requires a large number of samples to be effective.
Applications:
- Fundamental in inferential statistics, enabling hypothesis testing
and confidence intervals.
Example:
# Simulate a sampling distribution of the mean
set.seed(123)
sample_means <- replicate(1000, mean(sample(data, size = 5, replace = TRUE)))
# Plot the sampling distribution
hist(sample_means, main = "Sampling Distribution of the Mean", xlab = "Mean")

5. Probability Distributions
A probability distribution shows all possible values of a random
variable and the probabilities associated with those values.
a. Normal Distribution
The Normal Distribution, also known as the Gaussian
distribution, is characterized by a bell-shaped curve. Most values
cluster around the mean, with symmetrical tails extending in both
directions. The probability density function for a normal distribution
is: \[
f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x - \mu)^2}{2\sigma^2}}
\] where \(\mu\) is the mean,
and \(\sigma\) is the standard
deviation.
Advantages:
- Many real-world phenomena are normally distributed, making this
distribution widely applicable.
Disadvantages:
- Assumes data are symmetrically distributed, which may not always be
the case.
Applications:
- Used in hypothesis testing, quality control, and in finance for risk
assessment.
Example:
# Generate a sample from a normal distribution
normal_data <- rnorm(1000, mean = 0, sd = 1)
# Plot the normal distribution
hist(normal_data, breaks = 30, probability = TRUE, main = "Normal Distribution")
curve(dnorm(x, mean = 0, sd = 1), add = TRUE, col = "red", lwd = 2)

b. Binomial Distribution
The Binomial Distribution represents the number of
successes in a fixed number of independent trials, each with the same
probability of success. Its probability mass function is: \[
P(X = k) = \binom{n}{k} p^k (1 - p)^{n - k}
\] where \(n\) is the number of
trials, \(k\) is the number of
successes, and \(p\) is the probability
of success.
Advantages:
- Useful for modeling discrete events.
Disadvantages:
- Assumes independent trials and constant probability, which may not
always hold in practice.
Applications:
- Used in quality control, genetics, and risk modeling.
Example:
# Generate a sample from a binomial distribution
binom_data <- rbinom(1000, size = 10, prob = 0.5)
# Plot the binomial distribution
hist(binom_data, breaks = 10, probability = TRUE, main = "Binomial Distribution")

Summary
Mean, Median, Mode: These are measures of
central tendency, showing the “center” of your data.
Standard Deviation, Variance, Range, IQR: These
are measures of dispersion, showing how spread out the data is.
Sampling Distribution: Shows the distribution of
a sample statistic (e.g., the mean) across many samples.
Probability Distributions: Describe the
likelihood of different outcomes; examples include the normal and
binomial distributions.
These concepts are foundational in statistics and data analysis,
helping us summarize and understand data effectively.
LS0tDQp0aXRsZTogIkRlc2NyaXB0aXZlIFN0YXRpc3RpY3MiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCiMjIyAxLiAqKkRlc2NyaXB0aXZlIFN0YXRpc3RpY3M6IE1lYXN1cmVzIG9mIENlbnRyYWwgVGVuZGVuY3kqKg0KTWVhc3VyZXMgb2YgY2VudHJhbCB0ZW5kZW5jeSBzdW1tYXJpemUgYSBkYXRhc2V0IGJ5IGlkZW50aWZ5aW5nIHRoZSBjZW50ZXIgb2YgdGhlIGRhdGEgZGlzdHJpYnV0aW9uLg0KDQojIyMjICoqYS4gTWVhbioqDQpUaGUgKiptZWFuKiosIG9yIGFyaXRobWV0aWMgYXZlcmFnZSwgaXMgb25lIG9mIHRoZSBtb3N0IGNvbW1vbiBtZWFzdXJlcyBvZiBjZW50cmFsIHRlbmRlbmN5LiBJdCBpcyBjYWxjdWxhdGVkIGJ5IHN1bW1pbmcgYWxsIGRhdGEgcG9pbnRzIGFuZCBkaXZpZGluZyBieSB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50cy4gVGhlIGZvcm11bGEgaXM6DQpcWw0KXHRleHR7TWVhbn0gPSBcZnJhY3tcc3VtIFh9e259DQpcXQ0Kd2hlcmUgXChYXCkgcmVwcmVzZW50cyBpbmRpdmlkdWFsIGRhdGEgcG9pbnRzLCBhbmQgXChuXCkgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBkYXRhIHBvaW50cy4NCg0KKipBZHZhbnRhZ2VzOioqDQoNCi0gRWFzeSB0byBjYWxjdWxhdGUgYW5kIHVuZGVyc3RhbmQuDQoNCi0gVXNlcyBhbGwgZGF0YSBwb2ludHMsIGdpdmluZyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgZGF0YXNldC4NCg0KKipEaXNhZHZhbnRhZ2VzOioqDQoNCi0gSGlnaGx5IHNlbnNpdGl2ZSB0byBvdXRsaWVycy4gDQoNCi0gRXh0cmVtZSB2YWx1ZXMgY2FuIHNrZXcgdGhlIG1lYW4gc2lnbmlmaWNhbnRseS4NCiAgDQoqKkFwcGxpY2F0aW9uczoqKg0KDQotIENvbW1vbmx5IHVzZWQgaW4gZmllbGRzIGxpa2UgZWNvbm9taWNzLCBlbmdpbmVlcmluZywgYW5kIGVkdWNhdGlvbiB0byBwcm92aWRlIGFuIGF2ZXJhZ2UgdmFsdWUsIGUuZy4sIGNhbGN1bGF0aW5nIHRoZSBhdmVyYWdlIGluY29tZSBpbiBhIHJlZ2lvbi4NCg0KKipFeGFtcGxlOioqDQoNCmBgYHtyfQ0KIyBTYW1wbGUgZGF0YQ0KZGF0YSA8LSBjKDUsIDgsIDEwLCA2LCA3LCA4LCA5KQ0KDQojIENhbGN1bGF0ZSBtZWFuDQptZWFuX3ZhbHVlIDwtIG1lYW4oZGF0YSkNCm1lYW5fdmFsdWUgICMgT3V0cHV0OiA3LjU3MTQyOQ0KYGBgDQoNCg0KIyMjIyAqKmIuIE1lZGlhbioqDQpUaGUgKiptZWRpYW4qKiBpcyB0aGUgbWlkZGxlIHZhbHVlIGluIGEgc29ydGVkIGRhdGFzZXQuIElmIHRoZSBkYXRhc2V0IGhhcyBhbiBvZGQgbnVtYmVyIG9mIHZhbHVlcywgdGhlIG1lZGlhbiBpcyB0aGUgY2VudGVyIHZhbHVlLiBGb3IgYW4gZXZlbiBudW1iZXIgb2YgdmFsdWVzLCB0aGUgbWVkaWFuIGlzIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIG51bWJlcnMuDQoNCioqQWR2YW50YWdlczoqKg0KDQotIExlc3MgYWZmZWN0ZWQgYnkgb3V0bGllcnMgY29tcGFyZWQgdG8gdGhlIG1lYW4uDQoNCi0gUHJvdmlkZXMgYSBiZXR0ZXIgY2VudHJhbCB2YWx1ZSBmb3Igc2tld2VkIGRpc3RyaWJ1dGlvbnMuDQoNCioqRGlzYWR2YW50YWdlczoqKg0KDQotIERvZXNu4oCZdCB1c2UgYWxsIGRhdGEgcG9pbnRzLCB3aGljaCBjYW4gcmVzdWx0IGluIGxlc3MgcHJlY2lzaW9uLg0KICANCioqQXBwbGljYXRpb25zOioqDQoNCi0gT2Z0ZW4gdXNlZCBpbiBpbmNvbWUgZGF0YSB0byBnaXZlIGEgbW9yZSBhY2N1cmF0ZSBwaWN0dXJlIG9mIGNlbnRyYWwgdGVuZGVuY3kgaW4gc2tld2VkIGRpc3RyaWJ1dGlvbnMuDQoNCioqRXhhbXBsZToqKg0KDQpgYGB7cn0NCiMgQ2FsY3VsYXRlIG1lZGlhbg0KbWVkaWFuX3ZhbHVlIDwtIG1lZGlhbihkYXRhKQ0KbWVkaWFuX3ZhbHVlICAjIE91dHB1dDogOA0KYGBgDQoNCg0KIyMjIyAqKmMuIE1vZGUqKg0KVGhlICoqbW9kZSoqIGlzIHRoZSBtb3N0IGZyZXF1ZW50bHkgb2NjdXJyaW5nIHZhbHVlIGluIGEgZGF0YXNldC4gQSBkYXRhc2V0IG1heSBoYXZlIG9uZSBtb2RlICh1bmltb2RhbCksIG1vcmUgdGhhbiBvbmUgbW9kZSAoYmltb2RhbCwgbXVsdGltb2RhbCksIG9yIG5vIG1vZGUgYXQgYWxsLg0KDQoqKkFkdmFudGFnZXM6KioNCg0KLSBVc2VmdWwgZm9yIGNhdGVnb3JpY2FsIGRhdGEuDQoNCi0gQ2FuIGVhc2lseSBoaWdobGlnaHQgdGhlIG1vc3QgY29tbW9uIHZhbHVlIGluIGEgZGF0YXNldC4NCg0KKipEaXNhZHZhbnRhZ2VzOioqDQoNCi0gTWF5IG5vdCBleGlzdCBvciBtYXkgbm90IGJlIHVuaXF1ZSBpbiBhIGRhdGFzZXQgd2l0aCBubyByZXBlYXRlZCB2YWx1ZXMuDQogIA0KKipBcHBsaWNhdGlvbnM6KioNCg0KLSBDb21tb25seSB1c2VkIGluIG1hcmtldGluZyB0byBkZXRlcm1pbmUgdGhlIG1vc3QgZnJlcXVlbnQgY29uc3VtZXIgcHJlZmVyZW5jZXMuDQoNClIgZG9lcyBub3QgaGF2ZSBhIGJ1aWx0LWluIGZ1bmN0aW9uIGZvciBtb2RlLCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmUuDQoNCioqRXhhbXBsZToqKg0KDQpgYGB7cn0NCiMgQ3VzdG9tIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBtb2RlDQpnZXRfbW9kZSA8LSBmdW5jdGlvbih2KSB7DQogIHVuaXFfdiA8LSB1bmlxdWUodikNCiAgdW5pcV92W3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh2LCB1bmlxX3YpKSldDQp9DQoNCiMgQ2FsY3VsYXRlIG1vZGUNCm1vZGVfdmFsdWUgPC0gZ2V0X21vZGUoZGF0YSkNCm1vZGVfdmFsdWUgICMgT3V0cHV0OiA4DQpgYGANCg0KDQojIyMgMi4gKipNZWFzdXJlcyBvZiBEaXNwZXJzaW9uKioNClRoZXNlIG1lYXN1cmVzIGRlc2NyaWJlIHRoZSBzcHJlYWQgb3IgdmFyaWFiaWxpdHkgd2l0aGluIGEgZGF0YXNldC4NCg0KIyMjIyAqKmEuIFN0YW5kYXJkIERldmlhdGlvbioqDQpUaGUgKipzdGFuZGFyZCBkZXZpYXRpb24qKiBtZWFzdXJlcyB0aGUgYW1vdW50IG9mIHZhcmlhdGlvbiBpbiBhIGRhdGFzZXQuIEl0IGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFyaWFuY2UsIGFuZCBpdHMgZm9ybXVsYSBpczoNClxbDQpcdGV4dHtTdGFuZGFyZCBEZXZpYXRpb259ID0gXHNxcnR7XGZyYWN7XHN1bSAoWCAtIFx0ZXh0e01lYW59KV4yfXtufX0NClxdDQoNCioqQWR2YW50YWdlczoqKg0KDQotIFByb3ZpZGVzIGluc2lnaHQgaW50byBob3cgc3ByZWFkIG91dCB0aGUgdmFsdWVzIGFyZSBmcm9tIHRoZSBtZWFuLg0KDQoqKkRpc2FkdmFudGFnZXM6KioNCg0KLSBDYW4gYmUgZGlmZmljdWx0IHRvIGludGVycHJldCB3aXRob3V0IGNvbnRleHQsIGVzcGVjaWFsbHkgZm9yIHNrZXdlZCBkaXN0cmlidXRpb25zLg0KDQoqKkFwcGxpY2F0aW9uczoqKg0KDQotIFdpZGVseSB1c2VkIGluIGZpbmFuY2UgdG8gbWVhc3VyZSBtYXJrZXQgdm9sYXRpbGl0eS4NCg0KKipFeGFtcGxlOioqDQoNCmBgYHtyfQ0KIyBDYWxjdWxhdGUgc3RhbmRhcmQgZGV2aWF0aW9uDQpzZF92YWx1ZSA8LSBzZChkYXRhKQ0Kc2RfdmFsdWUgICMgT3V0cHV0OiAxLjcxODI0OQ0KYGBgDQoNCg0KIyMjIyAqKmIuIFZhcmlhbmNlKioNCioqVmFyaWFuY2UqKiBpcyB0aGUgYXZlcmFnZSBvZiB0aGUgc3F1YXJlZCBkaWZmZXJlbmNlcyBmcm9tIHRoZSBtZWFuLiBJdCBwcm92aWRlcyBhIHNxdWFyZWQgbWVhc3VyZSBvZiBkaXNwZXJzaW9uLg0KDQoqKkFkdmFudGFnZXM6KioNCg0KLSBBIGNvbXByZWhlbnNpdmUgbWVhc3VyZSBvZiB2YXJpYWJpbGl0eS4NCg0KKipEaXNhZHZhbnRhZ2VzOioqDQoNCi0gU3F1YXJpbmcgY2FuIGRpc3RvcnQgdGhlIHBlcmNlcHRpb24gb2Ygc2NhbGUsIG1ha2luZyBpdCBoYXJkIHRvIGludGVycHJldCBjb21wYXJlZCB0byBzdGFuZGFyZCBkZXZpYXRpb24uDQoNCioqQXBwbGljYXRpb25zOioqDQoNCi0gVXNlZCBpbiB2YXJpb3VzIHN0YXRpc3RpY2FsIG1vZGVscywgaW5jbHVkaW5nIG1hY2hpbmUgbGVhcm5pbmcgYWxnb3JpdGhtcy4NCg0KKipFeGFtcGxlOioqDQoNCmBgYHtyfQ0KIyBDYWxjdWxhdGUgdmFyaWFuY2UNCnZhcmlhbmNlX3ZhbHVlIDwtIHZhcihkYXRhKQ0KdmFyaWFuY2VfdmFsdWUgICMgT3V0cHV0OiAyLjk1MjM4MQ0KYGBgDQoNCg0KIyMjIyAqKmMuIFJhbmdlKioNClRoZSAqKnJhbmdlKiogaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZXMgaW4gdGhlIGRhdGFzZXQuDQoNCioqQWR2YW50YWdlczoqKg0KDQotIFNpbXBsZSB0byBjYWxjdWxhdGUgYW5kIHVuZGVyc3RhbmQuDQoNCioqRGlzYWR2YW50YWdlczoqKg0KDQotIERvZXNu4oCZdCBhY2NvdW50IGZvciBkaXN0cmlidXRpb24gYmV0d2VlbiB0aGUgZXh0cmVtZXMuDQogIA0KKipBcHBsaWNhdGlvbnM6KioNCg0KLSBVc2VkIGluIHF1aWNrIGFzc2Vzc21lbnRzIG9mIHZhcmlhYmlsaXR5LCBzdWNoIGFzIHN0b2NrIHByaWNlIGFuYWx5c2lzLg0KDQoqKkV4YW1wbGU6KioNCg0KYGBge3J9DQojIENhbGN1bGF0ZSByYW5nZQ0KcmFuZ2VfdmFsdWUgPC0gcmFuZ2UoZGF0YSkNCnJhbmdlX3ZhbHVlX2RpZmYgPC0gZGlmZihyYW5nZV92YWx1ZSkNCnJhbmdlX3ZhbHVlX2RpZmYgICMgT3V0cHV0OiA1DQpgYGANCg0KDQojIyMgMy4gKipJbnRlcnF1YXJ0aWxlIFJhbmdlIChJUVIpKioNCg0KVGhlICoqSW50ZXJxdWFydGlsZSBSYW5nZSAoSVFSKSoqIG1lYXN1cmVzIHRoZSBzcHJlYWQgb2YgdGhlIG1pZGRsZSA1MCUgb2YgZGF0YSBwb2ludHMuIEl0IGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGhpcmQgcXVhcnRpbGUgKFEzKSA3NXRoIHBlcmNlbnRpbGUgYW5kIHRoZSBmaXJzdCBxdWFydGlsZSAoUTEpIDI1dGggcGVyY2VudGlsZToNClxbDQpcdGV4dHtJUVJ9ID0gUTMgLSBRMQ0KXF0NClRoZSBJUVIgaXMgYSByb2J1c3QgbWVhc3VyZSBvZiBzcHJlYWQsIHBhcnRpY3VsYXJseSBmb3Igc2tld2VkIGRpc3RyaWJ1dGlvbnMsIHNpbmNlIGl0IGlzIG5vdCBhZmZlY3RlZCBieSBvdXRsaWVycy4NCg0KKipBZHZhbnRhZ2VzOioqDQoNCi0gUmVzaXN0YW50IHRvIG91dGxpZXJzLCBtYWtpbmcgaXQgaWRlYWwgZm9yIHNrZXdlZCBkYXRhc2V0cy4NCg0KKipEaXNhZHZhbnRhZ2VzOioqDQoNCi0gSWdub3JlcyBleHRyZW1lIHZhbHVlcywgd2hpY2ggbWlnaHQgYmUgaW1wb3J0YW50IGluIHNvbWUgYW5hbHlzZXMuDQoNCioqQXBwbGljYXRpb25zOioqDQoNCi0gQ29tbW9ubHkgdXNlZCBpbiBib3ggcGxvdHMgdG8gaGlnaGxpZ2h0IGRhdGEgZGlzcGVyc2lvbiBhbmQgZGV0ZWN0IG91dGxpZXJzIGluIGZpZWxkcyBsaWtlIGRhdGEgc2NpZW5jZSBhbmQgZWNvbm9taWNzLg0KDQoqKkV4YW1wbGU6KioNCg0KYGBge3J9DQojIENhbGN1bGF0ZSBJUVINCmlxcl92YWx1ZSA8LSBJUVIoZGF0YSkNCmlxcl92YWx1ZSAgIyBPdXRwdXQ6IDINCmBgYA0KDQoNCiMjIyA0LiAqKlNhbXBsaW5nIERpc3RyaWJ1dGlvbioqDQpBICoqc2FtcGxpbmcgZGlzdHJpYnV0aW9uKiogcmVmZXJzIHRvIHRoZSBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gb2YgYSBnaXZlbiBzdGF0aXN0aWMgYmFzZWQgb24gYSByYW5kb20gc2FtcGxlIGZyb20gYSBwb3B1bGF0aW9uLiBUaGUgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIHRoZSBzYW1wbGUgbWVhbiwgZm9yIGV4YW1wbGUsIGRlc2NyaWJlcyB0aGUgc3ByZWFkIG9mIHNhbXBsZSBtZWFucyBpZiBtYW55IHNhbXBsZXMgYXJlIGRyYXduIGZyb20gdGhlIHBvcHVsYXRpb24uDQoNCioqQWR2YW50YWdlczoqKg0KDQotIEFsbG93cyBmb3IgaW5mZXJlbmNlcyBhYm91dCBwb3B1bGF0aW9uIHBhcmFtZXRlcnMuDQogIA0KKipEaXNhZHZhbnRhZ2VzOioqDQoNCi0gUmVxdWlyZXMgYSBsYXJnZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBiZSBlZmZlY3RpdmUuDQoNCioqQXBwbGljYXRpb25zOioqDQoNCi0gRnVuZGFtZW50YWwgaW4gaW5mZXJlbnRpYWwgc3RhdGlzdGljcywgZW5hYmxpbmcgaHlwb3RoZXNpcyB0ZXN0aW5nIGFuZCBjb25maWRlbmNlIGludGVydmFscy4NCg0KDQoqKkV4YW1wbGU6KioNCg0KYGBge3J9DQojIFNpbXVsYXRlIGEgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIHRoZSBtZWFuDQpzZXQuc2VlZCgxMjMpDQpzYW1wbGVfbWVhbnMgPC0gcmVwbGljYXRlKDEwMDAsIG1lYW4oc2FtcGxlKGRhdGEsIHNpemUgPSA1LCByZXBsYWNlID0gVFJVRSkpKQ0KDQojIFBsb3QgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbg0KaGlzdChzYW1wbGVfbWVhbnMsIG1haW4gPSAiU2FtcGxpbmcgRGlzdHJpYnV0aW9uIG9mIHRoZSBNZWFuIiwgeGxhYiA9ICJNZWFuIikNCmBgYA0KDQoNCiMjIyA1LiAqKlByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbnMqKg0KQSBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gc2hvd3MgYWxsIHBvc3NpYmxlIHZhbHVlcyBvZiBhIHJhbmRvbSB2YXJpYWJsZSBhbmQgdGhlIHByb2JhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIHZhbHVlcy4NCg0KIyMjIyAqKmEuIE5vcm1hbCBEaXN0cmlidXRpb24qKg0KVGhlICoqTm9ybWFsIERpc3RyaWJ1dGlvbioqLCBhbHNvIGtub3duIGFzIHRoZSBHYXVzc2lhbiBkaXN0cmlidXRpb24sIGlzIGNoYXJhY3Rlcml6ZWQgYnkgYSBiZWxsLXNoYXBlZCBjdXJ2ZS4gTW9zdCB2YWx1ZXMgY2x1c3RlciBhcm91bmQgdGhlIG1lYW4sIHdpdGggc3ltbWV0cmljYWwgdGFpbHMgZXh0ZW5kaW5nIGluIGJvdGggZGlyZWN0aW9ucy4gVGhlIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb24gZm9yIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBpczoNClxbDQpmKHgpID0gXGZyYWN7MX17XHNpZ21hIFxzcXJ0ezJccGl9fSBlXnstXGZyYWN7KHggLSBcbXUpXjJ9ezJcc2lnbWFeMn19DQpcXQ0Kd2hlcmUgXChcbXVcKSBpcyB0aGUgbWVhbiwgYW5kIFwoXHNpZ21hXCkgaXMgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi4NCg0KKipBZHZhbnRhZ2VzOioqDQoNCi0gTWFueSByZWFsLXdvcmxkIHBoZW5vbWVuYSBhcmUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQsIG1ha2luZyB0aGlzIGRpc3RyaWJ1dGlvbiB3aWRlbHkgYXBwbGljYWJsZS4NCg0KKipEaXNhZHZhbnRhZ2VzOioqDQoNCi0gQXNzdW1lcyBkYXRhIGFyZSBzeW1tZXRyaWNhbGx5IGRpc3RyaWJ1dGVkLCB3aGljaCBtYXkgbm90IGFsd2F5cyBiZSB0aGUgY2FzZS4NCg0KKipBcHBsaWNhdGlvbnM6KioNCg0KLSBVc2VkIGluIGh5cG90aGVzaXMgdGVzdGluZywgcXVhbGl0eSBjb250cm9sLCBhbmQgaW4gZmluYW5jZSBmb3IgcmlzayBhc3Nlc3NtZW50Lg0KDQoqKkV4YW1wbGU6KioNCg0KYGBge3J9DQojIEdlbmVyYXRlIGEgc2FtcGxlIGZyb20gYSBub3JtYWwgZGlzdHJpYnV0aW9uDQpub3JtYWxfZGF0YSA8LSBybm9ybSgxMDAwLCBtZWFuID0gMCwgc2QgPSAxKQ0KDQojIFBsb3QgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24NCmhpc3Qobm9ybWFsX2RhdGEsIGJyZWFrcyA9IDMwLCBwcm9iYWJpbGl0eSA9IFRSVUUsIG1haW4gPSAiTm9ybWFsIERpc3RyaWJ1dGlvbiIpDQpjdXJ2ZShkbm9ybSh4LCBtZWFuID0gMCwgc2QgPSAxKSwgYWRkID0gVFJVRSwgY29sID0gInJlZCIsIGx3ZCA9IDIpDQpgYGANCg0KDQojIyMjICoqYi4gQmlub21pYWwgRGlzdHJpYnV0aW9uKioNClRoZSAqKkJpbm9taWFsIERpc3RyaWJ1dGlvbioqIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgaW4gYSBmaXhlZCBudW1iZXIgb2YgaW5kZXBlbmRlbnQgdHJpYWxzLCBlYWNoIHdpdGggdGhlIHNhbWUgcHJvYmFiaWxpdHkgb2Ygc3VjY2Vzcy4gSXRzIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXM6DQpcWw0KUChYID0gaykgPSBcYmlub217bn17a30gcF5rICgxIC0gcClee24gLSBrfQ0KXF0NCndoZXJlIFwoblwpIGlzIHRoZSBudW1iZXIgb2YgdHJpYWxzLCBcKGtcKSBpcyB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcywgYW5kIFwocFwpIGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBzdWNjZXNzLg0KDQoqKkFkdmFudGFnZXM6KioNCg0KLSBVc2VmdWwgZm9yIG1vZGVsaW5nIGRpc2NyZXRlIGV2ZW50cy4NCg0KKipEaXNhZHZhbnRhZ2VzOioqDQoNCi0gQXNzdW1lcyBpbmRlcGVuZGVudCB0cmlhbHMgYW5kIGNvbnN0YW50IHByb2JhYmlsaXR5LCB3aGljaCBtYXkgbm90IGFsd2F5cyBob2xkIGluIHByYWN0aWNlLg0KDQoqKkFwcGxpY2F0aW9uczoqKg0KDQotIFVzZWQgaW4gcXVhbGl0eSBjb250cm9sLCBnZW5ldGljcywgYW5kIHJpc2sgbW9kZWxpbmcuDQoNCg0KKipFeGFtcGxlOioqDQoNCmBgYHtyfQ0KIyBHZW5lcmF0ZSBhIHNhbXBsZSBmcm9tIGEgYmlub21pYWwgZGlzdHJpYnV0aW9uDQpiaW5vbV9kYXRhIDwtIHJiaW5vbSgxMDAwLCBzaXplID0gMTAsIHByb2IgPSAwLjUpDQoNCiMgUGxvdCB0aGUgYmlub21pYWwgZGlzdHJpYnV0aW9uDQpoaXN0KGJpbm9tX2RhdGEsIGJyZWFrcyA9IDEwLCBwcm9iYWJpbGl0eSA9IFRSVUUsIG1haW4gPSAiQmlub21pYWwgRGlzdHJpYnV0aW9uIikNCmBgYA0KDQoNCiMjIyBTdW1tYXJ5DQoNCi0gKipNZWFuLCBNZWRpYW4sIE1vZGUqKjogVGhlc2UgYXJlIG1lYXN1cmVzIG9mIGNlbnRyYWwgdGVuZGVuY3ksIHNob3dpbmcgdGhlICJjZW50ZXIiIG9mIHlvdXIgZGF0YS4NCg0KLSAqKlN0YW5kYXJkIERldmlhdGlvbiwgVmFyaWFuY2UsIFJhbmdlLCBJUVIqKjogVGhlc2UgYXJlIG1lYXN1cmVzIG9mIGRpc3BlcnNpb24sIHNob3dpbmcgaG93IHNwcmVhZCBvdXQgdGhlIGRhdGEgaXMuDQoNCi0gKipTYW1wbGluZyBEaXN0cmlidXRpb24qKjogU2hvd3MgdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIHNhbXBsZSBzdGF0aXN0aWMgKGUuZy4sIHRoZSBtZWFuKSBhY3Jvc3MgbWFueSBzYW1wbGVzLg0KDQotICoqUHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9ucyoqOiBEZXNjcmliZSB0aGUgbGlrZWxpaG9vZCBvZiBkaWZmZXJlbnQgb3V0Y29tZXM7IGV4YW1wbGVzIGluY2x1ZGUgdGhlIG5vcm1hbCBhbmQgYmlub21pYWwgZGlzdHJpYnV0aW9ucy4NCg0KVGhlc2UgY29uY2VwdHMgYXJlIGZvdW5kYXRpb25hbCBpbiBzdGF0aXN0aWNzIGFuZCBkYXRhIGFuYWx5c2lzLCBoZWxwaW5nIHVzIHN1bW1hcml6ZSBhbmQgdW5kZXJzdGFuZCBkYXRhIGVmZmVjdGl2ZWx5Lg==