PROBLEM 1. ABOUT BOND VALUATION

You have to valuate a bond for 10 different coupon rates. Read directions:

The characteristics of this bond are:

You have to valuate this bond for 16 coupon annual rates starting from 1% up to 3%, jumping by 0.20%: CR = [1.00%, 1.20%, 1.40%, … , 2.60%, 2.80%, 3.00%] You MUST write a function for the bond valuation, and you MUST use a loop to get the 16 bond values for the different coupon rates.

At the end, you have to:

  1. Save (in some place like a matrix) the 16 different values of the bond valuation, and the 16 coupon rates.

  2. Do a plot to show how the value of the bond changes with the 16 different coupon rates

PROBLEM 1. ABOUT BOND VALUATION SOLUTION

WORKSHOP 2 PRESENTED A CHALLENGE WHERE WE SOLVED FOR BOND PRICE, THE DIFERENCE BEING THAT WORKSHOP 2 HAD INTEREST AS THE INDEPENDENT VARIABLE AND IN THIS CASE INTEREST WAS FIXED AND THE DEPENDENT VARIABLE WAS THE COUPON RATE

THEREFORE, MY APROACH WAS TO WORK WITH VECTORS FOR CASH FLOWS, CALCULATE THE PRESENT VALUES OF EACH CASH FLOW AND COUPON PERIODS, AND THEN ILL OBTAIN THE BONDPRICE

FIRST I’M GOING TO ORGANIZE THE DATA PRESENTED IN THE PROBLEM

BOND PRINCIPAL: $8,000,000 Time to maturity: 10 years ANNUAL Rate (YTM): 15% Compounded Monthly FROM 1% - 3%

THEN I WILL APPLY SOME LINES OF CODE THAT WILL HELP ME VALUE THE BONDS

BOND 1

bondprice<-function(principal,ttm,couponrate,interestrate,periods) {
  # periods is the # of periods in the year for the compounding of interests
  # I calculate the coupon amount per period:
  coupon=(couponrate/periods)*principal
  # I create a vector for the cashflows. The last cashflow must be equal to 
  #   the coupon plus the principal
  cf<-c(rep(coupon,ttm*periods-1),coupon+principal)
  #  I used the rep function that repeats ttm*periods-1 times the coupon amount
  #  Then the vector cf will have all fixed coupon payments, and the end payment
  #   will be equal to the coupon plus the principal
  
  # I create a vector for the exponents that I need to use for the discount factor:
  # I use the seq function that creates sequential numbers from 1 to the last period
  exponents<-seq(1,ttm*periods)
  # I create a vector with the discount factors (1/(1+periodrate)^t)
  discountfactors <- 1 / (1+interestrate/periods)^exponents
  
  # I get the sum of all present values. The present values are equal to
  #   the cash flow times the corresponding discount factor:
  presentvalue <-  sum(cf*discountfactors)
  # Since the output of this function is this value, then 
  #  I return this present value as the bond price:
  return(presentvalue)
}

# Once I have my function, I just call my function with the parameters specified 
#  in the problem. 
# I run my function 16 times for the 16 coupon rates: 
bond1 <- bondprice(8000000,10,0.01,0.15,12)
print("The bond price when coupon rate is 1% is ")
[1] "The bond price when coupon rate is 1% is "
sprintf("$ %3.2f", bond1)
[1] "$ 2214934.26"

BOND 2

# I run the bondprice function with the last parameter=12 since the problem specifies
#   that the compounded is monthlyy, then periods in the year=12
bond2<- bondprice(8000000,10,0.012,0.15,12)
print("The bond price when coupon rate is 1.2% is ")
[1] "The bond price when coupon rate is 1.2% is "
sprintf("$ %3.2f", bond2)
[1] "$ 2297578.05"

BOND 3

bond3<- bondprice(8000000,10,0.014,0.15,12)
print("The bond price when the coupon rate is 1.4% is ")
[1] "The bond price when the coupon rate is 1.4% is "
sprintf("$ %3.2f", bond3 )
[1] "$ 2380221.85"

BOND 4

bond4<- bondprice(8000000,10,0.016,0.15,12)
print("The bond price when the coupon rate is 1.6% is ")
[1] "The bond price when the coupon rate is 1.6% is "
sprintf("$ %3.2f", bond4 )
[1] "$ 2462865.65"

BOND 5

bond5<- bondprice(8000000,10,0.018,0.15,12)
print("The bond price when the coupon rate is 1.8% is ")
[1] "The bond price when the coupon rate is 1.8% is "
sprintf("$ %3.2f", bond5 )
[1] "$ 2545509.44"

BOND 6

bond6<- bondprice(8000000,10,0.02,0.15,12)
print("The bond price when the coupon rate is 2% is ")
[1] "The bond price when the coupon rate is 2% is "
sprintf("$ %3.2f", bond6 )
[1] "$ 2628153.24"

BOND 7

bond7<- bondprice(8000000,10,0.022,0.15,12)
print("The bond price when the coupon rate is 2.2% is ")
[1] "The bond price when the coupon rate is 2.2% is "
sprintf("$ %3.2f", bond7 )
[1] "$ 2710797.03"

BOND 8

bond8<- bondprice(8000000,10,0.024,0.15,12)
print("The bond price when the coupon rate is 2.4% is ")
[1] "The bond price when the coupon rate is 2.4% is "
sprintf("$ %3.2f", bond8 )
[1] "$ 2793440.83"

BOND 9

bond9<- bondprice(8000000,10,0.026,0.15,12)
print("The bond price when the coupon rate is 2.6% is ")
[1] "The bond price when the coupon rate is 2.6% is "
sprintf("$ %3.2f", bond9 )
[1] "$ 2876084.63"

BOND 10

bond10<- bondprice(8000000,10,0.028,0.15,12)
print("The bond price when the coupon rate is 2.8% is ")
[1] "The bond price when the coupon rate is 2.8% is "
sprintf("$ %3.2f", bond10 )
[1] "$ 2958728.42"

BOND 11

bond11<- bondprice(8000000,10,0.03,0.15,12)
print("The bond price when the coupon rate is 3% is ")
[1] "The bond price when the coupon rate is 3% is "
sprintf("$ %3.2f", bond11 )
[1] "$ 3041372.22"

MATRIX

BVM<-matrix(c(bond1, bond2, bond3, bond4, bond5, bond6, bond7, bond8, bond9, bond10, bond11),nrow=1,ncol=11)
BVM
        [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]
[1,] 2214934 2297578 2380222 2462866 2545509 2628153 2710797
        [,8]    [,9]   [,10]   [,11]
[1,] 2793441 2876085 2958728 3041372
# I CREATE OBJECTS FOR ALL COUPON RATES
CR1 <- 1
CR2 <- 1.2
CR3 <- 1.4
CR4 <- 1.6
CR5 <- 1.8
CR6 <- 2
CR7 <- 2.2
CR8 <- 2.4
CR9 <- 2.6
CR10 <- 2.8
CR11 <- 3
# THEN I CREATE A MATRIX CONTAINING THE 11 DIFFERENT BOND COUPON RATES: BOND COUPON RATE MATRIX (BCRM)
BCRM<-matrix(c(CR1,CR2,CR3,CR4,CR5,CR6,CR7,CR8,CR9,CR10,CR11),nrow=1,ncol=11)
BCRM
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
[1,]    1  1.2  1.4  1.6  1.8    2  2.2  2.4  2.6   2.8     3

I then graph my bonds

plot(BCRM)

plot(BVM)

plot(bond1, CR1)

plot(bond2, CR2)

plot(bond3, CR3)

plot(bond4, CR4)

plot(bond5, CR5)

plot(bond6, CR6)

plot(bond7, CR7)

plot(bond8, CR8)

plot(bond9, CR9)

plot(bond10, CR10)

plot(bond11, CR11)

FINALLY I WANTED TO CREATE A GRAPH THAT HAD ALL THE BONDS AND COUPON RATES COMPASSED IN ONE GRAPH, BUT WHEN TRYING TO DO THIS I COULD ONLY GRAPH OBJECTS INDIVIDUALLY.

LS0tCnRpdGxlOiAiRXhhbSAxIFByYWN0aWNlIFBhcnQgdjUiCmF1dGhvcjogU3RlZmFuIFNjaHdlaXR6ZXIgLSBBMDEyMDk3NTUKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMgUFJPQkxFTSAxLiBBQk9VVCBCT05EIFZBTFVBVElPTgoKWW91IGhhdmUgdG8gdmFsdWF0ZSBhIGJvbmQgZm9yIDEwIGRpZmZlcmVudCBjb3Vwb24gcmF0ZXMuICBSZWFkIGRpcmVjdGlvbnM6CgpUaGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoaXMgYm9uZCBhcmU6CgotIFRpbWUgdG8gbWF0dXJpdHk6IDEwIHllYXJzOwoKLSBDb21wb3VuZGVkIG1vbnRobHk7CgotIEZhY2UgdmFsdWUgKHByaW5jaXBhbCkgaXMgJDgsMDAwLDAwMC4KCi0gQSBzcGVjaWZpYyBhbm51YWwgaW50ZXJlc3QgcmF0ZSAoeWllbGQgdG8gbWF0dXJpdHkpIG9mIDE1JQoKWW91IGhhdmUgdG8gdmFsdWF0ZSB0aGlzIGJvbmQgZm9yIDE2IGNvdXBvbiBhbm51YWwgcmF0ZXMgc3RhcnRpbmcgZnJvbSAxJSB1cCB0byAzJSwganVtcGluZyBieSAwLjIwJTogIENSID0gWzEuMDAlLCAxLjIwJSwgMS40MCUsIC4uLiAsIDIuNjAlLCAyLjgwJSwgMy4wMCVdCllvdSBNVVNUIHdyaXRlIGEgZnVuY3Rpb24gZm9yIHRoZSBib25kIHZhbHVhdGlvbiwgYW5kIHlvdSBNVVNUIHVzZSBhIGxvb3AgdG8gZ2V0IHRoZSAxNiBib25kIHZhbHVlcyBmb3IgdGhlIGRpZmZlcmVudCBjb3Vwb24gcmF0ZXMuCgpBdCB0aGUgZW5kLCB5b3UgaGF2ZSB0bzoKCiAgYSkgU2F2ZSAoaW4gc29tZSBwbGFjZSBsaWtlIGEgbWF0cml4KSB0aGUgMTYgZGlmZmVyZW50IHZhbHVlcyBvZiB0aGUgYm9uZCB2YWx1YXRpb24sIGFuZCB0aGUgMTYgY291cG9uIHJhdGVzLiAKCiAgYikgRG8gYSBwbG90IHRvIHNob3cgaG93IHRoZSB2YWx1ZSBvZiB0aGUgYm9uZCBjaGFuZ2VzIHdpdGggdGhlIDE2IGRpZmZlcmVudCBjb3Vwb24gcmF0ZXMKICAKICAKIyMgUFJPQkxFTSAxLiBBQk9VVCBCT05EIFZBTFVBVElPTiBTT0xVVElPTgpXT1JLU0hPUCAyIFBSRVNFTlRFRCBBIENIQUxMRU5HRSBXSEVSRSBXRSBTT0xWRUQgRk9SIEJPTkQgUFJJQ0UsIFRIRSBESUZFUkVOQ0UgQkVJTkcgVEhBVCBXT1JLU0hPUCAyIEhBRCBJTlRFUkVTVCBBUyBUSEUgSU5ERVBFTkRFTlQgVkFSSUFCTEUgQU5EIElOIFRISVMgQ0FTRSBJTlRFUkVTVCBXQVMgRklYRUQgQU5EIFRIRSBERVBFTkRFTlQgVkFSSUFCTEUgV0FTIFRIRSBDT1VQT04gUkFURQoKVEhFUkVGT1JFLCBNWSBBUFJPQUNIIFdBUyBUTyBXT1JLIFdJVEggVkVDVE9SUyBGT1IgQ0FTSCBGTE9XUywgQ0FMQ1VMQVRFIFRIRSBQUkVTRU5UIFZBTFVFUyBPRiBFQUNIIENBU0ggRkxPVyBBTkQgQ09VUE9OIFBFUklPRFMsIEFORCBUSEVOIElMTCBPQlRBSU4gVEhFIEJPTkRQUklDRSAKCkZJUlNUIEknTSBHT0lORyBUTyBPUkdBTklaRSBUSEUgREFUQSBQUkVTRU5URUQgSU4gVEhFIFBST0JMRU0KCkJPTkQKUFJJTkNJUEFMOiAkOCwwMDAsMDAwClRpbWUgdG8gbWF0dXJpdHk6IDEwIHllYXJzCkFOTlVBTCBSYXRlIChZVE0pOiAxNSUKQ29tcG91bmRlZCBNb250aGx5CkZST00gMSUgLSAzJQoKVEhFTiBJIFdJTEwgQVBQTFkgU09NRSBMSU5FUyBPRiBDT0RFIFRIQVQgV0lMTCBIRUxQIE1FIFZBTFVFIFRIRSBCT05EUwoKIyBCT05EIDEKYGBge3J9CmJvbmRwcmljZTwtZnVuY3Rpb24ocHJpbmNpcGFsLHR0bSxjb3Vwb25yYXRlLGludGVyZXN0cmF0ZSxwZXJpb2RzKSB7CiAgIyBwZXJpb2RzIGlzIHRoZSAjIG9mIHBlcmlvZHMgaW4gdGhlIHllYXIgZm9yIHRoZSBjb21wb3VuZGluZyBvZiBpbnRlcmVzdHMKICAjIEkgY2FsY3VsYXRlIHRoZSBjb3Vwb24gYW1vdW50IHBlciBwZXJpb2Q6CiAgY291cG9uPShjb3Vwb25yYXRlL3BlcmlvZHMpKnByaW5jaXBhbAogICMgSSBjcmVhdGUgYSB2ZWN0b3IgZm9yIHRoZSBjYXNoZmxvd3MuIFRoZSBsYXN0IGNhc2hmbG93IG11c3QgYmUgZXF1YWwgdG8gCiAgIyAgIHRoZSBjb3Vwb24gcGx1cyB0aGUgcHJpbmNpcGFsCiAgY2Y8LWMocmVwKGNvdXBvbix0dG0qcGVyaW9kcy0xKSxjb3Vwb24rcHJpbmNpcGFsKQogICMgIEkgdXNlZCB0aGUgcmVwIGZ1bmN0aW9uIHRoYXQgcmVwZWF0cyB0dG0qcGVyaW9kcy0xIHRpbWVzIHRoZSBjb3Vwb24gYW1vdW50CiAgIyAgVGhlbiB0aGUgdmVjdG9yIGNmIHdpbGwgaGF2ZSBhbGwgZml4ZWQgY291cG9uIHBheW1lbnRzLCBhbmQgdGhlIGVuZCBwYXltZW50CiAgIyAgIHdpbGwgYmUgZXF1YWwgdG8gdGhlIGNvdXBvbiBwbHVzIHRoZSBwcmluY2lwYWwKICAKICAjIEkgY3JlYXRlIGEgdmVjdG9yIGZvciB0aGUgZXhwb25lbnRzIHRoYXQgSSBuZWVkIHRvIHVzZSBmb3IgdGhlIGRpc2NvdW50IGZhY3RvcjoKICAjIEkgdXNlIHRoZSBzZXEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIHNlcXVlbnRpYWwgbnVtYmVycyBmcm9tIDEgdG8gdGhlIGxhc3QgcGVyaW9kCiAgZXhwb25lbnRzPC1zZXEoMSx0dG0qcGVyaW9kcykKICAjIEkgY3JlYXRlIGEgdmVjdG9yIHdpdGggdGhlIGRpc2NvdW50IGZhY3RvcnMgKDEvKDErcGVyaW9kcmF0ZSledCkKICBkaXNjb3VudGZhY3RvcnMgPC0gMSAvICgxK2ludGVyZXN0cmF0ZS9wZXJpb2RzKV5leHBvbmVudHMKICAKICAjIEkgZ2V0IHRoZSBzdW0gb2YgYWxsIHByZXNlbnQgdmFsdWVzLiBUaGUgcHJlc2VudCB2YWx1ZXMgYXJlIGVxdWFsIHRvCiAgIyAgIHRoZSBjYXNoIGZsb3cgdGltZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGlzY291bnQgZmFjdG9yOgogIHByZXNlbnR2YWx1ZSA8LSAgc3VtKGNmKmRpc2NvdW50ZmFjdG9ycykKICAjIFNpbmNlIHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGlzIHZhbHVlLCB0aGVuIAogICMgIEkgcmV0dXJuIHRoaXMgcHJlc2VudCB2YWx1ZSBhcyB0aGUgYm9uZCBwcmljZToKICByZXR1cm4ocHJlc2VudHZhbHVlKQp9CgojIE9uY2UgSSBoYXZlIG15IGZ1bmN0aW9uLCBJIGp1c3QgY2FsbCBteSBmdW5jdGlvbiB3aXRoIHRoZSBwYXJhbWV0ZXJzIHNwZWNpZmllZCAKIyAgaW4gdGhlIHByb2JsZW0uIAojIEkgcnVuIG15IGZ1bmN0aW9uIDE2IHRpbWVzIGZvciB0aGUgMTYgY291cG9uIHJhdGVzOiAKYm9uZDEgPC0gYm9uZHByaWNlKDgwMDAwMDAsMTAsMC4wMSwwLjE1LDEyKQpwcmludCgiVGhlIGJvbmQgcHJpY2Ugd2hlbiBjb3Vwb24gcmF0ZSBpcyAxJSBpcyAiKQpgYGAKYGBge3J9CnNwcmludGYoIiQgJTMuMmYiLCBib25kMSkKYGBgCgojIEJPTkQgMgpgYGB7cn0KIyBJIHJ1biB0aGUgYm9uZHByaWNlIGZ1bmN0aW9uIHdpdGggdGhlIGxhc3QgcGFyYW1ldGVyPTEyIHNpbmNlIHRoZSBwcm9ibGVtIHNwZWNpZmllcwojICAgdGhhdCB0aGUgY29tcG91bmRlZCBpcyBtb250aGx5eSwgdGhlbiBwZXJpb2RzIGluIHRoZSB5ZWFyPTEyCmJvbmQyPC0gYm9uZHByaWNlKDgwMDAwMDAsMTAsMC4wMTIsMC4xNSwxMikKcHJpbnQoIlRoZSBib25kIHByaWNlIHdoZW4gY291cG9uIHJhdGUgaXMgMS4yJSBpcyAiKQpgYGAKYGBge3J9CnNwcmludGYoIiQgJTMuMmYiLCBib25kMikKYGBgCgpCT05EIDMKYGBge3J9CmJvbmQzPC0gYm9uZHByaWNlKDgwMDAwMDAsMTAsMC4wMTQsMC4xNSwxMikKcHJpbnQoIlRoZSBib25kIHByaWNlIHdoZW4gdGhlIGNvdXBvbiByYXRlIGlzIDEuNCUgaXMgIikKYGBgCmBgYHtyfQpzcHJpbnRmKCIkICUzLjJmIiwgYm9uZDMgKQpgYGAKIyBCT05EIDQKCmBgYHtyfQpib25kNDwtIGJvbmRwcmljZSg4MDAwMDAwLDEwLDAuMDE2LDAuMTUsMTIpCnByaW50KCJUaGUgYm9uZCBwcmljZSB3aGVuIHRoZSBjb3Vwb24gcmF0ZSBpcyAxLjYlIGlzICIpCmBgYApgYGB7cn0Kc3ByaW50ZigiJCAlMy4yZiIsIGJvbmQ0ICkKYGBgCgojIEJPTkQgNQpgYGB7cn0KYm9uZDU8LSBib25kcHJpY2UoODAwMDAwMCwxMCwwLjAxOCwwLjE1LDEyKQpwcmludCgiVGhlIGJvbmQgcHJpY2Ugd2hlbiB0aGUgY291cG9uIHJhdGUgaXMgMS44JSBpcyAiKQpgYGAKYGBge3J9CnNwcmludGYoIiQgJTMuMmYiLCBib25kNSApCmBgYAoKIyBCT05EIDYKYGBge3J9CmJvbmQ2PC0gYm9uZHByaWNlKDgwMDAwMDAsMTAsMC4wMiwwLjE1LDEyKQpwcmludCgiVGhlIGJvbmQgcHJpY2Ugd2hlbiB0aGUgY291cG9uIHJhdGUgaXMgMiUgaXMgIikKYGBgCmBgYHtyfQpzcHJpbnRmKCIkICUzLjJmIiwgYm9uZDYgKQpgYGAKCiMgQk9ORCA3CmBgYHtyfQpib25kNzwtIGJvbmRwcmljZSg4MDAwMDAwLDEwLDAuMDIyLDAuMTUsMTIpCnByaW50KCJUaGUgYm9uZCBwcmljZSB3aGVuIHRoZSBjb3Vwb24gcmF0ZSBpcyAyLjIlIGlzICIpCmBgYApgYGB7cn0Kc3ByaW50ZigiJCAlMy4yZiIsIGJvbmQ3ICkKYGBgCiMgQk9ORCA4CmBgYHtyfQpib25kODwtIGJvbmRwcmljZSg4MDAwMDAwLDEwLDAuMDI0LDAuMTUsMTIpCnByaW50KCJUaGUgYm9uZCBwcmljZSB3aGVuIHRoZSBjb3Vwb24gcmF0ZSBpcyAyLjQlIGlzICIpCmBgYApgYGB7cn0Kc3ByaW50ZigiJCAlMy4yZiIsIGJvbmQ4ICkKYGBgCgojIEJPTkQgOQpgYGB7cn0KYm9uZDk8LSBib25kcHJpY2UoODAwMDAwMCwxMCwwLjAyNiwwLjE1LDEyKQpwcmludCgiVGhlIGJvbmQgcHJpY2Ugd2hlbiB0aGUgY291cG9uIHJhdGUgaXMgMi42JSBpcyAiKQpgYGAKYGBge3J9CnNwcmludGYoIiQgJTMuMmYiLCBib25kOSApCmBgYAoKIyBCT05EIDEwCmBgYHtyfQpib25kMTA8LSBib25kcHJpY2UoODAwMDAwMCwxMCwwLjAyOCwwLjE1LDEyKQpwcmludCgiVGhlIGJvbmQgcHJpY2Ugd2hlbiB0aGUgY291cG9uIHJhdGUgaXMgMi44JSBpcyAiKQpgYGAKYGBge3J9CnNwcmludGYoIiQgJTMuMmYiLCBib25kMTAgKQpgYGAKCiMgQk9ORCAxMQpgYGB7cn0KYm9uZDExPC0gYm9uZHByaWNlKDgwMDAwMDAsMTAsMC4wMywwLjE1LDEyKQpwcmludCgiVGhlIGJvbmQgcHJpY2Ugd2hlbiB0aGUgY291cG9uIHJhdGUgaXMgMyUgaXMgIikKYGBgCmBgYHtyfQpzcHJpbnRmKCIkICUzLjJmIiwgYm9uZDExICkKYGBgCgojIyBNQVRSSVgKYGBge3J9CiMgSSBDUkVBVEUgQSBNQVRSSVggQ09OVEFJTklORyBUSEUgMTEgRElGRkVSRU5UIEJPTkQgVkFMVUFUSU9OUzogQk9ORCBWQUxVQVRJT04gTUFUUklYIChCVk0pCkJWTTwtbWF0cml4KGMoYm9uZDEsIGJvbmQyLCBib25kMywgYm9uZDQsIGJvbmQ1LCBib25kNiwgYm9uZDcsIGJvbmQ4LCBib25kOSwgYm9uZDEwLCBib25kMTEpLG5yb3c9MSxuY29sPTExKQpCVk0KYGBgCmBgYHtyfQojIEkgQ1JFQVRFIE9CSkVDVFMgRk9SIEFMTCBDT1VQT04gUkFURVMKQ1IxIDwtIDEKQ1IyIDwtIDEuMgpDUjMgPC0gMS40CkNSNCA8LSAxLjYKQ1I1IDwtIDEuOApDUjYgPC0gMgpDUjcgPC0gMi4yCkNSOCA8LSAyLjQKQ1I5IDwtIDIuNgpDUjEwIDwtIDIuOApDUjExIDwtIDMKYGBgCgoKCmBgYHtyfQojIFRIRU4gSSBDUkVBVEUgQSBNQVRSSVggQ09OVEFJTklORyBUSEUgMTEgRElGRkVSRU5UIEJPTkQgQ09VUE9OIFJBVEVTOiBCT05EIENPVVBPTiBSQVRFIE1BVFJJWCAoQkNSTSkKQkNSTTwtbWF0cml4KGMoQ1IxLENSMixDUjMsQ1I0LENSNSxDUjYsQ1I3LENSOCxDUjksQ1IxMCxDUjExKSxucm93PTEsbmNvbD0xMSkKQkNSTQpgYGAKCiMgSSB0aGVuIGdyYXBoIG15IGJvbmRzCmBgYHtyfQpwbG90KEJDUk0pCnBsb3QoQlZNKQpgYGAKYGBge3J9CnBsb3QoYm9uZDEsIENSMSkKcGxvdChib25kMiwgQ1IyKQpwbG90KGJvbmQzLCBDUjMpCnBsb3QoYm9uZDQsIENSNCkKcGxvdChib25kNSwgQ1I1KQpwbG90KGJvbmQ2LCBDUjYpCnBsb3QoYm9uZDcsIENSNykKcGxvdChib25kOCwgQ1I4KQpwbG90KGJvbmQ5LCBDUjkpCnBsb3QoYm9uZDEwLCBDUjEwKQpwbG90KGJvbmQxMSwgQ1IxMSkKCmBgYApGSU5BTExZIEkgV0FOVEVEIFRPIENSRUFURSBBIEdSQVBIIFRIQVQgSEFEIEFMTCBUSEUgQk9ORFMgQU5EIENPVVBPTiBSQVRFUyBDT01QQVNTRUQgSU4gT05FIEdSQVBILCBCVVQgV0hFTiBUUllJTkcgVE8gRE8gVEhJUyBJIENPVUxEIE9OTFkgR1JBUEggT0JKRUNUUyBJTkRJVklEVUFMTFkuCgo=