Assignment Objectives
Reinforce the likelihood concepts and MLE.
Understand the concepts of confidence intervals.
Master the process of finding likelihood ratio confidence
interval of unknown parameter.
Policies of Using AI Tools
Policy on AI Tool Use: You must adhere to the AI
tool policy specified in the course syllabus. The direct copying of
AI-generated content is strictly prohibited. All submitted work must
reflect your own understanding; where external tools are consulted,
content must be thoroughly rephrased and synthesized in your own
words.
Code Inclusion Requirement: Any code included in
your essay must be properly commented to explain the purpose and/or
expected output of key code lines. Submitting AI-generated code without
meaningful, student-added comments will not be accepted.
One Parameter Lindley Distribution
The Lindley distribution is a continuous
probability distribution proposed by D.V. Lindley in 1958. It
represents a weighted mixture of exponential and gamma
distributions, providing a flexible single-parameter model for lifetime
data.
\[
f(x;\theta) = \frac{\theta^2}{1+\theta}(1+x)e^{-\theta x}, \quad x >
0, \quad \theta > 0
\]
where \(x\) = random variable (e.g.,
time, size, amount) and \(\theta\) =
shape parameter controlling the distribution.
Given an independent random sample \(X_1,
X_2, \dots, X_n\):
\[
L(\theta) = \prod_{i=1}^n f(x_i;\theta) = \prod_{i=1}^n \left[
\frac{\theta^2}{1+\theta} (1 + x_i) e^{-\theta x_i} \right].
\]
Let \(S = \sum_{i=1}^n x_i\), \(\bar{x} = S/n\), and \(C = \sum_{i=1}^n \ln(1 + x_i)\) (constant
with respect to \(\theta\)):
\[
\ell(\theta) = \ln L(\theta) = n \ln\left( \frac{\theta^2}{1+\theta}
\right) + C - \theta S.
\]
After some algebra, we obtain the closed form of the MLE of \(\theta\) in the following
\[
\boxed{\hat{\theta} = \frac{1 - \bar{x} + \sqrt{\bar{x}^2 + 6\bar{x} +
1}}{2\bar{x}}}
\]
As good exercise, we can derive the following Fisher information of
\(\theta\):
\[
\boxed{I(\theta) = \frac{2}{\theta^2} - \frac{1}{(1+\theta)^2}}
\]
This assignment focuses on constructing
various confidence intervals of the shape parameter \(\theta\) in the Lindley
distribution.
Question: Customer Service Times (minutes)
The customer service call duration data set originates from a major
telecommunications provider in North America, operating in a highly
competitive market where:
3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8
Assuming the data follow a one-parameter Lindley distribution,
construct a \(95\%\) confidence
interval for the parameter \(\theta\)
using the provided data and the specified methods. For each of the
following questions, first describe your reasoning process for the
analysis, then write code to perform the actual analysis. Finally,
summarize the results to conclude the question.
- Construct a 95% asymptotic confidence interval
based on the asymptotic sampling distribution of the maximum likelihood
estimator (MLE) of \(\theta\).
Question 1 Part A
First we will mathematically determine the formula for calculating
the 95% asymptotic confidence interval based on our formulas for \(\hat{\theta}\) and \(I(\theta)\). Given the large population
size we and finite variance we can reasonably assume:
\[
\hat{\theta} \xrightarrow{d} N(\theta, \widehat{Var}(\hat{\theta}))
\]
We can then standardize our formula:
\[
\frac{\hat{\theta}-\theta}{\sqrt{\widehat{Var}(\hat{\theta})}}\xrightarrow{d}
N(0,1)
\]
Finally, we can construct the 95% confidence interval:
\[
\hat{\theta} \pm Z_{1-0.05/2}{\sqrt{\widehat{Var}(\hat{\theta})}}
\]
Since this is normally distributed, we can use the derived Fisher
information to find the variance:
\[
I(\theta)=\frac{1}{n(Var(\theta))} \Rightarrow
Var(\theta)=\frac{1}{n(I(\theta))}
\]
Where \(I(\theta) = \frac{2}{\theta^2} -
\frac{1}{(1+\theta)^2}\).
Finally, we can use the closed form MLE above to find \(\hat{\theta}\):
\[
\hat{\theta} = \frac{1 - \bar{x} + \sqrt{\bar{x}^2 + 6\bar{x} +
1}}{2\bar{x}}
\]
We can copy these formulas into our code to perform the analysis on
our dataset:
tele <- c(3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8)
n <- length(tele) #used to get n
m <- mean(tele) #used to find mean
theta.hat <- (1-m+sqrt(m**2+6*m+1))/(2*m) #formula for theta-hat
i <- 2/(theta.hat**2)-1/((1+theta.hat)**2) #formula for i(theta)
se <- sqrt(1/(n*i)) #formula for standard deviation
ci.low <- theta.hat - qnorm(1-0.025)*se #calculating lower limit
ci.up <- theta.hat + qnorm(1-0.025)*se #calculating upper limit
ci <- c(ci.low, ci.up)
cat("95% Asymptotic Confidence Interval for Theta-Hat: \n",
"Asymptotic CI: [", ci, "] \n") #stating interval
95% Asymptotic Confidence Interval for Theta-Hat:
Asymptotic CI: [ 0.1758057 0.2623931 ]
In conclusion, we are 95% confident that the true value of \(\theta\) for the population is between
0.1758057 and 0.2623931.
- Construct a 95% likelihood ratio confidence
interval for \(\theta\).
Question 1 Part B
From class, we know that the likelihood ratio statistic for this
setting would be:
\[
2(\ell(\hat{\theta})-\ell(\theta)) \le \chi_{1,0.95}^2
\] Which means that the interval endpoints \(\theta_0\) and \(\theta_1\) of rhe \(100(1-\alpha)%\) CI should satisfy:
\[
\ell(\theta)\ge-\ell(\hat{\theta})-\chi_{1,0.95}^2/2
\] Furthermore, we know that the formula for \(\ell(\theta)\) is:
\[
\ell(\theta) = \ln L(\theta) = n \ln\left( \frac{\theta^2}{1+\theta}
\right) + C - \theta S.
\]
Where \(S = \sum_{i=1}^n x_i\),
\(\bar{x} = S/n\), and \(C = \sum_{i=1}^n \ln(1 + x_i)\) (which are
constant with respect to \(\theta\)):
And the formula for \(\hat{\theta}\)
is:
\[
\hat{\theta} = \frac{1 - \bar{x} + \sqrt{\bar{x}^2 + 6\bar{x} +
1}}{2\bar{x}}
\]
We can then use uniroot() solve this for our confidence interval.
tele <- c(3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8)
n <- length(tele) #used to get n
sumx <- sum(tele) #used to get sum of obs
m <- mean(tele) #used to get mean
theta.hat <- (1-m +sqrt(m^2+6*m+1))/(2*m) #formula for theta.hat
loglik <- function(theta) { #l(theta) formula
n*log(theta**2/(1+theta))+sum(log(1+tele))-theta*sumx
}
lr <- function(theta) { #likelihood ration function
2*(loglik(theta.hat)-loglik(theta))-qchisq(0.95, 1)
}
ci.low2 <- uniroot(lr,lower=1e-6, upper=theta.hat)$root #Used to get bounds
ci.up2 <- uniroot(lr,lower=theta.hat, upper=5)$root
cat("95% Likelihood Ratio CI: [", ci.low2, ",", ci.up2, "]\n") #states bounds
95% Likelihood Ratio CI: [ 0.1786411 , 0.2653396 ]
In conclusion, we are 95% confident that the true value of \(\theta\) for the population is between
0.1786411 and 0.2653396.
- Assuming the two confidence intervals above are valid, compare them
in terms of performance and make a recommendation. Justify your
recommendation.
Answer to Question 1 Part C
Assuming that both of the above confidence intervals are valid, in
that for both of them we can be at least 95% confident the true value of
\(\theta\) is between their lower and
upper limits, I would recommend using the asymptotic approach given that
it resulted in a slightly smaller interval of 0.0865874 in length
compared to likelihood ratio confidence interval which was 0.0866985 in
length. This is a small difference, but if I was making a recommendation
between the two I would recommend the one that had a slightly smaller
interval.
LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgNzogQ29uc3RydWN0aW5nIExpa2VsaWhvb2QgUmF0aW8gQ29uZmlkZW5jZSBJbnRlcnZhbCINCmF1dGhvcjogIkdyYWNlIExpcHBlcnQgIg0KZGF0ZTogIiBEdWU6IDMvMjQvMjAyNiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICBoaWdobGlnaHQ6IG1vbm9jaHJvbWUNCiAgICB0aGVtZTogc3BhY2VsYWINCiAgcGRmX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIGZpZ193aWR0aDogMw0KICAgIGZpZ19oZWlnaHQ6IDMNCiAgd29yZF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAga2VlcF9tZDogeWVzDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOw0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxLjJlbTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGNvbG9yOiBuYXZ5Ow0KICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KfQ0KDQoNCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8NCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8NCiAgZm9udC1zaXplOiAyMnB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE1cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovDQouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICIuIjsNCg0KYm9keSB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0NCg0KcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KfQ0KYGBgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQ0KICAgbGlicmFyeShwYW5kZXIpDQp9DQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCiAgbGlicmFyeShnZ3Bsb3QyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KICBsaWJyYXJ5KHBsb3RseSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJWR0FNIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygiVkdBTSIpDQogIGxpYnJhcnkoVkdBTSkNCn0NCiMjIyMgVkdBTQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICAjIGluY2x1ZGUgY29kZSBjaHVuayBpbiB0aGUgb3V0cHV0IGZpbGUNCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgeW91IGNhbiBjaG9vc2UgdG8gaW5jbHVkZSB0aGUgd2FybmluZyBtZXNzYWdlcyBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBvdXRwdXQgZmlsZS4gDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFRSVUUsICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBvdXRwdXQgZmlsZS4NCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BDQogICAgICAgICAgICAgICAgICAgICAgKSAgDQpgYGANCiANCiBcDQogDQojIyAqKkFzc2lnbm1lbnQgT2JqZWN0aXZlcyoqIA0KDQoqIFJlaW5mb3JjZSB0aGUgbGlrZWxpaG9vZCBjb25jZXB0cyBhbmQgTUxFLg0KDQoqIFVuZGVyc3RhbmQgdGhlIGNvbmNlcHRzIG9mIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLg0KDQoqIE1hc3RlciB0aGUgcHJvY2VzcyBvZiBmaW5kaW5nIGxpa2VsaWhvb2QgcmF0aW8gY29uZmlkZW5jZSBpbnRlcnZhbCBvZiB1bmtub3duIHBhcmFtZXRlci4NCg0KXA0KDQojIyAqKlBvbGljaWVzIG9mIFVzaW5nIEFJIFRvb2xzKioNCg0KKipQb2xpY3kgb24gQUkgVG9vbCBVc2UqKjogWW91IG11c3QgYWRoZXJlIHRvIHRoZSBBSSB0b29sIHBvbGljeSBzcGVjaWZpZWQgaW4gdGhlIGNvdXJzZSBzeWxsYWJ1cy4gVGhlIGRpcmVjdCBjb3B5aW5nIG9mIEFJLWdlbmVyYXRlZCBjb250ZW50IGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIEFsbCBzdWJtaXR0ZWQgd29yayBtdXN0IHJlZmxlY3QgeW91ciBvd24gdW5kZXJzdGFuZGluZzsgd2hlcmUgZXh0ZXJuYWwgdG9vbHMgYXJlIGNvbnN1bHRlZCwgY29udGVudCBtdXN0IGJlIHRob3JvdWdobHkgcmVwaHJhc2VkIGFuZCBzeW50aGVzaXplZCBpbiB5b3VyIG93biB3b3Jkcy4NCg0KKipDb2RlIEluY2x1c2lvbiBSZXF1aXJlbWVudCoqOiBBbnkgY29kZSBpbmNsdWRlZCBpbiB5b3VyIGVzc2F5IG11c3QgYmUgcHJvcGVybHkgY29tbWVudGVkIHRvIGV4cGxhaW4gdGhlIHB1cnBvc2UgYW5kL29yIGV4cGVjdGVkIG91dHB1dCBvZiBrZXkgY29kZSBsaW5lcy4gU3VibWl0dGluZyBBSS1nZW5lcmF0ZWQgY29kZSB3aXRob3V0IG1lYW5pbmdmdWwsIHN0dWRlbnQtYWRkZWQgY29tbWVudHMgd2lsbCBub3QgYmUgYWNjZXB0ZWQuDQoNClwNCg0KKipPbmUgUGFyYW1ldGVyIExpbmRsZXkgRGlzdHJpYnV0aW9uKioNCg0KVGhlICoqTGluZGxleSBkaXN0cmlidXRpb24qKiBpcyBhICoqY29udGludW91cyBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24qKiBwcm9wb3NlZCBieSBELlYuIExpbmRsZXkgaW4gMTk1OC4gSXQgcmVwcmVzZW50cyBhICoqd2VpZ2h0ZWQgbWl4dHVyZSoqIG9mIGV4cG9uZW50aWFsIGFuZCBnYW1tYSBkaXN0cmlidXRpb25zLCBwcm92aWRpbmcgYSBmbGV4aWJsZSBzaW5nbGUtcGFyYW1ldGVyIG1vZGVsIGZvciBsaWZldGltZSBkYXRhLiANCg0KJCQNCmYoeDtcdGhldGEpID0gXGZyYWN7XHRoZXRhXjJ9ezErXHRoZXRhfSgxK3gpZV57LVx0aGV0YSB4fSwgXHF1YWQgeCA+IDAsIFxxdWFkIFx0aGV0YSA+IDANCiQkDQoNCndoZXJlICR4JCA9IHJhbmRvbSB2YXJpYWJsZSAoZS5nLiwgdGltZSwgc2l6ZSwgYW1vdW50KSBhbmQgJFx0aGV0YSQgPSBzaGFwZSBwYXJhbWV0ZXIgY29udHJvbGxpbmcgdGhlIGRpc3RyaWJ1dGlvbi4NCg0KR2l2ZW4gYW4gaW5kZXBlbmRlbnQgcmFuZG9tIHNhbXBsZSAkWF8xLCBYXzIsIFxkb3RzLCBYX24kOg0KDQokJA0KTChcdGhldGEpID0gXHByb2Rfe2k9MX1ebiBmKHhfaTtcdGhldGEpID0gXHByb2Rfe2k9MX1ebiBcbGVmdFsgXGZyYWN7XHRoZXRhXjJ9ezErXHRoZXRhfSAoMSArIHhfaSkgZV57LVx0aGV0YSB4X2l9IFxyaWdodF0uDQokJA0KDQpMZXQgJFMgPSBcc3VtX3tpPTF9Xm4geF9pJCwgJFxiYXJ7eH0gPSBTL24kLCAgYW5kICRDID0gXHN1bV97aT0xfV5uIFxsbigxICsgeF9pKSQgKGNvbnN0YW50IHdpdGggcmVzcGVjdCB0byAkXHRoZXRhJCk6DQoNCiQkDQpcZWxsKFx0aGV0YSkgPSBcbG4gTChcdGhldGEpID0gbiBcbG5cbGVmdCggXGZyYWN7XHRoZXRhXjJ9ezErXHRoZXRhfSBccmlnaHQpICsgQyAtIFx0aGV0YSBTLg0KJCQNCg0KQWZ0ZXIgc29tZSBhbGdlYnJhLCB3ZSBvYnRhaW4gdGhlIGNsb3NlZCBmb3JtIG9mIHRoZSBNTEUgb2YgJFx0aGV0YSQgaW4gdGhlIGZvbGxvd2luZw0KDQokJA0KXGJveGVke1xoYXR7XHRoZXRhfSA9IFxmcmFjezEgLSBcYmFye3h9ICsgXHNxcnR7XGJhcnt4fV4yICsgNlxiYXJ7eH0gKyAxfX17MlxiYXJ7eH19fQ0KJCQNCg0KQXMgZ29vZCBleGVyY2lzZSwgd2UgY2FuIGRlcml2ZSB0aGUgZm9sbG93aW5nIEZpc2hlciBpbmZvcm1hdGlvbiBvZiAkXHRoZXRhJDoNCg0KJCQNClxib3hlZHtJKFx0aGV0YSkgPSBcZnJhY3syfXtcdGhldGFeMn0gLSBcZnJhY3sxfXsoMStcdGhldGEpXjJ9fQ0KJCQNCg0KDQpcDQoNCjxmb250IGNvbG9yID0gImJsdWUiPioqVGhpcyBhc3NpZ25tZW50IGZvY3VzZXMgb24gY29uc3RydWN0aW5nIHZhcmlvdXMgY29uZmlkZW5jZSBpbnRlcnZhbHMgb2YgdGhlIHNoYXBlIHBhcmFtZXRlciAkXHRoZXRhJCBpbiB0aGUgTGluZGxleSBkaXN0cmlidXRpb24uKio8L2ZvbnQ+DQoNClwNCg0KIyMgKipRdWVzdGlvbjogQ3VzdG9tZXIgU2VydmljZSBUaW1lcyAobWludXRlcykqKg0KDQpUaGUgY3VzdG9tZXIgc2VydmljZSBjYWxsIGR1cmF0aW9uIGRhdGEgc2V0IG9yaWdpbmF0ZXMgZnJvbSBhIG1ham9yIHRlbGVjb21tdW5pY2F0aW9ucyBwcm92aWRlciBpbiBOb3J0aCBBbWVyaWNhLCBvcGVyYXRpbmcgaW4gYSBoaWdobHkgY29tcGV0aXRpdmUgbWFya2V0IHdoZXJlOg0KDQpgYGANCjMuMiwgNS44LCA3LjEsIDQuNSwgMTAuMywgNi4yLCA4LjcsIDUuMSwgMTIuNSwgNi45LA0KOS40LCA1LjcsIDExLjgsIDQuOSwgOS4xLCA2LjUsIDEzLjIsIDcuOCwgMTAuNiwgNi4xLA0KOC45LCA1LjQsIDEyLjEsIDcuMywgOS44LCA1LjksIDExLjQsIDYuOCwgMTAuOSwgNy41LA0KNC4yLCA4LjMsIDYuNCwgMTQuMSwgNS42LCA5LjcsIDcuOSwgMTEuMSwgNi43LCAxMC4yLA0KNS4zLCA4LjYsIDcuMiwgMTIuOSwgNi4zLCA5LjMsIDguMSwgMTMuNywgNy42LCAxMC44DQpgYGANCg0KQXNzdW1pbmcgdGhlIGRhdGEgZm9sbG93IGEgb25lLXBhcmFtZXRlciBMaW5kbGV5IGRpc3RyaWJ1dGlvbiwgY29uc3RydWN0IGEgJDk1XCUkIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIHRoZSBwYXJhbWV0ZXIgJFx0aGV0YSQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEgYW5kIHRoZSBzcGVjaWZpZWQgbWV0aG9kcy4gRm9yIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMsIGZpcnN0IGRlc2NyaWJlIHlvdXIgcmVhc29uaW5nIHByb2Nlc3MgZm9yIHRoZSBhbmFseXNpcywgdGhlbiB3cml0ZSBjb2RlIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBhbmFseXNpcy4gRmluYWxseSwgc3VtbWFyaXplIHRoZSByZXN1bHRzIHRvIGNvbmNsdWRlIHRoZSBxdWVzdGlvbi4NCg0KDQphKSBDb25zdHJ1Y3QgYSAqKjk1JSBhc3ltcHRvdGljIGNvbmZpZGVuY2UgaW50ZXJ2YWwqKiBiYXNlZCBvbiB0aGUgYXN5bXB0b3RpYyBzYW1wbGluZyBkaXN0cmlidXRpb24gb2YgdGhlIG1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0b3IgKE1MRSkgb2YgJFx0aGV0YSQuDQoNCiMgUXVlc3Rpb24gMSBQYXJ0IEENCg0KRmlyc3Qgd2Ugd2lsbCBtYXRoZW1hdGljYWxseSBkZXRlcm1pbmUgdGhlIGZvcm11bGEgZm9yIGNhbGN1bGF0aW5nIHRoZSA5NSUgYXN5bXB0b3RpYyBjb25maWRlbmNlIGludGVydmFsIGJhc2VkIG9uIG91ciBmb3JtdWxhcyBmb3IgJFxoYXR7XHRoZXRhfSQgYW5kICRJKFx0aGV0YSkkLiAgR2l2ZW4gdGhlIGxhcmdlIHBvcHVsYXRpb24gc2l6ZSB3ZSBhbmQgZmluaXRlIHZhcmlhbmNlIHdlIGNhbiByZWFzb25hYmx5IGFzc3VtZToNCg0KJCQNClxoYXR7XHRoZXRhfSBceHJpZ2h0YXJyb3d7ZH0gTihcdGhldGEsIFx3aWRlaGF0e1Zhcn0oXGhhdHtcdGhldGF9KSkNCiQkDQoNCldlIGNhbiB0aGVuIHN0YW5kYXJkaXplIG91ciBmb3JtdWxhOg0KDQokJA0KXGZyYWN7XGhhdHtcdGhldGF9LVx0aGV0YX17XHNxcnR7XHdpZGVoYXR7VmFyfShcaGF0e1x0aGV0YX0pfX1ceHJpZ2h0YXJyb3d7ZH0gTigwLDEpDQokJA0KDQpGaW5hbGx5LCB3ZSBjYW4gY29uc3RydWN0IHRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbDoNCg0KJCQNClxoYXR7XHRoZXRhfSBccG0gWl97MS0wLjA1LzJ9e1xzcXJ0e1x3aWRlaGF0e1Zhcn0oXGhhdHtcdGhldGF9KX19DQokJA0KDQpTaW5jZSB0aGlzIGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkLCB3ZSBjYW4gdXNlIHRoZSBkZXJpdmVkIEZpc2hlciBpbmZvcm1hdGlvbiB0byBmaW5kIHRoZSB2YXJpYW5jZToNCg0KJCQNCkkoXHRoZXRhKT1cZnJhY3sxfXtuKFZhcihcdGhldGEpKX0gXFJpZ2h0YXJyb3cgVmFyKFx0aGV0YSk9XGZyYWN7MX17bihJKFx0aGV0YSkpfQ0KJCQNCg0KV2hlcmUgJEkoXHRoZXRhKSA9IFxmcmFjezJ9e1x0aGV0YV4yfSAtIFxmcmFjezF9eygxK1x0aGV0YSleMn0kLg0KDQpGaW5hbGx5LCB3ZSBjYW4gdXNlIHRoZSBjbG9zZWQgZm9ybSBNTEUgYWJvdmUgdG8gZmluZCAkXGhhdHtcdGhldGF9JDoNCg0KJCQNClxoYXR7XHRoZXRhfSA9IFxmcmFjezEgLSBcYmFye3h9ICsgXHNxcnR7XGJhcnt4fV4yICsgNlxiYXJ7eH0gKyAxfX17MlxiYXJ7eH19DQokJA0KDQpXZSBjYW4gY29weSB0aGVzZSBmb3JtdWxhcyBpbnRvIG91ciBjb2RlIHRvIHBlcmZvcm0gdGhlIGFuYWx5c2lzIG9uIG91ciBkYXRhc2V0Og0KDQpgYGB7cn0NCnRlbGUgPC0gYygzLjIsIDUuOCwgNy4xLCA0LjUsIDEwLjMsIDYuMiwgOC43LCA1LjEsIDEyLjUsIDYuOSwNCjkuNCwgNS43LCAxMS44LCA0LjksIDkuMSwgNi41LCAxMy4yLCA3LjgsIDEwLjYsIDYuMSwNCjguOSwgNS40LCAxMi4xLCA3LjMsIDkuOCwgNS45LCAxMS40LCA2LjgsIDEwLjksIDcuNSwNCjQuMiwgOC4zLCA2LjQsIDE0LjEsIDUuNiwgOS43LCA3LjksIDExLjEsIDYuNywgMTAuMiwNCjUuMywgOC42LCA3LjIsIDEyLjksIDYuMywgOS4zLCA4LjEsIDEzLjcsIDcuNiwgMTAuOCkNCg0KbiA8LSBsZW5ndGgodGVsZSkgI3VzZWQgdG8gZ2V0IG4NCm0gPC0gbWVhbih0ZWxlKSAjdXNlZCB0byBmaW5kIG1lYW4NCnRoZXRhLmhhdCA8LSAoMS1tK3NxcnQobSoqMis2Km0rMSkpLygyKm0pICNmb3JtdWxhIGZvciB0aGV0YS1oYXQNCmkgPC0gMi8odGhldGEuaGF0KioyKS0xLygoMSt0aGV0YS5oYXQpKioyKSAjZm9ybXVsYSBmb3IgaSh0aGV0YSkNCnNlIDwtIHNxcnQoMS8obippKSkgI2Zvcm11bGEgZm9yIHN0YW5kYXJkIGRldmlhdGlvbg0KDQpjaS5sb3cgPC0gdGhldGEuaGF0IC0gcW5vcm0oMS0wLjAyNSkqc2UgI2NhbGN1bGF0aW5nIGxvd2VyIGxpbWl0DQpjaS51cCA8LSB0aGV0YS5oYXQgKyBxbm9ybSgxLTAuMDI1KSpzZSAjY2FsY3VsYXRpbmcgdXBwZXIgbGltaXQNCmNpIDwtIGMoY2kubG93LCBjaS51cCkNCg0KY2F0KCI5NSUgQXN5bXB0b3RpYyBDb25maWRlbmNlIEludGVydmFsIGZvciBUaGV0YS1IYXQ6IFxuIiwNCiAgICAiQXN5bXB0b3RpYyBDSTogWyIsIGNpLCAiXSBcbiIpICNzdGF0aW5nIGludGVydmFsDQpgYGANCg0KSW4gY29uY2x1c2lvbiwgd2UgYXJlIDk1JSBjb25maWRlbnQgdGhhdCB0aGUgdHJ1ZSB2YWx1ZSBvZiAkXHRoZXRhJCBmb3IgdGhlIHBvcHVsYXRpb24gaXMgYmV0d2VlbiAwLjE3NTgwNTcgYW5kIDAuMjYyMzkzMS4NCg0KYikgQ29uc3RydWN0IGEgKio5NSUgbGlrZWxpaG9vZCByYXRpbyBjb25maWRlbmNlIGludGVydmFsKiogZm9yICRcdGhldGEkLg0KDQojIFF1ZXN0aW9uIDEgUGFydCBCDQoNCkZyb20gY2xhc3MsIHdlIGtub3cgdGhhdCB0aGUgbGlrZWxpaG9vZCByYXRpbyBzdGF0aXN0aWMgZm9yIHRoaXMgc2V0dGluZyB3b3VsZCBiZToNCg0KJCQNCjIoXGVsbChcaGF0e1x0aGV0YX0pLVxlbGwoXHRoZXRhKSkgXGxlIFxjaGlfezEsMC45NX1eMg0KJCQNCldoaWNoIG1lYW5zIHRoYXQgdGhlIGludGVydmFsIGVuZHBvaW50cyAkXHRoZXRhXzAkIGFuZCAkXHRoZXRhXzEkIG9mIHJoZSAkMTAwKDEtXGFscGhhKSUkIENJIHNob3VsZCBzYXRpc2Z5Og0KDQokJA0KXGVsbChcdGhldGEpXGdlLVxlbGwoXGhhdHtcdGhldGF9KS1cY2hpX3sxLDAuOTV9XjIvMg0KJCQNCkZ1cnRoZXJtb3JlLCB3ZSBrbm93IHRoYXQgdGhlIGZvcm11bGEgZm9yICRcZWxsKFx0aGV0YSkkIGlzOg0KDQokJA0KXGVsbChcdGhldGEpID0gXGxuIEwoXHRoZXRhKSA9IG4gXGxuXGxlZnQoIFxmcmFje1x0aGV0YV4yfXsxK1x0aGV0YX0gXHJpZ2h0KSArIEMgLSBcdGhldGEgUy4NCiQkDQoNCldoZXJlICRTID0gXHN1bV97aT0xfV5uIHhfaSQsICRcYmFye3h9ID0gUy9uJCwgIGFuZCAkQyA9IFxzdW1fe2k9MX1ebiBcbG4oMSArIHhfaSkkICh3aGljaCBhcmUgY29uc3RhbnQgd2l0aCByZXNwZWN0IHRvICRcdGhldGEkKToNCg0KQW5kIHRoZSBmb3JtdWxhIGZvciAkXGhhdHtcdGhldGF9JCBpczoNCg0KJCQNClxoYXR7XHRoZXRhfSA9IFxmcmFjezEgLSBcYmFye3h9ICsgXHNxcnR7XGJhcnt4fV4yICsgNlxiYXJ7eH0gKyAxfX17MlxiYXJ7eH19DQokJA0KDQpXZSBjYW4gdGhlbiB1c2UgdW5pcm9vdCgpIHNvbHZlIHRoaXMgZm9yIG91ciBjb25maWRlbmNlIGludGVydmFsLg0KDQpgYGB7cn0NCnRlbGUgPC0gYygzLjIsIDUuOCwgNy4xLCA0LjUsIDEwLjMsIDYuMiwgOC43LCA1LjEsIDEyLjUsIDYuOSwNCjkuNCwgNS43LCAxMS44LCA0LjksIDkuMSwgNi41LCAxMy4yLCA3LjgsIDEwLjYsIDYuMSwNCjguOSwgNS40LCAxMi4xLCA3LjMsIDkuOCwgNS45LCAxMS40LCA2LjgsIDEwLjksIDcuNSwNCjQuMiwgOC4zLCA2LjQsIDE0LjEsIDUuNiwgOS43LCA3LjksIDExLjEsIDYuNywgMTAuMiwNCjUuMywgOC42LCA3LjIsIDEyLjksIDYuMywgOS4zLCA4LjEsIDEzLjcsIDcuNiwgMTAuOCkNCg0KbiA8LSBsZW5ndGgodGVsZSkgI3VzZWQgdG8gZ2V0IG4NCnN1bXggPC0gc3VtKHRlbGUpICN1c2VkIHRvIGdldCBzdW0gb2Ygb2JzDQptIDwtIG1lYW4odGVsZSkgI3VzZWQgdG8gZ2V0IG1lYW4NCnRoZXRhLmhhdCA8LSAoMS1tICtzcXJ0KG1eMis2Km0rMSkpLygyKm0pICNmb3JtdWxhIGZvciB0aGV0YS5oYXQNCmxvZ2xpayA8LSBmdW5jdGlvbih0aGV0YSkgeyAjbCh0aGV0YSkgZm9ybXVsYQ0KICBuKmxvZyh0aGV0YSoqMi8oMSt0aGV0YSkpK3N1bShsb2coMSt0ZWxlKSktdGhldGEqc3VteA0KfQ0KbHIgPC0gZnVuY3Rpb24odGhldGEpIHsgI2xpa2VsaWhvb2QgcmF0aW9uIGZ1bmN0aW9uDQogIDIqKGxvZ2xpayh0aGV0YS5oYXQpLWxvZ2xpayh0aGV0YSkpLXFjaGlzcSgwLjk1LCAxKQ0KfQ0KDQpjaS5sb3cyIDwtIHVuaXJvb3QobHIsbG93ZXI9MWUtNiwgdXBwZXI9dGhldGEuaGF0KSRyb290ICNVc2VkIHRvIGdldCBib3VuZHMNCmNpLnVwMiA8LSB1bmlyb290KGxyLGxvd2VyPXRoZXRhLmhhdCwgdXBwZXI9NSkkcm9vdA0KDQpjYXQoIjk1JSBMaWtlbGlob29kIFJhdGlvIENJOiBbIiwgY2kubG93MiwgIiwiLCBjaS51cDIsICJdXG4iKSAjc3RhdGVzIGJvdW5kcw0KYGBgDQoNCkluIGNvbmNsdXNpb24sIHdlIGFyZSA5NSUgY29uZmlkZW50IHRoYXQgdGhlIHRydWUgdmFsdWUgb2YgJFx0aGV0YSQgZm9yIHRoZSBwb3B1bGF0aW9uIGlzIGJldHdlZW4gMC4xNzg2NDExIGFuZCAwLjI2NTMzOTYuDQoNCg0KYykgQXNzdW1pbmcgdGhlIHR3byBjb25maWRlbmNlIGludGVydmFscyBhYm92ZSBhcmUgdmFsaWQsIGNvbXBhcmUgdGhlbSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgbWFrZSBhIHJlY29tbWVuZGF0aW9uLiBKdXN0aWZ5IHlvdXIgcmVjb21tZW5kYXRpb24uDQoNCiMgQW5zd2VyIHRvIFF1ZXN0aW9uIDEgUGFydCBDDQoNCkFzc3VtaW5nIHRoYXQgYm90aCBvZiB0aGUgYWJvdmUgY29uZmlkZW5jZSBpbnRlcnZhbHMgYXJlIHZhbGlkLCBpbiB0aGF0IGZvciBib3RoIG9mIHRoZW0gd2UgY2FuIGJlIGF0IGxlYXN0IDk1JSBjb25maWRlbnQgdGhlIHRydWUgdmFsdWUgb2YgJFx0aGV0YSQgaXMgYmV0d2VlbiB0aGVpciBsb3dlciBhbmQgdXBwZXIgbGltaXRzLCBJIHdvdWxkIHJlY29tbWVuZCB1c2luZyB0aGUgYXN5bXB0b3RpYyBhcHByb2FjaCBnaXZlbiB0aGF0IGl0IHJlc3VsdGVkIGluIGEgc2xpZ2h0bHkgc21hbGxlciBpbnRlcnZhbCBvZiAwLjA4NjU4NzQgaW4gbGVuZ3RoIGNvbXBhcmVkIHRvIGxpa2VsaWhvb2QgcmF0aW8gY29uZmlkZW5jZSBpbnRlcnZhbCB3aGljaCB3YXMgMC4wODY2OTg1IGluIGxlbmd0aC4gIFRoaXMgaXMgYSBzbWFsbCBkaWZmZXJlbmNlLCBidXQgaWYgSSB3YXMgbWFraW5nIGEgcmVjb21tZW5kYXRpb24gYmV0d2VlbiB0aGUgdHdvIEkgd291bGQgcmVjb21tZW5kIHRoZSBvbmUgdGhhdCBoYWQgYSBzbGlnaHRseSBzbWFsbGVyIGludGVydmFsLg0KDQoNCg0KDQo=