Problem 10.2 (10 points)
-
A Type I error means we conclude that the drug will induce sleep in fewer than \(80\%\) of people suffering from insomnia, when the drug actually is \(80\%\) effective.
-
The random variable \(Y\) has a Binomial distribution with parameters \(n=20\) and \(p\), where the drug being tested induces sleep in \(p \cdot 100\%\) of people suffering from insomnia. The rejection region is the set \(RR: \{y \le 12\}\). The probability of a Type I error is \(\alpha = P(Y \le 12 \mid p = 0.8) = 0.032\) (Table 1d, page 784).
-
A Type II error means we conclude that the drug will induce sleep in (at least) \(80\%\) of people suffering from insomnia, when the drug is less than \(80\%\) effective.
-
If \(p = 0.6\), then the probability of a Type II error is \(\beta = P(Y > 12 \mid p = 0.6) = 1 - P(Y \le 12 \mid p = 0.6) = 1 - 0.584 = 0.416\).
-
If \(p = 0.4\), then the probability of a Type II error is \(\beta = P(Y > 12 \mid p = 0.4) = 1 - P(Y \le 12 \mid p = 0.4) = 1 - 0.979 = 0.021\).
Problem 10.4 (8 points)
Let
\(p\) be the proportion of ledger sheets that contain an error. We will test the null hypothesis
\(H_0 : p = 0.05\) versus the alternative hypothesis
\(H_a : p > 0.05\). We will choose two ledger sheets at random. We reject
\(H_0\) if both sheets contain errors (i.e. both are bad). If there is one bad sheet and one good sheet, we choose a third sheet and we reject
\(H_0\) if the third sheet is bad. Otherwise, we fail to reject
\(H_0\). Thus, we can respectively denote the rejection set and its compliment by
\(RR : \{bb,bgb,gbb\}\) and
\(\overline{RR} : \{gg,bgg,gbg\}\). Also, in this notation,
\(P(\{b\}) = p\) and
\(P(\{g\}) = 1 - p\).
-
A Type I error means we conclude the error rate, \(p\), is greater than 0.05 when the true value of \(p\) is 0.05.
-
The Type I error probability is \[
\alpha = P(RR \mid p = 0.05) = (0.05)^2 + 2(0.95)(0.05)^2 = 0.0073.
\]
-
A Type II error means we conclude the error rate, \(p\), is 0.05 when the real error rate is greater than 0.05.
-
The Type II error probability is \[
\beta = P(\overline{RR} \mid p) = (1 - p)^2 + 2p(1 - p)^2 = (1 + 2p)(1 - p)^2.
\] Notice that \(\beta\) is a function of the unknown parameter, \(p\), whereas \(\alpha\) is a constant. This difference occurs because \(H_a\) is a composite hypothesis, whereas \(H_0\) is a simple hypothesis.
Problem 10.6 (6 points)
Let
\(Y\) have a Binomial distribution with
\(n = 15\) and probability mass function
\(P(Y = y) = \binom{15}{y} p^{y} (1 - p)^{15 - y}\),
\(y = 0,1,2,\dotsc,15\),
\(0 \le p \le 1\). We will test the null hypothesis
\(H_0 : p = 0.10\). We reject
\(H_0\) if
\(Y_1 \ge 4\) or
\(Y_1 \le 3\) and
\(Y_1 + Y_2 \ge 6\), where
\(Y_1\) and
\(Y_2\) are independent and have the same Binomial distribution as
\(Y\).
-
The Type I error probability, \(\alpha\), is the probability we reject \(H_0\) when it is true. Thus
\[\begin{align*}
\alpha &= P(Y_1 \ge 4 \mid p = 0.10)
+ P(Y_1 + Y_2 \ge 6, Y_1 \le 3 \mid p = 0.10) \\
&=
(1 - P(Y_1 \le 3 \mid p = 0.10))
+ \sum_{k=0}^{3} P(Y_2 \ge 6 - k, Y_1 = k \mid p = 0.10) \\
&=
(1 - P(Y_1 \le 3 \mid p = 0.10))
+ \sum_{k=0}^{3} P(Y_2 \ge 6 - k \mid p = 0.10)\cdot
P(Y_1 = k \mid p = 0.10) \\
&=
(1 - P(Y_1 \le 3 \mid p = 0.10))
+ \sum_{k=0}^{3} (1 - P(Y_2 \le 5 - k \mid p = 0.10))\cdot
P(Y_1 = k \mid p = 0.10).
\end{align*}\]
Using the statistical software package “R,” rather than a table, we find \(\alpha \doteq 0.099\).
-
Suppose now that the null hypothesis is \(H_0 : p = 0.30\). Replacing \(p = 0.10\) with \(p = 0.30\) in part (a) and using “R” again, we calculate \(\alpha \doteq 0.932\) (over \(93\%\) chance of a Type I error!).
-
The given test procedure fails to reject the null hypothesis when \(Y_1 \le 3\) and \(Y_1 + Y_2 \le 5\). Therefore, when \(p = 0.30\), the Type II error probability is
\[\begin{align*}
\beta
&=
P(Y_1 \le 3, Y_1 + Y_2 \le 5 \mid p = 0.30) \\
&=
\sum_{k=0}^{3} P(Y_2 \le 5 - k, Y_1 = k \mid p = 0.30) \\
&=
\sum_{k=0}^{3} P(Y_2 \le 5 - k \mid p = 0.30)\cdot P(Y_1 = k \mid p = 0.30).
\end{align*}\]
Using “R” we find \(\beta = 0.068\).
Problem 10.12 (6 points)
-
Conjecture: Boys have a greater interest in sports, as a leisure time activity, than do girls. As an alternative hypothesis to the null hypothesis of no difference in the mean LIC scores for boys and girls, I would say that the mean for boys is greater than the mean for girls. \[
H_0 : \mu_b - \mu_g = 0, \qquad H_a : \mu_b - \mu_b > 0.
\]
-
\(H_a\) corresponds to a one-tailed statistical test.
-
We use \(\overline{Y}_b - \overline{Y}_g\) as an (approximately normal) unbiased point estimator for \(\mu_b - \mu_a\). We estimate the variance of \(\overline{Y}_b - \overline{Y}_g\) by
\[\begin{align*}
\sigma^{2}_{\overline{Y}_b - \overline{Y}_g}
&=
\frac{\sigma^2_b}{n_1} + \frac{\sigma^2_g}{n_2} \\
&\doteq
\frac{s^2_b}{n_1} + \frac{s^2_g}{n_2} \\
&\doteq
\frac{(4.82)^2}{252} + \frac{(4.41)^2}{307} \\
&\doteq 0.1555.
\end{align*}\]
The estimated value for the standard deviation is therefore \(\sigma_{\overline{Y}_b - \overline{Y}_g} \doteq 0.3944\). We use the standard normal random variable as the test statistic. Testing at the level \(\alpha = 0.01\), the right-tailed rejection region is \(RR : \{z > z_{0.01}\} \doteq \{z > 2.325\}\). From the data, the value of the test statistic is \[
z = \frac{\bar{y}_b - \bar{y}_g}{\sigma_{\overline{Y}_b - \overline{Y}_g}}
\doteq \frac{13.65 - 9.88}{0.3944} \doteq 9.56.
\] Since \(z = 9.56 > 2.325\), these data support the conjecture, rather strongly, that the mean LIC scores for sports is higher for boys than for girls at the \(0.01\)-level of significance.
Problem 10.14
The data for the large scale hypothesis test are as follows:
\[
n = 300,\quad y = 98,\quad \hat{p} = 98/300 \doteq 0.3267.
\]
-
We will perform a two-tailed hypothesis test at the significance level \(\alpha = 0.05\). The elements of this test are
\[\begin{align*}
H_0 &: p = 0.25 \\
H_a &: p \ne 0.25 \\
\sigma_{\hat{p}} &= \sqrt{p_0(1 - p_0)/300}
= \sqrt{(0.25)(0.75)/300} = 0.025 \\
TS &: z = \frac{\hat{p} - 0.25}{\sigma_{\hat{p}}}
\doteq \frac{0.3267 - 0.25}{0.025} \doteq 3.0667 \\
RR &: \{\lvert z \rvert > z_{0.025}\} = \{\lvert z \rvert > 1.96\}
\end{align*}\]
Since \(\lvert z \rvert = 3.0667 > 1.96\) we conclude that at the \(\alpha = 0.05\) level of significance, these data support the alternative hypothesis that \(p \ne 0.25\).
-
This study indicates that either the columnist underestimated the proportion of students over \(30\), or that this campus has a greater proportion than the average over many campuses.
Problem 10.18 (6 points)
Assume two independent samples. Each population has the same (large) sample size,
\(n_1 = n_2 = 1000\). The data provide point estimates for each population’s proportion,
\(\hat{p}_1 = 0.45\) and
\(\hat{p}_2 = 0.34\).
-
We will perform a two-tailed hypothesis test at significance level \(\alpha = 0.05\). We are interested in whether these data support the claim that \(p_1 \ne p_2\). The respective null and alternative hypotheses are \[
H_0 : p_1 - p_2 = 0, \quad H_a : p_1 - p_2 \ne 0.
\] Under the null hypothesis, \(\hat{p}_1\) and \(\hat{p}_2\) are independent unbiased point estimators for the same parameter \(p_1 = p_2\). We arrive at an improved estimate of this parameter by pooling the individual results as follows: \[
\hat{p}_{pooled} = \frac{n_1\cdot \hat{p}_1 + n_2\cdot \hat{p}_2}{n_1 + n_2}
= \frac{450 + 340}{1000 + 1000} = \frac{790}{2000} = 0.395.
\] Using \(\hat{p}_{pooled}\) as an estimate for both \(p_1\) and \(p_2\) provides an estimate for the standard deviation \[
\sigma_{\hat{p}_1 - \hat{p}_2} =
\sqrt{p_1(1 - p_1)/n_1 + p_2(1 - p_2)/n_2} \doteq
\sqrt{2(0.395)(0.605)/1000} \doteq 0.02186.
\] The large sample sizes imply that the probability distribution of \(\hat{p}_1 - \hat{p}_2\) is approximately normal. Under the null hypothesis, \(E[\hat{p}_1 - \hat{p}_2] = 0\). Thus the probability distribution of \(Z = (\hat{p}_1 - \hat{p}_2)/\sigma_{\hat{p}_1 - \hat{p}_2}\) is approximately the standard normal distribution. We will use \(Z\) as our test statistic. The rejection region for our two-tailed hypothesis test is therefore \(RR : \{\lvert z \rvert > z_{0.025}\} \doteq \{\lvert z \rvert > 1.96\}\). Now, the value of the test statistic is \[
TS : z = (\hat{p}_1 - \hat{p}_2)/\sigma_{\hat{p}_1 - \hat{p}_2}
\doteq (0.45 - 0.34)/0.02186 \doteq 5.03.
\] Since \(\lvert z \rvert = 5.03 > 1.96\), these data support the claim that the proportion of aspirin users for 1986 differs from the proportion of aspirin users for 1991.
-
We perform a similar test on the proportion of ibuprofen users. This test will be a right-tailed test. The data provide point estimates for each population’s proportion, \(\hat{p}_1 = 0.14\) and \(\hat{p}_2 = 0.26\). We are interested in whether these data support the claim that \(p_1 < p_2\). The respective null and alternative hypotheses are \[
H_0 : p_2 - p_1 = 0, \quad H_a : p_2 - p_1 > 0.
\] Under the null hypothesis, \(\hat{p}_1\) and \(\hat{p}_2\) are independent unbiased point estimators for the same parameter \(p_1 = p_2\). We arrive at an improved estimate of this parameter by pooling the individual results as follows: \[
\hat{p}_{pooled} = \frac{n_1\cdot \hat{p}_1 + n_2\cdot \hat{p}_2}{n_1 + n_2}
= \frac{140 + 260}{1000 + 1000} = \frac{400}{2000} = 0.200.
\] Using \(\hat{p}_{pooled}\) as an estimate for both \(p_1\) and \(p_2\) provides an estimate for the standard deviation \[
\sigma_{\hat{p}_2 - \hat{p}_1} =
\sqrt{p_1(1 - p_1)/n_1 + p_2(1 - p_2)/n_2} \doteq
\sqrt{2(0.2)(0.8)/1000} \doteq 0.01789.
\] The large sample sizes imply that the probability distribution of \(\hat{p}_2 - \hat{p}_1\) is approximately normal. Under the null hypothesis, \(E[\hat{p}_2 - \hat{p}_1] = 0\). Thus the probability distribution of \(Z = (\hat{p}_2 - \hat{p}_1)/\sigma_{\hat{p}_2 - \hat{p}_1}\) is approximately the standard normal distribution. We will use \(Z\) as our test statistic. The rejection region for our right-tailed hypothesis test is therefore \(RR : \{ z > z_{0.05}\} \doteq \{ z > 1.645\}\). Now, the value of the test statistic is \[
TS : z = (\hat{p}_2 - \hat{p}_1)/\sigma_{\hat{p}_2 - \hat{p}_1}
\doteq (0.26 - 0.14)/0.01789 \doteq 6.7.
\] Since \(z = 6.7 > 1.645\), these data provide sufficient evidence to indicate that ibuprofen has a greater market share in 1991 than it did in 1986.
-
The tests in (a) and (b) are related. Since most people use just one type of pain reliever at a time, an increased proportion of ibuprofen users indicates a decreased use among the remaining types. The proportion for acetaminophen seems stable, so the decrease must come from aspirin.
Problem 10.21 (2 points)
To use a \(Z\)-test to test a hypothesis concerning a population mean \(\mu\), we need an independent and random sample \(Y_1,\dotsc,Y_n\). Moreover, the sample size \(n\) should be sufficiently large for the probability distribution of \(\sqrt{n}\cdot(\overline{Y} - \mu)/S\) to be well approximated by the standard normal probability distribution.
Problem 10.26 (2 points)
Let \((Y_1,Y_2,Y_3,Y_4)\) have a multinomial distribution with \(n\) trials and probabilities \((p_1,p_2,p_3,p_4)\) for the four cells. Theorem 5.13 implies that \[
E[Y_i] = n\cdot p_i, \quad V[Y_i] = n\cdot p_i\cdot (1 - p_i),
\quad i = 1,2,3,4,
\] and \(Cov[Y_i, Y_j] = -n\cdot p_i\cdot p_j\), for \(1 \le i,j \le 4\) and \(i \ne j\).
Unbiased point estimators for \(p_i\) are \(\hat{p}_i = \frac{1}{n}Y_i\).
The Florida study has a sample size of
\(n=500\) and estimates the following proportions for nuisance alligator management:
-
\(\hat{p}_1 = 0.06\) say alligators should be completely protected.
-
\(\hat{p}_2 = 0.16\) say alligators should be destroyed by wildlife officers.
-
\(\hat{p}_3 = 0.52\) say alligators should be relocated live.
-
\(\hat{p}_4 = 0.26\) say there should be a regulated commercial harvest.
We will test for a difference in
\(p_1\) and
\(p_2\) at the
\(\alpha = 0.01\) level of significance. The respective null and alternative hypotheses are
\[
H_0 : p_2 - p_1 = 0, \quad H_a : p_2 - p_1 \ne 0.
\] Since the sample size is large,
\(\hat{p}_2 - \hat{p}_1\) is approximately normal. Under the null hypothesis,
\(E[\hat{p}_2 - \hat{p}_1] = 0\). Now,
\[\begin{align*}
V[\hat{p}_2 - \hat{p}_1]
&=
\frac{1}{n^2} V[Y_2 - Y_1] \\
&=
\frac{1}{n^2}(V[Y_2] + V[Y_1] - 2Cov[Y_2,Y_1]) \\
&=
\frac{1}{n^2}(n\cdot p_2\cdot (1-p_2) + n\cdot p_1\cdot (1-p_1)
+ 2n\cdot p_1\cdot p_2) \\
&=
\frac{1}{n}(p_2\cdot (1-p_2) + p_1\cdot (1-p_1)
+ 2p_1\cdot p_2) \\
&=
\frac{1}{n}((p_2 + p_1) - (p_2 - p_1)^2).
\end{align*}\]
Using this, we estimate the standard deviation \[
\sigma_{\hat{p}_2 - \hat{p}_1} \doteq
\sqrt{[(0.16 + 0.06) - (0.16 - 0.06)^2]/500} \doteq 0.0205.
\] The rejection region for our two-tailed \(Z\)-test is \(RR : \{\lvert z \rvert > z_{0.005}\}\doteq \{\lvert z \rvert > 2.575\}\). From the data, the value of our test statistic is \[
z = \frac{\hat{p}_2 - \hat{p}_1}{\sigma_{\hat{p}_2 - \hat{p}_1}} \doteq
\frac{0.16 - 0.06}{0.0205} \doteq 4.8795,
\] and since \(\lvert z \rvert \doteq 4.8795 > 2.575\) we conclude that this data provides sufficient evidence for a difference in the proportions at the \(\alpha = 0.01\) level of significance.
Problem 10.30 (2 points)
Consider a hypothesis test that compares two proportions. Here are the details. \[
H_0 : p_1 - p_2 = 0, \quad H_a : p_1 - p_2 = 0.1,
\quad \alpha = 0.05, \quad \beta \le 0.20,
\quad n_1 = n_2 = n.
\] Let \(X = \hat{p}_1 - \hat{p}_2\), then \(\sigma_X = \sqrt{p_1(1-p_1)/n + p_2(1-p_2)/n} \le 1/\sqrt{2n}\), for all \(0 \le p_1, p_2 \le 1\), since \(p(1-p) \le 1/4\).
Let \(\sigma_{X,0}\) be the value of \(\sigma_X\) under \(H_0\), and let \(\sigma_{X,a}\) be the value of \(\sigma_X\) under \(H_a\).
Under the null hypothesis, \(H_0\), \(X = \sigma_{X,0} Z\), so the rejection region is \(RR : \{x > z_{0.05}\sigma_{X,0}\} \doteq \{x > 1.645\sigma_{X,0}\}\), thus \[
\beta = P(X \le 1.645\sigma_{X,0} \mid H_a)
\le P(X \le 1.645/\sqrt{2n} \mid H_a).
\]
Under the alternative hypothesis,
\(H_a\),
\(X = \sigma_{X,0} Z + 0.10\), therefore
\[\begin{align*}
\beta &\le P(X \le 1.645/\sqrt{2n} \mid H_a)
= P(\sigma_{X,a} Z + 0.1 \le 1.645/\sqrt{2n}). \\
\beta &\le P(\sigma_{X,a}\sqrt{2n} Z + 0.1 \sqrt{2n} \le 1.645)
= P\left(Z \ge \frac{0.10 \sqrt{2n} - 1.645}{\sigma_{X,a}\sqrt{2n}}\right) \\
&\le P(Z \ge 0.10\sqrt{2n} - 1.645),
\end{align*}\]
since \(\sigma_{X,a}\cdot \sqrt{2n} \le 1\).
Since \(\beta \le P(Z \ge 0.10\sqrt{2n} - 1.645)\), we will have \(\beta \le 0.20\) if we choose \(n\) large enough so that \(0.10\sqrt{2n} - 1.645 \ge z_{0.20} \doteq 0.84\). A direct calculation shows that we need \(n \ge 308.8\), so it suffices to choose \[
n = 309.
\]
Problem 10.32
This sample size calculation is a direct application of the formula on page \(479\). The elements of this right-tail hypothesis test are \[
\alpha = 0.01, \quad \beta = 0.05, \quad
\mu_0 = 5, \quad \mu_a = 5.5, \quad
\sigma \doteq s = 3.1.
\] So, \[
n \ge \frac{(z_{\alpha}+z_{\beta})^2\sigma^2}{(\mu_a - \mu_0)^2}
\doteq \frac{(2.33 + 1.645)^2(3.1)^2}{(0.5)^2}
\doteq 607.4.
\] It suffices to take \(n=608\).
Problem 10.34 (2 points)
Let \(X = \overline{Y}_1 - \overline{Y}_2\) be our unbiased point estimator for \(\mu_1 - \mu_2\). We have estimates \(\sigma_1 \doteq s_1 =4.34\) and \(\sigma_2 \doteq s_2 = 4.56\), so assuming equal sample sizes \(n_1 = n_2 = n\) we estimate the variance of \(X\); \[
V[X] = (\sigma_1^2 + \sigma_2^2)/n \doteq [(4.34)^2 + (4.56)^2]/n \doteq 39.63/n,
\] which implies that \(\sigma_X \doteq 6.295/\sqrt{n}\). The respective null and alternative hypotheses are \(H_0 : \mu_1 - \mu_2 = 0\) and \(H_a : \mu_1 - \mu_2 = 3\).
\(H_0\) implies that \(X = \sigma_X\cdot Z\) and that the rejection region for a right-tailed \(\alpha\)-level hypothesis test is \(RR : \{x > \sigma_X \cdot z_{\alpha}\}\).
\(H_a\) implies that \(X = \sigma_X\cdot Z + 3\). Notice that \[
\beta = P(Z \ge z_{\beta}) = P(Z \le -z_{\beta})
= P(X \le -\sigma_X\cdot z_{\beta} + 3).
\] Since the Type II error probability \(\beta = P(X \le \sigma_X\cdot z_{\alpha} \mid H_a)\), we must have that \(\sigma_X\cdot z_{\alpha} = -\sigma_X\cdot z_{\beta} + 3\). This leads to \[
\frac{(z_{\alpha} + z_{\beta})^2}{3^2} = \frac{1}{\sigma_{X}^{2}}
= \frac{n}{39.63}.
\] Given \(\alpha = \beta = 0.05\), we have \(z_{\alpha} = z_{\beta} \doteq 1.645\) and therefore \(n \ge 4\cdot (1.645)^2 / 9 \doteq 47.66\), which implies that it suffices to take \(n = 48\).
LS0tCnRpdGxlOiAiU29sdXRpb25zIHRvIEhvbWV3b3JrIEFzc2lnbm1lbnQgMTEiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMjUHJvYmxlbSAxMC4yICgxMCBwb2ludHMpCjxvbCB0eXBlPSJhIj4KPGxpPgpBIFR5cGUgSSBlcnJvciBtZWFucyB3ZSBjb25jbHVkZSB0aGF0IHRoZSBkcnVnIHdpbGwgaW5kdWNlIHNsZWVwIGluIGZld2VyIHRoYW4gXCg4MFwlXCkgb2YKcGVvcGxlIHN1ZmZlcmluZyBmcm9tIGluc29tbmlhLCB3aGVuIHRoZSBkcnVnIGFjdHVhbGx5IGlzIFwoODBcJVwpIGVmZmVjdGl2ZS4KPC9saT4KPGxpPgpUaGUgcmFuZG9tIHZhcmlhYmxlIFwoWVwpIGhhcyBhIEJpbm9taWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgXChuPTIwXCkgYW5kIFwocFwpLAp3aGVyZSB0aGUgZHJ1ZyBiZWluZyB0ZXN0ZWQgaW5kdWNlcyBzbGVlcCBpbiBcKHAgXGNkb3QgMTAwXCVcKSBvZiBwZW9wbGUgc3VmZmVyaW5nIGZyb20gaW5zb21uaWEuIApUaGUgcmVqZWN0aW9uIHJlZ2lvbiBpcyB0aGUgc2V0IFwoUlI6IFx7eSBcbGUgMTJcfVwpLiBUaGUgcHJvYmFiaWxpdHkgb2YgYSBUeXBlIEkgZXJyb3IKaXMgXChcYWxwaGEgPSBQKFkgXGxlIDEyIFxtaWQgcCA9IDAuOCkgPSAwLjAzMlwpIChUYWJsZSAxZCwgcGFnZSA3ODQpLgo8L2xpPgo8bGk+CkEgVHlwZSBJSSBlcnJvciBtZWFucyB3ZSBjb25jbHVkZSB0aGF0IHRoZSBkcnVnIHdpbGwgaW5kdWNlIHNsZWVwIGluIChhdCBsZWFzdCkgXCg4MFwlXCkKb2YgcGVvcGxlIHN1ZmZlcmluZyBmcm9tIGluc29tbmlhLCB3aGVuIHRoZSBkcnVnIGlzIGxlc3MgdGhhbiBcKDgwXCVcKSBlZmZlY3RpdmUuCjwvbGk+CjxsaT4KSWYgXChwID0gMC42XCksIHRoZW4gdGhlIHByb2JhYmlsaXR5IG9mIGEgVHlwZSBJSSBlcnJvciBpcwpcKFxiZXRhID0gUChZID4gMTIgXG1pZCBwID0gMC42KSA9IDEgLSBQKFkgXGxlIDEyIFxtaWQgcCA9IDAuNikKPSAxIC0gMC41ODQgPSAwLjQxNlwpLgo8L2xpPgo8bGk+CklmIFwocCA9IDAuNFwpLCB0aGVuIHRoZSBwcm9iYWJpbGl0eSBvZiBhIFR5cGUgSUkgZXJyb3IgaXMKXChcYmV0YSA9IFAoWSA+IDEyIFxtaWQgcCA9IDAuNCkgPSAxIC0gUChZIFxsZSAxMiBcbWlkIHAgPSAwLjQpCj0gMSAtIDAuOTc5ID0gMC4wMjFcKS4KPC9saT4KPC9vbD4KCiMjUHJvYmxlbSAxMC40ICg4IHBvaW50cykKTGV0IFwocFwpIGJlIHRoZSBwcm9wb3J0aW9uIG9mIGxlZGdlciBzaGVldHMgdGhhdCBjb250YWluIGFuIGVycm9yLgpXZSB3aWxsIHRlc3QgdGhlIG51bGwgaHlwb3RoZXNpcyBcKEhfMCA6IHAgPSAwLjA1XCkgdmVyc3VzIHRoZQphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIFwoSF9hIDogcCA+IDAuMDVcKS4gV2Ugd2lsbCBjaG9vc2UgdHdvIGxlZGdlciBzaGVldHMgYXQgcmFuZG9tLgpXZSByZWplY3QgXChIXzBcKSBpZiBib3RoIHNoZWV0cyBjb250YWluIGVycm9ycyAoaS5lLiBib3RoIGFyZSBiYWQpLiBJZiB0aGVyZSBpcwpvbmUgYmFkIHNoZWV0IGFuZCBvbmUgZ29vZCBzaGVldCwgd2UgY2hvb3NlIGEgdGhpcmQgc2hlZXQgYW5kIHdlIHJlamVjdCBcKEhfMFwpIGlmCnRoZSB0aGlyZCBzaGVldCBpcyBiYWQuIE90aGVyd2lzZSwgd2UgZmFpbCB0byByZWplY3QgXChIXzBcKS4gVGh1cywgd2UgY2FuIApyZXNwZWN0aXZlbHkgZGVub3RlIHRoZSByZWplY3Rpb24gc2V0IGFuZCBpdHMKY29tcGxpbWVudCBieSBcKFJSIDogXHtiYixiZ2IsZ2JiXH1cKSBhbmQgClwoXG92ZXJsaW5le1JSfSA6IFx7Z2csYmdnLGdiZ1x9XCkuIEFsc28sIGluIHRoaXMgbm90YXRpb24sIApcKFAoXHtiXH0pID0gcFwpIGFuZCBcKFAoXHtnXH0pID0gMSAtIHBcKS4KPG9sIHR5cGU9ImEiPgo8bGk+CkEgVHlwZSBJIGVycm9yIG1lYW5zIHdlIGNvbmNsdWRlIHRoZSBlcnJvciByYXRlLCBcKHBcKSwgaXMgZ3JlYXRlciB0aGFuIDAuMDUgd2hlbiB0aGUKdHJ1ZSB2YWx1ZSBvZiBcKHBcKSBpcyAwLjA1Lgo8L2xpPgo8bGk+ClRoZSBUeXBlIEkgZXJyb3IgcHJvYmFiaWxpdHkgaXMKXFsKXGFscGhhID0gUChSUiBcbWlkIHAgPSAwLjA1KSA9ICgwLjA1KV4yICsgMigwLjk1KSgwLjA1KV4yID0gMC4wMDczLgpcXQo8L2xpPgo8bGk+CkEgVHlwZSBJSSBlcnJvciBtZWFucyB3ZSBjb25jbHVkZSB0aGUgZXJyb3IgcmF0ZSwgXChwXCksIGlzIDAuMDUgd2hlbiB0aGUgcmVhbCBlcnJvcgpyYXRlIGlzIGdyZWF0ZXIgdGhhbiAwLjA1Lgo8L2xpPgo8bGk+ClRoZSBUeXBlIElJIGVycm9yIHByb2JhYmlsaXR5IGlzClxbClxiZXRhID0gUChcb3ZlcmxpbmV7UlJ9IFxtaWQgcCkgPSAoMSAtIHApXjIgKyAycCgxIC0gcCleMiA9ICgxICsgMnApKDEgLSBwKV4yLgpcXQpOb3RpY2UgdGhhdCBcKFxiZXRhXCkgaXMgYSA8ZW0+ZnVuY3Rpb248L2VtPiBvZiB0aGUgdW5rbm93biBwYXJhbWV0ZXIsIFwocFwpLCB3aGVyZWFzIApcKFxhbHBoYVwpIGlzIGEgPGVtPmNvbnN0YW50PC9lbT4uIFRoaXMgZGlmZmVyZW5jZSBvY2N1cnMgYmVjYXVzZSBcKEhfYVwpIGlzIGEgCjxlbT5jb21wb3NpdGU8L2VtPiBoeXBvdGhlc2lzLCB3aGVyZWFzIFwoSF8wXCkgaXMgYSA8ZW0+c2ltcGxlPC9lbT4gaHlwb3RoZXNpcy4KPC9saT4KPC9vbD4KCiMjUHJvYmxlbSAxMC42ICg2IHBvaW50cykKTGV0IFwoWVwpIGhhdmUgYSBCaW5vbWlhbCBkaXN0cmlidXRpb24gd2l0aCBcKG4gPSAxNVwpIGFuZCBwcm9iYWJpbGl0eQptYXNzIGZ1bmN0aW9uIFwoUChZID0geSkgPSBcYmlub217MTV9e3l9IHBee3l9ICgxIC0gcCleezE1IC0geX1cKSwKXCh5ID0gMCwxLDIsXGRvdHNjLDE1XCksIFwoMCBcbGUgcCBcbGUgMVwpLiBXZSB3aWxsIHRlc3QgdGhlIG51bGwKaHlwb3RoZXNpcyBcKEhfMCA6IHAgPSAwLjEwXCkuIFdlIHJlamVjdCBcKEhfMFwpIGlmIFwoWV8xIFxnZSA0XCkgb3IKXChZXzEgXGxlIDNcKSBhbmQgXChZXzEgKyBZXzIgXGdlIDZcKSwgd2hlcmUgXChZXzFcKSBhbmQgXChZXzJcKSBhcmUKaW5kZXBlbmRlbnQgYW5kIGhhdmUgdGhlIHNhbWUgQmlub21pYWwgZGlzdHJpYnV0aW9uIGFzIFwoWVwpLgo8b2wgdHlwZT0iYSI+CjxsaT4KVGhlIFR5cGUgSSBlcnJvciBwcm9iYWJpbGl0eSwgXChcYWxwaGFcKSwgaXMgdGhlIHByb2JhYmlsaXR5IHdlIApyZWplY3QgXChIXzBcKSB3aGVuIGl0IGlzIHRydWUuIFRodXMKXGJlZ2lue2FsaWduKn0KXGFscGhhICY9IFAoWV8xIFxnZSA0IFxtaWQgcCA9IDAuMTApIAorIFAoWV8xICsgWV8yIFxnZSA2LCBZXzEgXGxlIDMgXG1pZCBwID0gMC4xMCkgXFwKJj0KKDEgLSBQKFlfMSBcbGUgMyBcbWlkIHAgPSAwLjEwKSkgCisgXHN1bV97az0wfV57M30gUChZXzIgXGdlIDYgLSBrLCBZXzEgPSBrIFxtaWQgcCA9IDAuMTApIFxcCiY9CigxIC0gUChZXzEgXGxlIDMgXG1pZCBwID0gMC4xMCkpIAorIFxzdW1fe2s9MH1eezN9IFAoWV8yIFxnZSA2IC0gayBcbWlkIHAgPSAwLjEwKVxjZG90ClAoWV8xID0gayBcbWlkIHAgPSAwLjEwKSBcXAomPQooMSAtIFAoWV8xIFxsZSAzIFxtaWQgcCA9IDAuMTApKSAKKyBcc3VtX3trPTB9XnszfSAoMSAtIFAoWV8yIFxsZSA1IC0gayBcbWlkIHAgPSAwLjEwKSlcY2RvdApQKFlfMSA9IGsgXG1pZCBwID0gMC4xMCkuClxlbmR7YWxpZ24qfQo8L2xpPgpVc2luZyB0aGUgc3RhdGlzdGljYWwgc29mdHdhcmUgcGFja2FnZSAiUiwiIHJhdGhlciB0aGFuIGEgdGFibGUsCndlIGZpbmQgXChcYWxwaGEgXGRvdGVxIDAuMDk5XCkuCjxsaT4KU3VwcG9zZSBub3cgdGhhdCB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIFwoSF8wIDogcCA9IDAuMzBcKS4gUmVwbGFjaW5nClwocCA9IDAuMTBcKSB3aXRoIFwocCA9IDAuMzBcKSBpbiBwYXJ0IChhKSBhbmQgdXNpbmcgIlIiIGFnYWluLAp3ZSBjYWxjdWxhdGUgXChcYWxwaGEgXGRvdGVxIDAuOTMyXCkgKG92ZXIgXCg5M1wlXCkgY2hhbmNlIG9mIGEgVHlwZSBJIAplcnJvciEpLgo8L2xpPgo8bGk+ClRoZSBnaXZlbiB0ZXN0IHByb2NlZHVyZSBmYWlscyB0byByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyB3aGVuClwoWV8xIFxsZSAzXCkgYW5kIFwoWV8xICsgWV8yIFxsZSA1XCkuIFRoZXJlZm9yZSwgd2hlbiBcKHAgPSAwLjMwXCksCnRoZSBUeXBlIElJIGVycm9yIHByb2JhYmlsaXR5IGlzClxiZWdpbnthbGlnbip9ClxiZXRhCiY9ClAoWV8xIFxsZSAzLCBZXzEgKyBZXzIgXGxlIDUgXG1pZCBwID0gMC4zMCkgXFwKJj0KXHN1bV97az0wfV57M30gUChZXzIgXGxlIDUgLSBrLCBZXzEgPSBrIFxtaWQgcCA9IDAuMzApIFxcCiY9ClxzdW1fe2s9MH1eezN9IFAoWV8yIFxsZSA1IC0gayBcbWlkIHAgPSAwLjMwKVxjZG90IFAoWV8xID0gayBcbWlkIHAgPSAwLjMwKS4KXGVuZHthbGlnbip9ClVzaW5nICJSIiB3ZSBmaW5kIFwoXGJldGEgPSAwLjA2OFwpLgo8L2xpPgo8L29sPgoKIyNQcm9ibGVtIDEwLjEyICg2IHBvaW50cykKPG9sIHR5cGU9ImEiPgo8bGk+CkNvbmplY3R1cmU6IEJveXMgaGF2ZSBhIGdyZWF0ZXIgaW50ZXJlc3QgaW4gc3BvcnRzLCBhcyBhIGxlaXN1cmUgdGltZSBhY3Rpdml0eSwgCnRoYW4gZG8gZ2lybHMuIEFzIGFuIGFsdGVybmF0aXZlIGh5cG90aGVzaXMgdG8gdGhlIG51bGwgaHlwb3RoZXNpcyBvZiBubyBkaWZmZXJlbmNlIAppbiB0aGUgbWVhbiBMSUMgc2NvcmVzIGZvciBib3lzIGFuZCBnaXJscywgSSB3b3VsZCBzYXkgdGhhdCB0aGUgbWVhbiBmb3IgYm95cyAKaXMgZ3JlYXRlciB0aGFuIHRoZSBtZWFuIGZvciBnaXJscy4KXFsKSF8wIDogXG11X2IgLSBcbXVfZyA9IDAsIFxxcXVhZCBIX2EgOiBcbXVfYiAtIFxtdV9iID4gMC4KXF0KPC9saT4KPGxpPgpcKEhfYVwpIGNvcnJlc3BvbmRzIHRvIGEgb25lLXRhaWxlZCBzdGF0aXN0aWNhbCB0ZXN0Lgo8L2xpPgo8bGk+CldlIHVzZSBcKFxvdmVybGluZXtZfV9iIC0gXG92ZXJsaW5le1l9X2dcKSBhcyBhbiAoYXBwcm94aW1hdGVseSBub3JtYWwpIHVuYmlhc2VkIApwb2ludCBlc3RpbWF0b3IgZm9yIFwoXG11X2IgLSBcbXVfYVwpLiBXZSBlc3RpbWF0ZSB0aGUgdmFyaWFuY2Ugb2YgClwoXG92ZXJsaW5le1l9X2IgLSBcb3ZlcmxpbmV7WX1fZ1wpIGJ5ClxiZWdpbnthbGlnbip9ClxzaWdtYV57Mn1fe1xvdmVybGluZXtZfV9iIC0gXG92ZXJsaW5le1l9X2d9CiY9ClxmcmFje1xzaWdtYV4yX2J9e25fMX0gKyBcZnJhY3tcc2lnbWFeMl9nfXtuXzJ9IFxcCiZcZG90ZXEKXGZyYWN7c14yX2J9e25fMX0gKyBcZnJhY3tzXjJfZ317bl8yfSBcXAomXGRvdGVxClxmcmFjeyg0LjgyKV4yfXsyNTJ9ICsgXGZyYWN7KDQuNDEpXjJ9ezMwN30gXFwKJlxkb3RlcSAwLjE1NTUuClxlbmR7YWxpZ24qfQpUaGUgZXN0aW1hdGVkIHZhbHVlIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGlzIHRoZXJlZm9yZQpcKFxzaWdtYV97XG92ZXJsaW5le1l9X2IgLSBcb3ZlcmxpbmV7WX1fZ30gXGRvdGVxIDAuMzk0NFwpLgpXZSB1c2UgdGhlIHN0YW5kYXJkIG5vcm1hbCByYW5kb20gdmFyaWFibGUgYXMgdGhlIHRlc3Qgc3RhdGlzdGljLgpUZXN0aW5nIGF0IHRoZSBsZXZlbCBcKFxhbHBoYSA9IDAuMDFcKSwgdGhlIHJpZ2h0LXRhaWxlZCByZWplY3Rpb24KcmVnaW9uIGlzIFwoUlIgOiBce3ogPiB6X3swLjAxfVx9IFxkb3RlcSBce3ogPiAyLjMyNVx9XCkuIEZyb20gdGhlCmRhdGEsIHRoZSB2YWx1ZSBvZiB0aGUgdGVzdCBzdGF0aXN0aWMgaXMKXFsKeiA9IFxmcmFje1xiYXJ7eX1fYiAtIFxiYXJ7eX1fZ317XHNpZ21hX3tcb3ZlcmxpbmV7WX1fYiAtIFxvdmVybGluZXtZfV9nfX0KXGRvdGVxIFxmcmFjezEzLjY1IC0gOS44OH17MC4zOTQ0fSBcZG90ZXEgOS41Ni4KXF0KU2luY2UgXCh6ID0gOS41NiA+IDIuMzI1XCksIHRoZXNlIGRhdGEgc3VwcG9ydCB0aGUgY29uamVjdHVyZSwgcmF0aGVyCnN0cm9uZ2x5LCB0aGF0IHRoZSBtZWFuIExJQyBzY29yZXMgZm9yIHNwb3J0cyBpcyBoaWdoZXIgZm9yIGJveXMKdGhhbiBmb3IgZ2lybHMgYXQgdGhlIFwoMC4wMVwpLWxldmVsIG9mIHNpZ25pZmljYW5jZS4KPC9saT4KPC9vbD4KCiMjUHJvYmxlbSAxMC4xNApUaGUgZGF0YSBmb3IgdGhlIGxhcmdlIHNjYWxlIGh5cG90aGVzaXMgdGVzdCBhcmUgYXMgZm9sbG93czoKXFsKbiA9IDMwMCxccXVhZCB5ID0gOTgsXHF1YWQgXGhhdHtwfSA9IDk4LzMwMCBcZG90ZXEgMC4zMjY3LgpcXQo8b2wgdHlwZT0iYSI+CjxsaT4KV2Ugd2lsbCBwZXJmb3JtIGEgdHdvLXRhaWxlZCBoeXBvdGhlc2lzIHRlc3QgYXQgdGhlIHNpZ25pZmljYW5jZQpsZXZlbCBcKFxhbHBoYSA9IDAuMDVcKS4gVGhlIGVsZW1lbnRzIG9mIHRoaXMgdGVzdCBhcmUKXGJlZ2lue2FsaWduKn0KSF8wICY6IHAgPSAwLjI1IFxcCkhfYSAmOiBwIFxuZSAwLjI1IFxcClxzaWdtYV97XGhhdHtwfX0gJj0gXHNxcnR7cF8wKDEgLSBwXzApLzMwMH0gCj0gXHNxcnR7KDAuMjUpKDAuNzUpLzMwMH0gPSAwLjAyNSBcXApUUyAmOiB6ID0gXGZyYWN7XGhhdHtwfSAtIDAuMjV9e1xzaWdtYV97XGhhdHtwfX19Clxkb3RlcSBcZnJhY3swLjMyNjcgLSAwLjI1fXswLjAyNX0gXGRvdGVxIDMuMDY2NyBcXApSUiAmOiBce1xsdmVydCB6IFxydmVydCA+IHpfezAuMDI1fVx9ID0gXHtcbHZlcnQgeiBccnZlcnQgPiAxLjk2XH0KXGVuZHthbGlnbip9ClNpbmNlIFwoXGx2ZXJ0IHogXHJ2ZXJ0ID0gMy4wNjY3ID4gMS45NlwpIHdlIGNvbmNsdWRlIHRoYXQKYXQgdGhlIFwoXGFscGhhID0gMC4wNVwpIGxldmVsIG9mIHNpZ25pZmljYW5jZSwgdGhlc2UgZGF0YQpzdXBwb3J0IHRoZSBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIHRoYXQgXChwIFxuZSAwLjI1XCkuCjwvbGk+CjxsaT4KVGhpcyBzdHVkeSBpbmRpY2F0ZXMgdGhhdCBlaXRoZXIgdGhlIGNvbHVtbmlzdCB1bmRlcmVzdGltYXRlZCB0aGUKcHJvcG9ydGlvbiBvZiBzdHVkZW50cyBvdmVyIFwoMzBcKSwgb3IgdGhhdCB0aGlzIGNhbXB1cyBoYXMKYSBncmVhdGVyIHByb3BvcnRpb24gdGhhbiB0aGUgYXZlcmFnZSBvdmVyIG1hbnkgY2FtcHVzZXMuCjwvbGk+Cjwvb2w+CgojI1Byb2JsZW0gMTAuMTggKDYgcG9pbnRzKQpBc3N1bWUgdHdvIGluZGVwZW5kZW50IHNhbXBsZXMuIEVhY2ggcG9wdWxhdGlvbiBoYXMgdGhlCnNhbWUgKGxhcmdlKSBzYW1wbGUgc2l6ZSwgXChuXzEgPSBuXzIgPSAxMDAwXCkuIFRoZSBkYXRhCnByb3ZpZGUgcG9pbnQgZXN0aW1hdGVzIGZvciBlYWNoIHBvcHVsYXRpb24ncyBwcm9wb3J0aW9uLApcKFxoYXR7cH1fMSA9IDAuNDVcKSBhbmQgXChcaGF0e3B9XzIgPSAwLjM0XCkuCjxvbCB0eXBlPSJhIj4KPGxpPgpXZSB3aWxsIHBlcmZvcm0gYSB0d28tdGFpbGVkIGh5cG90aGVzaXMgdGVzdCBhdCBzaWduaWZpY2FuY2UKbGV2ZWwgXChcYWxwaGEgPSAwLjA1XCkuIFdlIGFyZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlc2UgZGF0YQpzdXBwb3J0IHRoZSBjbGFpbSB0aGF0IFwocF8xIFxuZSBwXzJcKS4gVGhlIHJlc3BlY3RpdmUgbnVsbCBhbmQKYWx0ZXJuYXRpdmUgaHlwb3RoZXNlcyBhcmUKXFsKSF8wIDogcF8xIC0gcF8yID0gMCwgXHF1YWQgSF9hIDogcF8xIC0gcF8yIFxuZSAwLgpcXQpVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLCBcKFxoYXR7cH1fMVwpIGFuZCBcKFxoYXR7cH1fMlwpIGFyZSAKaW5kZXBlbmRlbnQgdW5iaWFzZWQgcG9pbnQgZXN0aW1hdG9ycyBmb3IgdGhlIHNhbWUgcGFyYW1ldGVyIFwocF8xID0gcF8yXCkuCldlIGFycml2ZSBhdCBhbiBpbXByb3ZlZCBlc3RpbWF0ZSBvZiB0aGlzIHBhcmFtZXRlciBieSBwb29saW5nIHRoZSBpbmRpdmlkdWFsCnJlc3VsdHMgYXMgZm9sbG93czoKXFsKXGhhdHtwfV97cG9vbGVkfSA9IFxmcmFje25fMVxjZG90IFxoYXR7cH1fMSArIG5fMlxjZG90IFxoYXR7cH1fMn17bl8xICsgbl8yfQo9IFxmcmFjezQ1MCArIDM0MH17MTAwMCArIDEwMDB9ID0gXGZyYWN7NzkwfXsyMDAwfSA9IDAuMzk1LgpcXQpVc2luZyBcKFxoYXR7cH1fe3Bvb2xlZH1cKSBhcyBhbiBlc3RpbWF0ZSBmb3IgYm90aCBcKHBfMVwpIGFuZCBcKHBfMlwpIHByb3ZpZGVzCmFuIGVzdGltYXRlIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uClxbClxzaWdtYV97XGhhdHtwfV8xIC0gXGhhdHtwfV8yfSA9ClxzcXJ0e3BfMSgxIC0gcF8xKS9uXzEgKyBwXzIoMSAtIHBfMikvbl8yfSBcZG90ZXEKXHNxcnR7MigwLjM5NSkoMC42MDUpLzEwMDB9IFxkb3RlcSAwLjAyMTg2LgpcXQpUaGUgbGFyZ2Ugc2FtcGxlIHNpemVzIGltcGx5IHRoYXQgdGhlIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBvZgpcKFxoYXR7cH1fMSAtIFxoYXR7cH1fMlwpIGlzIGFwcHJveGltYXRlbHkgbm9ybWFsLiBVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLApcKEVbXGhhdHtwfV8xIC0gXGhhdHtwfV8yXSA9IDBcKS4gVGh1cyB0aGUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG9mClwoWiA9IChcaGF0e3B9XzEgLSBcaGF0e3B9XzIpL1xzaWdtYV97XGhhdHtwfV8xIC0gXGhhdHtwfV8yfVwpIGlzIGFwcHJveGltYXRlbHkKdGhlIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24uIFdlIHdpbGwgdXNlIFwoWlwpIGFzIG91ciB0ZXN0IHN0YXRpc3RpYy4KVGhlIHJlamVjdGlvbiByZWdpb24gZm9yIG91ciB0d28tdGFpbGVkIGh5cG90aGVzaXMgdGVzdCBpcyB0aGVyZWZvcmUKXChSUiA6IFx7XGx2ZXJ0IHogXHJ2ZXJ0ID4gel97MC4wMjV9XH0gXGRvdGVxIFx7XGx2ZXJ0IHogXHJ2ZXJ0ID4gMS45Nlx9XCkuCk5vdywgdGhlIHZhbHVlIG9mIHRoZSB0ZXN0IHN0YXRpc3RpYyBpcyAKXFsKVFMgOiB6ID0gKFxoYXR7cH1fMSAtIFxoYXR7cH1fMikvXHNpZ21hX3tcaGF0e3B9XzEgLSBcaGF0e3B9XzJ9Clxkb3RlcSAoMC40NSAtIDAuMzQpLzAuMDIxODYgXGRvdGVxIDUuMDMuClxdClNpbmNlIFwoXGx2ZXJ0IHogXHJ2ZXJ0ID0gNS4wMyA+IDEuOTZcKSwgdGhlc2UgZGF0YSBzdXBwb3J0IHRoZSBjbGFpbSB0aGF0CnRoZSBwcm9wb3J0aW9uIG9mIGFzcGlyaW4gdXNlcnMgZm9yIDE5ODYgZGlmZmVycyBmcm9tIHRoZSBwcm9wb3J0aW9uIG9mCmFzcGlyaW4gdXNlcnMgZm9yIDE5OTEuCjwvbGk+CjxsaT4KV2UgcGVyZm9ybSBhIHNpbWlsYXIgdGVzdCBvbiB0aGUgcHJvcG9ydGlvbiBvZiBpYnVwcm9mZW4gdXNlcnMuClRoaXMgdGVzdCB3aWxsIGJlIGEgcmlnaHQtdGFpbGVkIHRlc3QuIFRoZSBkYXRhCnByb3ZpZGUgcG9pbnQgZXN0aW1hdGVzIGZvciBlYWNoIHBvcHVsYXRpb24ncyBwcm9wb3J0aW9uLApcKFxoYXR7cH1fMSA9IDAuMTRcKSBhbmQgXChcaGF0e3B9XzIgPSAwLjI2XCkuIApXZSBhcmUgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXNlIGRhdGEKc3VwcG9ydCB0aGUgY2xhaW0gdGhhdCBcKHBfMSA8IHBfMlwpLiBUaGUgcmVzcGVjdGl2ZSBudWxsIGFuZAphbHRlcm5hdGl2ZSBoeXBvdGhlc2VzIGFyZQpcWwpIXzAgOiBwXzIgLSBwXzEgPSAwLCBccXVhZCBIX2EgOiBwXzIgLSBwXzEgPiAwLgpcXQpVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLCBcKFxoYXR7cH1fMVwpIGFuZCBcKFxoYXR7cH1fMlwpIGFyZSAKaW5kZXBlbmRlbnQgdW5iaWFzZWQgcG9pbnQgZXN0aW1hdG9ycyBmb3IgdGhlIHNhbWUgcGFyYW1ldGVyIFwocF8xID0gcF8yXCkuCldlIGFycml2ZSBhdCBhbiBpbXByb3ZlZCBlc3RpbWF0ZSBvZiB0aGlzIHBhcmFtZXRlciBieSBwb29saW5nIHRoZSBpbmRpdmlkdWFsCnJlc3VsdHMgYXMgZm9sbG93czoKXFsKXGhhdHtwfV97cG9vbGVkfSA9IFxmcmFje25fMVxjZG90IFxoYXR7cH1fMSArIG5fMlxjZG90IFxoYXR7cH1fMn17bl8xICsgbl8yfQo9IFxmcmFjezE0MCArIDI2MH17MTAwMCArIDEwMDB9ID0gXGZyYWN7NDAwfXsyMDAwfSA9IDAuMjAwLgpcXQpVc2luZyBcKFxoYXR7cH1fe3Bvb2xlZH1cKSBhcyBhbiBlc3RpbWF0ZSBmb3IgYm90aCBcKHBfMVwpIGFuZCBcKHBfMlwpIHByb3ZpZGVzCmFuIGVzdGltYXRlIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uClxbClxzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfSA9ClxzcXJ0e3BfMSgxIC0gcF8xKS9uXzEgKyBwXzIoMSAtIHBfMikvbl8yfSBcZG90ZXEKXHNxcnR7MigwLjIpKDAuOCkvMTAwMH0gXGRvdGVxIDAuMDE3ODkuClxdClRoZSBsYXJnZSBzYW1wbGUgc2l6ZXMgaW1wbHkgdGhhdCB0aGUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG9mClwoXGhhdHtwfV8yIC0gXGhhdHtwfV8xXCkgaXMgYXBwcm94aW1hdGVseSBub3JtYWwuIFVuZGVyIHRoZSBudWxsIGh5cG90aGVzaXMsClwoRVtcaGF0e3B9XzIgLSBcaGF0e3B9XzFdID0gMFwpLiBUaHVzIHRoZSBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gb2YKXChaID0gKFxoYXR7cH1fMiAtIFxoYXR7cH1fMSkvXHNpZ21hX3tcaGF0e3B9XzIgLSBcaGF0e3B9XzF9XCkgaXMgYXBwcm94aW1hdGVseQp0aGUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gV2Ugd2lsbCB1c2UgXChaXCkgYXMgb3VyIHRlc3Qgc3RhdGlzdGljLgpUaGUgcmVqZWN0aW9uIHJlZ2lvbiBmb3Igb3VyIHJpZ2h0LXRhaWxlZCBoeXBvdGhlc2lzIHRlc3QgaXMgdGhlcmVmb3JlClwoUlIgOiBceyB6ICA+IHpfezAuMDV9XH0gXGRvdGVxIFx7IHogID4gMS42NDVcfVwpLgpOb3csIHRoZSB2YWx1ZSBvZiB0aGUgdGVzdCBzdGF0aXN0aWMgaXMgClxbClRTIDogeiA9IChcaGF0e3B9XzIgLSBcaGF0e3B9XzEpL1xzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfQpcZG90ZXEgKDAuMjYgLSAwLjE0KS8wLjAxNzg5IFxkb3RlcSA2LjcuClxdClNpbmNlIFwoeiA9IDYuNyA+IDEuNjQ1XCksIHRoZXNlIGRhdGEgcHJvdmlkZSBzdWZmaWNpZW50IGV2aWRlbmNlCnRvIGluZGljYXRlIHRoYXQgaWJ1cHJvZmVuIGhhcyBhIGdyZWF0ZXIgbWFya2V0IHNoYXJlIGluIDE5OTEgdGhhbgppdCBkaWQgaW4gMTk4Ni4KPC9saT4KPGxpPgpUaGUgdGVzdHMgaW4gKGEpIGFuZCAoYikgYXJlIHJlbGF0ZWQuIFNpbmNlIG1vc3QgcGVvcGxlIHVzZSBqdXN0IApvbmUgdHlwZSBvZiBwYWluIHJlbGlldmVyIGF0IGEgdGltZSwgYW4gaW5jcmVhc2VkIHByb3BvcnRpb24gb2YgaWJ1cHJvZmVuIAp1c2VycyBpbmRpY2F0ZXMgYSBkZWNyZWFzZWQgdXNlIGFtb25nIHRoZSByZW1haW5pbmcgdHlwZXMuIFRoZQpwcm9wb3J0aW9uIGZvciBhY2V0YW1pbm9waGVuIHNlZW1zIHN0YWJsZSwgc28gdGhlIGRlY3JlYXNlIG11c3QgY29tZQpmcm9tIGFzcGlyaW4uCjwvbGk+Cjwvb2w+CgojI1Byb2JsZW0gMTAuMjEgKDIgcG9pbnRzKQpUbyB1c2UgYSBcKFpcKS10ZXN0IHRvIHRlc3QgYSBoeXBvdGhlc2lzIGNvbmNlcm5pbmcgYSBwb3B1bGF0aW9uCm1lYW4gXChcbXVcKSwgd2UgbmVlZCBhbiBpbmRlcGVuZGVudCBhbmQgcmFuZG9tIHNhbXBsZQpcKFlfMSxcZG90c2MsWV9uXCkuIE1vcmVvdmVyLCB0aGUgc2FtcGxlIHNpemUgXChuXCkgc2hvdWxkCmJlIHN1ZmZpY2llbnRseSBsYXJnZSBmb3IgdGhlIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBvZgpcKFxzcXJ0e259XGNkb3QoXG92ZXJsaW5le1l9IC0gXG11KS9TXCkgdG8gYmUgd2VsbCBhcHByb3hpbWF0ZWQKYnkgdGhlIHN0YW5kYXJkIG5vcm1hbCBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24uCgojI1Byb2JsZW0gMTAuMjYgKDIgcG9pbnRzKQpMZXQgXCgoWV8xLFlfMixZXzMsWV80KVwpIGhhdmUgYSBtdWx0aW5vbWlhbCBkaXN0cmlidXRpb24gd2l0aApcKG5cKSB0cmlhbHMgYW5kIHByb2JhYmlsaXRpZXMgXCgocF8xLHBfMixwXzMscF80KVwpIGZvciB0aGUKZm91ciBjZWxscy4gVGhlb3JlbSA1LjEzIGltcGxpZXMgdGhhdApcWwpFW1lfaV0gPSBuXGNkb3QgcF9pLCBccXVhZCBWW1lfaV0gPSBuXGNkb3QgcF9pXGNkb3QgKDEgLSBwX2kpLApccXVhZCBpID0gMSwyLDMsNCwKXF0KYW5kIFwoQ292W1lfaSwgWV9qXSA9IC1uXGNkb3QgcF9pXGNkb3QgcF9qXCksIGZvciBcKDEgXGxlIGksaiBcbGUgNFwpIAphbmQgXChpIFxuZSBqXCkuCgpVbmJpYXNlZCBwb2ludCBlc3RpbWF0b3JzIGZvciBcKHBfaVwpIGFyZSAKXChcaGF0e3B9X2kgPSBcZnJhY3sxfXtufVlfaVwpLgoKVGhlIEZsb3JpZGEgc3R1ZHkgaGFzIGEgc2FtcGxlIHNpemUgb2YgXChuPTUwMFwpIGFuZCBlc3RpbWF0ZXMKdGhlIGZvbGxvd2luZyBwcm9wb3J0aW9ucyBmb3IgbnVpc2FuY2UgYWxsaWdhdG9yIG1hbmFnZW1lbnQ6Cjx1bD4KPGxpPgpcKFxoYXR7cH1fMSA9IDAuMDZcKSBzYXkgYWxsaWdhdG9ycyBzaG91bGQgYmUgY29tcGxldGVseSBwcm90ZWN0ZWQuCjwvbGk+CjxsaT4KXChcaGF0e3B9XzIgPSAwLjE2XCkgc2F5IGFsbGlnYXRvcnMgc2hvdWxkIGJlIGRlc3Ryb3llZCBieSB3aWxkbGlmZSBvZmZpY2Vycy4KPC9saT4KPGxpPgpcKFxoYXR7cH1fMyA9IDAuNTJcKSBzYXkgYWxsaWdhdG9ycyBzaG91bGQgYmUgcmVsb2NhdGVkIGxpdmUuCjwvbGk+CjxsaT4KXChcaGF0e3B9XzQgPSAwLjI2XCkgc2F5IHRoZXJlIHNob3VsZCBiZSBhIHJlZ3VsYXRlZCBjb21tZXJjaWFsIGhhcnZlc3QuCjwvbGk+CjwvdWw+CgpXZSB3aWxsIHRlc3QgZm9yIGEgZGlmZmVyZW5jZSBpbiBcKHBfMVwpIGFuZCBcKHBfMlwpIGF0IHRoZQpcKFxhbHBoYSA9IDAuMDFcKSBsZXZlbCBvZiBzaWduaWZpY2FuY2UuIFRoZSByZXNwZWN0aXZlIG51bGwgYW5kIAphbHRlcm5hdGl2ZSBoeXBvdGhlc2VzIGFyZQpcWwpIXzAgOiBwXzIgLSBwXzEgPSAwLCBccXVhZCBIX2EgOiBwXzIgLSBwXzEgXG5lIDAuClxdClNpbmNlIHRoZSBzYW1wbGUgc2l6ZSBpcyBsYXJnZSwKXChcaGF0e3B9XzIgLSBcaGF0e3B9XzFcKSBpcyBhcHByb3hpbWF0ZWx5IG5vcm1hbC4gVW5kZXIgdGhlIG51bGwKaHlwb3RoZXNpcywgXChFW1xoYXR7cH1fMiAtIFxoYXR7cH1fMV0gPSAwXCkuIE5vdywKXGJlZ2lue2FsaWduKn0KVltcaGF0e3B9XzIgLSBcaGF0e3B9XzFdCiY9IApcZnJhY3sxfXtuXjJ9IFZbWV8yIC0gWV8xXSBcXAomPQpcZnJhY3sxfXtuXjJ9KFZbWV8yXSArIFZbWV8xXSAtIDJDb3ZbWV8yLFlfMV0pIFxcCiY9ClxmcmFjezF9e25eMn0oblxjZG90IHBfMlxjZG90ICgxLXBfMikgKyBuXGNkb3QgcF8xXGNkb3QgKDEtcF8xKQorIDJuXGNkb3QgcF8xXGNkb3QgcF8yKSBcXAomPQpcZnJhY3sxfXtufShwXzJcY2RvdCAoMS1wXzIpICsgcF8xXGNkb3QgKDEtcF8xKQorIDJwXzFcY2RvdCBwXzIpIFxcCiY9ClxmcmFjezF9e259KChwXzIgKyBwXzEpIC0gKHBfMiAtIHBfMSleMikuClxlbmR7YWxpZ24qfQpVc2luZyB0aGlzLCB3ZSBlc3RpbWF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uClxbClxzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfSBcZG90ZXEgClxzcXJ0e1soMC4xNiArIDAuMDYpIC0gKDAuMTYgLSAwLjA2KV4yXS81MDB9IFxkb3RlcSAwLjAyMDUuClxdClRoZSByZWplY3Rpb24gcmVnaW9uIGZvciBvdXIgdHdvLXRhaWxlZCBcKFpcKS10ZXN0IGlzClwoUlIgOiBce1xsdmVydCB6IFxydmVydCA+IHpfezAuMDA1fVx9XGRvdGVxIFx7XGx2ZXJ0IHogXHJ2ZXJ0ID4gMi41NzVcfVwpLgpGcm9tIHRoZSBkYXRhLCB0aGUgdmFsdWUgb2Ygb3VyIHRlc3Qgc3RhdGlzdGljIGlzClxbCnogPSBcZnJhY3tcaGF0e3B9XzIgLSBcaGF0e3B9XzF9e1xzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfX0gXGRvdGVxClxmcmFjezAuMTYgLSAwLjA2fXswLjAyMDV9IFxkb3RlcSA0Ljg3OTUsClxdCmFuZCBzaW5jZSBcKFxsdmVydCB6IFxydmVydCBcZG90ZXEgNC44Nzk1ID4gMi41NzVcKSB3ZSBjb25jbHVkZSB0aGF0CnRoaXMgZGF0YSBwcm92aWRlcyBzdWZmaWNpZW50IGV2aWRlbmNlIGZvciBhIGRpZmZlcmVuY2UgaW4gdGhlIHByb3BvcnRpb25zCmF0IHRoZSBcKFxhbHBoYSA9IDAuMDFcKSBsZXZlbCBvZiBzaWduaWZpY2FuY2UuCgojI1Byb2JsZW0gMTAuMzAgKDIgcG9pbnRzKQpDb25zaWRlciBhIGh5cG90aGVzaXMgdGVzdCB0aGF0IGNvbXBhcmVzIHR3byBwcm9wb3J0aW9ucy4gSGVyZSBhcmUgdGhlCmRldGFpbHMuClxbCkhfMCA6IHBfMSAtIHBfMiA9IDAsIFxxdWFkIEhfYSA6IHBfMSAtIHBfMiA9IDAuMSwKXHF1YWQgXGFscGhhID0gMC4wNSwgXHF1YWQgXGJldGEgXGxlIDAuMjAsClxxdWFkIG5fMSA9IG5fMiA9IG4uClxdCkxldCBcKFggPSBcaGF0e3B9XzEgLSBcaGF0e3B9XzJcKSwgdGhlbgpcKFxzaWdtYV9YID0gXHNxcnR7cF8xKDEtcF8xKS9uICsgcF8yKDEtcF8yKS9ufSBcbGUgMS9cc3FydHsybn1cKSwKZm9yIGFsbCBcKDAgXGxlIHBfMSwgcF8yIFxsZSAxXCksIHNpbmNlIFwocCgxLXApIFxsZSAxLzRcKS4gCgpMZXQgXChcc2lnbWFfe1gsMH1cKSBiZSB0aGUgdmFsdWUgb2YgXChcc2lnbWFfWFwpIHVuZGVyIFwoSF8wXCksCmFuZCBsZXQgXChcc2lnbWFfe1gsYX1cKSBiZSB0aGUgdmFsdWUgb2YgXChcc2lnbWFfWFwpIHVuZGVyClwoSF9hXCkuCgpVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLCBcKEhfMFwpLCBcKFggPSBcc2lnbWFfe1gsMH0gWlwpLCBzbyB0aGUgcmVqZWN0aW9uIHJlZ2lvbgppcyBcKFJSIDogXHt4ID4gel97MC4wNX1cc2lnbWFfe1gsMH1cfSBcZG90ZXEgXHt4ID4gMS42NDVcc2lnbWFfe1gsMH1cfVwpLAp0aHVzIApcWwpcYmV0YSA9IFAoWCBcbGUgMS42NDVcc2lnbWFfe1gsMH0gXG1pZCBIX2EpClxsZSBQKFggXGxlIDEuNjQ1L1xzcXJ0ezJufSBcbWlkIEhfYSkuClxdCgpVbmRlciB0aGUgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcywgXChIX2FcKSwgXChYID0gXHNpZ21hX3tYLDB9IFogKyAwLjEwXCksIHRoZXJlZm9yZQpcYmVnaW57YWxpZ24qfQpcYmV0YSAmXGxlIFAoWCBcbGUgMS42NDUvXHNxcnR7Mm59IFxtaWQgSF9hKSAKPSBQKFxzaWdtYV97WCxhfSBaICsgMC4xIFxsZSAxLjY0NS9cc3FydHsybn0pLiBcXApcYmV0YSAmXGxlIFAoXHNpZ21hX3tYLGF9XHNxcnR7Mm59IFogKyAwLjEgXHNxcnR7Mm59IFxsZSAxLjY0NSkKPSBQXGxlZnQoWiBcZ2UgXGZyYWN7MC4xMCBcc3FydHsybn0gLSAxLjY0NX17XHNpZ21hX3tYLGF9XHNxcnR7Mm59fVxyaWdodCkgXFwKJlxsZSBQKFogXGdlIDAuMTBcc3FydHsybn0gLSAxLjY0NSksClxlbmR7YWxpZ24qfQpzaW5jZSBcKFxzaWdtYV97WCxhfVxjZG90IFxzcXJ0ezJufSBcbGUgMVwpLgoKU2luY2UgXChcYmV0YSBcbGUgUChaIFxnZSAwLjEwXHNxcnR7Mm59IC0gMS42NDUpXCksIHdlIHdpbGwgaGF2ZSBcKFxiZXRhIFxsZSAwLjIwXCkgaWYKd2UgY2hvb3NlIFwoblwpIGxhcmdlIGVub3VnaCBzbyB0aGF0IApcKDAuMTBcc3FydHsybn0gLSAxLjY0NSBcZ2Ugel97MC4yMH0gXGRvdGVxIDAuODRcKS4gQSBkaXJlY3QgY2FsY3VsYXRpb24gc2hvd3MKdGhhdCB3ZSBuZWVkIFwobiBcZ2UgMzA4LjhcKSwgc28gaXQgc3VmZmljZXMgdG8gY2hvb3NlClxbCm4gPSAzMDkuClxdCgojI1Byb2JsZW0gMTAuMzIKVGhpcyBzYW1wbGUgc2l6ZSBjYWxjdWxhdGlvbiBpcyBhIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiB0aGUKZm9ybXVsYSBvbiBwYWdlIFwoNDc5XCkuIFRoZSBlbGVtZW50cyBvZiB0aGlzIHJpZ2h0LXRhaWwKaHlwb3RoZXNpcyB0ZXN0IGFyZQpcWwpcYWxwaGEgPSAwLjAxLCBccXVhZCBcYmV0YSA9IDAuMDUsIFxxdWFkClxtdV8wID0gNSwgXHF1YWQgXG11X2EgPSA1LjUsIFxxdWFkClxzaWdtYSBcZG90ZXEgcyA9IDMuMS4KXF0KU28sIApcWwpuIFxnZSBcZnJhY3soel97XGFscGhhfSt6X3tcYmV0YX0pXjJcc2lnbWFeMn17KFxtdV9hIC0gXG11XzApXjJ9Clxkb3RlcSBcZnJhY3soMi4zMyArIDEuNjQ1KV4yKDMuMSleMn17KDAuNSleMn0KXGRvdGVxIDYwNy40LgpcXQpJdCBzdWZmaWNlcyB0byB0YWtlIFwobj02MDhcKS4KCiMjUHJvYmxlbSAxMC4zNCAoMiBwb2ludHMpCkxldCBcKFggPSBcb3ZlcmxpbmV7WX1fMSAtIFxvdmVybGluZXtZfV8yXCkgYmUgb3VyIHVuYmlhc2VkIHBvaW50IGVzdGltYXRvcgpmb3IgXChcbXVfMSAtIFxtdV8yXCkuIFdlIGhhdmUgZXN0aW1hdGVzClwoXHNpZ21hXzEgXGRvdGVxIHNfMSA9NC4zNFwpIGFuZCBcKFxzaWdtYV8yIFxkb3RlcSBzXzIgPSA0LjU2XCksCnNvIGFzc3VtaW5nIGVxdWFsIHNhbXBsZSBzaXplcyBcKG5fMSA9IG5fMiA9IG5cKSB3ZSBlc3RpbWF0ZSB0aGUgCnZhcmlhbmNlIG9mIFwoWFwpOwpcWwpWW1hdID0gKFxzaWdtYV8xXjIgKyBcc2lnbWFfMl4yKS9uIFxkb3RlcSBbKDQuMzQpXjIgKyAoNC41NileMl0vbiBcZG90ZXEgMzkuNjMvbiwKXF0Kd2hpY2ggaW1wbGllcyB0aGF0IFwoXHNpZ21hX1ggXGRvdGVxIDYuMjk1L1xzcXJ0e259XCkuIApUaGUgcmVzcGVjdGl2ZSBudWxsCmFuZCBhbHRlcm5hdGl2ZSBoeXBvdGhlc2VzIGFyZQpcKEhfMCA6IFxtdV8xIC0gXG11XzIgPSAwXCkgYW5kIFwoSF9hIDogXG11XzEgLSBcbXVfMiA9IDNcKS4gCgpcKEhfMFwpIGltcGxpZXMgdGhhdApcKFggPSBcc2lnbWFfWFxjZG90IFpcKSBhbmQgdGhhdCB0aGUgcmVqZWN0aW9uIHJlZ2lvbiBmb3IgYSByaWdodC10YWlsZWQKXChcYWxwaGFcKS1sZXZlbCBoeXBvdGhlc2lzIHRlc3QgaXMgXChSUiA6IFx7eCA+IFxzaWdtYV9YIFxjZG90IHpfe1xhbHBoYX1cfVwpLgoKXChIX2FcKSBpbXBsaWVzIHRoYXQgXChYID0gXHNpZ21hX1hcY2RvdCBaICsgM1wpLiBOb3RpY2UgdGhhdCAKXFsKXGJldGEgPSBQKFogXGdlIHpfe1xiZXRhfSkgPSBQKFogXGxlIC16X3tcYmV0YX0pIAo9IFAoWCBcbGUgLVxzaWdtYV9YXGNkb3Qgel97XGJldGF9ICsgMykuClxdClNpbmNlIHRoZSBUeXBlIElJIGVycm9yIHByb2JhYmlsaXR5ClwoXGJldGEgPSBQKFggXGxlIFxzaWdtYV9YXGNkb3Qgel97XGFscGhhfSBcbWlkIEhfYSlcKSwgd2UgbXVzdCBoYXZlCnRoYXQgXChcc2lnbWFfWFxjZG90IHpfe1xhbHBoYX0gPSAtXHNpZ21hX1hcY2RvdCB6X3tcYmV0YX0gKyAzXCkuIFRoaXMKbGVhZHMgdG8KXFsKXGZyYWN7KHpfe1xhbHBoYX0gKyB6X3tcYmV0YX0pXjJ9ezNeMn0gPSBcZnJhY3sxfXtcc2lnbWFfe1h9XnsyfX0KPSBcZnJhY3tufXszOS42M30uClxdCkdpdmVuIFwoXGFscGhhID0gXGJldGEgPSAwLjA1XCksIHdlIGhhdmUgClwoel97XGFscGhhfSA9IHpfe1xiZXRhfSBcZG90ZXEgMS42NDVcKSBhbmQgdGhlcmVmb3JlClwobiBcZ2UgNFxjZG90ICgxLjY0NSleMiAvIDkgXGRvdGVxIDQ3LjY2XCksIHdoaWNoIGltcGxpZXMKdGhhdCBpdCBzdWZmaWNlcyB0byB0YWtlIFwobiA9IDQ4XCku