Section I - Set theory and Probability


Definition. A set is a collection of objects thought of as a whole. The objects, of which the set is a collection, are called delements or members of the set.


Sample spaces and events

The probabilities to refer to the possible outcomes of certin experiments or observations. The probability model will be seen to involve two things: * choosing a set to represent the possible outcomes; * and allocating probabilities to these possible outcomes.


Setting up a sample space S of all possible outcomes

If we want to construct an abstract model, we must decide what constitutes a possible experiment. The possible outcomes define the idealized experiment and they are usually called sample points.

The collection of all sample points is called the sample space S of the model.

The notion of event can now be introduced. An event is a subset of S. An event can contain one or more sample points. Hence an event is a subset, and it is not an element.


The allocation of probabilities to the elements of a sample space

Let the sample space S be the set

\(S=\{e_1, e_2, ...\}=E_1 \cup E_2 \cup ...,\)

where \(E_i = \{e_1\}\) are the simple events in S. Then we assume that to each event E in S we can assign a non-negative real nuber P[E], called the probability of E.


Axioms for probability

  1. P[E]>=0 for every event E.
  2. P[S]=1 for the certain event S.
  3. The probability P[A] of any event A is the sum of the probabilities of the simple events whose union is A.

If the sample space S is the union of the distinct simple events \(E_1, E_2,...,\) it follows from axioms II and III that \(P[S]=P[E_1]+P[E_2]+...=1\).

An important consequence of Axiom III is that if E and F are mutually exclusive events, so that \(E \cap F = \varnothing\) , then \(P[E \cap F] = P[E]+P[F]\).


Theorem 1. \(P[\varnothing]=0\), where \(\varnothing\) is the empty set.

Theorem 2. \(P[E \cap F'] = P[E] - P[F]\)

Theorem 3. \(P[F']=1-P[F]\)

Theorem 4. \(P[E \cup F] = P[E] + P[F] - P[E \cap F]\).


Conditional probability

Definition. The conditional proability of B, given A, is defined to be \(P(B \mid A) = \frac{P[B \cap A]}{p[A]}\), provided that \(P[A]!=0\).


Idependent events

Definition. The events A and B are said to be independent if and only if \(P[A \cup B] = P[A]P[B]\).

Using the definition of conditional probability, it implies that \(P[B \mid A] = P[B]\) and \(P[A \mid B] = P[A]\)


Section II - Binomial distribution


Definition.

Finding density with simulation (rbinom)

Flip 10 coins 100,000 times. The rbinom function would generate 100,000 numbers. The largest number in the sequence would be 10. That is when 10 coins all turn out to be heads through one experiment and therefore 10 times 1 which is 10.

flips<-rbinom(100000,10,0.5)
sum<-sum(flips==5)
length.flips<-length(flips)
sum
[1] 24576
length.flips
[1] 100000
sum/length
[1] 0.24576
mean(flips==5) # mean is equal to sum/length
[1] 0.24576

Calculating exact probability density (dbinom)

The probablity of getting a 5 when flipping 10 coins with probability of 0.5

dbinom(5,10,0.5)

Calculating cumulative density (pbinom)

The probabilit of getting a number no larger than 4 when flipping 10 coins with probability of 0.5.

Method 1 - calculating it through simulation

flips<-rbinom(100000,10,0.5)
mean(flips<=4)

Method 2 - calculating cumulative density using pbinom

pbinom(4,10,0.5)

Exercise

If you flip 10 coins each with a 30% probability of coming up heads, what is the probability exactly 2 of them are heads?

Answer the above question using the dbinom() function. This function takes almost the same arguments as rbinom(). The second and third arguments are size and prob, but now the first argument is x instead of n. Use x to specify where you want to evaluate the binomial density.

Confirm your answer using the rbinom() function by creating a simulation of 10,000 trials. Put this all on one line by wrapping the mean() function around the rbinom() function.

Calculate the probability that 2 are heads using dbinom

dbinom(2,10,0.3)

Confirm your answer with a simulation using rbinom

mean(rbinom(10000,10,0.3)==2)

Exercise

If you flip ten coins that each have a 30% probability of heads, what is the probability at least five are heads? If you flip ten coins that each have a 30% probability of heads, what is the probability at least five are heads?

Answer the above question using the pbinom() function. (Note that you can compute the probability that the number of heads is less than or equal to 4, then take 1 - that probability).

Confirm your answer with a simulation of 10,000 trials by finding the number of trials that result in 5 or more heads.

1 - pbinom(4, 10, .3)

mean(rbinom(10000, 10, .3) >= 5)

Varying the number of trials

In the last exercise you tried flipping ten coins with a 30% probability of heads to find the probability at least five are heads. You found that the exact answer was 1 - pbinom(4, 10, .3) = 0.1502683, then confirmed with 10,000 simulated trials.

Did you need all 10,000 trials to get an accurate answer? Would your answer have been more accurate with more trials? Try answering this question with simulations of 100, 1,000, 10,000, 100,000 trials. Which is the closest to the exact answer?

mean(rbinom(10000, 10, .3) >= 5)
mean(rbinom(100, 10, .3) >= 5)
mean(rbinom(1000, 10, .3) >= 5)
mean(rbinom(100000, 10, .3) >= 5)

Expected Value

The expected value of a binomial distribution by multiplying the size (or the number of coins), by the probability each is heads.

Exercise

Calculating the expected value What is the expected value of a binomial distribution where 25 coins are flipped, each having a 30% chance of heads?

Step1 - Calculate this using the exact formula you learned in the lecture: the expected value of the binomial is size * p. Print this result to the screen.

Step2 - Confirm with a simulation of 10,000 draws from the binomial.

25*0.3

mean(rbinom(10000,25,0.3))

Calculating the variance What is the variance of a binomial distribution where 25 coins are flipped, each having a 30% chance of heads? Step1 - Calculate this using the exact formula you learned in the lecture: the variance of the binomial is size * p * (1 - p). Print this result to the screen. Step2 - Confirm with a simulation of 10,000 trials.

# Calculate the variance using the exact formula
25*0.3*(1-0.3)
# Confirm with a simulation using rbinom
var(rbinom(10000,25,0.3))

Joint Probility

The probability of A and B is the probability of A times the probability of B. Note that this is true only if events A and B are independent: that is if reresult of A does not affect the probability of B.

Simulating the probability of A and B

You can also use simulation to estimate the probability of two events both happening. Randomly simulate 100,000 flips of coin A, each of which has a 40% chance of being heads. Save this as a variable A. Randomly simulate 100,000 flips of coin B, each of which has a 20% chance of being heads. Save this as a variable B. Use the “and” operator (&) to combine the variables A and B to estimate the probability that both A and B are heads.

# Simulate 100,000 flips of a coin with a 40% chance of heads
A <- rbinom(100000,1,0.4)
# Simulate 100,000 flips of a coin with a 20% chance of heads
B <- rbinom(100000,1,0.2)
# Estimate the probability both A and B are heads
mean (A & B)

Simulating the probability of A, B, and C

Randomly simulate 100,000 flips of A (40% chance), B (20% chance), and C (70% chance). What fraction of the time do all three coins come up heads? * You’ve already simulated A and B. Now simulate 100,000 flips of coin C, where each has a 70% chance of coming up heads. * Use A, B, and C to estimate the probability that all three coins would come up heads.

# You've already simulated 100,000 flips of coins A and B
A <- rbinom(100000, 1, .4)
B <- rbinom(100000, 1, .2)
# Simulate 100,000 flips of coin C (70% chance of heads)
C<-rbinom(100000,1,0.7)
# Estimate the probability A, B, and C are all heads
mean(A&B&C)

Solving for probability of A or B

If coins A and B are independent, and A has a 60% chance of coming up heads, and event B has a 10% chance of coming up heads, what is the probability either A or B will come up heads?

References

LS0tDQp0aXRsZTogIkZvdW5kYXRpb25zIG9mIFByb2JhYmlsaXR5IGluIFIiDQphdXRob3I6IFlhbiBMaQ0KZGF0ZTogMTMgSnVuZSAyMDIwDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIGNvZGVfZm9sZGluZzogbm9uZQ0KLS0tDQoNCiMjIyBTZWN0aW9uIEkgLSBTZXQgdGhlb3J5IGFuZCBQcm9iYWJpbGl0eQ0KDQo8YnI+DQoNCioqRGVmaW5pdGlvbioqLiBBIHNldCBpcyBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyB0aG91Z2h0IG9mIGFzIGEgd2hvbGUuIFRoZSBvYmplY3RzLCBvZiB3aGljaCB0aGUgc2V0IGlzIGEgY29sbGVjdGlvbiwgYXJlIGNhbGxlZCBkZWxlbWVudHMgb3IgbWVtYmVycyBvZiB0aGUgc2V0Lg0KDQo8YnI+DQoNCiMjIyMgU2FtcGxlIHNwYWNlcyBhbmQgZXZlbnRzDQpUaGUgcHJvYmFiaWxpdGllcyB0byByZWZlciB0byB0aGUgcG9zc2libGUgb3V0Y29tZXMgb2YgY2VydGluIGV4cGVyaW1lbnRzIG9yIG9ic2VydmF0aW9ucy4NClRoZSBwcm9iYWJpbGl0eSBtb2RlbCB3aWxsIGJlIHNlZW4gdG8gaW52b2x2ZSB0d28gdGhpbmdzOg0KKiBjaG9vc2luZyBhIHNldCB0byByZXByZXNlbnQgdGhlIHBvc3NpYmxlIG91dGNvbWVzOw0KKiBhbmQgYWxsb2NhdGluZyBwcm9iYWJpbGl0aWVzIHRvIHRoZXNlIHBvc3NpYmxlIG91dGNvbWVzLg0KDQo8YnI+DQoNCiMjIyMgU2V0dGluZyB1cCBhIHNhbXBsZSBzcGFjZSBTIG9mIGFsbCBwb3NzaWJsZSBvdXRjb21lcw0KSWYgd2Ugd2FudCB0byBjb25zdHJ1Y3QgYW4gYWJzdHJhY3QgbW9kZWwsIHdlIG11c3QgZGVjaWRlIHdoYXQgY29uc3RpdHV0ZXMgYSBwb3NzaWJsZSBleHBlcmltZW50LiBUaGUgcG9zc2libGUgb3V0Y29tZXMgZGVmaW5lIHRoZSBpZGVhbGl6ZWQgZXhwZXJpbWVudCBhbmQgdGhleSBhcmUgdXN1YWxseSBjYWxsZWQgc2FtcGxlIHBvaW50cy4NCg0KVGhlIGNvbGxlY3Rpb24gb2YgYWxsIHNhbXBsZSBwb2ludHMgaXMgY2FsbGVkIHRoZSBzYW1wbGUgc3BhY2UgUyBvZiB0aGUgbW9kZWwuDQoNClRoZSBub3Rpb24gb2YgZXZlbnQgY2FuIG5vdyBiZSBpbnRyb2R1Y2VkLiBBbiBldmVudCBpcyBhIHN1YnNldCBvZiBTLiBBbiBldmVudCBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBzYW1wbGUgcG9pbnRzLiBIZW5jZSBhbiBldmVudCBpcyBhIHN1YnNldCwgYW5kIGl0IGlzIG5vdCBhbiBlbGVtZW50LiANCg0KPGJyPg0KDQojIyMjIFRoZSBhbGxvY2F0aW9uIG9mIHByb2JhYmlsaXRpZXMgdG8gdGhlIGVsZW1lbnRzIG9mIGEgc2FtcGxlIHNwYWNlDQpMZXQgdGhlIHNhbXBsZSBzcGFjZSBTIGJlIHRoZSBzZXQNCg0KJFM9XHtlXzEsIGVfMiwgLi4uXH09RV8xIFxjdXAgRV8yIFxjdXAgLi4uLCQNCg0Kd2hlcmUgJEVfaSA9IFx7ZV8xXH0kIGFyZSB0aGUgc2ltcGxlIGV2ZW50cyBpbiBTLiBUaGVuIHdlIGFzc3VtZSB0aGF0IHRvIGVhY2ggZXZlbnQgRSBpbiBTIHdlIGNhbiBhc3NpZ24gYSBub24tbmVnYXRpdmUgcmVhbCBudWJlciBQW0VdLCBjYWxsZWQgdGhlIHByb2JhYmlsaXR5IG9mIEUuIA0KDQo8YnI+DQoNCiMjIyMgKipBeGlvbXMgZm9yIHByb2JhYmlsaXR5KioNCjEuIFBbRV0+PTAgZm9yIGV2ZXJ5IGV2ZW50IEUuDQoyLiBQW1NdPTEgZm9yIHRoZSBjZXJ0YWluIGV2ZW50IFMuDQozLiBUaGUgcHJvYmFiaWxpdHkgUFtBXSBvZiBhbnkgZXZlbnQgQSBpcyB0aGUgc3VtIG9mIHRoZSBwcm9iYWJpbGl0aWVzIG9mIHRoZSBzaW1wbGUgZXZlbnRzIHdob3NlIHVuaW9uIGlzIEEuDQoNCklmIHRoZSBzYW1wbGUgc3BhY2UgUyBpcyB0aGUgdW5pb24gb2YgdGhlIGRpc3RpbmN0IHNpbXBsZSBldmVudHMgJEVfMSwgRV8yLC4uLiwkIGl0IGZvbGxvd3MgZnJvbSBheGlvbXMgSUkgYW5kIElJSSB0aGF0IA0KJFBbU109UFtFXzFdK1BbRV8yXSsuLi49MSQuDQoNCkFuIGltcG9ydGFudCBjb25zZXF1ZW5jZSBvZiBBeGlvbSBJSUkgaXMgdGhhdCBpZiBFIGFuZCBGIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgZXZlbnRzLCBzbyB0aGF0ICRFIFxjYXAgRiA9IFx2YXJub3RoaW5nJCAsIHRoZW4NCiRQW0UgXGNhcCBGXSA9IFBbRV0rUFtGXSQuDQoNCjxicj4NCg0KIyMjIyAqKlRoZW9yZW0gMSoqLiAkUFtcdmFybm90aGluZ109MCQsIHdoZXJlICRcdmFybm90aGluZyQgaXMgdGhlIGVtcHR5IHNldC4NCg0KIyMjIyAqKlRoZW9yZW0gMioqLiAkUFtFIFxjYXAgRiddID0gUFtFXSAtIFBbRl0kDQoNCiMjIyMgKipUaGVvcmVtIDMqKi4gJFBbRiddPTEtUFtGXSQNCg0KIyMjIyAqKlRoZW9yZW0gNCoqLiAkUFtFIFxjdXAgRl0gPSBQW0VdICsgUFtGXSAtIFBbRSBcY2FwIEZdJC4NCg0KPGJyPg0KDQojIyMjIENvbmRpdGlvbmFsIHByb2JhYmlsaXR5DQpEZWZpbml0aW9uLiBUaGUgY29uZGl0aW9uYWwgcHJvYWJpbGl0eSBvZiBCLCBnaXZlbiBBLCBpcyBkZWZpbmVkIHRvIGJlIA0KJFAoQiBcbWlkIEEpID0gXGZyYWN7UFtCIFxjYXAgQV19e3BbQV19JCwNCnByb3ZpZGVkIHRoYXQgJFBbQV0hPTAkLg0KDQo8YnI+DQoNCiMjIyMgSWRlcGVuZGVudCBldmVudHMNCkRlZmluaXRpb24uIFRoZSBldmVudHMgQSBhbmQgQiBhcmUgc2FpZCB0byBiZSBpbmRlcGVuZGVudCBpZiBhbmQgb25seSBpZg0KJFBbQSBcY3VwIEJdID0gUFtBXVBbQl0kLg0KDQpVc2luZyB0aGUgZGVmaW5pdGlvbiBvZiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eSwgaXQgaW1wbGllcyB0aGF0IA0KJFBbQiBcbWlkIEFdID0gUFtCXSQgYW5kICRQW0EgXG1pZCBCXSA9IFBbQV0kIA0KDQo8YnI+DQoNCjwhLS0gU2Vjb25kIHBhZ2UgLS0+IA0KPCEtLSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCg0KIyMjIFNlY3Rpb24gSUkgLSBCaW5vbWlhbCBkaXN0cmlidXRpb24NCg0KPGJyPg0KDQpEZWZpbml0aW9uLiANCg0KIyMjIyBGaW5kaW5nIGRlbnNpdHkgd2l0aCBzaW11bGF0aW9uIChyYmlub20pDQpGbGlwIDEwIGNvaW5zIDEwMCwwMDAgdGltZXMuIFRoZSByYmlub20gZnVuY3Rpb24gd291bGQgZ2VuZXJhdGUgMTAwLDAwMCBudW1iZXJzLiBUaGUgbGFyZ2VzdCBudW1iZXIgaW4gdGhlIHNlcXVlbmNlIHdvdWxkIGJlIDEwLiBUaGF0IGlzIHdoZW4gMTAgY29pbnMgYWxsIHR1cm4gb3V0IHRvIGJlIGhlYWRzIHRocm91Z2ggb25lIGV4cGVyaW1lbnQgYW5kIHRoZXJlZm9yZSAxMCB0aW1lcyAxIHdoaWNoIGlzIDEwLg0KDQpgYGB7ciBlY2hvPVRSVUUsIGVycm9yPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBjb2xsYXBzZT1UUlVFfQ0KZmxpcHM8LXJiaW5vbSgxMDAwMDAsMTAsMC41KQ0Kc3VtPC1zdW0oZmxpcHM9PTUpDQpsZW5ndGguZmxpcHM8LWxlbmd0aChmbGlwcykNCnN1bQ0KbGVuZ3RoLmZsaXBzDQpzdW0vbGVuZ3RoDQptZWFuKGZsaXBzPT01KSAjIG1lYW4gaXMgZXF1YWwgdG8gc3VtL2xlbmd0aA0KDQoNCmBgYA0KDQojIyMjIENhbGN1bGF0aW5nIGV4YWN0IHByb2JhYmlsaXR5IGRlbnNpdHkgKGRiaW5vbSkNCg0KVGhlIHByb2JhYmxpdHkgb2YgZ2V0dGluZyBhIDUgd2hlbiBmbGlwcGluZyAxMCBjb2lucyB3aXRoIHByb2JhYmlsaXR5IG9mIDAuNQ0KYGBge3J9DQpkYmlub20oNSwxMCwwLjUpDQpgYGANCg0KDQojIyMjIENhbGN1bGF0aW5nIGN1bXVsYXRpdmUgZGVuc2l0eSAocGJpbm9tKQ0KDQpUaGUgcHJvYmFiaWxpdCBvZiBnZXR0aW5nIGEgbnVtYmVyIG5vIGxhcmdlciB0aGFuIDQgd2hlbiBmbGlwcGluZyAxMCBjb2lucyB3aXRoIHByb2JhYmlsaXR5IG9mIDAuNS4NCg0KTWV0aG9kIDEgLSBjYWxjdWxhdGluZyBpdCB0aHJvdWdoIHNpbXVsYXRpb24NCmBgYHtyfQ0KZmxpcHM8LXJiaW5vbSgxMDAwMDAsMTAsMC41KQ0KbWVhbihmbGlwczw9NCkNCmBgYA0KDQpNZXRob2QgMiAtIGNhbGN1bGF0aW5nIGN1bXVsYXRpdmUgZGVuc2l0eSB1c2luZyBwYmlub20NCmBgYHtyfQ0KcGJpbm9tKDQsMTAsMC41KQ0KYGBgDQoNCiMjIyMgRXhlcmNpc2UNCklmIHlvdSBmbGlwIDEwIGNvaW5zIGVhY2ggd2l0aCBhIDMwJSBwcm9iYWJpbGl0eSBvZiBjb21pbmcgdXAgaGVhZHMsIHdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IGV4YWN0bHkgMiBvZiB0aGVtIGFyZSBoZWFkcz8NCg0KQW5zd2VyIHRoZSBhYm92ZSBxdWVzdGlvbiB1c2luZyB0aGUgZGJpbm9tKCkgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gdGFrZXMgYWxtb3N0IHRoZSBzYW1lIGFyZ3VtZW50cyBhcyByYmlub20oKS4gVGhlIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIGFyZSBzaXplIGFuZCBwcm9iLCBidXQgbm93IHRoZSBmaXJzdCBhcmd1bWVudCBpcyB4IGluc3RlYWQgb2Ygbi4gVXNlIHggdG8gc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCB0byBldmFsdWF0ZSB0aGUgYmlub21pYWwgZGVuc2l0eS4NCg0KQ29uZmlybSB5b3VyIGFuc3dlciB1c2luZyB0aGUgcmJpbm9tKCkgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSBzaW11bGF0aW9uIG9mIDEwLDAwMCB0cmlhbHMuIFB1dCB0aGlzIGFsbCBvbiBvbmUgbGluZSBieSB3cmFwcGluZyB0aGUgbWVhbigpIGZ1bmN0aW9uIGFyb3VuZCB0aGUgcmJpbm9tKCkgZnVuY3Rpb24uDQoNCiMjIyMgQ2FsY3VsYXRlIHRoZSBwcm9iYWJpbGl0eSB0aGF0IDIgYXJlIGhlYWRzIHVzaW5nIGRiaW5vbQ0KYGBge3J9DQpkYmlub20oMiwxMCwwLjMpDQpgYGANCiMjIyMgQ29uZmlybSB5b3VyIGFuc3dlciB3aXRoIGEgc2ltdWxhdGlvbiB1c2luZyByYmlub20NCmBgYHtyfQ0KbWVhbihyYmlub20oMTAwMDAsMTAsMC4zKT09MikNCmBgYA0KDQojIyMgRXhlcmNpc2UNCklmIHlvdSBmbGlwIHRlbiBjb2lucyB0aGF0IGVhY2ggaGF2ZSBhIDMwJSBwcm9iYWJpbGl0eSBvZiBoZWFkcywgd2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgYXQgbGVhc3QgZml2ZSBhcmUgaGVhZHM/DQpJZiB5b3UgZmxpcCB0ZW4gY29pbnMgdGhhdCBlYWNoIGhhdmUgYSAzMCUgcHJvYmFiaWxpdHkgb2YgaGVhZHMsIHdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IGF0IGxlYXN0IGZpdmUgYXJlIGhlYWRzPw0KDQpBbnN3ZXIgdGhlIGFib3ZlIHF1ZXN0aW9uIHVzaW5nIHRoZSBwYmlub20oKSBmdW5jdGlvbi4gKE5vdGUgdGhhdCB5b3UgY2FuIGNvbXB1dGUgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIG51bWJlciBvZiBoZWFkcyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCwgdGhlbiB0YWtlIDEgLSB0aGF0IHByb2JhYmlsaXR5KS4NCg0KQ29uZmlybSB5b3VyIGFuc3dlciB3aXRoIGEgc2ltdWxhdGlvbiBvZiAxMCwwMDAgdHJpYWxzIGJ5IGZpbmRpbmcgdGhlIG51bWJlciBvZiB0cmlhbHMgdGhhdCByZXN1bHQgaW4gNSBvciBtb3JlIGhlYWRzLg0KDQpgYGB7cn0NCjEgLSBwYmlub20oNCwgMTAsIC4zKQ0KDQptZWFuKHJiaW5vbSgxMDAwMCwgMTAsIC4zKSA+PSA1KQ0KDQpgYGANCg0KIyMjIFZhcnlpbmcgdGhlIG51bWJlciBvZiB0cmlhbHMNCg0KSW4gdGhlIGxhc3QgZXhlcmNpc2UgeW91IHRyaWVkIGZsaXBwaW5nIHRlbiBjb2lucyB3aXRoIGEgMzAlIHByb2JhYmlsaXR5IG9mIGhlYWRzIHRvIGZpbmQgdGhlIHByb2JhYmlsaXR5IGF0IGxlYXN0IGZpdmUgYXJlIGhlYWRzLiBZb3UgZm91bmQgdGhhdCB0aGUgZXhhY3QgYW5zd2VyIHdhcyAxIC0gcGJpbm9tKDQsIDEwLCAuMykgPSAwLjE1MDI2ODMsIHRoZW4gY29uZmlybWVkIHdpdGggMTAsMDAwIHNpbXVsYXRlZCB0cmlhbHMuDQoNCkRpZCB5b3UgbmVlZCBhbGwgMTAsMDAwIHRyaWFscyB0byBnZXQgYW4gYWNjdXJhdGUgYW5zd2VyPyBXb3VsZCB5b3VyIGFuc3dlciBoYXZlIGJlZW4gbW9yZSBhY2N1cmF0ZSB3aXRoIG1vcmUgdHJpYWxzPw0KVHJ5IGFuc3dlcmluZyB0aGlzIHF1ZXN0aW9uIHdpdGggc2ltdWxhdGlvbnMgb2YgMTAwLCAxLDAwMCwgMTAsMDAwLCAxMDAsMDAwIHRyaWFscy4NCldoaWNoIGlzIHRoZSBjbG9zZXN0IHRvIHRoZSBleGFjdCBhbnN3ZXI/DQoNCmBgYHtyfQ0KbWVhbihyYmlub20oMTAwMDAsIDEwLCAuMykgPj0gNSkNCm1lYW4ocmJpbm9tKDEwMCwgMTAsIC4zKSA+PSA1KQ0KbWVhbihyYmlub20oMTAwMCwgMTAsIC4zKSA+PSA1KQ0KbWVhbihyYmlub20oMTAwMDAwLCAxMCwgLjMpID49IDUpDQoNCmBgYA0KIyMjIEV4cGVjdGVkIFZhbHVlDQpUaGUgZXhwZWN0ZWQgdmFsdWUgb2YgYSBiaW5vbWlhbCBkaXN0cmlidXRpb24gYnkgbXVsdGlwbHlpbmcgdGhlIHNpemUgKG9yIHRoZSBudW1iZXIgb2YgY29pbnMpLCBieSB0aGUgcHJvYmFiaWxpdHkgZWFjaCBpcyBoZWFkcy4gDQoNCiMjIyBFeGVyY2lzZQ0KQ2FsY3VsYXRpbmcgdGhlIGV4cGVjdGVkIHZhbHVlDQpXaGF0IGlzIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiBhIGJpbm9taWFsIGRpc3RyaWJ1dGlvbiB3aGVyZSAyNSBjb2lucyBhcmUgZmxpcHBlZCwgZWFjaCBoYXZpbmcgYSAzMCUgY2hhbmNlIG9mIGhlYWRzPw0KDQpTdGVwMSAtIENhbGN1bGF0ZSB0aGlzIHVzaW5nIHRoZSBleGFjdCBmb3JtdWxhIHlvdSBsZWFybmVkIGluIHRoZSBsZWN0dXJlOiB0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgdGhlIGJpbm9taWFsIGlzIHNpemUgKiBwLiBQcmludCB0aGlzIHJlc3VsdCB0byB0aGUgc2NyZWVuLg0KDQpTdGVwMiAtIAlDb25maXJtIHdpdGggYSBzaW11bGF0aW9uIG9mIDEwLDAwMCBkcmF3cyBmcm9tIHRoZSBiaW5vbWlhbC4NCg0KYGBge3J9DQoyNSowLjMNCg0KbWVhbihyYmlub20oMTAwMDAsMjUsMC4zKSkNCg0KYGBgDQpDYWxjdWxhdGluZyB0aGUgdmFyaWFuY2UNCldoYXQgaXMgdGhlIHZhcmlhbmNlIG9mIGEgYmlub21pYWwgZGlzdHJpYnV0aW9uIHdoZXJlIDI1IGNvaW5zIGFyZSBmbGlwcGVkLCBlYWNoIGhhdmluZyBhIDMwJSBjaGFuY2Ugb2YgaGVhZHM/DQpTdGVwMSAtIENhbGN1bGF0ZSB0aGlzIHVzaW5nIHRoZSBleGFjdCBmb3JtdWxhIHlvdSBsZWFybmVkIGluIHRoZSBsZWN0dXJlOiB0aGUgdmFyaWFuY2Ugb2YgdGhlIGJpbm9taWFsIGlzIHNpemUgKiBwICogKDEgLSBwKS4gUHJpbnQgdGhpcyByZXN1bHQgdG8gdGhlIHNjcmVlbi4NClN0ZXAyIC0JQ29uZmlybSB3aXRoIGEgc2ltdWxhdGlvbiBvZiAxMCwwMDAgdHJpYWxzLg0KDQpgYGB7cn0NCiMgQ2FsY3VsYXRlIHRoZSB2YXJpYW5jZSB1c2luZyB0aGUgZXhhY3QgZm9ybXVsYQ0KMjUqMC4zKigxLTAuMykNCiMgQ29uZmlybSB3aXRoIGEgc2ltdWxhdGlvbiB1c2luZyByYmlub20NCnZhcihyYmlub20oMTAwMDAsMjUsMC4zKSkNCg0KYGBgDQoNCiMjIyBKb2ludCBQcm9iaWxpdHkNClRoZSBwcm9iYWJpbGl0eSBvZiBBIGFuZCBCIGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBBIHRpbWVzIHRoZSBwcm9iYWJpbGl0eSBvZiBCLiANCk5vdGUgdGhhdCB0aGlzIGlzIHRydWUgb25seSBpZiBldmVudHMgQSBhbmQgQiBhcmUgaW5kZXBlbmRlbnQ6IHRoYXQgaXMgaWYgcmVyZXN1bHQgb2YgQSBkb2VzIG5vdCBhZmZlY3QgdGhlIHByb2JhYmlsaXR5IG9mIEIuDQoNCiMjIyMgU2ltdWxhdGluZyB0aGUgcHJvYmFiaWxpdHkgb2YgQSBhbmQgQg0KWW91IGNhbiBhbHNvIHVzZSBzaW11bGF0aW9uIHRvIGVzdGltYXRlIHRoZSBwcm9iYWJpbGl0eSBvZiB0d28gZXZlbnRzIGJvdGggaGFwcGVuaW5nLg0KUmFuZG9tbHkgc2ltdWxhdGUgMTAwLDAwMCBmbGlwcyBvZiBjb2luIEEsIGVhY2ggb2Ygd2hpY2ggaGFzIGEgNDAlIGNoYW5jZSBvZiBiZWluZyBoZWFkcy4gU2F2ZSB0aGlzIGFzIGEgdmFyaWFibGUgQS4NClJhbmRvbWx5IHNpbXVsYXRlIDEwMCwwMDAgZmxpcHMgb2YgY29pbiBCLCBlYWNoIG9mIHdoaWNoIGhhcyBhIDIwJSBjaGFuY2Ugb2YgYmVpbmcgaGVhZHMuIFNhdmUgdGhpcyBhcyBhIHZhcmlhYmxlIEIuDQpVc2UgdGhlICJhbmQiIG9wZXJhdG9yICgmKSB0byBjb21iaW5lIHRoZSB2YXJpYWJsZXMgQSBhbmQgQiB0byBlc3RpbWF0ZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCBib3RoIEEgYW5kIEIgYXJlIGhlYWRzLg0KDQoNCmBgYHtyfQ0KIyBTaW11bGF0ZSAxMDAsMDAwIGZsaXBzIG9mIGEgY29pbiB3aXRoIGEgNDAlIGNoYW5jZSBvZiBoZWFkcw0KQSA8LSByYmlub20oMTAwMDAwLDEsMC40KQ0KIyBTaW11bGF0ZSAxMDAsMDAwIGZsaXBzIG9mIGEgY29pbiB3aXRoIGEgMjAlIGNoYW5jZSBvZiBoZWFkcw0KQiA8LSByYmlub20oMTAwMDAwLDEsMC4yKQ0KIyBFc3RpbWF0ZSB0aGUgcHJvYmFiaWxpdHkgYm90aCBBIGFuZCBCIGFyZSBoZWFkcw0KbWVhbiAoQSAmIEIpDQoNCmBgYA0KDQojIyMjIFNpbXVsYXRpbmcgdGhlIHByb2JhYmlsaXR5IG9mIEEsIEIsIGFuZCBDDQoNClJhbmRvbWx5IHNpbXVsYXRlIDEwMCwwMDAgZmxpcHMgb2YgQSAoNDAlIGNoYW5jZSksIEIgKDIwJSBjaGFuY2UpLCBhbmQgQyAoNzAlIGNoYW5jZSkuIFdoYXQgZnJhY3Rpb24gb2YgdGhlIHRpbWUgZG8gYWxsIHRocmVlIGNvaW5zIGNvbWUgdXAgaGVhZHM/DQoqIFlvdSd2ZSBhbHJlYWR5IHNpbXVsYXRlZCBBIGFuZCBCLiBOb3cgc2ltdWxhdGUgMTAwLDAwMCBmbGlwcyBvZiBjb2luIEMsIHdoZXJlIGVhY2ggaGFzIGEgNzAlIGNoYW5jZSBvZiBjb21pbmcgdXAgaGVhZHMuDQoqIFVzZSBBLCBCLCBhbmQgQyB0byBlc3RpbWF0ZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhbGwgdGhyZWUgY29pbnMgd291bGQgY29tZSB1cCBoZWFkcy4NCg0KYGBge3J9DQojIFlvdSd2ZSBhbHJlYWR5IHNpbXVsYXRlZCAxMDAsMDAwIGZsaXBzIG9mIGNvaW5zIEEgYW5kIEINCkEgPC0gcmJpbm9tKDEwMDAwMCwgMSwgLjQpDQpCIDwtIHJiaW5vbSgxMDAwMDAsIDEsIC4yKQ0KIyBTaW11bGF0ZSAxMDAsMDAwIGZsaXBzIG9mIGNvaW4gQyAoNzAlIGNoYW5jZSBvZiBoZWFkcykNCkM8LXJiaW5vbSgxMDAwMDAsMSwwLjcpDQojIEVzdGltYXRlIHRoZSBwcm9iYWJpbGl0eSBBLCBCLCBhbmQgQyBhcmUgYWxsIGhlYWRzDQptZWFuKEEmQiZDKQ0KDQpgYGANCg0KIyMjIyBTb2x2aW5nIGZvciBwcm9iYWJpbGl0eSBvZiBBIG9yIEINCg0KSWYgY29pbnMgQSBhbmQgQiBhcmUgaW5kZXBlbmRlbnQsIGFuZCBBIGhhcyBhIDYwJSBjaGFuY2Ugb2YgY29taW5nIHVwIGhlYWRzLCBhbmQgZXZlbnQgQiBoYXMgYSAxMCUgY2hhbmNlIG9mIGNvbWluZyB1cCBoZWFkcywgd2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgZWl0aGVyIEEgb3IgQiB3aWxsIGNvbWUgdXAgaGVhZHM/DQoNCiMgUmVmZXJlbmNlcw0K