source("./device-setup.R")
library(tidyverse)

1 Data

The data may be downloaded from the project’s page: http://ns.inria.fr/loki/WordSuggestions/.

1.1 Runs

This table contains one row for each participant. The different columns are as described below:

This table contains three rows per participant providing data about each three parts of the experiment. Each part, called a “run” is dedicated to the use of one device in particular. The different columns are as described below:

participant

Participant Identifier.

accuracy

The word suggestion accuracy condition.

device

The device used for the run.

device_order

The order of the device in the experiment.

run_start_date

The start date and time of the run in ISO 8601 format.

run_end_date

The end date and time of the run in ISO 8601 format (only provided for the desktop condition).

run_duration

The duration of the run in seconds.

expe_start_date

The start date and time of the experiment in ISO 8601 format.

expe_end_date

The end date and time of the experiment in ISO 8601 format.

expe_duration

The duration of the experiment in seconds.

age

The self-reported age of the participant.

gender

The self-reported gender of the participant.

swipe_typing_use

Answer for “In the last 7 days, in total, how long have you swipe typed?” This was provided once per experiment.

suggestions_use_frequency

Answer for “In the last 24 hours, how many word suggestions have you used when typing on [device]?” This was asked for laptop, tablet and phone at the beginning of the experiment.

device_use

Answer for “In the last 7 days, in total, how long have you used [device]?” This was asked for laptop, tablet and phone at the beginning of the experiment.

typing_use

Answer for “In the last 7 days, in total, how long have you typed on [device] (using any typing method)?” This was asked for laptop, tablet and phone at the beginning of the experiment.

typing_use_one_hand

Answer for “In the last 7 days, in total, how long have you typed on a phone with only the thumb of one hand?” This is only available for the phone condition.

controls_satisfactory

Agreement for “The controls (keyboard and word suggestions) are satisfactory for the completion of the task.” This was provided for each condition.

suggestion_accuracy

Agreement for “The word suggestions are accurate.” This was provided for each condition.

keyboard_use_efficiency

Agreement for “The use of the keyboard is efficient in this task.” This was provided for each condition.

suggestion_distraction

Agreement for “The word suggestions are distracting.” This was provided for each condition.

mental_demand

NASA-TLX mental demand scale. This was provided for each condition.

physical_demand

NASA-TLX physical demand scale. This was provided for each condition.

temporal_demand

NASA-TLX temporal demand scale. This was provided for each condition.

performance

NASA-TLX performance scale. This was provided for each condition.

effort

NASA-TLX performance scale. This was provided for each condition.

frustration

NASA-TLX effort scale. This was provided for each condition.

avg_cps

The average typing speed of the participant (without suggestions) in character per seconds.

avg_wpm

The average typing speed of the participant (without suggestions) in words per minutes (avg_cps * 60 / 5).

min_suggestions_delay

The minimum delay before updating suggestions. This is always 150ms.

total_suggestions

The number of suggestions showed to the participant. This is always 3.

total_blurred_trials

Register the number of trials during which the page was unfocused, which is an indication that the participant may be distracted.

total_long_delay_trials

The number of trials during which at least one suggestion took more than 300ms before being udpated.

is_experiment_completed

TRUE if the experiment was completed.

is_run_measured

Some runs were not included in our analysis. The column run_rejection_reason provides the reason for the exclusion.

run_rejection_reason

The reason for excluding the run from the analysis. This is only provided for runs that were excluded.

read_device_runs(measured_only = FALSE)

1.2 Trials

This table contains data logs from all participant trials.

participant

Participant Identifier.

device

The device used for the run.

accuracy

The word suggestion accuracy condition.

trial_number

The number of the trial.

trial_id

The identifier of the trial.

phrase

The phrase participant had to type during the trial.

is_practice

If the trial was part of a practice block.

total_chars

The number of character in the phrase to type.

theoretical_sks

The maximum number of keystrokes that could be saved using word suggestions during the trial.

start_date

The start date and time of the trial in ISO 8601 format.

end_date

The end date and time of the trial in ISO 8601 format.

duration

The duration of the trial in seconds.

total_key_strokes

The number of key that were pressed to complete the trial.

actual_sks

The number of keystrokes that were saved using word suggestions. This may be negative if incorrect suggestions were used.

total_suggestion_used

The number of suggestions that were used during the trial.

total_suggestion_errors

The number of incorrect suggestions that were used during the trial.

total_removed_manual_chars

The number of characters that were manually entered then deleted by participant during the trial.

total_removed_suggestion_chars

The number of characters that were inserted from a suggestion then deleted by participant during the trial.

total_final_manual_chars

The number of characters from the final participant input that were manually inserted.

total_added_chars

The number of characters that were inserted during the trial either from suggestion or manual input (some may have been removed later).

does_trial_have_errors

TRUE if incorrect characters were inserted at some point during the trial (they had to be removed later to validate the trial).

phrase_completion_start

The date and time where the first character was inserted during the trial (ISO 8601 format).

phrase_completion_end

The date and time where the phrase was fully completed and correct for the first time (ISO 8601 format). Note that this is before the trial was validated.

phrase_completion_duration

The time it took for the participant to complete the phrase in seconds.

avg_suggestion_delay

The average time it took for suggestions to be updated during the trial.

sd_suggestion_delay

The standard deviation of the time it took for suggestions to be updated during the trial.

total_blur_events

The number of times the experiment web page was unfocused during the trial.

was_trial_blurred

TRUE if total_blur_events > 0

theoretical_key_saving

The maximum key stroke saving of the trial. This should be close from accuracy.

actual_key_saving_no_editing

The key stroke saving excluding errors.

actual_key_saving

The key stroke saving.

cps

Entry speed in characters per second (i.e. (total_chars - 1) / trial_duration).

has_long_suggestion_delay

If at least one suggestion set took more than 300ms to update.

is_run_measured

If the run including this trial was included in our statistical analysis.

is_trial_measured

If this trial was included in our statistical analysis. See below for reasons to exclude a trials from our analysis.

trial_rejection_reason

The reason for excluding the trial from the analysis. This is only provided for trials that were excluded.

trials <- read_device_trials(measured_only = FALSE)
trials

1.3 Events

This large table contains all event logs recorded during our experiment. It includes the following columns:

participant

The participant identifier.

accuracy

The accuracy condition.

device

The device condition.

trial_id

The trial identifier.

event_number

The number of the event in the trial.

type

The type of the event. INIT: trial initialization, UPDATE_SUGGESTIONS: update of the suggestions, INPUT_CHAR: manual insertion of a character by the participant at the end of their input, DELETE_CHAR: removal of the last input character by the participant, INPUT_SUGGESTION: insertion of a suggestion.

input

The content of participant’s input after the event.

is_input_correct

If there is no errors in the input after the event.

added_input

The characters added to the input as a result of the event.

removed_input

The characters removed from the input as a result of the event.

total_added_chars

The number of characters added as result of the event (may be negative).

remaining_key_strokes

The number of character left to complete the phrase.

is_target_completed

If the phrase is completed.

request_time

For events resulting from a web request (in particular updates of word suggestions), the moment the request was sent to the server (ISO 8601 format).

response_time

For events resulting from a web request (in particular updates of word suggestions), the moment the response from the server was received (ISO 8601 format).

time

The date and time of the event (ISO 8601 format).

diff_time

Duration between this event and the previous one.

is_run_measured

If the run including this event was included in our statistical analysis.

is_trial_measured

If the trial including this event was included in our statistical analysis.

is_event_measured

If this event was included in our statistical analysis.

event_rejection_reason

The reason for excluding the event from the analysis. This is only provided for events that were excluded.

target_word

The next word to type or the word currently being typed.

target_word_number

The number of the target word in the phrase.

2 Monitoring

2.1 Total trials

trials %>% filter(is_run_measured & is_practice == F) %>% count(is_trial_measured)

2.2 Measured Trials with errors

trials %>% filter(is_trial_measured) %>%
  count(does_trial_have_errors)

2.3 Blurred Trials

The following trials were removed because the participant was interrupted (the page was unfocused).

trials %>% filter(is_run_measured & is_practice == F) %>%
  count(was_trial_blurred)

2.4 Trials with long suggestion update times

trials %>% filter(is_run_measured & is_practice == F) %>%
  count(has_long_suggestion_delay)
LS0tCnRpdGxlOiAiV29yZC1TdWdnZXN0aW9uczogRGV2aWNlIEV4cGVyaW1lbnQiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRoZW1lOiBsdW1lbgogICAgaGlnaGxpZ2h0OiBkZWZhdWx0CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIG51bWJlcl9zZWN0aW9uczogVFJVRQotLS0KCmBgYHtyIG1lc3NhZ2U9RkFMU0V9CnNvdXJjZSgiLi9kZXZpY2Utc2V0dXAuUiIpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCiMgRGF0YQoKVGhlIGRhdGEgbWF5IGJlIGRvd25sb2FkZWQgZnJvbSB0aGUgcHJvamVjdCdzIHBhZ2U6IDxodHRwOi8vbnMuaW5yaWEuZnIvbG9raS9Xb3JkU3VnZ2VzdGlvbnMvPi4KCiMjIFJ1bnMKClRoaXMgdGFibGUgY29udGFpbnMgb25lIHJvdyBmb3IgZWFjaCBwYXJ0aWNpcGFudC4gVGhlIGRpZmZlcmVudCBjb2x1bW5zIGFyZSBhcyBkZXNjcmliZWQgYmVsb3c6CgpUaGlzIHRhYmxlIGNvbnRhaW5zIHRocmVlIHJvd3MgcGVyIHBhcnRpY2lwYW50IHByb3ZpZGluZyBkYXRhIGFib3V0IGVhY2ggdGhyZWUgcGFydHMgb2YgdGhlIGV4cGVyaW1lbnQuIEVhY2ggcGFydCwgY2FsbGVkIGEgInJ1biIgaXMgZGVkaWNhdGVkIHRvIHRoZSB1c2Ugb2Ygb25lIGRldmljZSBpbiBwYXJ0aWN1bGFyLiBUaGUgZGlmZmVyZW50IGNvbHVtbnMgYXJlIGFzIGRlc2NyaWJlZCBiZWxvdzoKCnBhcnRpY2lwYW50Cgo6ICAgUGFydGljaXBhbnQgSWRlbnRpZmllci4KCmFjY3VyYWN5Cgo6ICAgVGhlIHdvcmQgc3VnZ2VzdGlvbiBhY2N1cmFjeSBjb25kaXRpb24uCgpkZXZpY2UKCjogICBUaGUgZGV2aWNlIHVzZWQgZm9yIHRoZSBydW4uCgpkZXZpY2Vfb3JkZXIKCjogICBUaGUgb3JkZXIgb2YgdGhlIGRldmljZSBpbiB0aGUgZXhwZXJpbWVudC4KCnJ1bl9zdGFydF9kYXRlCgo6ICAgVGhlIHN0YXJ0IGRhdGUgYW5kIHRpbWUgb2YgdGhlIHJ1biBpbiBbSVNPIDg2MDFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxKSBmb3JtYXQuCgpydW5fZW5kX2RhdGUKCjogICBUaGUgZW5kIGRhdGUgYW5kIHRpbWUgb2YgdGhlIHJ1biBpbiBbSVNPIDg2MDFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxKSBmb3JtYXQgKG9ubHkgcHJvdmlkZWQgZm9yIHRoZSBkZXNrdG9wIGNvbmRpdGlvbikuCgpydW5fZHVyYXRpb24KCjogICBUaGUgZHVyYXRpb24gb2YgdGhlIHJ1biBpbiBzZWNvbmRzLgoKZXhwZV9zdGFydF9kYXRlCgo6ICAgVGhlIHN0YXJ0IGRhdGUgYW5kIHRpbWUgb2YgdGhlIGV4cGVyaW1lbnQgaW4gW0lTTyA4NjAxXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSkgZm9ybWF0LgoKZXhwZV9lbmRfZGF0ZQoKOiAgIFRoZSBlbmQgZGF0ZSBhbmQgdGltZSBvZiB0aGUgZXhwZXJpbWVudCBpbiBbSVNPIDg2MDFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxKSBmb3JtYXQuCgpleHBlX2R1cmF0aW9uCgo6ICAgVGhlIGR1cmF0aW9uIG9mIHRoZSBleHBlcmltZW50IGluIHNlY29uZHMuCgphZ2UKCjogICBUaGUgc2VsZi1yZXBvcnRlZCBhZ2Ugb2YgdGhlIHBhcnRpY2lwYW50LgoKZ2VuZGVyCgo6ICAgVGhlIHNlbGYtcmVwb3J0ZWQgZ2VuZGVyIG9mIHRoZSBwYXJ0aWNpcGFudC4KCnN3aXBlX3R5cGluZ191c2UKCjogICBBbnN3ZXIgZm9yICJJbiB0aGUgbGFzdCA3IGRheXMsIGluIHRvdGFsLCBob3cgbG9uZyBoYXZlIHlvdSBzd2lwZSB0eXBlZD8iIFRoaXMgd2FzIHByb3ZpZGVkIG9uY2UgcGVyIGV4cGVyaW1lbnQuCgpzdWdnZXN0aW9uc191c2VfZnJlcXVlbmN5Cgo6ICAgQW5zd2VyIGZvciAiSW4gdGhlIGxhc3QgMjQgaG91cnMsIGhvdyBtYW55IHdvcmQgc3VnZ2VzdGlvbnMgaGF2ZSB5b3UgdXNlZCB3aGVuIHR5cGluZyBvbiBbZGV2aWNlXT8iIFRoaXMgd2FzIGFza2VkIGZvciBsYXB0b3AsIHRhYmxldCBhbmQgcGhvbmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZXhwZXJpbWVudC4KCmRldmljZV91c2UKCjogICBBbnN3ZXIgZm9yICJJbiB0aGUgbGFzdCA3IGRheXMsIGluIHRvdGFsLCBob3cgbG9uZyBoYXZlIHlvdSB1c2VkIFtkZXZpY2VdPyIgVGhpcyB3YXMgYXNrZWQgZm9yIGxhcHRvcCwgdGFibGV0IGFuZCBwaG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBleHBlcmltZW50LgoKdHlwaW5nX3VzZQoKOiAgIEFuc3dlciBmb3IgIkluIHRoZSBsYXN0IDcgZGF5cywgaW4gdG90YWwsIGhvdyBsb25nIGhhdmUgeW91IHR5cGVkIG9uIFtkZXZpY2VdICh1c2luZyBhbnkgdHlwaW5nIG1ldGhvZCk/IiBUaGlzIHdhcyBhc2tlZCBmb3IgbGFwdG9wLCB0YWJsZXQgYW5kIHBob25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cGVyaW1lbnQuCgp0eXBpbmdfdXNlX29uZV9oYW5kCgo6ICAgQW5zd2VyIGZvciAiSW4gdGhlIGxhc3QgNyBkYXlzLCBpbiB0b3RhbCwgaG93IGxvbmcgaGF2ZSB5b3UgdHlwZWQgb24gYSBwaG9uZSB3aXRoIG9ubHkgdGhlIHRodW1iIG9mIG9uZSBoYW5kPyIgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIHBob25lIGNvbmRpdGlvbi4KCmNvbnRyb2xzX3NhdGlzZmFjdG9yeQoKOiAgIEFncmVlbWVudCBmb3IgIlRoZSBjb250cm9scyAoa2V5Ym9hcmQgYW5kIHdvcmQgc3VnZ2VzdGlvbnMpIGFyZSBzYXRpc2ZhY3RvcnkgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0YXNrLiIgVGhpcyB3YXMgcHJvdmlkZWQgZm9yIGVhY2ggY29uZGl0aW9uLgoKc3VnZ2VzdGlvbl9hY2N1cmFjeQoKOiAgIEFncmVlbWVudCBmb3IgIlRoZSB3b3JkIHN1Z2dlc3Rpb25zIGFyZSBhY2N1cmF0ZS4iIFRoaXMgd2FzIHByb3ZpZGVkIGZvciBlYWNoIGNvbmRpdGlvbi4KCmtleWJvYXJkX3VzZV9lZmZpY2llbmN5Cgo6ICAgQWdyZWVtZW50IGZvciAiVGhlIHVzZSBvZiB0aGUga2V5Ym9hcmQgaXMgZWZmaWNpZW50IGluIHRoaXMgdGFzay4iIFRoaXMgd2FzIHByb3ZpZGVkIGZvciBlYWNoIGNvbmRpdGlvbi4KCnN1Z2dlc3Rpb25fZGlzdHJhY3Rpb24KCjogICBBZ3JlZW1lbnQgZm9yICJUaGUgd29yZCBzdWdnZXN0aW9ucyBhcmUgZGlzdHJhY3RpbmcuIiBUaGlzIHdhcyBwcm92aWRlZCBmb3IgZWFjaCBjb25kaXRpb24uCgptZW50YWxfZGVtYW5kCgo6ICAgTkFTQS1UTFggbWVudGFsIGRlbWFuZCBzY2FsZS4gVGhpcyB3YXMgcHJvdmlkZWQgZm9yIGVhY2ggY29uZGl0aW9uLgoKcGh5c2ljYWxfZGVtYW5kCgo6ICAgTkFTQS1UTFggcGh5c2ljYWwgZGVtYW5kIHNjYWxlLiBUaGlzIHdhcyBwcm92aWRlZCBmb3IgZWFjaCBjb25kaXRpb24uCgp0ZW1wb3JhbF9kZW1hbmQKCjogICBOQVNBLVRMWCB0ZW1wb3JhbCBkZW1hbmQgc2NhbGUuIFRoaXMgd2FzIHByb3ZpZGVkIGZvciBlYWNoIGNvbmRpdGlvbi4KCnBlcmZvcm1hbmNlCgo6ICAgTkFTQS1UTFggcGVyZm9ybWFuY2Ugc2NhbGUuIFRoaXMgd2FzIHByb3ZpZGVkIGZvciBlYWNoIGNvbmRpdGlvbi4KCmVmZm9ydAoKOiAgIE5BU0EtVExYIHBlcmZvcm1hbmNlIHNjYWxlLiBUaGlzIHdhcyBwcm92aWRlZCBmb3IgZWFjaCBjb25kaXRpb24uCgpmcnVzdHJhdGlvbgoKOiAgIE5BU0EtVExYIGVmZm9ydCBzY2FsZS4gVGhpcyB3YXMgcHJvdmlkZWQgZm9yIGVhY2ggY29uZGl0aW9uLgoKYXZnX2NwcwoKOiAgIFRoZSBhdmVyYWdlIHR5cGluZyBzcGVlZCBvZiB0aGUgcGFydGljaXBhbnQgKHdpdGhvdXQgc3VnZ2VzdGlvbnMpIGluIGNoYXJhY3RlciBwZXIgc2Vjb25kcy4KCmF2Z193cG0KCjogICBUaGUgYXZlcmFnZSB0eXBpbmcgc3BlZWQgb2YgdGhlIHBhcnRpY2lwYW50ICh3aXRob3V0IHN1Z2dlc3Rpb25zKSBpbiB3b3JkcyBwZXIgbWludXRlcyAoYGF2Z19jcHMgKiA2MCAvIDVgKS4KCm1pbl9zdWdnZXN0aW9uc19kZWxheQoKOiAgIFRoZSBtaW5pbXVtIGRlbGF5IGJlZm9yZSB1cGRhdGluZyBzdWdnZXN0aW9ucy4gVGhpcyBpcyBhbHdheXMgMTUwbXMuCgp0b3RhbF9zdWdnZXN0aW9ucwoKOiAgIFRoZSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgc2hvd2VkIHRvIHRoZSBwYXJ0aWNpcGFudC4gVGhpcyBpcyBhbHdheXMgMy4KCnRvdGFsX2JsdXJyZWRfdHJpYWxzCgo6ICAgUmVnaXN0ZXIgdGhlIG51bWJlciBvZiB0cmlhbHMgZHVyaW5nIHdoaWNoIHRoZSBwYWdlIHdhcyB1bmZvY3VzZWQsIHdoaWNoIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgcGFydGljaXBhbnQgbWF5IGJlIGRpc3RyYWN0ZWQuCgp0b3RhbF9sb25nX2RlbGF5X3RyaWFscwoKOiAgIFRoZSBudW1iZXIgb2YgdHJpYWxzIGR1cmluZyB3aGljaCBhdCBsZWFzdCBvbmUgc3VnZ2VzdGlvbiB0b29rIG1vcmUgdGhhbiAzMDBtcyBiZWZvcmUgYmVpbmcgdWRwYXRlZC4KCmlzX2V4cGVyaW1lbnRfY29tcGxldGVkCgo6ICAgVFJVRSBpZiB0aGUgZXhwZXJpbWVudCB3YXMgY29tcGxldGVkLgoKaXNfcnVuX21lYXN1cmVkCgo6ICAgU29tZSBydW5zIHdlcmUgbm90IGluY2x1ZGVkIGluIG91ciBhbmFseXNpcy4gVGhlIGNvbHVtbiBgcnVuX3JlamVjdGlvbl9yZWFzb25gIHByb3ZpZGVzIHRoZSByZWFzb24gZm9yIHRoZSBleGNsdXNpb24uCgpydW5fcmVqZWN0aW9uX3JlYXNvbgoKOiAgIFRoZSByZWFzb24gZm9yIGV4Y2x1ZGluZyB0aGUgcnVuIGZyb20gdGhlIGFuYWx5c2lzLiBUaGlzIGlzIG9ubHkgcHJvdmlkZWQgZm9yIHJ1bnMgdGhhdCB3ZXJlIGV4Y2x1ZGVkLgoKYGBge3J9CnJlYWRfZGV2aWNlX3J1bnMobWVhc3VyZWRfb25seSA9IEZBTFNFKQpgYGAKCiMjIFRyaWFscwoKVGhpcyB0YWJsZSBjb250YWlucyBkYXRhIGxvZ3MgZnJvbSBhbGwgcGFydGljaXBhbnQgdHJpYWxzLgoKcGFydGljaXBhbnQKCjogICBQYXJ0aWNpcGFudCBJZGVudGlmaWVyLgoKZGV2aWNlCgo6ICAgVGhlIGRldmljZSB1c2VkIGZvciB0aGUgcnVuLgoKYWNjdXJhY3kKCjogICBUaGUgd29yZCBzdWdnZXN0aW9uIGFjY3VyYWN5IGNvbmRpdGlvbi4KCnRyaWFsX251bWJlcgoKOiAgIFRoZSBudW1iZXIgb2YgdGhlIHRyaWFsLgoKdHJpYWxfaWQKCjogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgdHJpYWwuCgpwaHJhc2UKCjogICBUaGUgcGhyYXNlIHBhcnRpY2lwYW50IGhhZCB0byB0eXBlIGR1cmluZyB0aGUgdHJpYWwuCgppc19wcmFjdGljZQoKOiAgIElmIHRoZSB0cmlhbCB3YXMgcGFydCBvZiBhIHByYWN0aWNlIGJsb2NrLgoKdG90YWxfY2hhcnMKCjogICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlciBpbiB0aGUgcGhyYXNlIHRvIHR5cGUuCgp0aGVvcmV0aWNhbF9za3MKCjogICBUaGUgbWF4aW11bSBudW1iZXIgb2Yga2V5c3Ryb2tlcyB0aGF0IGNvdWxkIGJlIHNhdmVkIHVzaW5nIHdvcmQgc3VnZ2VzdGlvbnMgZHVyaW5nIHRoZSB0cmlhbC4KCnN0YXJ0X2RhdGUKCjogICBUaGUgc3RhcnQgZGF0ZSBhbmQgdGltZSBvZiB0aGUgdHJpYWwgaW4gW0lTTyA4NjAxXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSkgZm9ybWF0LgoKZW5kX2RhdGUKCjogICBUaGUgZW5kIGRhdGUgYW5kIHRpbWUgb2YgdGhlIHRyaWFsIGluIFtJU08gODYwMV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEpIGZvcm1hdC4KCmR1cmF0aW9uCgo6ICAgVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmlhbCBpbiBzZWNvbmRzLgoKdG90YWxfa2V5X3N0cm9rZXMKCjogICBUaGUgbnVtYmVyIG9mIGtleSB0aGF0IHdlcmUgcHJlc3NlZCB0byBjb21wbGV0ZSB0aGUgdHJpYWwuCgphY3R1YWxfc2tzCgo6ICAgVGhlIG51bWJlciBvZiBrZXlzdHJva2VzIHRoYXQgd2VyZSBzYXZlZCB1c2luZyB3b3JkIHN1Z2dlc3Rpb25zLiBUaGlzIG1heSBiZSBuZWdhdGl2ZSBpZiBpbmNvcnJlY3Qgc3VnZ2VzdGlvbnMgd2VyZSB1c2VkLgoKdG90YWxfc3VnZ2VzdGlvbl91c2VkCgo6ICAgVGhlIG51bWJlciBvZiBzdWdnZXN0aW9ucyB0aGF0IHdlcmUgdXNlZCBkdXJpbmcgdGhlIHRyaWFsLgoKdG90YWxfc3VnZ2VzdGlvbl9lcnJvcnMKCjogICBUaGUgbnVtYmVyIG9mIGluY29ycmVjdCBzdWdnZXN0aW9ucyB0aGF0IHdlcmUgdXNlZCBkdXJpbmcgdGhlIHRyaWFsLgoKdG90YWxfcmVtb3ZlZF9tYW51YWxfY2hhcnMKCjogICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIG1hbnVhbGx5IGVudGVyZWQgdGhlbiBkZWxldGVkIGJ5IHBhcnRpY2lwYW50IGR1cmluZyB0aGUgdHJpYWwuCgp0b3RhbF9yZW1vdmVkX3N1Z2dlc3Rpb25fY2hhcnMKCjogICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGluc2VydGVkIGZyb20gYSBzdWdnZXN0aW9uIHRoZW4gZGVsZXRlZCBieSBwYXJ0aWNpcGFudCBkdXJpbmcgdGhlIHRyaWFsLgoKdG90YWxfZmluYWxfbWFudWFsX2NoYXJzCgo6ICAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGZpbmFsIHBhcnRpY2lwYW50IGlucHV0IHRoYXQgd2VyZSBtYW51YWxseSBpbnNlcnRlZC4KCnRvdGFsX2FkZGVkX2NoYXJzCgo6ICAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBpbnNlcnRlZCBkdXJpbmcgdGhlIHRyaWFsIGVpdGhlciBmcm9tIHN1Z2dlc3Rpb24gb3IgbWFudWFsIGlucHV0IChzb21lIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCBsYXRlcikuCgpkb2VzX3RyaWFsX2hhdmVfZXJyb3JzCgo6ICAgVFJVRSBpZiBpbmNvcnJlY3QgY2hhcmFjdGVycyB3ZXJlIGluc2VydGVkIGF0IHNvbWUgcG9pbnQgZHVyaW5nIHRoZSB0cmlhbCAodGhleSBoYWQgdG8gYmUgcmVtb3ZlZCBsYXRlciB0byB2YWxpZGF0ZSB0aGUgdHJpYWwpLgoKcGhyYXNlX2NvbXBsZXRpb25fc3RhcnQKCjogICBUaGUgZGF0ZSBhbmQgdGltZSB3aGVyZSB0aGUgZmlyc3QgY2hhcmFjdGVyIHdhcyBpbnNlcnRlZCBkdXJpbmcgdGhlIHRyaWFsIChbSVNPIDg2MDFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxKSBmb3JtYXQpLgoKcGhyYXNlX2NvbXBsZXRpb25fZW5kCgo6ICAgVGhlIGRhdGUgYW5kIHRpbWUgd2hlcmUgdGhlIHBocmFzZSB3YXMgZnVsbHkgY29tcGxldGVkIGFuZCBjb3JyZWN0ICpmb3IgdGhlIGZpcnN0IHRpbWUqIChbSVNPIDg2MDFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxKSBmb3JtYXQpLiBOb3RlIHRoYXQgdGhpcyBpcyBiZWZvcmUgdGhlIHRyaWFsIHdhcyB2YWxpZGF0ZWQuCgpwaHJhc2VfY29tcGxldGlvbl9kdXJhdGlvbgoKOiAgIFRoZSB0aW1lIGl0IHRvb2sgZm9yIHRoZSBwYXJ0aWNpcGFudCB0byBjb21wbGV0ZSB0aGUgcGhyYXNlIGluIHNlY29uZHMuCgphdmdfc3VnZ2VzdGlvbl9kZWxheQoKOiAgIFRoZSBhdmVyYWdlIHRpbWUgaXQgdG9vayBmb3Igc3VnZ2VzdGlvbnMgdG8gYmUgdXBkYXRlZCBkdXJpbmcgdGhlIHRyaWFsLgoKc2Rfc3VnZ2VzdGlvbl9kZWxheQoKOiAgIFRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIHRpbWUgaXQgdG9vayBmb3Igc3VnZ2VzdGlvbnMgdG8gYmUgdXBkYXRlZCBkdXJpbmcgdGhlIHRyaWFsLgoKdG90YWxfYmx1cl9ldmVudHMKCjogICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBleHBlcmltZW50IHdlYiBwYWdlIHdhcyB1bmZvY3VzZWQgZHVyaW5nIHRoZSB0cmlhbC4KCndhc190cmlhbF9ibHVycmVkCgo6ICAgVFJVRSBpZiB0b3RhbF9ibHVyX2V2ZW50cyBcPiAwCgp0aGVvcmV0aWNhbF9rZXlfc2F2aW5nCgo6ICAgVGhlIG1heGltdW0ga2V5IHN0cm9rZSBzYXZpbmcgb2YgdGhlIHRyaWFsLiBUaGlzIHNob3VsZCBiZSBjbG9zZSBmcm9tIGBhY2N1cmFjeS5gCgphY3R1YWxfa2V5X3NhdmluZ19ub19lZGl0aW5nCgo6ICAgVGhlIGtleSBzdHJva2Ugc2F2aW5nIGV4Y2x1ZGluZyBlcnJvcnMuCgphY3R1YWxfa2V5X3NhdmluZwoKOiAgIFRoZSBrZXkgc3Ryb2tlIHNhdmluZy4KCmNwcwoKOiAgIEVudHJ5IHNwZWVkIGluIGNoYXJhY3RlcnMgcGVyIHNlY29uZCAoaS5lLiBgKHRvdGFsX2NoYXJzIC0gMSkgLyB0cmlhbF9kdXJhdGlvbmApLgoKaGFzX2xvbmdfc3VnZ2VzdGlvbl9kZWxheQoKOiAgIElmIGF0IGxlYXN0IG9uZSBzdWdnZXN0aW9uIHNldCB0b29rIG1vcmUgdGhhbiAzMDBtcyB0byB1cGRhdGUuCgppc19ydW5fbWVhc3VyZWQKCjogICBJZiB0aGUgcnVuIGluY2x1ZGluZyB0aGlzIHRyaWFsIHdhcyBpbmNsdWRlZCBpbiBvdXIgc3RhdGlzdGljYWwgYW5hbHlzaXMuCgppc190cmlhbF9tZWFzdXJlZAoKOiAgIElmIHRoaXMgdHJpYWwgd2FzIGluY2x1ZGVkIGluIG91ciBzdGF0aXN0aWNhbCBhbmFseXNpcy4gU2VlIGJlbG93IGZvciByZWFzb25zIHRvIGV4Y2x1ZGUgYSB0cmlhbHMgZnJvbSBvdXIgYW5hbHlzaXMuCgp0cmlhbF9yZWplY3Rpb25fcmVhc29uCgo6ICAgVGhlIHJlYXNvbiBmb3IgZXhjbHVkaW5nIHRoZSB0cmlhbCBmcm9tIHRoZSBhbmFseXNpcy4gVGhpcyBpcyBvbmx5IHByb3ZpZGVkIGZvciB0cmlhbHMgdGhhdCB3ZXJlIGV4Y2x1ZGVkLgoKYGBge3J9CnRyaWFscyA8LSByZWFkX2RldmljZV90cmlhbHMobWVhc3VyZWRfb25seSA9IEZBTFNFKQp0cmlhbHMKYGBgCgojIyBFdmVudHMKClRoaXMgbGFyZ2UgdGFibGUgY29udGFpbnMgYWxsIGV2ZW50IGxvZ3MgcmVjb3JkZWQgZHVyaW5nIG91ciBleHBlcmltZW50LiBJdCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CgpwYXJ0aWNpcGFudAoKOiAgIFRoZSBwYXJ0aWNpcGFudCBpZGVudGlmaWVyLgoKYWNjdXJhY3kKCjogICBUaGUgYWNjdXJhY3kgY29uZGl0aW9uLgoKZGV2aWNlCgo6ICAgVGhlIGRldmljZSBjb25kaXRpb24uCgp0cmlhbF9pZAoKOiAgIFRoZSB0cmlhbCBpZGVudGlmaWVyLgoKZXZlbnRfbnVtYmVyCgo6ICAgVGhlIG51bWJlciBvZiB0aGUgZXZlbnQgaW4gdGhlIHRyaWFsLgoKdHlwZQoKOiAgIFRoZSB0eXBlIG9mIHRoZSBldmVudC4gSU5JVDogdHJpYWwgaW5pdGlhbGl6YXRpb24sIFVQREFURV9TVUdHRVNUSU9OUzogdXBkYXRlIG9mIHRoZSBzdWdnZXN0aW9ucywgSU5QVVRfQ0hBUjogbWFudWFsIGluc2VydGlvbiBvZiBhIGNoYXJhY3RlciBieSB0aGUgcGFydGljaXBhbnQgYXQgdGhlIGVuZCBvZiB0aGVpciBpbnB1dCwgREVMRVRFX0NIQVI6IHJlbW92YWwgb2YgdGhlIGxhc3QgaW5wdXQgY2hhcmFjdGVyIGJ5IHRoZSBwYXJ0aWNpcGFudCwgSU5QVVRfU1VHR0VTVElPTjogaW5zZXJ0aW9uIG9mIGEgc3VnZ2VzdGlvbi4KCmlucHV0Cgo6ICAgVGhlIGNvbnRlbnQgb2YgcGFydGljaXBhbnQncyBpbnB1dCBhZnRlciB0aGUgZXZlbnQuCgppc19pbnB1dF9jb3JyZWN0Cgo6ICAgSWYgdGhlcmUgaXMgbm8gZXJyb3JzIGluIHRoZSBpbnB1dCBhZnRlciB0aGUgZXZlbnQuCgphZGRlZF9pbnB1dAoKOiAgIFRoZSBjaGFyYWN0ZXJzIGFkZGVkIHRvIHRoZSBpbnB1dCBhcyBhIHJlc3VsdCBvZiB0aGUgZXZlbnQuCgpyZW1vdmVkX2lucHV0Cgo6ICAgVGhlIGNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dCBhcyBhIHJlc3VsdCBvZiB0aGUgZXZlbnQuCgp0b3RhbF9hZGRlZF9jaGFycwoKOiAgIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhZGRlZCBhcyByZXN1bHQgb2YgdGhlIGV2ZW50IChtYXkgYmUgbmVnYXRpdmUpLgoKcmVtYWluaW5nX2tleV9zdHJva2VzCgo6ICAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXIgbGVmdCB0byBjb21wbGV0ZSB0aGUgcGhyYXNlLgoKaXNfdGFyZ2V0X2NvbXBsZXRlZAoKOiAgIElmIHRoZSBwaHJhc2UgaXMgY29tcGxldGVkLgoKcmVxdWVzdF90aW1lCgo6ICAgRm9yIGV2ZW50cyByZXN1bHRpbmcgZnJvbSBhIHdlYiByZXF1ZXN0IChpbiBwYXJ0aWN1bGFyIHVwZGF0ZXMgb2Ygd29yZCBzdWdnZXN0aW9ucyksIHRoZSBtb21lbnQgdGhlIHJlcXVlc3Qgd2FzIHNlbnQgdG8gdGhlIHNlcnZlciAoW0lTTyA4NjAxXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSkgZm9ybWF0KS4KCnJlc3BvbnNlX3RpbWUKCjogICBGb3IgZXZlbnRzIHJlc3VsdGluZyBmcm9tIGEgd2ViIHJlcXVlc3QgKGluIHBhcnRpY3VsYXIgdXBkYXRlcyBvZiB3b3JkIHN1Z2dlc3Rpb25zKSwgdGhlIG1vbWVudCB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIHdhcyByZWNlaXZlZCAoW0lTTyA4NjAxXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSkgZm9ybWF0KS4KCnRpbWUKCjogICBUaGUgZGF0ZSBhbmQgdGltZSBvZiB0aGUgZXZlbnQgKFtJU08gODYwMV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEpIGZvcm1hdCkuCgpkaWZmX3RpbWUKCjogICBEdXJhdGlvbiBiZXR3ZWVuIHRoaXMgZXZlbnQgYW5kIHRoZSBwcmV2aW91cyBvbmUuCgppc19ydW5fbWVhc3VyZWQKCjogICBJZiB0aGUgcnVuIGluY2x1ZGluZyB0aGlzIGV2ZW50IHdhcyBpbmNsdWRlZCBpbiBvdXIgc3RhdGlzdGljYWwgYW5hbHlzaXMuCgppc190cmlhbF9tZWFzdXJlZAoKOiAgIElmIHRoZSB0cmlhbCBpbmNsdWRpbmcgdGhpcyBldmVudCB3YXMgaW5jbHVkZWQgaW4gb3VyIHN0YXRpc3RpY2FsIGFuYWx5c2lzLgoKaXNfZXZlbnRfbWVhc3VyZWQKCjogICBJZiB0aGlzIGV2ZW50IHdhcyBpbmNsdWRlZCBpbiBvdXIgc3RhdGlzdGljYWwgYW5hbHlzaXMuCgpldmVudF9yZWplY3Rpb25fcmVhc29uCgo6ICAgVGhlIHJlYXNvbiBmb3IgZXhjbHVkaW5nIHRoZSBldmVudCBmcm9tIHRoZSBhbmFseXNpcy4gVGhpcyBpcyBvbmx5IHByb3ZpZGVkIGZvciBldmVudHMgdGhhdCB3ZXJlIGV4Y2x1ZGVkLgoKdGFyZ2V0X3dvcmQKCjogICBUaGUgbmV4dCB3b3JkIHRvIHR5cGUgb3IgdGhlIHdvcmQgY3VycmVudGx5IGJlaW5nIHR5cGVkLgoKdGFyZ2V0X3dvcmRfbnVtYmVyCgo6ICAgVGhlIG51bWJlciBvZiB0aGUgdGFyZ2V0IHdvcmQgaW4gdGhlIHBocmFzZS4KCiMgTW9uaXRvcmluZwoKIyMgVG90YWwgdHJpYWxzCgpgYGB7cn0KdHJpYWxzICU+JSBmaWx0ZXIoaXNfcnVuX21lYXN1cmVkICYgaXNfcHJhY3RpY2UgPT0gRikgJT4lIGNvdW50KGlzX3RyaWFsX21lYXN1cmVkKQpgYGAKCiMjIE1lYXN1cmVkIFRyaWFscyB3aXRoIGVycm9ycwoKYGBge3J9CnRyaWFscyAlPiUgZmlsdGVyKGlzX3RyaWFsX21lYXN1cmVkKSAlPiUKICBjb3VudChkb2VzX3RyaWFsX2hhdmVfZXJyb3JzKQpgYGAKCiMjIEJsdXJyZWQgVHJpYWxzCgpUaGUgZm9sbG93aW5nIHRyaWFscyB3ZXJlIHJlbW92ZWQgYmVjYXVzZSB0aGUgcGFydGljaXBhbnQgd2FzIGludGVycnVwdGVkICh0aGUgcGFnZSB3YXMgdW5mb2N1c2VkKS4KCmBgYHtyfQp0cmlhbHMgJT4lIGZpbHRlcihpc19ydW5fbWVhc3VyZWQgJiBpc19wcmFjdGljZSA9PSBGKSAlPiUKICBjb3VudCh3YXNfdHJpYWxfYmx1cnJlZCkKYGBgCgojIyBUcmlhbHMgd2l0aCBsb25nIHN1Z2dlc3Rpb24gdXBkYXRlIHRpbWVzCgpgYGB7cn0KdHJpYWxzICU+JSBmaWx0ZXIoaXNfcnVuX21lYXN1cmVkICYgaXNfcHJhY3RpY2UgPT0gRikgJT4lCiAgY291bnQoaGFzX2xvbmdfc3VnZ2VzdGlvbl9kZWxheSkKYGBgCgojIEFuYWx5c2lzIE5vdGVib29rcwoKLSAgIFtPYmplY3RpdmUgRGF0YSBBbmFseXNpc10oLi9kZXZpY2Utb2JqZWN0aXZlLm5iLmh0bWwpCi0gICBbU3ViamVjdGl2ZSBEYXRhIEFuYWx5c2lzXSguL2RldmljZS1zdWJqZWN0aXZlLm5iLmh0bWwpCi0gICBbRGVtb2dyYXBoaWMgRGF0YSBBbmFseXNpc10oLi9kZXZpY2UtZGVtb2dyYXBoaWNzLm5iLmh0bWwpCg==