Vectors in R : A vector in R are one-dimensional arrays that holds elements of the same data type. It can contain numeric, character, or logical values. Vectors are the most fundamental data structure in R, and many R operations are optimized to work with vectors.

Advantages of Vectors in R:

Simple and Efficient:

Vectors are easy to create and manipulate using built-in R functions.

Element-wise operations make mathematical computations very concise and fast.

Memory Efficient:

Since all elements are of the same type, vectors use memory efficiently compared to other data structures like lists.

Supports Vectorized Operations:

Operations can be performed on entire vectors without writing loops, leading to clean and efficient code.

Foundation for Advanced Structures:

Vectors are building blocks for matrices, data frames, and arrays.

Rich Set of Functions:

R provides many vector-specific functions (length(), sum(), mean(), sort(), etc.) for data manipulation.

Disadvantages of Vectors in R:

Same Data Type Only:

All elements in a vector must be of the same type. Mixing data types automatically coerces them to a common type (which might lead to unexpected results).

## Example:

v <- c(1, "apple")  # numeric coerced to character → "1"
v
[1] "1"     "apple"

Cannot hold heterogeneous data like lists or tables where each element has a different type or structure.

No Key/Value Pairing:

Vectors don’t support named access like dictionaries or hash maps in other languages (except with named vectors, which have limitations).

Not Hierarchical:

Vectors are flat structures. Nested or multi-level data is better handled using lists or data frames.

Summary

Vectors in R are best used when we need to store a simple collection of homogeneous data—such as all numeric values, all character strings, or all logical values. They are ideal for performing arithmetic or logical operations on multiple values at once and are commonly used in statistical functions that require numeric inputs. Vectors also offer good performance in simulations and numerical computations, making them a fundamental structure in R for many mathematical and statistical tasks.

However, vectors should be avoided when working with heterogeneous data types, such as a mix of text, numbers, and booleans. If your data needs to be organized into rows and columns, a data frame is a better choice. For representing key-value pairs, nested structures, or hierarchical data, lists are more appropriate. Additionally, for large-scale tabular data that requires efficient indexing or column-wise operations, consider using data frames or tibbles (from the dplyr package) instead.


Types of Vectors

Type Description Example
Numeric Numbers (default type) c(1, 2.5, 3.14)
Integer Whole numbers c(1L, 2L, 3L)
Character Text strings c("apple", "banana", "cherry")
Logical TRUE / FALSE values c(TRUE, FALSE, TRUE)
Complex Complex numbers c(1+2i, 3+4i)

Creating Vectors

We can create a vector using the c() (combine) function.

# Numeric vector
numbers <- c(10, 20, 30)
print(numbers)
[1] 10 20 30
# Character vector
names <- c("Alice", "Bob", "Charlie")
print(names)
[1] "Alice"   "Bob"     "Charlie"
# Logical vector
flags <- c(TRUE, FALSE, TRUE, TRUE)
print(flags)
[1]  TRUE FALSE  TRUE  TRUE

🔹 Accessing Elements in a Vector

In R, you can access elements of a vector using square brackets [ ] with the position (index) of the element.

numbers <- c(10, 20, 30, 40, 50)

# Accessing the 3rd element
numbers[3]   # Output: 30
[1] 30
# Accessing the 1st and 4th elements
numbers[c(1, 4)]   # Output: 10 40
[1] 10 40
# Accessing all elements except the 2nd
numbers[-2]   # Output: 10 30 40 50
[1] 10 30 40 50

🔹 Vector Operations (Element-wise)

R performs element-wise operations on vectors, meaning that operations like addition, subtraction, multiplication, and division are applied to each corresponding element of the vectors.

a <- c(1, 2, 3)
b <- c(4, 5, 6)

# Addition
print(a + b)  # Output: 5 7 9
[1] 5 7 9
# Multiplication
print(a * b)  # Output: 4 10 18
[1]  4 10 18
# Logical Comparison
print(a > 1)  # Output: FALSE TRUE TRUE
[1] FALSE  TRUE  TRUE

🔹 Useful Vector Functions

R provides several built-in functions to perform operations on vectors.

v <- c(2, 4, 6, 8, 10)

length(v)     # Returns number of elements
[1] 5
sum(v)        # Returns sum: 30
[1] 30
mean(v)       # Average: 6
[1] 6
max(v)        # Max value: 10
[1] 10
min(v)        # Min value: 2
[1] 2
sort(v)       # Sorted vector
[1]  2  4  6  8 10

🔹 Vector Recycling

When vectors of unequal lengths are used in an operation, R recycles the shorter vector to match the length of the longer one.

Note: R will throw a warning if the length of the longer vector is not a multiple of the shorter one.

x <- c(1, 2, 3)
y <- c(10, 20)

# y is recycled: 10, 20, 10
print(x + y)  # Output: 11 22 13
Warning in x + y :
  longer object length is not a multiple of shorter object length
[1] 11 22 13

🔹 Sequence and Repetition

seq( ) function is used to create sequences:

rep( ) function is used to repeat elements:

# Sequence
seq1 <- 1:5            # Output: 1 2 3 4 5
seq2 <- seq(1, 10, 2)  # Output: 1 3 5 7 9
cat("seq1 : ",seq1 ,"\n")
seq1 :  1 2 3 4 5 
cat("seq1 : ",seq2 ,"\n")
seq1 :  1 3 5 7 9 
# Repetition
rep1 <- rep(1, times=5)        # 1 1 1 1 1
rep2 <- rep(c(1,2), times=3)   # 1 2 1 2 1 2
cat("rep1 : ",rep1 ,"\n")
rep1 :  1 1 1 1 1 
cat("rep2 : ",rep2 ,"\n")
rep2 :  1 2 1 2 1 2 

Summary

Feature Example
Create vector c(1, 2, 3)
Access elements x[2], x[c(1,3)]
Length length(x)
Arithmetic x + y, x * y
Sequence 1:10, seq(1, 5, 0.5)
Repetition rep(1, times=5)
Filtering x[x > 10]

LS0tDQp0aXRsZTogIkludHJvZHVjdGlvbiB0byBWZWN0b3JzIGluIFIiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoqKlZlY3RvcnMgaW4gUiA6KiogQSB2ZWN0b3IgaW4gUiBhcmUgKipvbmUtZGltZW5zaW9uYWwgYXJyYXlzKiogdGhhdCBob2xkcyBlbGVtZW50cyBvZiB0aGUgc2FtZSBkYXRhIHR5cGUuIEl0IGNhbiBjb250YWluIG51bWVyaWMsIGNoYXJhY3Rlciwgb3IgbG9naWNhbCB2YWx1ZXMuIFZlY3RvcnMgYXJlIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGluIFIsIGFuZCBtYW55IFIgb3BlcmF0aW9ucyBhcmUgb3B0aW1pemVkIHRvIHdvcmsgd2l0aCB2ZWN0b3JzLg0KDQojIyBBZHZhbnRhZ2VzIG9mIFZlY3RvcnMgaW4gUjoNCg0KKipTaW1wbGUgYW5kIEVmZmljaWVudDoqKiANCg0KVmVjdG9ycyBhcmUgZWFzeSB0byBjcmVhdGUgYW5kIG1hbmlwdWxhdGUgdXNpbmcgYnVpbHQtaW4gUiBmdW5jdGlvbnMuDQoNCkVsZW1lbnQtd2lzZSBvcGVyYXRpb25zIG1ha2UgbWF0aGVtYXRpY2FsIGNvbXB1dGF0aW9ucyB2ZXJ5IGNvbmNpc2UgYW5kIGZhc3QuDQoNCioqTWVtb3J5IEVmZmljaWVudDoqKg0KDQpTaW5jZSBhbGwgZWxlbWVudHMgYXJlIG9mIHRoZSBzYW1lIHR5cGUsIHZlY3RvcnMgdXNlIG1lbW9yeSBlZmZpY2llbnRseSBjb21wYXJlZCB0byBvdGhlciBkYXRhIHN0cnVjdHVyZXMgbGlrZSBsaXN0cy4NCg0KKipTdXBwb3J0cyBWZWN0b3JpemVkIE9wZXJhdGlvbnM6KioNCg0KT3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uIGVudGlyZSB2ZWN0b3JzIHdpdGhvdXQgd3JpdGluZyBsb29wcywgbGVhZGluZyB0byBjbGVhbiBhbmQgZWZmaWNpZW50IGNvZGUuDQoNCioqRm91bmRhdGlvbiBmb3IgQWR2YW5jZWQgU3RydWN0dXJlczoqKg0KDQpWZWN0b3JzIGFyZSBidWlsZGluZyBibG9ja3MgZm9yIG1hdHJpY2VzLCBkYXRhIGZyYW1lcywgYW5kIGFycmF5cy4NCg0KKipSaWNoIFNldCBvZiBGdW5jdGlvbnM6KioNCg0KUiBwcm92aWRlcyBtYW55IHZlY3Rvci1zcGVjaWZpYyBmdW5jdGlvbnMgKGxlbmd0aCgpLCBzdW0oKSwgbWVhbigpLCBzb3J0KCksIGV0Yy4pIGZvciBkYXRhIG1hbmlwdWxhdGlvbi4NCg0KIyMgRGlzYWR2YW50YWdlcyBvZiBWZWN0b3JzIGluIFI6DQoNCioqU2FtZSBEYXRhIFR5cGUgT25seToqKg0KDQpBbGwgZWxlbWVudHMgaW4gYSB2ZWN0b3IgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLiBNaXhpbmcgZGF0YSB0eXBlcyBhdXRvbWF0aWNhbGx5IGNvZXJjZXMgdGhlbSB0byBhIGNvbW1vbiB0eXBlICh3aGljaCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cykuDQoNCmBgYHtyfQ0KIyMgRXhhbXBsZToNCg0KdiA8LSBjKDEsICJhcHBsZSIpICAjIG51bWVyaWMgY29lcmNlZCB0byBjaGFyYWN0ZXIg4oaSICIxIg0Kdg0KYGBgDQoNCkNhbm5vdCBob2xkIGhldGVyb2dlbmVvdXMgZGF0YSBsaWtlIGxpc3RzIG9yIHRhYmxlcyB3aGVyZSBlYWNoIGVsZW1lbnQgaGFzIGEgZGlmZmVyZW50IHR5cGUgb3Igc3RydWN0dXJlLg0KDQoqKk5vIEtleS9WYWx1ZSBQYWlyaW5nOioqDQoNClZlY3RvcnMgZG9u4oCZdCBzdXBwb3J0IG5hbWVkIGFjY2VzcyBsaWtlIGRpY3Rpb25hcmllcyBvciBoYXNoIG1hcHMgaW4gb3RoZXIgbGFuZ3VhZ2VzIChleGNlcHQgd2l0aCBuYW1lZCB2ZWN0b3JzLCB3aGljaCBoYXZlIGxpbWl0YXRpb25zKS4NCg0KKipOb3QgSGllcmFyY2hpY2FsOioqDQoNClZlY3RvcnMgYXJlIGZsYXQgc3RydWN0dXJlcy4gTmVzdGVkIG9yIG11bHRpLWxldmVsIGRhdGEgaXMgYmV0dGVyIGhhbmRsZWQgdXNpbmcgbGlzdHMgb3IgZGF0YSBmcmFtZXMuDQoNCiMjIFN1bW1hcnkNClZlY3RvcnMgaW4gUiBhcmUgYmVzdCB1c2VkIHdoZW4gd2UgbmVlZCB0byBzdG9yZSBhIHNpbXBsZSBjb2xsZWN0aW9uIG9mIGhvbW9nZW5lb3VzIGRhdGHigJRzdWNoIGFzIGFsbCBudW1lcmljIHZhbHVlcywgYWxsIGNoYXJhY3RlciBzdHJpbmdzLCBvciBhbGwgbG9naWNhbCB2YWx1ZXMuIFRoZXkgYXJlIGlkZWFsIGZvciBwZXJmb3JtaW5nIGFyaXRobWV0aWMgb3IgbG9naWNhbCBvcGVyYXRpb25zIG9uIG11bHRpcGxlIHZhbHVlcyBhdCBvbmNlIGFuZCBhcmUgY29tbW9ubHkgdXNlZCBpbiBzdGF0aXN0aWNhbCBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIG51bWVyaWMgaW5wdXRzLiBWZWN0b3JzIGFsc28gb2ZmZXIgZ29vZCBwZXJmb3JtYW5jZSBpbiBzaW11bGF0aW9ucyBhbmQgbnVtZXJpY2FsIGNvbXB1dGF0aW9ucywgbWFraW5nIHRoZW0gYSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgaW4gUiBmb3IgbWFueSBtYXRoZW1hdGljYWwgYW5kIHN0YXRpc3RpY2FsIHRhc2tzLg0KDQpIb3dldmVyLCB2ZWN0b3JzIHNob3VsZCBiZSBhdm9pZGVkIHdoZW4gd29ya2luZyB3aXRoIGhldGVyb2dlbmVvdXMgZGF0YSB0eXBlcywgc3VjaCBhcyBhIG1peCBvZiB0ZXh0LCBudW1iZXJzLCBhbmQgYm9vbGVhbnMuIElmIHlvdXIgZGF0YSBuZWVkcyB0byBiZSBvcmdhbml6ZWQgaW50byByb3dzIGFuZCBjb2x1bW5zLCBhIGRhdGEgZnJhbWUgaXMgYSBiZXR0ZXIgY2hvaWNlLiBGb3IgcmVwcmVzZW50aW5nIGtleS12YWx1ZSBwYWlycywgbmVzdGVkIHN0cnVjdHVyZXMsIG9yIGhpZXJhcmNoaWNhbCBkYXRhLCBsaXN0cyBhcmUgbW9yZSBhcHByb3ByaWF0ZS4gQWRkaXRpb25hbGx5LCBmb3IgbGFyZ2Utc2NhbGUgdGFidWxhciBkYXRhIHRoYXQgcmVxdWlyZXMgZWZmaWNpZW50IGluZGV4aW5nIG9yIGNvbHVtbi13aXNlIG9wZXJhdGlvbnMsIGNvbnNpZGVyIHVzaW5nIGRhdGEgZnJhbWVzIG9yIHRpYmJsZXMgKGZyb20gdGhlIGRwbHlyIHBhY2thZ2UpIGluc3RlYWQuDQoNCi0tLQ0KDQojIyMgIFR5cGVzIG9mIFZlY3RvcnMNCg0KfCBUeXBlICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgIHwgRXhhbXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCBOdW1lcmljICAgfCBOdW1iZXJzIChkZWZhdWx0IHR5cGUpIHwgYGMoMSwgMi41LCAzLjE0KWAgICAgICAgICAgICAgICAgfA0KfCBJbnRlZ2VyICAgfCBXaG9sZSBudW1iZXJzICAgICAgICAgIHwgYGMoMUwsIDJMLCAzTClgICAgICAgICAgICAgICAgICAgfA0KfCBDaGFyYWN0ZXIgfCBUZXh0IHN0cmluZ3MgICAgICAgICAgIHwgYGMoImFwcGxlIiwgImJhbmFuYSIsICJjaGVycnkiKWAgfA0KfCBMb2dpY2FsICAgfCBUUlVFIC8gRkFMU0UgdmFsdWVzICAgIHwgYGMoVFJVRSwgRkFMU0UsIFRSVUUpYCAgICAgICAgICAgfA0KfCBDb21wbGV4ICAgfCBDb21wbGV4IG51bWJlcnMgICAgICAgIHwgYGMoMSsyaSwgMys0aSlgICAgICAgICAgICAgICAgICAgfA0KDQotLS0NCg0KIyMjICBDcmVhdGluZyBWZWN0b3JzDQoNCldlIGNhbiBjcmVhdGUgYSB2ZWN0b3IgdXNpbmcgdGhlIGBjKClgIChjb21iaW5lKSBmdW5jdGlvbi4NCg0KYGBge3J9DQojIE51bWVyaWMgdmVjdG9yDQpudW1iZXJzIDwtIGMoMTAsIDIwLCAzMCkNCnByaW50KG51bWJlcnMpDQoNCiMgQ2hhcmFjdGVyIHZlY3Rvcg0KbmFtZXMgPC0gYygiQWxpY2UiLCAiQm9iIiwgIkNoYXJsaWUiKQ0KcHJpbnQobmFtZXMpDQoNCiMgTG9naWNhbCB2ZWN0b3INCmZsYWdzIDwtIGMoVFJVRSwgRkFMU0UsIFRSVUUsIFRSVUUpDQpwcmludChmbGFncykNCmBgYA0KDQotLS0NCg0KDQoNCiMjIyDwn5S5IEFjY2Vzc2luZyBFbGVtZW50cyBpbiBhIFZlY3Rvcg0KSW4gUiwgeW91IGNhbiBhY2Nlc3MgZWxlbWVudHMgb2YgYSB2ZWN0b3IgdXNpbmcgc3F1YXJlIGJyYWNrZXRzIFsgXSB3aXRoIHRoZSBwb3NpdGlvbiAoaW5kZXgpIG9mIHRoZSBlbGVtZW50Lg0KDQpgYGB7cn0NCm51bWJlcnMgPC0gYygxMCwgMjAsIDMwLCA0MCwgNTApDQoNCiMgQWNjZXNzaW5nIHRoZSAzcmQgZWxlbWVudA0KbnVtYmVyc1szXSAgICMgT3V0cHV0OiAzMA0KDQojIEFjY2Vzc2luZyB0aGUgMXN0IGFuZCA0dGggZWxlbWVudHMNCm51bWJlcnNbYygxLCA0KV0gICAjIE91dHB1dDogMTAgNDANCg0KIyBBY2Nlc3NpbmcgYWxsIGVsZW1lbnRzIGV4Y2VwdCB0aGUgMm5kDQpudW1iZXJzWy0yXSAgICMgT3V0cHV0OiAxMCAzMCA0MCA1MA0KDQpgYGANCg0KDQotLS0NCg0KIyMjIPCflLkgVmVjdG9yIE9wZXJhdGlvbnMgKEVsZW1lbnQtd2lzZSkNClIgcGVyZm9ybXMgZWxlbWVudC13aXNlIG9wZXJhdGlvbnMgb24gdmVjdG9ycywgbWVhbmluZyB0aGF0IG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiwgc3VidHJhY3Rpb24sIG11bHRpcGxpY2F0aW9uLCBhbmQgZGl2aXNpb24gYXJlIGFwcGxpZWQgdG8gZWFjaCBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHZlY3RvcnMuDQoNCmBgYHtyfQ0KYSA8LSBjKDEsIDIsIDMpDQpiIDwtIGMoNCwgNSwgNikNCg0KIyBBZGRpdGlvbg0KcHJpbnQoYSArIGIpICAjIE91dHB1dDogNSA3IDkNCg0KIyBNdWx0aXBsaWNhdGlvbg0KcHJpbnQoYSAqIGIpICAjIE91dHB1dDogNCAxMCAxOA0KDQojIExvZ2ljYWwgQ29tcGFyaXNvbg0KcHJpbnQoYSA+IDEpICAjIE91dHB1dDogRkFMU0UgVFJVRSBUUlVFDQpgYGANCg0KDQotLS0NCg0KIyMjIPCflLkgVXNlZnVsIFZlY3RvciBGdW5jdGlvbnMNClIgcHJvdmlkZXMgc2V2ZXJhbCBidWlsdC1pbiBmdW5jdGlvbnMgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIHZlY3RvcnMuDQoNCmBgYHtyfQ0KdiA8LSBjKDIsIDQsIDYsIDgsIDEwKQ0KDQpsZW5ndGgodikgICAgICMgUmV0dXJucyBudW1iZXIgb2YgZWxlbWVudHMNCnN1bSh2KSAgICAgICAgIyBSZXR1cm5zIHN1bTogMzANCm1lYW4odikgICAgICAgIyBBdmVyYWdlOiA2DQptYXgodikgICAgICAgICMgTWF4IHZhbHVlOiAxMA0KbWluKHYpICAgICAgICAjIE1pbiB2YWx1ZTogMg0Kc29ydCh2KSAgICAgICAjIFNvcnRlZCB2ZWN0b3INCmBgYA0KDQoNCi0tLQ0KDQojIyMg8J+UuSBWZWN0b3IgUmVjeWNsaW5nDQoNCldoZW4gdmVjdG9ycyBvZiB1bmVxdWFsIGxlbmd0aHMgYXJlIHVzZWQgaW4gYW4gb3BlcmF0aW9uLCBSIHJlY3ljbGVzIHRoZSBzaG9ydGVyIHZlY3RvciB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXIgb25lLg0KDQoqKk5vdGU6KiogUiB3aWxsIHRocm93IGEgd2FybmluZyBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXIgdmVjdG9yIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBzaG9ydGVyIG9uZS4NCg0KYGBge3J9DQp4IDwtIGMoMSwgMiwgMykNCnkgPC0gYygxMCwgMjApDQoNCiMgeSBpcyByZWN5Y2xlZDogMTAsIDIwLCAxMA0KcHJpbnQoeCArIHkpICAjIE91dHB1dDogMTEgMjIgMTMNCmBgYA0KDQoNCi0tLQ0KDQojIyMg8J+UuSBTZXF1ZW5jZSBhbmQgUmVwZXRpdGlvbg0Kc2VxKCApIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIHNlcXVlbmNlczoNCg0KcmVwKCApIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVwZWF0IGVsZW1lbnRzOg0KDQpgYGB7cn0NCiMgU2VxdWVuY2UNCnNlcTEgPC0gMTo1ICAgICAgICAgICAgIyBPdXRwdXQ6IDEgMiAzIDQgNQ0Kc2VxMiA8LSBzZXEoMSwgMTAsIDIpICAjIE91dHB1dDogMSAzIDUgNyA5DQpjYXQoInNlcTEgOiAiLHNlcTEgLCJcbiIpDQpjYXQoInNlcTEgOiAiLHNlcTIgLCJcbiIpDQoNCiMgUmVwZXRpdGlvbg0KcmVwMSA8LSByZXAoMSwgdGltZXM9NSkgICAgICAgICMgMSAxIDEgMSAxDQpyZXAyIDwtIHJlcChjKDEsMiksIHRpbWVzPTMpICAgIyAxIDIgMSAyIDEgMg0KY2F0KCJyZXAxIDogIixyZXAxICwiXG4iKQ0KY2F0KCJyZXAyIDogIixyZXAyICwiXG4iKQ0KYGBgDQoNCg0KLS0tDQoNCiMjIyAgU3VtbWFyeQ0KDQp8IEZlYXR1cmUgICAgICAgICB8IEV4YW1wbGUgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IENyZWF0ZSB2ZWN0b3IgICB8IGBjKDEsIDIsIDMpYCAgICAgICAgICAgICB8DQp8IEFjY2VzcyBlbGVtZW50cyB8IGB4WzJdYCwgYHhbYygxLDMpXWAgICAgICB8DQp8IExlbmd0aCAgICAgICAgICB8IGBsZW5ndGgoeClgICAgICAgICAgICAgICB8DQp8IEFyaXRobWV0aWMgICAgICB8IGB4ICsgeWAsIGB4ICogeWAgICAgICAgICB8DQp8IFNlcXVlbmNlICAgICAgICB8IGAxOjEwYCwgYHNlcSgxLCA1LCAwLjUpYCB8DQp8IFJlcGV0aXRpb24gICAgICB8IGByZXAoMSwgdGltZXM9NSlgICAgICAgICB8DQp8IEZpbHRlcmluZyAgICAgICB8IGB4W3ggPiAxMF1gICAgICAgICAgICAgICB8DQoNCi0tLQ0KDQoNCg==