Introduction
Throughout this project we will be discovering the question, does the
data set provide evidence that men are charged significantly more for
health insurance than women? The data set we are using for this project
can be found here. It has 1,338 total entries consisting of 7
attributes that describe each person’s age, gender, health status, and
lifestyle factors, along with the amount they are charged for health
insurance. (Click here for more information about this data set). For
all our calculations and visuals, we are going to be using the
tidyverse, openintro, and
DT packages. To download the data set to R, we are
going to be using the readr package.
library(tidyverse)
library(openintro)
library(DT)
library(readr)
Health Insurance Charges Models
Simple Regression Model
To start our investigation, we are going to make a regression model
with sex as the predictor and the charges as the response. This will
allow us to compare the health insurance charges solely based on whether
a person is male or female. We will also check out the summary of the
model to see if there is a significant difference between the two.
insurance_sex_model <- lm(charges ~ sex, insurance)
summary(insurance_sex_model)
##
## Call:
## lm(formula = charges ~ sex, data = insurance)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12835 -8435 -3980 3476 51201
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12569.6 470.1 26.740 <2e-16 ***
## sexmale 1387.2 661.3 2.098 0.0361 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12090 on 1336 degrees of freedom
## Multiple R-squared: 0.003282, Adjusted R-squared: 0.002536
## F-statistic: 4.4 on 1 and 1336 DF, p-value: 0.03613
According to this model summary, the coefficients tells us that men
are charged $1387.20, on average, more than women are for health
insurance. This is a significant difference as we can see that the
p-values for men is 0.036 and <2e-16 for women, which are both below
the 0.05 level of significance. However, we can not use this piece of
evidence to make a strong conclusion on whether men are significantly
charged more than women because we have not controlled for any other
factors that is included in the data set.
It is important to control for any factors that may affect the
overall health insurance charges because when looking at the adjusted
R2 value, we can see that sex can only explain about 0.3% of
the variation in charges for this model which is a very small
percentage. The other variables such as smoking, age, and the bmi of a
person will all affect the overall cost of their health insurance
charges.
One important factor mentioned was age, and this can be a confounding
variable because older people are likely to be charged more for their
health insurance since they are more prone to illnesses and injuries.
This requires them to use the insurance more often than younger people.
Age can also help explain why men are charged more than women on health
insurance because men are more likely to have serious health concerns
such as heart diseases, liver diseases, or certain cancers like prostate
cancer the older they get. We will explore further below.
Controlling For Sex and Age
This new model will add age as a predictor for the health insurance
charges.
insurance_sex_age_model <- lm(charges ~ sex + age, insurance)
summary(insurance_sex_age_model)
##
## Call:
## lm(formula = charges ~ sex + age, data = insurance)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8821 -6947 -5511 5443 48203
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2343.62 994.35 2.357 0.0186 *
## sexmale 1538.83 631.08 2.438 0.0149 *
## age 258.87 22.47 11.523 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11540 on 1335 degrees of freedom
## Multiple R-squared: 0.09344, Adjusted R-squared: 0.09209
## F-statistic: 68.8 on 2 and 1335 DF, p-value: < 2.2e-16
Just like in the previous model, men are significantly charge more
than women are for health insurance by $1,538.83 on average. The p-value
for men is 0.0149 and 0.0186 for women, which are all below the level of
significance at 0.05. As for the added variable, age, the coefficient
tells us that for every 1 year increase in age, the health insurance
charge increases by $258.87 on average. Age is also a significant
predictor because it has a very small p-value at <2e-16. Another
noticeable difference in this model is that the adjusted R2
value increased, and this tells us that about 9% of the variance of
health insurance cost can be explained by sex and age. With this
information, we can see that age is a much more significant predictor
than sex because the p-value in the F-statistic is much smaller than the
first model.
Controlling For Sex, Age, and Personal Health
This new model is going to include the BMI and Smoker variables in
addition to sex and age. Our hope for this test is to see if these
variables that deal with a person’s health directly will have a
significant impact on their health insurance charge.
insurance_health_model <- lm(charges ~ sex + age + bmi + smoker, insurance)
summary(insurance_health_model)
##
## Call:
## lm(formula = charges ~ sex + age + bmi + smoker, data = insurance)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12364.7 -2972.2 -983.2 1475.8 29018.3
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11633.49 947.27 -12.281 <2e-16 ***
## sexmale -109.04 334.66 -0.326 0.745
## age 259.45 11.94 21.727 <2e-16 ***
## bmi 323.05 27.53 11.735 <2e-16 ***
## smokeryes 23833.87 414.19 57.544 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6094 on 1333 degrees of freedom
## Multiple R-squared: 0.7475, Adjusted R-squared: 0.7467
## F-statistic: 986.5 on 4 and 1333 DF, p-value: < 2.2e-16
With this health model, we can see a much different result than the
other two models where, unlike the other two models, the men are charged
$109.04 less than women for their health insurance on average. However,
this is not significant because the p-value for men is 0.745 which is
above the level of significance at 0.05. Although sex is no longer a
significant predictor of the charges, all the other predictors are
statistically significant with a p-value of <2e-16.
What these coefficients mean is that for every year increase in age,
their charges increase by $259.45 on average while holding all other
variables constant. For every single increase in bmi, their charges
increase by $323.05 on average while holding all other variables
constant. Finally, if a person does smoke, their charges increase by
$23,833.87 on average while holding all other variables constant.
This is a much better model than the previous two because we can see
that these predictors can explain 74.67% of the variance in health
insurance charges. Looking at the F-statistics, this model is still
statistically significant with a p-value of <2.2e-16 which is much
less than 0.05. So with this evidence, we should not trust the previous
two models over this current model because they do not fit the data as
well and are missing important factors.
Controlling for All Variables
For this final model, we will be adding in the last two variables,
region and children.
insurance_full_model <- lm(charges ~ sex + age + bmi + smoker + region + children, insurance)
summary(insurance_full_model)
##
## Call:
## lm(formula = charges ~ sex + age + bmi + smoker + region + children,
## data = insurance)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11304.9 -2848.1 -982.1 1393.9 29992.8
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11938.5 987.8 -12.086 < 2e-16 ***
## sexmale -131.3 332.9 -0.394 0.693348
## age 256.9 11.9 21.587 < 2e-16 ***
## bmi 339.2 28.6 11.860 < 2e-16 ***
## smokeryes 23848.5 413.1 57.723 < 2e-16 ***
## regionnorthwest -353.0 476.3 -0.741 0.458769
## regionsoutheast -1035.0 478.7 -2.162 0.030782 *
## regionsouthwest -960.0 477.9 -2.009 0.044765 *
## children 475.5 137.8 3.451 0.000577 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6062 on 1329 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7494
## F-statistic: 500.8 on 8 and 1329 DF, p-value: < 2.2e-16
This model now has every variable controlled for and we can see a few
changes. The biggest change we can see right away is that men are
charged $131.30 less than women on average, however, the p-value shows
that sex is not a significant predictor anymore. There is not much
difference with the variables age, bmi, and smoker besides some minimal
price changes from the previous model as they remain as significant
predictors. The adjusted R2 and F-statistic did not change
almost at all so this model is not much better than the previous
model.
Moving on to the new variables, it appears that children is a
significant predictor with a p-value at 0.000577 which is less than
0.05. The coefficient tells us that for every child or dependent a
person has in their insurance, their charges increase by $475.50 on
average. As for regions, southeast and southwest are significant
predictors with p-values of 0.0308 and 0.0448 respectively. For those
who live in the southeast region, they will be charged $1,035.00 less
than those who live in the northeast region on average. For those who
live in the southwest region, they will be charged $960.00 less than
those who live in the northeast region on average. The northwest region
is not statistically significant, however, they pay $353.00 less than
those who live in the northeast region on average.
Conclusion
The goal of this project was to determine whether men are charged
significantly more for health insurance than women. Our initial model
that only compared sex to charges suggested that there was evidence that
men were charged more for insurance, however the adjusted R2
was very small.
After refining our regression models to control for all variables, we
can conclude that there is no evidence to support the claim that men are
charged significantly more than women for health insurance.
As we saw throughout the project, sex became more insignificant the
more variables we started controlling for, especially major factors such
as bmi, and smoking. Controlling for these predictor variables not only
showed significance, but they also increased the adjusted R2
which means they can explain a high percentage of the variance in health
insurance charges.
…
LS0tDQp0aXRsZTogIkdlbmRlciBhbmQgSGVhbHRoIEluc3VyYW5jZSAtIEFyZSBNZW4gQ2hhcmdlZCBNb3JlPyINCmF1dGhvcjogIlZpa3RvciBDaGh1biINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSkNCmBgYA0KDQojIEludHJvZHVjdGlvbg0KDQpUaHJvdWdob3V0IHRoaXMgcHJvamVjdCB3ZSB3aWxsIGJlIGRpc2NvdmVyaW5nIHRoZSBxdWVzdGlvbiwgZG9lcyB0aGUgZGF0YSBzZXQgcHJvdmlkZSBldmlkZW5jZSB0aGF0IG1lbiBhcmUgY2hhcmdlZCBzaWduaWZpY2FudGx5IG1vcmUgZm9yIGhlYWx0aCBpbnN1cmFuY2UgdGhhbiB3b21lbj8gVGhlIGRhdGEgc2V0IHdlIGFyZSB1c2luZyBmb3IgdGhpcyBwcm9qZWN0IGNhbiBiZSBmb3VuZCBbaGVyZV0oaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8xM2wwZy05Q2lzbm9sTzhmN3ROWnVMajEtVkpxckVwWncvdmlldyl7dGFyZ2V0PSJfYmxhbmsifS4gSXQgaGFzIDEsMzM4IHRvdGFsIGVudHJpZXMgY29uc2lzdGluZyBvZiA3IGF0dHJpYnV0ZXMgdGhhdCBkZXNjcmliZSBlYWNoIHBlcnNvbidzIGFnZSwgZ2VuZGVyLCBoZWFsdGggc3RhdHVzLCBhbmQgbGlmZXN0eWxlIGZhY3RvcnMsIGFsb25nIHdpdGggdGhlIGFtb3VudCB0aGV5IGFyZSBjaGFyZ2VkIGZvciBoZWFsdGggaW5zdXJhbmNlLiAoQ2xpY2sgW2hlcmVdKGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vZGF0YXNldHMvbWlyaWNob2kwMjE4L2luc3VyYW5jZSl7dGFyZ2V0PSJfYmxhbmsifSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRhdGEgc2V0KS4gRm9yIGFsbCBvdXIgY2FsY3VsYXRpb25zIGFuZCB2aXN1YWxzLCB3ZSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlICoqdGlkeXZlcnNlKiosICoqb3BlbmludHJvKiosIGFuZCAqKkRUKiogcGFja2FnZXMuIFRvIGRvd25sb2FkIHRoZSBkYXRhIHNldCB0byBSLCB3ZSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlICoqcmVhZHIqKiBwYWNrYWdlLg0KDQpgYGB7ciBsb2FkLXBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KG9wZW5pbnRybykNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHJlYWRyKQ0KYGBgDQoNCiMgSW5zdXJhbmNlIERhdGEgU2V0DQoNCmBgYHtyIGltcG9ydH0NCmluc3VyYW5jZSA8LSByZWFkX2NzdigiaW5zdXJhbmNlLmNzdiIpDQoNCmRhdGF0YWJsZShpbnN1cmFuY2UsIG9wdGlvbnMgPSBsaXN0KHNjcm9sbFggPSBUUlVFKSkNCmBgYA0KDQojIyMgRGF0YSBEaWN0aW9uYXJ5DQoNCmBgYHtyIGRhdGEtZGljdGlvbmFyeX0NCmRhdGFfZGljdGlvbmFyeSA8LSB0aWJibGUoDQogIENvbHVtbl9OYW1lID0gYygiYWdlIiwgInNleCIsICJibWkiLCAiY2hpbGRyZW4iLCAic21va2VyIiwgInJlZ2lvbiIsICJjaGFyZ2VzIiksDQogIERlc2NyaXB0aW9uID0gYygiQWdlIG9mIHByaW1hcnkgYmVuZWZpY2lhcnkiLCAiSW5zdXJhbmNlIGNvbnRyYWN0b3IgZ2VuZGVyLCBmZW1hbGUsIG1hbGUiLCAiQm9keSBtYXNzIGluZGV4LCBwcm92aWRpbmcgYW4gdW5kZXJzdGFuZGluZyBvZiBib2R5LCB3ZWlnaHRzIHRoYXQgYXJlIHJlbGF0aXZlbHkgaGlnaCBvciBsb3cgcmVsYXRpdmUgdG8gaGVpZ2h0LCBvYmplY3RpdmUgaW5kZXggb2YgYm9keSB3ZWlnaHQgKGtnIC8gbSBeIDIpIHVzaW5nIHRoZSByYXRpbyBvZiBoZWlnaHQgdG8gd2VpZ2h0LCBpZGVhbGx5IDE4LjUgdG8gMjQuOSIsICJOdW1iZXIgb2YgY2hpbGRyZW4gY292ZXJlZCBieSBoZWFsdGggaW5zdXJhbmNlIC8gTnVtYmVyIG9mIGRlcGVuZGVudHMiLCAiU21va2luZyIsICJUaGUgYmVuZWZpY2lhcnkncyByZXNpZGVudGlhbCBhcmVhIGluIHRoZSBVUywgbm9ydGhlYXN0LCBzb3V0aGVhc3QsIHNvdXRod2VzdCwgbm9ydGh3ZXN0LiIsICJJbmRpdmlkdWFsIG1lZGljYWwgY29zdHMgYmlsbGVkIGJ5IGhlYWx0aCBpbnN1cmFuY2UiKQ0KKQ0KDQpkYXRhdGFibGUoZGF0YV9kaWN0aW9uYXJ5LCBvcHRpb25zID0gbGlzdChzY3JvbGxYID0gVFJVRSkpDQpgYGANCg0KIyBIZWFsdGggSW5zdXJhbmNlIENoYXJnZXMgTW9kZWxzDQoNCiMjIyBTaW1wbGUgUmVncmVzc2lvbiBNb2RlbA0KDQpUbyBzdGFydCBvdXIgaW52ZXN0aWdhdGlvbiwgd2UgYXJlIGdvaW5nIHRvIG1ha2UgYSByZWdyZXNzaW9uIG1vZGVsIHdpdGggc2V4IGFzIHRoZSBwcmVkaWN0b3IgYW5kIHRoZSBjaGFyZ2VzIGFzIHRoZSByZXNwb25zZS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNvbXBhcmUgdGhlIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlcyBzb2xlbHkgYmFzZWQgb24gd2hldGhlciBhIHBlcnNvbiBpcyBtYWxlIG9yIGZlbWFsZS4gV2Ugd2lsbCBhbHNvIGNoZWNrIG91dCB0aGUgc3VtbWFyeSBvZiB0aGUgbW9kZWwgdG8gc2VlIGlmIHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28uDQoNCmBgYHtyfQ0KaW5zdXJhbmNlX3NleF9tb2RlbCA8LSBsbShjaGFyZ2VzIH4gc2V4LCBpbnN1cmFuY2UpDQoNCnN1bW1hcnkoaW5zdXJhbmNlX3NleF9tb2RlbCkNCmBgYA0KDQpBY2NvcmRpbmcgdG8gdGhpcyBtb2RlbCBzdW1tYXJ5LCB0aGUgY29lZmZpY2llbnRzIHRlbGxzIHVzIHRoYXQgbWVuIGFyZSBjaGFyZ2VkICQxMzg3LjIwLCBvbiBhdmVyYWdlLCBtb3JlIHRoYW4gd29tZW4gYXJlIGZvciBoZWFsdGggaW5zdXJhbmNlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBhcyB3ZSBjYW4gc2VlIHRoYXQgdGhlIHAtdmFsdWVzIGZvciBtZW4gaXMgMC4wMzYgYW5kIDwyZS0xNiBmb3Igd29tZW4sIHdoaWNoIGFyZSBib3RoIGJlbG93IHRoZSAwLjA1IGxldmVsIG9mIHNpZ25pZmljYW5jZS4gSG93ZXZlciwgd2UgY2FuIG5vdCB1c2UgdGhpcyBwaWVjZSBvZiBldmlkZW5jZSB0byBtYWtlIGEgc3Ryb25nIGNvbmNsdXNpb24gb24gd2hldGhlciBtZW4gYXJlIHNpZ25pZmljYW50bHkgY2hhcmdlZCBtb3JlIHRoYW4gd29tZW4gYmVjYXVzZSB3ZSBoYXZlIG5vdCBjb250cm9sbGVkIGZvciBhbnkgb3RoZXIgZmFjdG9ycyB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBkYXRhIHNldC4gDQoNCkl0IGlzIGltcG9ydGFudCB0byBjb250cm9sIGZvciBhbnkgZmFjdG9ycyB0aGF0IG1heSBhZmZlY3QgdGhlIG92ZXJhbGwgaGVhbHRoIGluc3VyYW5jZSBjaGFyZ2VzIGJlY2F1c2Ugd2hlbiBsb29raW5nIGF0IHRoZSBhZGp1c3RlZCBSXjJeIHZhbHVlLCB3ZSBjYW4gc2VlIHRoYXQgc2V4IGNhbiBvbmx5IGV4cGxhaW4gYWJvdXQgMC4zJSBvZiB0aGUgdmFyaWF0aW9uIGluIGNoYXJnZXMgZm9yIHRoaXMgbW9kZWwgd2hpY2ggaXMgYSB2ZXJ5IHNtYWxsIHBlcmNlbnRhZ2UuIFRoZSBvdGhlciB2YXJpYWJsZXMgc3VjaCBhcyBzbW9raW5nLCBhZ2UsIGFuZCB0aGUgYm1pIG9mIGEgcGVyc29uIHdpbGwgYWxsIGFmZmVjdCB0aGUgb3ZlcmFsbCBjb3N0IG9mIHRoZWlyIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlcy4NCg0KT25lIGltcG9ydGFudCBmYWN0b3IgbWVudGlvbmVkIHdhcyBhZ2UsIGFuZCB0aGlzIGNhbiBiZSBhIGNvbmZvdW5kaW5nIHZhcmlhYmxlIGJlY2F1c2Ugb2xkZXIgcGVvcGxlIGFyZSBsaWtlbHkgdG8gYmUgY2hhcmdlZCBtb3JlIGZvciB0aGVpciBoZWFsdGggaW5zdXJhbmNlIHNpbmNlIHRoZXkgYXJlIG1vcmUgcHJvbmUgdG8gaWxsbmVzc2VzIGFuZCBpbmp1cmllcy4gVGhpcyByZXF1aXJlcyB0aGVtIHRvIHVzZSB0aGUgaW5zdXJhbmNlIG1vcmUgb2Z0ZW4gdGhhbiB5b3VuZ2VyIHBlb3BsZS4gQWdlIGNhbiBhbHNvIGhlbHAgZXhwbGFpbiB3aHkgbWVuIGFyZSBjaGFyZ2VkIG1vcmUgdGhhbiB3b21lbiBvbiBoZWFsdGggaW5zdXJhbmNlIGJlY2F1c2UgbWVuIGFyZSBtb3JlIGxpa2VseSB0byBoYXZlIHNlcmlvdXMgaGVhbHRoIGNvbmNlcm5zIHN1Y2ggYXMgaGVhcnQgZGlzZWFzZXMsIGxpdmVyIGRpc2Vhc2VzLCBvciBjZXJ0YWluIGNhbmNlcnMgbGlrZSBwcm9zdGF0ZSBjYW5jZXIgdGhlIG9sZGVyIHRoZXkgZ2V0LiBXZSB3aWxsIGV4cGxvcmUgZnVydGhlciBiZWxvdy4NCg0KIyMjIENvbnRyb2xsaW5nIEZvciBTZXggYW5kIEFnZQ0KDQpUaGlzIG5ldyBtb2RlbCB3aWxsIGFkZCBhZ2UgYXMgYSBwcmVkaWN0b3IgZm9yIHRoZSBoZWFsdGggaW5zdXJhbmNlIGNoYXJnZXMuIA0KDQpgYGB7cn0NCmluc3VyYW5jZV9zZXhfYWdlX21vZGVsIDwtIGxtKGNoYXJnZXMgfiBzZXggKyBhZ2UsIGluc3VyYW5jZSkNCg0Kc3VtbWFyeShpbnN1cmFuY2Vfc2V4X2FnZV9tb2RlbCkNCmBgYA0KDQpKdXN0IGxpa2UgaW4gdGhlIHByZXZpb3VzIG1vZGVsLCBtZW4gYXJlIHNpZ25pZmljYW50bHkgY2hhcmdlIG1vcmUgdGhhbiB3b21lbiBhcmUgZm9yIGhlYWx0aCBpbnN1cmFuY2UgYnkgJDEsNTM4LjgzIG9uIGF2ZXJhZ2UuIFRoZSBwLXZhbHVlIGZvciBtZW4gaXMgMC4wMTQ5IGFuZCAwLjAxODYgZm9yIHdvbWVuLCB3aGljaCBhcmUgYWxsIGJlbG93IHRoZSBsZXZlbCBvZiBzaWduaWZpY2FuY2UgYXQgMC4wNS4gQXMgZm9yIHRoZSBhZGRlZCB2YXJpYWJsZSwgYWdlLCB0aGUgY29lZmZpY2llbnQgdGVsbHMgdXMgdGhhdCBmb3IgZXZlcnkgMSB5ZWFyIGluY3JlYXNlIGluIGFnZSwgdGhlIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlIGluY3JlYXNlcyBieSAkMjU4Ljg3IG9uIGF2ZXJhZ2UuIEFnZSBpcyBhbHNvIGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIGJlY2F1c2UgaXQgaGFzIGEgdmVyeSBzbWFsbCBwLXZhbHVlIGF0IDwyZS0xNi4gQW5vdGhlciBub3RpY2VhYmxlIGRpZmZlcmVuY2UgaW4gdGhpcyBtb2RlbCBpcyB0aGF0IHRoZSBhZGp1c3RlZCBSXjJeIHZhbHVlIGluY3JlYXNlZCwgYW5kIHRoaXMgdGVsbHMgdXMgdGhhdCBhYm91dCA5JSBvZiB0aGUgdmFyaWFuY2Ugb2YgaGVhbHRoIGluc3VyYW5jZSBjb3N0IGNhbiBiZSBleHBsYWluZWQgYnkgc2V4IGFuZCBhZ2UuIFdpdGggdGhpcyBpbmZvcm1hdGlvbiwgd2UgY2FuIHNlZSB0aGF0IGFnZSBpcyBhIG11Y2ggbW9yZSBzaWduaWZpY2FudCBwcmVkaWN0b3IgdGhhbiBzZXggYmVjYXVzZSB0aGUgcC12YWx1ZSBpbiB0aGUgRi1zdGF0aXN0aWMgaXMgbXVjaCBzbWFsbGVyIHRoYW4gdGhlIGZpcnN0IG1vZGVsLg0KDQojIyMgQ29udHJvbGxpbmcgRm9yIFNleCwgQWdlLCBhbmQgUGVyc29uYWwgSGVhbHRoDQoNClRoaXMgbmV3IG1vZGVsIGlzIGdvaW5nIHRvIGluY2x1ZGUgdGhlIEJNSSBhbmQgU21va2VyIHZhcmlhYmxlcyBpbiBhZGRpdGlvbiB0byBzZXggYW5kIGFnZS4gT3VyIGhvcGUgZm9yIHRoaXMgdGVzdCBpcyB0byBzZWUgaWYgdGhlc2UgdmFyaWFibGVzIHRoYXQgZGVhbCB3aXRoIGEgcGVyc29uJ3MgaGVhbHRoIGRpcmVjdGx5IHdpbGwgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiB0aGVpciBoZWFsdGggaW5zdXJhbmNlIGNoYXJnZS4gICANCg0KYGBge3J9DQppbnN1cmFuY2VfaGVhbHRoX21vZGVsIDwtIGxtKGNoYXJnZXMgfiBzZXggKyBhZ2UgKyBibWkgKyBzbW9rZXIsIGluc3VyYW5jZSkNCg0Kc3VtbWFyeShpbnN1cmFuY2VfaGVhbHRoX21vZGVsKQ0KYGBgDQoNCldpdGggdGhpcyBoZWFsdGggbW9kZWwsIHdlIGNhbiBzZWUgYSBtdWNoIGRpZmZlcmVudCByZXN1bHQgdGhhbiB0aGUgb3RoZXIgdHdvIG1vZGVscyB3aGVyZSwgdW5saWtlIHRoZSBvdGhlciB0d28gbW9kZWxzLCB0aGUgbWVuIGFyZSBjaGFyZ2VkICQxMDkuMDQgbGVzcyB0aGFuIHdvbWVuIGZvciB0aGVpciBoZWFsdGggaW5zdXJhbmNlIG9uIGF2ZXJhZ2UuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHNpZ25pZmljYW50IGJlY2F1c2UgdGhlIHAtdmFsdWUgZm9yIG1lbiBpcyAwLjc0NSB3aGljaCBpcyBhYm92ZSB0aGUgbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlIGF0IDAuMDUuIEFsdGhvdWdoIHNleCBpcyBubyBsb25nZXIgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2YgdGhlIGNoYXJnZXMsIGFsbCB0aGUgb3RoZXIgcHJlZGljdG9ycyBhcmUgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCB3aXRoIGEgcC12YWx1ZSBvZiA8MmUtMTYuIA0KDQpXaGF0IHRoZXNlIGNvZWZmaWNpZW50cyBtZWFuIGlzIHRoYXQgZm9yIGV2ZXJ5IHllYXIgaW5jcmVhc2UgaW4gYWdlLCB0aGVpciBjaGFyZ2VzIGluY3JlYXNlIGJ5ICQyNTkuNDUgb24gYXZlcmFnZSB3aGlsZSBob2xkaW5nIGFsbCBvdGhlciB2YXJpYWJsZXMgY29uc3RhbnQuIEZvciBldmVyeSBzaW5nbGUgaW5jcmVhc2UgaW4gYm1pLCB0aGVpciBjaGFyZ2VzIGluY3JlYXNlIGJ5ICQzMjMuMDUgb24gYXZlcmFnZSB3aGlsZSBob2xkaW5nIGFsbCBvdGhlciB2YXJpYWJsZXMgY29uc3RhbnQuIEZpbmFsbHksIGlmIGEgcGVyc29uIGRvZXMgc21va2UsIHRoZWlyIGNoYXJnZXMgaW5jcmVhc2UgYnkgJDIzLDgzMy44NyBvbiBhdmVyYWdlIHdoaWxlIGhvbGRpbmcgYWxsIG90aGVyIHZhcmlhYmxlcyBjb25zdGFudC4gDQoNClRoaXMgaXMgYSBtdWNoIGJldHRlciBtb2RlbCB0aGFuIHRoZSBwcmV2aW91cyB0d28gYmVjYXVzZSB3ZSBjYW4gc2VlIHRoYXQgdGhlc2UgcHJlZGljdG9ycyBjYW4gZXhwbGFpbiA3NC42NyUgb2YgdGhlIHZhcmlhbmNlIGluIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlcy4gTG9va2luZyBhdCB0aGUgRi1zdGF0aXN0aWNzLCB0aGlzIG1vZGVsIGlzIHN0aWxsIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgd2l0aCBhIHAtdmFsdWUgb2YgPDIuMmUtMTYgd2hpY2ggaXMgbXVjaCBsZXNzIHRoYW4gMC4wNS4gU28gd2l0aCB0aGlzIGV2aWRlbmNlLCB3ZSBzaG91bGQgbm90IHRydXN0IHRoZSBwcmV2aW91cyB0d28gbW9kZWxzIG92ZXIgdGhpcyBjdXJyZW50IG1vZGVsIGJlY2F1c2UgdGhleSBkbyBub3QgZml0IHRoZSBkYXRhIGFzIHdlbGwgYW5kIGFyZSBtaXNzaW5nIGltcG9ydGFudCBmYWN0b3JzLg0KDQojIyMgQ29udHJvbGxpbmcgZm9yIEFsbCBWYXJpYWJsZXMNCg0KRm9yIHRoaXMgZmluYWwgbW9kZWwsIHdlIHdpbGwgYmUgYWRkaW5nIGluIHRoZSBsYXN0IHR3byB2YXJpYWJsZXMsIHJlZ2lvbiBhbmQgY2hpbGRyZW4uDQoNCmBgYHtyfQ0KaW5zdXJhbmNlX2Z1bGxfbW9kZWwgPC0gbG0oY2hhcmdlcyB+IHNleCArIGFnZSArIGJtaSArIHNtb2tlciArIHJlZ2lvbiArIGNoaWxkcmVuLCBpbnN1cmFuY2UpDQoNCnN1bW1hcnkoaW5zdXJhbmNlX2Z1bGxfbW9kZWwpDQpgYGANCg0KVGhpcyBtb2RlbCBub3cgaGFzIGV2ZXJ5IHZhcmlhYmxlIGNvbnRyb2xsZWQgZm9yIGFuZCB3ZSBjYW4gc2VlIGEgZmV3IGNoYW5nZXMuIFRoZSBiaWdnZXN0IGNoYW5nZSB3ZSBjYW4gc2VlIHJpZ2h0IGF3YXkgaXMgdGhhdCBtZW4gYXJlIGNoYXJnZWQgJDEzMS4zMCBsZXNzIHRoYW4gd29tZW4gb24gYXZlcmFnZSwgaG93ZXZlciwgdGhlIHAtdmFsdWUgc2hvd3MgdGhhdCBzZXggaXMgbm90IGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIGFueW1vcmUuIFRoZXJlIGlzIG5vdCBtdWNoIGRpZmZlcmVuY2Ugd2l0aCB0aGUgdmFyaWFibGVzIGFnZSwgYm1pLCBhbmQgc21va2VyIGJlc2lkZXMgc29tZSBtaW5pbWFsIHByaWNlIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgbW9kZWwgYXMgdGhleSByZW1haW4gYXMgc2lnbmlmaWNhbnQgcHJlZGljdG9ycy4gVGhlIGFkanVzdGVkIFJeMl4gYW5kIEYtc3RhdGlzdGljIGRpZCBub3QgY2hhbmdlIGFsbW9zdCBhdCBhbGwgc28gdGhpcyBtb2RlbCBpcyBub3QgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgcHJldmlvdXMgbW9kZWwuIA0KDQpNb3Zpbmcgb24gdG8gdGhlIG5ldyB2YXJpYWJsZXMsIGl0IGFwcGVhcnMgdGhhdCBjaGlsZHJlbiBpcyBhIHNpZ25pZmljYW50IHByZWRpY3RvciB3aXRoIGEgcC12YWx1ZSBhdCAwLjAwMDU3NyB3aGljaCBpcyBsZXNzIHRoYW4gMC4wNS4gVGhlIGNvZWZmaWNpZW50IHRlbGxzIHVzIHRoYXQgZm9yIGV2ZXJ5IGNoaWxkIG9yIGRlcGVuZGVudCBhIHBlcnNvbiBoYXMgaW4gdGhlaXIgaW5zdXJhbmNlLCB0aGVpciBjaGFyZ2VzIGluY3JlYXNlIGJ5ICQ0NzUuNTAgb24gYXZlcmFnZS4gQXMgZm9yIHJlZ2lvbnMsIHNvdXRoZWFzdCBhbmQgc291dGh3ZXN0IGFyZSBzaWduaWZpY2FudCBwcmVkaWN0b3JzIHdpdGggcC12YWx1ZXMgb2YgMC4wMzA4IGFuZCAwLjA0NDggcmVzcGVjdGl2ZWx5LiBGb3IgdGhvc2Ugd2hvIGxpdmUgaW4gdGhlIHNvdXRoZWFzdCByZWdpb24sIHRoZXkgd2lsbCBiZSBjaGFyZ2VkICQxLDAzNS4wMCBsZXNzIHRoYW4gdGhvc2Ugd2hvIGxpdmUgaW4gdGhlIG5vcnRoZWFzdCByZWdpb24gb24gYXZlcmFnZS4gRm9yIHRob3NlIHdobyBsaXZlIGluIHRoZSBzb3V0aHdlc3QgcmVnaW9uLCB0aGV5IHdpbGwgYmUgY2hhcmdlZCAkOTYwLjAwIGxlc3MgdGhhbiB0aG9zZSB3aG8gbGl2ZSBpbiB0aGUgbm9ydGhlYXN0IHJlZ2lvbiBvbiBhdmVyYWdlLiBUaGUgbm9ydGh3ZXN0IHJlZ2lvbiBpcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCwgaG93ZXZlciwgdGhleSBwYXkgJDM1My4wMCBsZXNzIHRoYW4gdGhvc2Ugd2hvIGxpdmUgaW4gdGhlIG5vcnRoZWFzdCByZWdpb24gb24gYXZlcmFnZS4NCg0KIyBDb25jbHVzaW9uDQoNClRoZSBnb2FsIG9mIHRoaXMgcHJvamVjdCB3YXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgbWVuIGFyZSBjaGFyZ2VkIHNpZ25pZmljYW50bHkgbW9yZSBmb3IgaGVhbHRoIGluc3VyYW5jZSB0aGFuIHdvbWVuLiBPdXIgaW5pdGlhbCBtb2RlbCB0aGF0IG9ubHkgY29tcGFyZWQgc2V4IHRvIGNoYXJnZXMgc3VnZ2VzdGVkIHRoYXQgdGhlcmUgd2FzIGV2aWRlbmNlIHRoYXQgbWVuIHdlcmUgY2hhcmdlZCBtb3JlIGZvciBpbnN1cmFuY2UsIGhvd2V2ZXIgdGhlIGFkanVzdGVkIFJeMl4gd2FzIHZlcnkgc21hbGwuIA0KDQpBZnRlciByZWZpbmluZyBvdXIgcmVncmVzc2lvbiBtb2RlbHMgdG8gY29udHJvbCBmb3IgYWxsIHZhcmlhYmxlcywgd2UgY2FuIGNvbmNsdWRlIHRoYXQgdGhlcmUgaXMgbm8gZXZpZGVuY2UgdG8gc3VwcG9ydCB0aGUgY2xhaW0gdGhhdCBtZW4gYXJlIGNoYXJnZWQgc2lnbmlmaWNhbnRseSBtb3JlIHRoYW4gd29tZW4gZm9yIGhlYWx0aCBpbnN1cmFuY2UuIA0KDQpBcyB3ZSBzYXcgdGhyb3VnaG91dCB0aGUgcHJvamVjdCwgc2V4IGJlY2FtZSBtb3JlIGluc2lnbmlmaWNhbnQgdGhlIG1vcmUgdmFyaWFibGVzIHdlIHN0YXJ0ZWQgY29udHJvbGxpbmcgZm9yLCBlc3BlY2lhbGx5IG1ham9yIGZhY3RvcnMgc3VjaCBhcyBibWksIGFuZCBzbW9raW5nLiBDb250cm9sbGluZyBmb3IgdGhlc2UgcHJlZGljdG9yIHZhcmlhYmxlcyBub3Qgb25seSBzaG93ZWQgc2lnbmlmaWNhbmNlLCBidXQgdGhleSBhbHNvIGluY3JlYXNlZCB0aGUgYWRqdXN0ZWQgUl4yXiB3aGljaCBtZWFucyB0aGV5IGNhbiBleHBsYWluIGEgaGlnaCBwZXJjZW50YWdlIG9mIHRoZSB2YXJpYW5jZSBpbiBoZWFsdGggaW5zdXJhbmNlIGNoYXJnZXMuDQoNCi4uLg0KDQo=