Entanglement is the weirdest feature of quantum mechanics. David Mermin (1981) provides an accessible introduction to experiments showing that local determinism doesn’t hold in the quantum world, simplifying Bell’s theorem and tests thereof. This post shows the sums in R.

First, a diagram of the setup (Mermin, 1981, p. 400):

We have a device, C, that fires out two particles to detectors A and B that are far apart from each other. The detectors have three measurement settings, 1, 2, and 3, and two lights, red (R) and green (G), which indicate the measurement outcome. A and B do not communicate with each other in any way and it is assumed that the measurement settings are independent of each other.

If you can read bra–ket notation, then the quantum state of the particles fired out by C is the entangled Bell state, \(|\Phi^+\rangle\):

\[|\Phi^+\rangle = \frac{|R\rangle_A \otimes |R\rangle_B + |G\rangle_A \otimes |G\rangle_B}{\sqrt{2}}\]

This means that when the measurement settings on A and B are the same, e.g., both 1 or both 2, then the same lights always flash on A and B when the particles arrive. They are either both red or both green, with equal probability. If the measurement settings are different then, as we see later, sometimes the lights flash the same colour and other times they flash different colours.

One way to make this work is to assume the particles somehow encode what the measurement outcome will be for each of the three settings and that this drives the long-distance correlations (local determinism), it’s just that this encoding is generally hidden from experimenters. The particles heading left and right would then encode the same information. We can write this as a three-character string. RGR would denote that the outcome is red for setting 1, green for setting 2, and red for setting 3.

Given this encoding, it’s easy to see how the same light can flash at the two detectors when the measurement settings are the same. Measurement is equivalent to looking up the encoding and reading off the colour corresponding to the measurement setting.

Now suppose each measurement setting is chosen randomly with equal probability and the settings at A and B are independent. What happens when the settings are different?

Here’s the setup: a and b give the measurement settings at A and B. o1, o2, and o3, give the outcome for the three measurement settings, so concatenating them together gives the three-character string, hidden. The R code below generates all \(8 \times 9 = 72\) possibilities from the \(2^3 = 8\) possible particle setups and the \(3^2 = 9\) different combinations of measurement settings at A and B.

library(tidyverse)
dat <- expand.grid(
  a = 1:3,
  b = 1:3,
  o1 = c("R", "G"),
  o2 = c("R", "G"),
  o3 = c("R", "G")
) |>
  mutate(A = case_when(a == 1 ~ o1,
                       a == 2 ~ o2,
                       a == 3 ~ o3),
         B = case_when(b == 1 ~ o1,
                       b == 2 ~ o2,
                       b == 3 ~ o3),
         hidden = paste0(o1, o2, o3),
         same = A == B)
dat |> select(-c(o1,o2,o3))

Now we can see how the probability of getting the same outcome depends on whether the measurement settings are the same:

dat |>
  group_by(a == b) |>
  summarise(`P(Same outcome)` = mean(same))

The outcomes are always the same if the settings are the same and have a 50–50 chance of being the same if the settings are different. This differs from the predictions of quantum mechanics and empirical findings from actual experiments.

To see this, let’s view the entangled particles fired from C as qubits, abstracting from Mermin’s discussion of spin-1/2 particles and Stern–Gerlach magnets. The measurement settings of A and B are then implemented as rotating the qubit entering the detector about the y-axis using an RY gate. After this rotation, we measure using the computational basis.

Here’s a quantum circuit with example settings:

The circuit for C establishes a Bell state by using a Hadmard gate and CNOT.

The probability that the outcomes are the same at A and B is given by \(\cos^2(\theta/2)\), where \(\theta\) is the difference between angles of rotations at A and B. (We’re squaring because Born rule.)

Following Mermin (1981), we choose angles \(0^{\circ}\), \(-120^{\circ}\), and \(120^{\circ}\) for the three measurement settings. ang_diff gives the difference in the angles in degrees; ang_diff_rads is the same in radians.

Here is a table of the outcomes:

dat_actual <- expand.grid(a = c(-120,0,120), b = c(-120,0,120)) |>
  mutate(ang_diff          = b - a,
         ang_diff_rads     = (ang_diff/360) * 2 * pi,
         `P(Same outcome)` = cos(ang_diff_rads/2)^2)
dat_actual |> 
  select(-ang_diff_rads) |>
  arrange(abs(ang_diff), a)

When the settings are the same at A and B, the findings agree with local determinism: the lights always flash the same colour. However, when the settings are different, the lights are the same colour on only \(1/4\) of trials. This is lower than the \(1/2\) predicted by the local determinism setup, so something else is going on. Local determinism is false.

I gave the circuit above a go on an IBM Quantum computer (ibmq_jakarta). The measurement outcomes were the same on 26.6% of 1,000 trials, 95% CI = [23.9%, 29.5%]. This confidence interval includes the prediction of quantum mechanics and is well below 50%.

There are values of \(\theta\) for which the local determinism predictions do work, e.g., \(\frac{\pi}{2}\) radians = \(90^{\circ}\):

cos((pi/2)/2)^2
[1] 0.5

But that clearly doesn’t rescue it.

More generally, here’s what \(\cos^2(\theta/2)\) looks like:

ggplot() +
  geom_function(fun = \(x) cos(((x / 360) * 2 * pi) / 2) ^ 2) +
  scale_y_continuous(breaks = seq(0, 1, .25)) +
  scale_x_continuous(breaks = c(seq(-360, 360, 90),
                                seq(-240, 240, 120)),
                     limits = c(-360, 360)) +
  labs(x = expression(theta), y = "P(Same outcome)")

Suppose I’m sitting beside detector A and detector B is light years away. Suppose also that I hold my measurement setting constant, so any variation in \(\theta\) is driven by the setting over at B. The measurement outcomes from repeated trials I get here depend on the measurement settings way over there, and those settings have an effect apparently instantaneously.

Hossenfelder and Palmer (2020) would want to emphasise that this falsification of local determinism assumes that the measurement settings are statistically independent, which they argue isn’t true. Allowing the measurement settings to be correlated is known as superdeterminism.

References

Mermin, N. D. (1981). Quantum Mysteries for Anyone. The Journal of Philosophy, 78(7), 397–408.

Hossenfelder, S., & Palmer, T. (2020). Rethinking Superdeterminism. Frontiers in Physics, 8, 139.

LS0tDQp0aXRsZTogIk1lcm1pbidzICgxOTgxKSB2YXJpYW50IG9mIEJlbGwncyB0aGVvcmVtIC0tIGluIFIiDQphdXRob3I6ICdbQW5kaSBGdWdhcmRdKGh0dHBzOi8vd3d3LmFuZGlmdWdhcmQuaW5mbyknDQpkYXRlOiAiMjcgTWF5IDIwMjMgKGxhc3QgdHdlYWtlZCAxNyBKdW5lIDIwMjMpIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGNvZGVfZm9sZGluZzogbm9uZQ0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KLS0tDQoNCkVudGFuZ2xlbWVudCBpcyB0aGUgd2VpcmRlc3QgZmVhdHVyZSBvZiBxdWFudHVtIG1lY2hhbmljcy4gRGF2aWQgTWVybWluICgxOTgxKSBwcm92aWRlcyBhbiBhY2Nlc3NpYmxlIGludHJvZHVjdGlvbiB0byBleHBlcmltZW50cyBzaG93aW5nIHRoYXQgbG9jYWwgZGV0ZXJtaW5pc20gZG9lc24ndCBob2xkIGluIHRoZSBxdWFudHVtIHdvcmxkLCBzaW1wbGlmeWluZyBbQmVsbCdzIHRoZW9yZW1dKGh0dHBzOi8vcGxhdG8uc3RhbmZvcmQuZWR1L2VudHJpZXMvYmVsbC10aGVvcmVtLykgYW5kIHRlc3RzIHRoZXJlb2YuIFRoaXMgcG9zdCBzaG93cyB0aGUgc3VtcyBpbiBSLg0KDQpGaXJzdCwgYSBkaWFncmFtIG9mIHRoZSBzZXR1cCAoTWVybWluLCAxOTgxLCBwLiA0MDApOg0KDQohW10obWVybWluX2RldmljZS5wbmcpDQoNCg0KV2UgaGF2ZSBhIGRldmljZSwgKkMqLCB0aGF0IGZpcmVzIG91dCB0d28gcGFydGljbGVzIHRvIGRldGVjdG9ycyAqQSogYW5kICpCKiB0aGF0IGFyZSBmYXIgYXBhcnQgZnJvbSBlYWNoIG90aGVyLiBUaGUgZGV0ZWN0b3JzIGhhdmUgdGhyZWUgbWVhc3VyZW1lbnQgc2V0dGluZ3MsIDEsIDIsIGFuZCAzLCBhbmQgdHdvIGxpZ2h0cywgcmVkIChSKSBhbmQgZ3JlZW4gKEcpLCB3aGljaCBpbmRpY2F0ZSB0aGUgbWVhc3VyZW1lbnQgb3V0Y29tZS4gKkEqIGFuZCAqQiogZG8gbm90IGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciBpbiBhbnkgd2F5IGFuZCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLg0KDQpJZiB5b3UgY2FuIHJlYWQgYnJhLS1rZXQgbm90YXRpb24sIHRoZW4gdGhlIHF1YW50dW0gc3RhdGUgb2YgdGhlIHBhcnRpY2xlcyBmaXJlZCBvdXQgYnkgKkMqIGlzIHRoZSBlbnRhbmdsZWQgW0JlbGwgc3RhdGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JlbGxfc3RhdGUpLCAkfFxQaGleK1xyYW5nbGUkOg0KDQoNCiQkfFxQaGleK1xyYW5nbGUgPSBcZnJhY3t8UlxyYW5nbGVfQSBcb3RpbWVzIHxSXHJhbmdsZV9CICsgfEdccmFuZ2xlX0EgXG90aW1lcyB8R1xyYW5nbGVfQn17XHNxcnR7Mn19JCQNCg0KVGhpcyBtZWFucyB0aGF0IHdoZW4gdGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIG9uICpBKiBhbmQgKkIqIGFyZSB0aGUgc2FtZSwgZS5nLiwgYm90aCAxIG9yIGJvdGggMiwgdGhlbiB0aGUgc2FtZSBsaWdodHMgYWx3YXlzIGZsYXNoIG9uICpBKiBhbmQgKkIqIHdoZW4gdGhlIHBhcnRpY2xlcyBhcnJpdmUuIFRoZXkgYXJlIGVpdGhlciBib3RoIHJlZCBvciBib3RoIGdyZWVuLCB3aXRoIGVxdWFsIHByb2JhYmlsaXR5LiBJZiB0aGUgbWVhc3VyZW1lbnQgc2V0dGluZ3MgYXJlIGRpZmZlcmVudCB0aGVuLCBhcyB3ZSBzZWUgbGF0ZXIsIHNvbWV0aW1lcyB0aGUgbGlnaHRzIGZsYXNoIHRoZSBzYW1lIGNvbG91ciBhbmQgb3RoZXIgdGltZXMgdGhleSBmbGFzaCBkaWZmZXJlbnQgY29sb3Vycy4NCg0KT25lIHdheSB0byBtYWtlIHRoaXMgd29yayBpcyB0byBhc3N1bWUgdGhlIHBhcnRpY2xlcyBzb21laG93IGVuY29kZSB3aGF0IHRoZSBtZWFzdXJlbWVudCBvdXRjb21lIHdpbGwgYmUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHNldHRpbmdzIGFuZCB0aGF0IHRoaXMgZHJpdmVzIHRoZSBsb25nLWRpc3RhbmNlIGNvcnJlbGF0aW9ucyAobG9jYWwgZGV0ZXJtaW5pc20pLCBpdCdzIGp1c3QgdGhhdCB0aGlzIGVuY29kaW5nIGlzIGdlbmVyYWxseSBoaWRkZW4gZnJvbSBleHBlcmltZW50ZXJzLiBUaGUgcGFydGljbGVzIGhlYWRpbmcgbGVmdCBhbmQgcmlnaHQgd291bGQgdGhlbiBlbmNvZGUgdGhlIHNhbWUgaW5mb3JtYXRpb24uIFdlIGNhbiB3cml0ZSB0aGlzIGFzIGEgdGhyZWUtY2hhcmFjdGVyIHN0cmluZy4gKlJHUiogd291bGQgZGVub3RlIHRoYXQgdGhlIG91dGNvbWUgaXMgcmVkIGZvciBzZXR0aW5nIDEsIGdyZWVuIGZvciBzZXR0aW5nIDIsIGFuZCByZWQgZm9yIHNldHRpbmcgMy4NCg0KR2l2ZW4gdGhpcyBlbmNvZGluZywgaXQncyBlYXN5IHRvIHNlZSBob3cgdGhlIHNhbWUgbGlnaHQgY2FuIGZsYXNoIGF0IHRoZSB0d28gZGV0ZWN0b3JzIHdoZW4gdGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIGFyZSB0aGUgc2FtZS4gTWVhc3VyZW1lbnQgaXMgZXF1aXZhbGVudCB0byBsb29raW5nIHVwIHRoZSBlbmNvZGluZyBhbmQgcmVhZGluZyBvZmYgdGhlIGNvbG91ciBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZWFzdXJlbWVudCBzZXR0aW5nLg0KDQpOb3cgc3VwcG9zZSBlYWNoIG1lYXN1cmVtZW50IHNldHRpbmcgaXMgY2hvc2VuIHJhbmRvbWx5IHdpdGggZXF1YWwgcHJvYmFiaWxpdHkgYW5kIHRoZSBzZXR0aW5ncyBhdCAqQSogYW5kICpCKiBhcmUgaW5kZXBlbmRlbnQuIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgKmRpZmZlcmVudCo/DQoNCkhlcmUncyB0aGUgc2V0dXA6IDx0dD5hPC90dD4gYW5kIDx0dD5iPC90dD4gZ2l2ZSB0aGUgbWVhc3VyZW1lbnQgc2V0dGluZ3MgYXQgKkEqIGFuZCAqQiouIDx0dD5vMTwvdHQ+LCA8dHQ+bzI8L3R0PiwgYW5kIDx0dD5vMzwvdHQ+LCBnaXZlIHRoZSBvdXRjb21lIGZvciB0aGUgdGhyZWUgbWVhc3VyZW1lbnQgc2V0dGluZ3MsIHNvIGNvbmNhdGVuYXRpbmcgdGhlbSB0b2dldGhlciBnaXZlcyB0aGUgdGhyZWUtY2hhcmFjdGVyIHN0cmluZywgPHR0PmhpZGRlbjwvdHQ+LiBUaGUgUiBjb2RlIGJlbG93IGdlbmVyYXRlcyBhbGwgJDggXHRpbWVzIDkgPSA3MiQgcG9zc2liaWxpdGllcyBmcm9tIHRoZSAkMl4zID0gOCQgcG9zc2libGUgcGFydGljbGUgc2V0dXBzIGFuZCB0aGUgJDNeMiA9IDkkIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgbWVhc3VyZW1lbnQgc2V0dGluZ3MgYXQgKkEqIGFuZCAqQiouDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KDQpgYGB7cn0NCmRhdCA8LSBleHBhbmQuZ3JpZCgNCiAgYSA9IDE6MywNCiAgYiA9IDE6MywNCiAgbzEgPSBjKCJSIiwgIkciKSwNCiAgbzIgPSBjKCJSIiwgIkciKSwNCiAgbzMgPSBjKCJSIiwgIkciKQ0KKSB8Pg0KICBtdXRhdGUoQSA9IGNhc2Vfd2hlbihhID09IDEgfiBvMSwNCiAgICAgICAgICAgICAgICAgICAgICAgYSA9PSAyIH4gbzIsDQogICAgICAgICAgICAgICAgICAgICAgIGEgPT0gMyB+IG8zKSwNCiAgICAgICAgIEIgPSBjYXNlX3doZW4oYiA9PSAxIH4gbzEsDQogICAgICAgICAgICAgICAgICAgICAgIGIgPT0gMiB+IG8yLA0KICAgICAgICAgICAgICAgICAgICAgICBiID09IDMgfiBvMyksDQogICAgICAgICBoaWRkZW4gPSBwYXN0ZTAobzEsIG8yLCBvMyksDQogICAgICAgICBzYW1lID0gQSA9PSBCKQ0KZGF0IHw+IHNlbGVjdCgtYyhvMSxvMixvMykpDQpgYGANCg0KTm93IHdlIGNhbiBzZWUgaG93IHRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nIHRoZSBzYW1lIG91dGNvbWUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBtZWFzdXJlbWVudCBzZXR0aW5ncyBhcmUgdGhlIHNhbWU6DQoNCmBgYHtyfQ0KZGF0IHw+DQogIGdyb3VwX2J5KGEgPT0gYikgfD4NCiAgc3VtbWFyaXNlKGBQKFNhbWUgb3V0Y29tZSlgID0gbWVhbihzYW1lKSkNCmBgYA0KDQpUaGUgb3V0Y29tZXMgYXJlIGFsd2F5cyB0aGUgc2FtZSBpZiB0aGUgc2V0dGluZ3MgYXJlIHRoZSBzYW1lIGFuZCBoYXZlIGEgNTAtLTUwIGNoYW5jZSBvZiBiZWluZyB0aGUgc2FtZSBpZiB0aGUgc2V0dGluZ3MgYXJlIGRpZmZlcmVudC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHByZWRpY3Rpb25zIG9mIHF1YW50dW0gbWVjaGFuaWNzIGFuZCBlbXBpcmljYWwgZmluZGluZ3MgZnJvbSBhY3R1YWwgZXhwZXJpbWVudHMuDQoNClRvIHNlZSB0aGlzLCBsZXQncyB2aWV3IHRoZSBlbnRhbmdsZWQgcGFydGljbGVzIGZpcmVkIGZyb20gKkMqIGFzIHF1Yml0cywgYWJzdHJhY3RpbmcgZnJvbSBNZXJtaW4ncyBkaXNjdXNzaW9uIG9mIHNwaW4tMS8yIHBhcnRpY2xlcyBhbmQgU3Rlcm4tLUdlcmxhY2ggbWFnbmV0cy4gVGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIG9mICpBKiBhbmQgKkIqIGFyZSB0aGVuIGltcGxlbWVudGVkIGFzIHJvdGF0aW5nIHRoZSBxdWJpdCBlbnRlcmluZyB0aGUgZGV0ZWN0b3IgYWJvdXQgdGhlIHktYXhpcyB1c2luZyBhbiBbUlkgZ2F0ZV0oaHR0cHM6Ly9xaXNraXQub3JnL2RvY3VtZW50YXRpb24vc3R1YnMvcWlza2l0LmNpcmN1aXQubGlicmFyeS5SWUdhdGUuaHRtbCkuIEFmdGVyIHRoaXMgcm90YXRpb24sIHdlIG1lYXN1cmUgdXNpbmcgdGhlIGNvbXB1dGF0aW9uYWwgYmFzaXMuDQoNCkhlcmUncyBhIHF1YW50dW0gY2lyY3VpdCB3aXRoIGV4YW1wbGUgc2V0dGluZ3M6DQoNCiFbXShtZXJtaW5fcWlza2l0LnBuZykNCg0KVGhlIFtjaXJjdWl0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CZWxsX3N0YXRlI0NyZWF0aW5nX0JlbGxfc3RhdGVzKSBmb3IgKkMqIGVzdGFibGlzaGVzIGEgQmVsbCBzdGF0ZSBieSB1c2luZyBhIEhhZG1hcmQgZ2F0ZSBhbmQgQ05PVC4NCg0KVGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIG91dGNvbWVzIGFyZSB0aGUgc2FtZSBhdCAqQSogYW5kICpCKiBpcyBnaXZlbiBieSAkXGNvc14yKFx0aGV0YS8yKSQsIHdoZXJlICRcdGhldGEkIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW5nbGVzIG9mIHJvdGF0aW9ucyBhdCAqQSogYW5kICpCKi4gKFdlJ3JlIHNxdWFyaW5nIGJlY2F1c2UgW0Jvcm4gcnVsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQm9ybl9ydWxlKS4pDQoNCkZvbGxvd2luZyBNZXJtaW4gKDE5ODEpLCB3ZSBjaG9vc2UgYW5nbGVzICQwXntcY2lyY30kLCAkLTEyMF57XGNpcmN9JCwgYW5kICQxMjBee1xjaXJjfSQgZm9yIHRoZSB0aHJlZSBtZWFzdXJlbWVudCBzZXR0aW5ncy4gPHR0PmFuZ19kaWZmPC90dD4gZ2l2ZXMgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIGFuZ2xlcyBpbiBkZWdyZWVzOyA8dHQ+YW5nX2RpZmZfcmFkczwvdHQ+IGlzIHRoZSBzYW1lIGluIHJhZGlhbnMuDQoNCkhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgb3V0Y29tZXM6DQoNCmBgYHtyfQ0KZGF0X2FjdHVhbCA8LSBleHBhbmQuZ3JpZChhID0gYygtMTIwLDAsMTIwKSwgYiA9IGMoLTEyMCwwLDEyMCkpIHw+DQogIG11dGF0ZShhbmdfZGlmZiAgICAgICAgICA9IGIgLSBhLA0KICAgICAgICAgYW5nX2RpZmZfcmFkcyAgICAgPSAoYW5nX2RpZmYvMzYwKSAqIDIgKiBwaSwNCiAgICAgICAgIGBQKFNhbWUgb3V0Y29tZSlgID0gY29zKGFuZ19kaWZmX3JhZHMvMileMikNCmRhdF9hY3R1YWwgfD4gDQogIHNlbGVjdCgtYW5nX2RpZmZfcmFkcykgfD4NCiAgYXJyYW5nZShhYnMoYW5nX2RpZmYpLCBhKQ0KYGBgDQoNCldoZW4gdGhlIHNldHRpbmdzIGFyZSB0aGUgc2FtZSBhdCAqQSogYW5kICpCKiwgdGhlIGZpbmRpbmdzIGFncmVlIHdpdGggbG9jYWwgZGV0ZXJtaW5pc206IHRoZSBsaWdodHMgYWx3YXlzIGZsYXNoIHRoZSBzYW1lIGNvbG91ci4gSG93ZXZlciwgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIGRpZmZlcmVudCwgdGhlIGxpZ2h0cyBhcmUgdGhlIHNhbWUgY29sb3VyIG9uIG9ubHkgJDEvNCQgb2YgdHJpYWxzLiBUaGlzIGlzIGxvd2VyIHRoYW4gdGhlICQxLzIkIHByZWRpY3RlZCBieSB0aGUgbG9jYWwgZGV0ZXJtaW5pc20gc2V0dXAsIHNvIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uLiBMb2NhbCBkZXRlcm1pbmlzbSBpcyBmYWxzZS4NCg0KSSBnYXZlIHRoZSBjaXJjdWl0IGFib3ZlIGEgZ28gb24gYW4gW0lCTSBRdWFudHVtIGNvbXB1dGVyXShodHRwczovL3F1YW50dW0tY29tcHV0aW5nLmlibS5jb20vKSAoaWJtcV9qYWthcnRhKS4gVGhlIG1lYXN1cmVtZW50IG91dGNvbWVzIHdlcmUgdGhlIHNhbWUgb24gYHIgMTMuOCsxMi44YCUgb2YgMSwwMDAgdHJpYWxzLCA5NSUgQ0kgPSBbMjMuOSUsIDI5LjUlXS4gVGhpcyBjb25maWRlbmNlIGludGVydmFsIGluY2x1ZGVzIHRoZSBwcmVkaWN0aW9uIG9mIHF1YW50dW0gbWVjaGFuaWNzIGFuZCBpcyB3ZWxsIGJlbG93IDUwJS4NCg0KVGhlcmUgYXJlIHZhbHVlcyBvZiAkXHRoZXRhJCBmb3Igd2hpY2ggdGhlIGxvY2FsIGRldGVybWluaXNtIHByZWRpY3Rpb25zIGRvIHdvcmssIGUuZy4sICRcZnJhY3tccGl9ezJ9JCByYWRpYW5zID0gJDkwXntcY2lyY30kOg0KDQpgYGB7cn0NCmNvcygocGkvMikvMileMg0KYGBgDQpCdXQgdGhhdCBjbGVhcmx5IGRvZXNuJ3QgcmVzY3VlIGl0Lg0KDQpNb3JlIGdlbmVyYWxseSwgaGVyZSdzIHdoYXQgJFxjb3NeMihcdGhldGEvMikkIGxvb2tzIGxpa2U6DQoNCmBgYHtyIGZpZy53aWR0aD05LGZpZy5oZWlnaHQ9M30NCmdncGxvdCgpICsNCiAgZ2VvbV9mdW5jdGlvbihmdW4gPSBcKHgpIGNvcygoKHggLyAzNjApICogMiAqIHBpKSAvIDIpIF4gMikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIC4yNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoc2VxKC0zNjAsIDM2MCwgOTApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXEoLTI0MCwgMjQwLCAxMjApKSwNCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTM2MCwgMzYwKSkgKw0KICBsYWJzKHggPSBleHByZXNzaW9uKHRoZXRhKSwgeSA9ICJQKFNhbWUgb3V0Y29tZSkiKQ0KYGBgDQoNClN1cHBvc2UgSSdtIHNpdHRpbmcgYmVzaWRlIGRldGVjdG9yICpBKiBhbmQgZGV0ZWN0b3IgKkIqIGlzIGxpZ2h0IHllYXJzIGF3YXkuIFN1cHBvc2UgYWxzbyB0aGF0IEkgaG9sZCBteSBtZWFzdXJlbWVudCBzZXR0aW5nIGNvbnN0YW50LCBzbyBhbnkgdmFyaWF0aW9uIGluICRcdGhldGEkIGlzIGRyaXZlbiBieSB0aGUgc2V0dGluZyBvdmVyIGF0ICpCKi4gVGhlIG1lYXN1cmVtZW50IG91dGNvbWVzIGZyb20gcmVwZWF0ZWQgdHJpYWxzIEkgZ2V0IGhlcmUgZGVwZW5kIG9uIHRoZSBtZWFzdXJlbWVudCBzZXR0aW5ncyB3YXkgb3ZlciB0aGVyZSwgYW5kIHRob3NlIHNldHRpbmdzIGhhdmUgYW4gZWZmZWN0IGFwcGFyZW50bHkgaW5zdGFudGFuZW91c2x5Lg0KDQpIb3NzZW5mZWxkZXIgYW5kIFBhbG1lciAoMjAyMCkgd291bGQgd2FudCB0byBlbXBoYXNpc2UgdGhhdCB0aGlzIGZhbHNpZmljYXRpb24gb2YgbG9jYWwgZGV0ZXJtaW5pc20gYXNzdW1lcyB0aGF0IHRoZSBtZWFzdXJlbWVudCBzZXR0aW5ncyBhcmUgc3RhdGlzdGljYWxseSBpbmRlcGVuZGVudCwgd2hpY2ggdGhleSBhcmd1ZSBpc24ndCB0cnVlLiBBbGxvd2luZyB0aGUgbWVhc3VyZW1lbnQgc2V0dGluZ3MgdG8gYmUgY29ycmVsYXRlZCBpcyBrbm93biBhcyAqc3VwZXJkZXRlcm1pbmlzbSouDQoNCg0KIyMjIFJlZmVyZW5jZXMNCg0KTWVybWluLCBOLiBELiAoMTk4MSkuIFtRdWFudHVtIE15c3RlcmllcyBmb3IgQW55b25lXShodHRwczovL3d3dy5qc3Rvci5vcmcvc3RhYmxlLzIwMjY0ODIpLiAqVGhlIEpvdXJuYWwgb2YgUGhpbG9zb3BoeSosICo3OCooNyksIDM5Ny0tNDA4Lg0KDQpIb3NzZW5mZWxkZXIsIFMuLCAmIFBhbG1lciwgVC4gKDIwMjApLiBbUmV0aGlua2luZyBTdXBlcmRldGVybWluaXNtXShodHRwczovL2RvaS5vcmcvMTAuMzM4OS9mcGh5LjIwMjAuMDAxMzkpLiAqRnJvbnRpZXJzIGluIFBoeXNpY3MqLCAqOCosIDEzOS4NCg0KDQoNCg0K