Grades were reported for 661 students.

Exam Score

Mean exam score: 13.1

Performance Differences


Exam Wrapper Questions

Question 21

  1. Last exam we asked you how you planned to change your study strategies. Which of the following changes did you make? (Select all that apply.)
  1. I started studying earlier
  2. I studied regularly throughout the last month
  3. I solved more practice problems (from Problem Roulette or from the textbook)
  4. I used more of the resources available (Physics Help Room, office hours, Piazza, etc)
  5. I did not change my study strategies in any of the above ways
424 responses

Biggest gender difference seems to be for those that solved more practice problems. Biggest FGStatus difference seems to be for those that solved more practice problems and started studying earlier. However, only 2 FirstGen students fell into this group. Biggest URMStatus difference seems to be for those that solved more practice problems and started studying earlier as well.

Question 22

  1. How do you feel about your preparation for this exam compared to Exam 1?
  1. I changed my study strategies and I felt more prepared
  2. I changed my studying strategies and I felt less or as prepared
  3. I did not change my study strategies and I felt more prepared
  4. I did not change my study strategies and I felt less or as prepared
  5. I’m not sure
422 responses

Question 23

  1. What is your opinion about M-Write activities thus far?
  1. I like M-Write, and the activities are useful for my understanding of physics
  2. I like M-Write, but the activities are not useful for my understanding of physics
  3. I dislike M-Write, but the activities are useful for my understanding of physics
  4. I dislike M-Write, and the activities are not useful for my understanding of physics
  5. I am neutral towards the M-Write activities
424 responses

Question 24

  1. What do you like most about having extra time on this exam? (Select all that apply.)
  1. I took my time with each question
  2. I checked my work more thoroughly at the end
  3. I revisited problems I was not sure about
  4. I felt less stress/pressure during this exam
  5. Nothing, I did not need extra time and did not use it
418 responses

Question 25

  1. What do you like least about having extra time on the exam? (Select all that apply.)
  1. I second-guessed my answer choices
  2. I felt stress/pressure about when I finished compared to my peers
  3. Going in, I worried that extra time meant the exam would be harder
  4. I did not prepare as much for the exam as I might have otherwise because I thought I’d have time to figure the problems out on the exam
  5. Nothing, the extra time did not affect how I prepared for or experienced the exam
408 responses

Relationship Between Prior Prepration and Exam 2 Scores

Exam 1 Question 21

  1. What is the highest physics course you have taken before this class?
  1. None
  2. High school mechanics
  3. High school electricity and magnetism
  4. AP mechanics
  5. AP electricity and magnetism, or above

Exam 1 Question 22

  1. How much of the content for this exam do you feel you already knew before this class?
  1. None of it
  2. Very little of it
  3. Some of it
  4. Most of it
  5. All of it

Changes in Performance from Exam 1

Exam Wrapper Questions - Exam Score Differences

Question 21

  1. Last exam we asked you how you planned to change your study strategies. Which of the following changes did you make? (Select all that apply.)
  1. I started studying earlier
  2. I studied regularly throughout the last month
  3. I solved more practice problems (from Problem Roulette or from the textbook)
  4. I used more of the resources available (Physics Help Room, office hours, Piazza, etc)
  5. I did not change my study strategies in any of the above ways
424 responses

Question 22

  1. How do you feel about your preparation for this exam compared to Exam 1?
  1. I changed my study strategies and I felt more prepared
  2. I changed my studying strategies and I felt less or as prepared
  3. I did not change my study strategies and I felt more prepared
  4. I did not change my study strategies and I felt less or as prepared
  5. I’m not sure
422 responses

Question 23

  1. What is your opinion about M-Write activities thus far?
  1. I like M-Write, and the activities are useful for my understanding of physics
  2. I like M-Write, but the activities are not useful for my understanding of physics
  3. I dislike M-Write, but the activities are useful for my understanding of physics
  4. I dislike M-Write, and the activities are not useful for my understanding of physics
  5. I am neutral towards the M-Write activities
424 responses

Question 24

  1. What do you like most about having extra time on this exam? (Select all that apply.)
  1. I took my time with each question
  2. I checked my work more thoroughly at the end
  3. I revisited problems I was not sure about
  4. I felt less stress/pressure during this exam
  5. Nothing, I did not need extra time and did not use it
418 responses

Question 25

  1. What do you like least about having extra time on the exam? (Select all that apply.)
  1. I second-guessed my answer choices
  2. I felt stress/pressure about when I finished compared to my peers
  3. Going in, I worried that extra time meant the exam would be harder
  4. I did not prepare as much for the exam as I might have otherwise because I thought I’d have time to figure the problems out on the exam
  5. Nothing, the extra time did not affect how I prepared for or experienced the exam
408 responses

LS0tCnRpdGxlOiAiRkEgMjAxOCBQaHlzaWNzIDE0MCBNaWR0ZXJtIDIiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGJvb3QpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KdGhlbWVfcHViIDwtIAogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSByZWwoMS4yKSwgaGp1c3QgPSAwLjUpLAogICAgICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KCksCiAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAid2hpdGUiKSwKICAgICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLHNpemUgPSAxNCksCiAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCx2anVzdCA9MixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gLTAuMixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTApLCAKICAgICAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91cj0iYmxhY2siKSwKICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfbGluZSgpLAogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91cj0iZ3JleTkwIiksCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gTkEpLAogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICAgICAgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgbGVnZW5kLmtleS5zaXplPSB1bml0KDAuMiwgImNtIiksCiAgICAgICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJpdGFsaWMiKSwKICAgICAgICAgICAgcGxvdC5tYXJnaW49dW5pdChjKDEwLDUsNSw1KSwibW0iKSwKICAgICAgICAgICAgc3RyaXAuYmFja2dyb3VuZD1lbGVtZW50X3JlY3QoY29sb3VyPSIjZjBmMGYwIixmaWxsPSIjZjBmMGYwIiksCiAgICAgICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIpLAogICAgICAgICAgYXNwZWN0LnJhdGlvPS42NQogICAgKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KYW5zd2VycyA8LSByZWFkX2NzdigiTWlkdGVybTJfYW5zd2Vycy5jc3YiKVtjKDE6MzgpXQpjb2xuYW1lcyhhbnN3ZXJzKVtjb2xuYW1lcyhhbnN3ZXJzKSA9PSAic3R1ZGVudF9pZCJdIDwtICJzdHVkZW50SUQiCmNvbG5hbWVzKGFuc3dlcnMpW2NvbG5hbWVzKGFuc3dlcnMpID09ICJzY29yZSJdIDwtICJFeGFtIFNjb3JlIgpjb2xuYW1lcyhhbnN3ZXJzKVtjb2xuYW1lcyhhbnN3ZXJzKSA9PSAicGVyY2VudCJdIDwtICJFeGFtIFBlcmNlbnQiCgpncmFkZXMgPC0gcmVhZF9jc3YoIk1pZHRlcm0yX3Njb3Jlcy5jc3YiKSAlPiUgZmlsdGVyKGZpcnN0X25hbWUgIT0gIjAiKQpncmFkZXMkYWNjb3VudF9pZCA9IGFzLm51bWVyaWMoZ3JhZGVzJHN0dWRlbnRfaWQpCmNvbG5hbWVzKGdyYWRlcylbY29sbmFtZXMoZ3JhZGVzKSA9PSAicmVnIHNjb3JlIl0gPC0gIkV4YW0gU2NvcmUiCmNvbG5hbWVzKGdyYWRlcylbY29sbmFtZXMoZ3JhZGVzKSA9PSAicmVnIHBlcmNlbnQiXSA8LSAiRXhhbSBQZXJjZW50IgoKZGVtb2dyYXBoaWNzIDwtIHJlYWRfY3N2KCJwaHlzaWNzXzE0MF9kZW1vc18yMjEwLmNzdiIpCmNvbG5hbWVzKGRlbW9ncmFwaGljcylbY29sbmFtZXMoZGVtb2dyYXBoaWNzKSA9PSAic2V4Il0gPC0gIkdlbmRlciIKY29sbmFtZXMoZGVtb2dyYXBoaWNzKVtjb2xuYW1lcyhkZW1vZ3JhcGhpY3MpID09ICJwcm50X21heF9lZF9sdmxfZGVzIl0gPC0gIlBhcmVudCBFZCIKY29sbmFtZXMoZGVtb2dyYXBoaWNzKVtjb2xuYW1lcyhkZW1vZ3JhcGhpY3MpID09ICJyYWNlcyJdIDwtICJSYWNlIgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CiMgYWRkIGxlYWRpbmcgemVyb3MgdG8gc3R1ZGVudCBJRCBudW1iZXJzCnN0dWRlbnRfaWQgPC0gYygpCmZvcihpIGluIDE6bnJvdyhkZW1vZ3JhcGhpY3MpKSB7CiAgaWYoY2VpbGluZyhsb2cxMChkZW1vZ3JhcGhpY3MkYWNjb3VudF9pZFtpXSsxKSkgPT0gNikgewogICAgc3R1ZGVudF9pZFtpXSA9IHBhc3RlMCgiMDAiLCBkZW1vZ3JhcGhpY3MkYWNjb3VudF9pZFtpXSkKICB9CiAgZWxzZSBpZiAoY2VpbGluZyhsb2cxMChkZW1vZ3JhcGhpY3MkYWNjb3VudF9pZFtpXSsxKSkgPT0gNykgewogICAgc3R1ZGVudF9pZFtpXSA9IHBhc3RlMCgiMCIsIGRlbW9ncmFwaGljcyRhY2NvdW50X2lkW2ldKQogIH0gZWxzZSB7CiAgICBzdHVkZW50X2lkW2ldID0gZGVtb2dyYXBoaWNzJGFjY291bnRfaWRbaV0KICB9Cn0KYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpkZW1vZ3JhcGhpY3MgPC0gbXV0YXRlKGRlbW9ncmFwaGljcywgc3R1ZGVudElEID0gc3R1ZGVudF9pZCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpGR1N0YXR1cyA8LSBjKCkKZm9yKGkgaW4gMTpucm93KGRlbW9ncmFwaGljcykpIHsKICBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkJhY2hlbG9yJ3MiKSBGR1N0YXR1c1tpXSA9ICJOb3QgRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIk1hc3RlcidzIikgRkdTdGF0dXNbaV0gPSAiTm90IEZpcnN0R2VuIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJQcm9mIERvYyIpIEZHU3RhdHVzW2ldID0gIk5vdCBGaXJzdEdlbiIKICBlbHNlIGlmKGRlbW9ncmFwaGljcyRgUGFyZW50IEVkYFtpXSA9PSAiRG9jdG9yYXRlIikgRkdTdGF0dXNbaV0gPSAiTm90IEZpcnN0R2VuIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJTb21lIENvbGwiKSBGR1N0YXR1c1tpXSA9ICJOb3QgRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkFzc29jaWF0ZSIpIEZHU3RhdHVzW2ldID0gIk5vdCBGaXJzdEdlbiIKICBlbHNlIGlmKGRlbW9ncmFwaGljcyRgUGFyZW50IEVkYFtpXSA9PSAiUHJvZiBEb2MiKSBGR1N0YXR1c1tpXSA9ICJOb3QgRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkhTIGRpcGxvbWEiKSBGR1N0YXR1c1tpXSA9ICJGaXJzdEdlbiIKICBlbHNlIGlmKGRlbW9ncmFwaGljcyRgUGFyZW50IEVkYFtpXSA9PSAiTGVzcyB0aCBIUyIpIEZHU3RhdHVzW2ldID0gIkZpcnN0R2VuIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJFbGVtZW50YXJ5IikgRkdTdGF0dXNbaV0gPSAiRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkRvbid0IEtub3ciKSBGR1N0YXR1c1tpXSA9ICJVbmtub3duIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJOVUxMIikgRkdTdGF0dXNbaV0gPSAiVW5rbm93biIKICBlbHNlIEZHU3RhdHVzW2ldID0gIkVycm9yIgp9CmRlbW9ncmFwaGljcyRGR1N0YXR1cyA9IEZHU3RhdHVzCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KVVJNU3RhdHVzIDwtIGMoKQpmb3IoaSBpbiAxOm5yb3coZGVtb2dyYXBoaWNzKSkgewogIGlmKGRlbW9ncmFwaGljcyRSYWNlW2ldID09ICJ3aGl0ZSIpIFVSTVN0YXR1c1tpXSA9ICJOb3QgVVJNIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJFJhY2VbaV0gPT0gImFzaWFuIikgVVJNU3RhdHVzW2ldID0gIk5vdCBVUk0iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkUmFjZVtpXSA9PSAibm9pbmRpYyIpIFVSTVN0YXR1c1tpXSA9ICJVbmtub3duIgogIGVsc2UgVVJNU3RhdHVzW2ldID0gIlVSTSIKfQpkZW1vZ3JhcGhpY3MkVVJNU3RhdHVzID0gVVJNU3RhdHVzCmRlbW9ncmFwaGljcyRVUk1TdGF0dXMgPC0gb3JkZXJlZChkZW1vZ3JhcGhpY3MkVVJNU3RhdHVzLCBsZXZlbHMgPSBjKCJVUk0iLCAiTm90IFVSTSIsICJVbmtub3duIikpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0Kc3R1ZGVudF9pZF9ncmFkZXMgPC0gYygpCmZvcihpIGluIDE6bnJvdyhncmFkZXMpKSB7CiAgaWYoY2VpbGluZyhsb2cxMChncmFkZXMkYWNjb3VudF9pZFtpXSsxKSkgPT0gNikgewogICAgc3R1ZGVudF9pZF9ncmFkZXNbaV0gPSBwYXN0ZTAoIjAwIiwgZ3JhZGVzJGFjY291bnRfaWRbaV0pCiAgfQogIGVsc2UgaWYgKGNlaWxpbmcobG9nMTAoZ3JhZGVzJGFjY291bnRfaWRbaV0rMSkpID09IDcpIHsKICAgIHN0dWRlbnRfaWRfZ3JhZGVzW2ldID0gcGFzdGUwKCIwIiwgZ3JhZGVzJGFjY291bnRfaWRbaV0pCiAgfQogIGVsc2UgaWYgKGNlaWxpbmcobG9nMTAoZ3JhZGVzJGFjY291bnRfaWRbaV0rMSkpID09IDEpIHsKICAgIHN0dWRlbnRfaWRfZ3JhZGVzW2ldID0gcGFzdGUwKCIwMDAwMDAwIiwgZ3JhZGVzJGFjY291bnRfaWRbaV0pCiAgfQogIGVsc2UgewogICAgc3R1ZGVudF9pZF9ncmFkZXNbaV0gPSBncmFkZXMkYWNjb3VudF9pZFtpXQogIH0KfQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdyYWRlcyA8LSBtdXRhdGUoZ3JhZGVzLCBzdHVkZW50SUQgPSBzdHVkZW50X2lkX2dyYWRlcykKYGBgCgojIyMgR3JhZGVzIHdlcmUgcmVwb3J0ZWQgZm9yIDY2MSBzdHVkZW50cy4KCiMjIyBFeGFtIFNjb3JlCiMjIyMgKipNZWFuIGV4YW0gc2NvcmU6KiogMTMuMQoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ3JhZGVzRGVtbyA8LSByaWdodF9qb2luKGRlbW9ncmFwaGljc1tjKDcsMyw0LDgsNSw5KV0sIGdyYWRlc1tjKDQwLDUsNildLCBieSA9ICJzdHVkZW50SUQiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChncmFkZXNEZW1vKSArIGdlb21fYmFyKGFlcyhgRXhhbSBTY29yZWApLCBmaWxsID0gYygiIzMxODJiZCIpKSArIAogIGdndGl0bGUoIkV4YW0gU2NvcmUgRGlzdHJpYnV0aW9uIC0gUGh5c2ljcyAxNDAgTWlkdGVybSAyIEZBIDIwMTgiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGdyYWRlc0RlbW8gJT4lIAogICAgICAgICBncm91cF9ieShHZW5kZXIsYEV4YW0gU2NvcmVgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSkgKwogIGdlb21fY29sKGFlcyhgRXhhbSBTY29yZWAsYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gR2VuZGVyKSkgKyAKICBnZ3RpdGxlKCJTY29yZXMgYnkgR2VuZGVyIiwgc3VidGl0bGUgPSAiRiA9IDIwNiwgTSA9IDQ1MyIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsgbGFicyhmaWxsID0gIiIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZ3JhZGVzRGVtbyAlPiUgCiAgICAgICAgIGdyb3VwX2J5KEZHU3RhdHVzLGBFeGFtIFNjb3JlYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihGR1N0YXR1cyA9PSAiRmlyc3RHZW4iIHwgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpKSArCiAgZ2VvbV9jb2woYWVzKGBFeGFtIFNjb3JlYCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBGR1N0YXR1cykpICsgCiAgZ2d0aXRsZSgiU2NvcmVzIGJ5IEZpcnN0IEdlbmVyYXRpb24gU3RhdHVzIiwgc3VidGl0bGUgPSAiRmlyc3RHZW4gPSA1NywgTm90IEZpcnN0R2VuID0gNTk4IikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArIGxhYnMoZmlsbCA9ICIiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYWlyZWQiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGdyYWRlc0RlbW8gJT4lIAogICAgICAgICBncm91cF9ieShVUk1TdGF0dXMsYEV4YW0gU2NvcmVgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKFVSTVN0YXR1cyA9PSAiVVJNIiB8IFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpKSArCiAgZ2VvbV9jb2woYWVzKGBFeGFtIFNjb3JlYCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBVUk1TdGF0dXMpKSArIAogIGdndGl0bGUoIlNjb3JlcyBieSBVUk0gU3RhdHVzIiwgc3VidGl0bGUgPSAiVVJNID0gMTE2LCBOb3QgVVJNID0gNTA3IikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKyBsYWJzKGZpbGwgPSAiIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikgKwogIHRoZW1lX3B1YgpgYGAKIyMjIFBlcmZvcm1hbmNlIERpZmZlcmVuY2VzCmBgYHtyLCBlY2hvID0gRkFMU0V9CmJvb3RmdW5jIDwtIGZ1bmN0aW9uKGQsaSkgewogIGQxIDwtIGRbaV0KICByZXR1cm4obWVhbihkMSkpCn0KYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpkZW1vRXJyb3IgPC1jKCkKIyBGZW1hbGUgZXJyb3IKZGVtb0Vycm9yWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGdyYWRlc0RlbW8sIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIE1hbGUgZXJyb3IKZGVtb0Vycm9yWzJdIDwtIHNkKGJvb3QoZmlsdGVyKGdyYWRlc0RlbW8sIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEZHIGVycm9yCmRlbW9FcnJvclszXSA8LSBzZChib290KGZpbHRlcihncmFkZXNEZW1vLCBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBOb3QgRkcgZXJyb3IKZGVtb0Vycm9yWzRdIDwtIHNkKGJvb3QoZmlsdGVyKGdyYWRlc0RlbW8sIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBVUk0gZXJyb3IKZGVtb0Vycm9yWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGdyYWRlc0RlbW8sIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgTm90IFVSTSBlcnJvcgpkZW1vRXJyb3JbNl0gPC0gc2QoYm9vdChmaWx0ZXIoZ3JhZGVzRGVtbywgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybURpZmYgPC0gZGF0YV9mcmFtZShjKCJGIiwgIk0iLCAiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwgIlVSTSIsICJOb3QgVVJNIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoZ3JhZGVzRGVtbywgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGdyYWRlc0RlbW8sIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihncmFkZXNEZW1vLCBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoZ3JhZGVzRGVtbywgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihncmFkZXNEZW1vLCBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihncmFkZXNEZW1vLCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApKSxkZW1vRXJyb3IpCmNvbG5hbWVzKFBlcmZvcm1EaWZmKSA8LSBjKCJHcm91cCIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpQZXJmb3JtRGlmZiRHcm91cCA8LSBvcmRlcmVkKFBlcmZvcm1EaWZmJEdyb3VwLCBsZXZlbHMgPSBjKCJGIiwgIk0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVJNIiwgIk5vdCBVUk0iKSkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybURpZmYsIGFlcyhHcm91cCwgYE1lYW4gRXhhbSBTY29yZWAsIGNvbG9yID0gR3JvdXApKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMpICsKICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcyIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgoqKioKIyMjIEV4YW0gV3JhcHBlciBRdWVzdGlvbnMKYGBge3IsIGVjaG8gPSBGQUxTRX0KYW5zd2Vyc0RlbW8gPC0gcmlnaHRfam9pbihkZW1vZ3JhcGhpY3NbYyg3LDMsNCw4LDUsOSldLCBhbnN3ZXJzW2MoMSw5LDEwLDM0OjM4KV0sIGJ5ID0gInN0dWRlbnRJRCIpCmFuc3dlcnNEZW1vJGAyMWBbaXMubmEoYW5zd2Vyc0RlbW8kYDIxYCldIDwtICJObyBBbnN3ZXIiCmFuc3dlcnNEZW1vJGAyMmBbaXMubmEoYW5zd2Vyc0RlbW8kYDIyYCldIDwtICJObyBBbnN3ZXIiCmFuc3dlcnNEZW1vJGAyM2BbaXMubmEoYW5zd2Vyc0RlbW8kYDIzYCldIDwtICJObyBBbnN3ZXIiCmFuc3dlcnNEZW1vJGAyNGBbaXMubmEoYW5zd2Vyc0RlbW8kYDI0YCldIDwtICJObyBBbnN3ZXIiCmFuc3dlcnNEZW1vJGAyNWBbaXMubmEoYW5zd2Vyc0RlbW8kYDI1YCldIDwtICJObyBBbnN3ZXIiCmBgYAoKIyMjIyBRdWVzdGlvbiAyMQoyMS4gTGFzdCBleGFtIHdlIGFza2VkIHlvdSBob3cgeW91IHBsYW5uZWQgdG8gY2hhbmdlIHlvdXIgc3R1ZHkgc3RyYXRlZ2llcy4gV2hpY2ggb2YgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGRpZCB5b3UgbWFrZT8gKFNlbGVjdCAqKmFsbCoqIHRoYXQgYXBwbHkuKQogIGEpIEkgc3RhcnRlZCBzdHVkeWluZyAqKmVhcmxpZXIqKgogIGIpIEkgc3R1ZGllZCAqKnJlZ3VsYXJseSoqIHRocm91Z2hvdXQgdGhlIGxhc3QgbW9udGgKICBjKSBJIHNvbHZlZCAqKm1vcmUqKiBwcmFjdGljZSBwcm9ibGVtcyAoZnJvbSBQcm9ibGVtIFJvdWxldHRlIG9yIGZyb20gdGhlIHRleHRib29rKQogIGQpIEkgdXNlZCAqKm1vcmUqKiBvZiB0aGUgcmVzb3VyY2VzIGF2YWlsYWJsZSAoUGh5c2ljcyBIZWxwIFJvb20sIG9mZmljZSBob3VycywgUGlhenphLCBldGMpCiAgZSkgSSBkaWQgKipub3QqKiBjaGFuZ2UgbXkgc3R1ZHkgc3RyYXRlZ2llcyBpbiBhbnkgb2YgdGhlIGFib3ZlIHdheXMKICAKIyMjIyMgNDI0IHJlc3BvbnNlcwpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjFgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoYDIxYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApKSArCiAgZ2VvbV9jb2woYWVzKGAyMWAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjFgKSkgKwogIGdndGl0bGUoIkNoYW5nZWQgc3R1ZHkgc3RyYXRlZ2llcyIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgCiAgICAgICAgIGZpbHRlcihgMjFgID09ICJBIiB8YDIxYCA9PSAiQUMifGAyMWAgPT0gIkMifGAyMWAgPT0gIkUiKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIxYCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDIxYCkpICsKICBnZ3RpdGxlKCJDaGFuZ2VkIHN0dWR5IHN0cmF0ZWdpZXMiKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjFgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoR2VuZGVyLCBgMjFgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2NvbChhZXMoYDIxYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMWApKSArCiAgZ2d0aXRsZSgiQ2hhbmdlZCBzdHVkeSBzdHJhdGVnaWVzIikgKwogIGZhY2V0X3dyYXAofkdlbmRlcikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSAKICAgICAgICAgZmlsdGVyKGAyMWAgPT0gIkEiIHxgMjFgID09ICJBQyJ8YDIxYCA9PSAiQyJ8YDIxYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjFgLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBgMjFgKSkgKwogIGdndGl0bGUoIkNoYW5nZWQgc3R1ZHkgc3RyYXRlZ2llcyIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMWAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShGR1N0YXR1cywgYDIxYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fY29sKGFlcyhgMjFgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIxYCkpICsKICBnZ3RpdGxlKCJDaGFuZ2VkIHN0dWR5IHN0cmF0ZWdpZXMiKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMWAgPT0gIkEiIHxgMjFgID09ICJBQyJ8YDIxYCA9PSAiQyJ8YDIxYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIxYCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDIxYCkpICsKICBnZ3RpdGxlKCJDaGFuZ2VkIHN0dWR5IHN0cmF0ZWdpZXMiKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMWAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShVUk1TdGF0dXMsIGAyMWApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKFVSTVN0YXR1cyA9PSAiVVJNIiB8IFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpKSArCiAgZ2VvbV9jb2woYWVzKGAyMWAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjFgKSkgKwogIGdndGl0bGUoIkNoYW5nZWQgc3R1ZHkgc3RyYXRlZ2llcyIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMWAgPT0gIkEiIHxgMjFgID09ICJBQyJ8YDIxYCA9PSAiQyJ8YDIxYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMWAsIGBFeGFtIFNjb3JlYCwgZmlsbCA9IGAyMWApKSArCiAgZ2d0aXRsZSgiQ2hhbmdlZCBzdHVkeSBzdHJhdGVnaWVzIikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKQmlnZ2VzdCBnZW5kZXIgZGlmZmVyZW5jZSBzZWVtcyB0byBiZSBmb3IgdGhvc2UgdGhhdCBzb2x2ZWQgbW9yZSBwcmFjdGljZSBwcm9ibGVtcy4gQmlnZ2VzdCBGR1N0YXR1cyBkaWZmZXJlbmNlIHNlZW1zIHRvIGJlIGZvciB0aG9zZSB0aGF0IHNvbHZlZCBtb3JlIHByYWN0aWNlIHByb2JsZW1zIGFuZCBzdGFydGVkIHN0dWR5aW5nIGVhcmxpZXIuIEhvd2V2ZXIsIG9ubHkgMiBGaXJzdEdlbiBzdHVkZW50cyBmZWxsIGludG8gdGhpcyBncm91cC4gQmlnZ2VzdCBVUk1TdGF0dXMgZGlmZmVyZW5jZSBzZWVtcyB0byBiZSBmb3IgdGhvc2UgdGhhdCBzb2x2ZWQgbW9yZSBwcmFjdGljZSBwcm9ibGVtcyBhbmQgc3RhcnRlZCBzdHVkeWluZyBlYXJsaWVyIGFzIHdlbGwuCmBgYHtyLCBlY2hvID0gRkFMU0V9ClEyMVBlcmZvcm1EaWZmIDwtIGRhdGFfZnJhbWUoYygiRiIsICJNIiwgIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIsICJVUk0iLCAiTm90IFVSTSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJDIiwgIkMiLCAiQUMiLCAiQUMiLCJBQyIsICJBQyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgR2VuZGVyID09ICJGIiAmIGAyMWAgPT0gIkMiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgR2VuZGVyID09ICJNIiAmIGAyMWAgPT0gIkMiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyMWAgPT0gIkFDIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjFgID09ICJBQyIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBVUk1TdGF0dXMgPT0gIlVSTSIgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyMWAgPT0gIkFDIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyMWAgPT0gIkFDIikkYEV4YW0gU2NvcmVgKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBHZW5kZXIgPT0gIkYiICYgYDIxYCA9PSAiQyIpJGBFeGFtIFNjb3JlYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290ZnVuYywgMTAwMDApJHQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIEdlbmRlciA9PSAiTSIgJiBgMjFgID09ICJDIikkYEV4YW0gU2NvcmVgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290ZnVuYywgMTAwMDApJHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyMWAgPT0gIkFDIikkYEV4YW0gU2NvcmVgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290ZnVuYywgMTAwMDApJHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIgJiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjFgID09ICJBQyIpJGBFeGFtIFNjb3JlYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGZ1bmMsIDEwMDAwKSR0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIFVSTVN0YXR1cyA9PSAiVVJNIiAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyMWAgPT0gIkFDIikkYEV4YW0gU2NvcmVgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290ZnVuYywgMTAwMDApJHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgVVJNU3RhdHVzID09ICJOb3QgVVJNIiAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyMWAgPT0gIkFDIikkYEV4YW0gU2NvcmVgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290ZnVuYywgMTAwMDApJHQpKSkKY29sbmFtZXMoUTIxUGVyZm9ybURpZmYpIDwtIGMoIkdyb3VwIiwiUmVzcG9uc2UiLCAiTWVhbiBFeGFtIFNjb3JlIiwgIkVycm9yIikKUTIxUGVyZm9ybURpZmYkR3JvdXAgPC0gb3JkZXJlZChRMjFQZXJmb3JtRGlmZiRHcm91cCwgbGV2ZWxzID0gYygiRiIsICJNIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSTSIsICJOb3QgVVJNIikpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFEyMVBlcmZvcm1EaWZmLCBhZXMoR3JvdXAsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIEV4YW0gU2NvcmVgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCB3aWR0aCA9IC4zKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMiLCAKICAgICAgICAgIHN1YnRpdGxlID0gIkdlbmRlciAtIFJlc3BvbnNlIEMgXG4gRmlyc3RHZW4gLSBSZXNwb25zZSBBQyBcbiBVUk0gLSBSZXNwb25zZSBBQyIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKyBsYWJzKGNvbG9yID0gIiIpICsgCiAgdGhlbWVfcHViCmBgYAoKIyMjIyBRdWVzdGlvbiAyMgoyMi4gSG93IGRvIHlvdSBmZWVsIGFib3V0IHlvdXIgcHJlcGFyYXRpb24gZm9yIHRoaXMgZXhhbSBjb21wYXJlZCB0byBFeGFtIDE/CiAgYSkgSSAqKmNoYW5nZWQqKiBteSBzdHVkeSBzdHJhdGVnaWVzIGFuZCBJIGZlbHQgKiptb3JlKiogcHJlcGFyZWQKICBiKSBJICoqY2hhbmdlZCoqIG15IHN0dWR5aW5nIHN0cmF0ZWdpZXMgYW5kIEkgZmVsdCAqKmxlc3Mgb3IgYXMqKiBwcmVwYXJlZAogIGMpIEkgZGlkICoqbm90KiogY2hhbmdlIG15IHN0dWR5IHN0cmF0ZWdpZXMgYW5kIEkgZmVsdCAqKm1vcmUqKiBwcmVwYXJlZAogIGQpIEkgZGlkICoqbm90KiogY2hhbmdlIG15IHN0dWR5IHN0cmF0ZWdpZXMgYW5kIEkgZmVsdCAqKmxlc3Mgb3IgYXMqKiBwcmVwYXJlZAogIGUpIEknbSBub3Qgc3VyZQogIAojIyMjIyA0MjIgcmVzcG9uc2VzCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMmAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShgMjJgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoYDIyYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMmApKSArCiAgZ2d0aXRsZSgiUHJlcGFyYXRpb24iKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIAogICAgICAgICBmaWx0ZXIoYDIyYCA9PSAiQSIgfGAyMmAgPT0gIkIifGAyMmAgPT0gIkQifGAyMmAgPT0gIkUiKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIyYCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDIyYCkpICsKICBnZ3RpdGxlKCJQcmVwYXJhdGlvbiIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMmAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShHZW5kZXIsIGAyMmApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSkgKwogIGdlb21fY29sKGFlcyhgMjJgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIyYCkpICsKICBnZ3RpdGxlKCJQcmVwYXJhdGlvbiIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgCiAgICAgICAgIGZpbHRlcihgMjJgID09ICJBIiB8YDIyYCA9PSAiQiJ8YDIyYCA9PSAiRCJ8YDIyYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjJgLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBgMjJgKSkgKwogIGdndGl0bGUoIlByZXBhcmF0aW9uIikgKwogIGZhY2V0X3dyYXAofkdlbmRlcikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDIyYCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KEZHU3RhdHVzLCBgMjJgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihGR1N0YXR1cyA9PSAiRmlyc3RHZW4iIHwgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpKSArCiAgZ2VvbV9jb2woYWVzKGAyMmAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjJgKSkgKwogIGdndGl0bGUoIlByZXBhcmF0aW9uIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjJgID09ICJBIiB8YDIyYCA9PSAiQiJ8YDIyYCA9PSAiRCJ8YDIyYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIyYCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDIyYCkpICsKICBnZ3RpdGxlKCJQcmVwYXJhdGlvbiIpICsKICBmYWNldF93cmFwKH5GR1N0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDIyYCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KFVSTVN0YXR1cywgYDIyYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikpICsKICBnZW9tX2NvbChhZXMoYDIyYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMmApKSArCiAgZ2d0aXRsZSgiUHJlcGFyYXRpb24iKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjJgID09ICJBIiB8YDIyYCA9PSAiQiJ8YDIyYCA9PSAiRCJ8YDIyYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMmAsIGBFeGFtIFNjb3JlYCwgZmlsbCA9IGAyMmApKSArCiAgZ2d0aXRsZSgiUHJlcGFyYXRpb24iKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCiMjIyMgUXVlc3Rpb24gMjMKMjMuIFdoYXQgaXMgeW91ciBvcGluaW9uIGFib3V0IE0tV3JpdGUgYWN0aXZpdGllcyB0aHVzIGZhcj8KICBhKSBJICoqbGlrZSoqIE0tV3JpdGUsIGFuZCB0aGUgYWN0aXZpdGllcyBhcmUgKip1c2VmdWwqKiBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiBwaHlzaWNzCiAgYikgSSAqKmxpa2UqKiBNLVdyaXRlLCBidXQgdGhlIGFjdGl2aXRpZXMgYXJlICoqbm90IHVzZWZ1bCoqIGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIHBoeXNpY3MKICBjKSBJICoqZGlzbGlrZSoqIE0tV3JpdGUsIGJ1dCB0aGUgYWN0aXZpdGllcyBhcmUgKip1c2VmdWwqKiBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiBwaHlzaWNzCiAgZCkgSSAqKmRpc2xpa2UqKiBNLVdyaXRlLCBhbmQgdGhlIGFjdGl2aXRpZXMgYXJlICoqbm90IHVzZWZ1bCoqIGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIHBoeXNpY3MKICBlKSBJIGFtIG5ldXRyYWwgdG93YXJkcyB0aGUgTS1Xcml0ZSBhY3Rpdml0aWVzCiAgCiMjIyMjIDQyNCByZXNwb25zZXMKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDIzYCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KGAyM2ApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSkgKwogIGdlb21fY29sKGFlcyhgMjNgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIzYCkpICsKICBnZ3RpdGxlKCJNLVdyaXRlIE9waW5pb24iKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIAogICAgICAgICBmaWx0ZXIoYDIzYCA9PSAiQSIgfGAyM2AgPT0gIkIifGAyM2AgPT0gIkMifCBgMjNgID09ICJEIiB8YDIzYCA9PSAiRSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjNgLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBgMjNgKSkgKwogIGdndGl0bGUoIk0tV3JpdGUgT3BpbmlvbiIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyM2AgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShHZW5kZXIsIGAyM2ApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSkgKwogIGdlb21fY29sKGFlcyhgMjNgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIzYCkpICsKICBnZ3RpdGxlKCJNLVdyaXRlIE9waW5pb24iKSArCiAgZmFjZXRfd3JhcCh+R2VuZGVyKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIAogICAgICAgICBmaWx0ZXIoYDIzYCA9PSAiQSIgfGAyM2AgPT0gIkIifGAyM2AgPT0gIkMifCBgMjNgID09ICJEIiB8YDIzYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjNgLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBgMjNgKSkgKwogIGdndGl0bGUoIk0tV3JpdGUgT3BpbmlvbiIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyM2AgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShGR1N0YXR1cywgYDIzYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fY29sKGFlcyhgMjNgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIzYCkpICsKICBnZ3RpdGxlKCJNLVdyaXRlIE9waW5pb24iKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyM2AgPT0gIkEiIHxgMjNgID09ICJCInxgMjNgID09ICJDInwgYDIzYCA9PSAiRCIgfGAyM2AgPT0gIkUiKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyM2AsIGBFeGFtIFNjb3JlYCwgZmlsbCA9IGAyM2ApKSArCiAgZ2d0aXRsZSgiTS1Xcml0ZSBPcGluaW9uIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjNgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoVVJNU3RhdHVzLCBgMjNgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fY29sKGFlcyhgMjNgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIzYCkpICsKICBnZ3RpdGxlKCJNLVdyaXRlIE9waW5pb24iKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjNgID09ICJBIiB8YDIzYCA9PSAiQiJ8YDIzYCA9PSAiQyJ8IGAyM2AgPT0gIkQiIHxgMjNgID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIzYCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDIzYCkpICsKICBnZ3RpdGxlKCJNLVdyaXRlIE9waW5pb24iKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCiMjIyMgUXVlc3Rpb24gMjQKMjQuIFdoYXQgZG8geW91IGxpa2UgKiptb3N0KiogYWJvdXQgaGF2aW5nIGV4dHJhIHRpbWUgb24gdGhpcyBleGFtPyAoU2VsZWN0ICoqYWxsKiogdGhhdCBhcHBseS4pCiAgYSkgSSB0b29rIG15IHRpbWUgd2l0aCBlYWNoIHF1ZXN0aW9uCiAgYikgSSBjaGVja2VkIG15IHdvcmsgbW9yZSB0aG9yb3VnaGx5IGF0IHRoZSBlbmQKICBjKSBJIHJldmlzaXRlZCBwcm9ibGVtcyBJIHdhcyBub3Qgc3VyZSBhYm91dAogIGQpIEkgZmVsdCBsZXNzIHN0cmVzcy9wcmVzc3VyZSBkdXJpbmcgdGhpcyBleGFtCiAgZSkgTm90aGluZywgSSBkaWQgbm90IG5lZWQgZXh0cmEgdGltZSBhbmQgZGlkIG5vdCB1c2UgaXQKICAKIyMjIyMgNDE4IHJlc3BvbnNlcwpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjRgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoYDI0YCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApKSArCiAgZ2VvbV9jb2woYWVzKGAyNGAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIkxpa2UgRXh0cmEgVGltZSIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgCiAgICAgICAgIGZpbHRlcihgMjRgID09ICJBIiB8YDI0YCA9PSAiQUJDRCJ8YDI0YCA9PSAiQyJ8YDI0YCA9PSAiRCIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjRgLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIkxpa2UgRXh0cmEgVGltZSIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNGAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShHZW5kZXIsIGAyNGApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSkgKwogIGdlb21fY29sKGFlcyhgMjRgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDI0YCkpICsKICBnZ3RpdGxlKCJMaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+R2VuZGVyKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIAogICAgICAgICBmaWx0ZXIoYDI0YCA9PSAiQSIgfGAyNGAgPT0gIkFCQ0QifGAyNGAgPT0gIkMifGAyNGAgPT0gIkQiKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI0YCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDI0YCkpICsKICBnZ3RpdGxlKCJMaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+R2VuZGVyKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjRgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoRkdTdGF0dXMsIGAyNGApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2NvbChhZXMoYDI0YCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyNGApKSArCiAgZ2d0aXRsZSgiTGlrZSBFeHRyYSBUaW1lIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjRgID09ICJBIiB8YDI0YCA9PSAiQUJDRCJ8YDI0YCA9PSAiQyJ8YDI0YCA9PSAiRCIpICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI0YCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDI0YCkpICsKICBnZ3RpdGxlKCJMaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNGAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShVUk1TdGF0dXMsIGAyNGApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKFVSTVN0YXR1cyA9PSAiVVJNIiB8IFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpKSArCiAgZ2VvbV9jb2woYWVzKGAyNGAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIkxpa2UgRXh0cmEgVGltZSIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNGAgPT0gIkEiIHxgMjRgID09ICJBQkNEInxgMjRgID09ICJDInxgMjRgID09ICJEIikgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI0YCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDI0YCkpICsKICBnZ3RpdGxlKCJMaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMjIFF1ZXN0aW9uIDI1CjI1LiBXaGF0IGRvIHlvdSBsaWtlICoqbGVhc3QqKiBhYm91dCBoYXZpbmcgZXh0cmEgdGltZSBvbiB0aGUgZXhhbT8gKFNlbGVjdCAqKmFsbCoqIHRoYXQgYXBwbHkuKQogIGEpIEkgc2Vjb25kLWd1ZXNzZWQgbXkgYW5zd2VyIGNob2ljZXMKICBiKSBJIGZlbHQgc3RyZXNzL3ByZXNzdXJlIGFib3V0IHdoZW4gSSBmaW5pc2hlZCBjb21wYXJlZCB0byBteSBwZWVycwogIGMpIEdvaW5nIGluLCBJIHdvcnJpZWQgdGhhdCBleHRyYSB0aW1lIG1lYW50IHRoZSBleGFtIHdvdWxkIGJlIGhhcmRlcgogIGQpIEkgZGlkIG5vdCBwcmVwYXJlIGFzIG11Y2ggZm9yIHRoZSBleGFtIGFzIEkgbWlnaHQgaGF2ZSBvdGhlcndpc2UgYmVjYXVzZSBJIHRob3VnaHQgSSdkIGhhdmUgdGltZSB0byBmaWd1cmUgdGhlIHByb2JsZW1zIG91dCBvbiB0aGUgZXhhbQogIGUpIE5vdGhpbmcsIHRoZSBleHRyYSB0aW1lIGRpZCBub3QgYWZmZWN0IGhvdyBJIHByZXBhcmVkIGZvciBvciBleHBlcmllbmNlZCB0aGUgZXhhbQogIAojIyMjIyA0MDggcmVzcG9uc2VzCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNWAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShgMjVgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoYDI1YCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyNWApKSArCiAgZ2d0aXRsZSgiRGlzbGlrZSBFeHRyYSBUaW1lIikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSAKICAgICAgICAgZmlsdGVyKGAyNWAgPT0gIkEiIHxgMjVgID09ICJFIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyNWAsIGBFeGFtIFNjb3JlYCwgZmlsbCA9IGAyNWApKSArCiAgZ2d0aXRsZSgiRGlzbGlrZSBFeHRyYSBUaW1lIikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDI1YCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KEdlbmRlciwgYDI1YCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9jb2woYWVzKGAyNWAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjVgKSkgKwogIGdndGl0bGUoIkRpc2xpa2UgRXh0cmEgVGltZSIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgCiAgICAgICAgIGZpbHRlcihgMjVgID09ICJBIiB8YDI1YCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjVgLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBgMjVgKSkgKwogIGdndGl0bGUoIkRpc2xpa2UgRXh0cmEgVGltZSIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNWAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShGR1N0YXR1cywgYDI1YCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fY29sKGFlcyhgMjVgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDI1YCkpICsKICBnZ3RpdGxlKCJEaXNsaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNWAgPT0gIkEiIHwgYDI1YCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI1YCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDI1YCkpICsKICBnZ3RpdGxlKCJEaXNsaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNWAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShVUk1TdGF0dXMsIGAyNWApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKFVSTVN0YXR1cyA9PSAiVVJNIiB8IFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpKSArCiAgZ2VvbV9jb2woYWVzKGAyNWAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjVgKSkgKwogIGdndGl0bGUoIkRpc2xpa2UgRXh0cmEgVGltZSIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNWAgPT0gIkEiIHxgMjVgID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI1YCwgYEV4YW0gU2NvcmVgLCBmaWxsID0gYDI1YCkpICsKICBnZ3RpdGxlKCJEaXNsaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMgUmVsYXRpb25zaGlwIEJldHdlZW4gUHJpb3IgUHJlcHJhdGlvbiBhbmQgRXhhbSAyIFNjb3JlcwojIyMjIEV4YW0gMSBRdWVzdGlvbiAyMQoyMS4gV2hhdCBpcyB0aGUgaGlnaGVzdCBwaHlzaWNzIGNvdXJzZSB5b3UgaGF2ZSB0YWtlbiBiZWZvcmUgdGhpcyBjbGFzcz8KICBhKSBOb25lCiAgYikgSGlnaCBzY2hvb2wgbWVjaGFuaWNzCiAgYykgSGlnaCBzY2hvb2wgZWxlY3RyaWNpdHkgYW5kIG1hZ25ldGlzbQogIGQpIEFQIG1lY2hhbmljcwogIGUpIEFQIGVsZWN0cmljaXR5IGFuZCBtYWduZXRpc20sIG9yIGFib3ZlCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CmFuc3dlcnNFMSA8LSByZWFkX2NzdigiTWlkdGVybTFfYW5zd2Vycy5jc3YiKVtjKDEsOSwzNCwzNSldCmNvbG5hbWVzKGFuc3dlcnNFMSkgPC0gYygic3R1ZGVudElEIiwgIkV4YW0gMSBTY29yZSIsICJRMjEiLCAiUTIyIikKUHJpb3JQcmVwIDwtIGxlZnRfam9pbihhbnN3ZXJzRTEsIGdyYWRlc0RlbW8sIGJ5ID0gInN0dWRlbnRJRCIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFByaW9yUHJlcCAlPiUKICAgICAgICAgZmlsdGVyKFEyMSA9PSAiQSJ8UTIxID09ICJCIiB8IFEyMSA9PSAiQyIgfCBRMjEgPT0gIkQiIHwgUTIxID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihgRXhhbSBTY29yZWAgPj0gMCksCiAgICAgICBhZXMoUTIxLCBgRXhhbSBTY29yZWAsIGZpbGwgPSBRMjEpKSArIAogIGdlb21fYm94cGxvdCgpICsKICBnZ3RpdGxlKCJQcmlvciBQaHlzaWNzIENsYXNzZXMgdnMuIEV4YW0gMiBTY29yZSIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyMgRXhhbSAxIFF1ZXN0aW9uIDIyCjIyLiBIb3cgbXVjaCBvZiB0aGUgY29udGVudCBmb3IgdGhpcyBleGFtIGRvIHlvdSBmZWVsIHlvdSBhbHJlYWR5IGtuZXcgYmVmb3JlIHRoaXMgY2xhc3M/CiAgYSkgTm9uZSBvZiBpdAogIGIpIFZlcnkgbGl0dGxlIG9mIGl0CiAgYykgU29tZSBvZiBpdAogIGQpIE1vc3Qgb2YgaXQKICBlKSBBbGwgb2YgaXQKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQcmlvclByZXAgJT4lCiAgICAgICAgIGZpbHRlcihRMjIgPT0gIkEifFEyMiA9PSAiQiIgfCBRMjIgPT0gIkMiIHwgUTIyID09ICJEIiB8IFEyMiA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoYEV4YW0gU2NvcmVgID49IDApLAogICAgICAgYWVzKFEyMiwgYEV4YW0gU2NvcmVgLCBmaWxsID0gUTIyKSkgKyAKICBnZW9tX2JveHBsb3QoKSArCiAgZ2d0aXRsZSgiUHJpb3IgS25vd2xlZGdlIGZvciBFeGFtIDEgdnMuIEV4YW0gMiBTY29yZSIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyBDaGFuZ2VzIGluIFBlcmZvcm1hbmNlIGZyb20gRXhhbSAxCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm1DaGFuZ2VzIDwtIGxlZnRfam9pbihhbnN3ZXJzRGVtbywgYW5zd2Vyc0UxLCBieSA9ICJzdHVkZW50SUQiKSAlPiUKICBtdXRhdGUoRGlmZmVyZW5jZSA9IGBFeGFtIFNjb3JlYCAtIGBFeGFtIDEgU2NvcmVgKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUKICAgICAgICAgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApKSArCiAgZ2VvbV9iYXIoYWVzKERpZmZlcmVuY2UpLCBmaWxsID0gYygiI2YxYTM0MCIpKSArCiAgbGFicyh0aXRsZSA9ICJEaWZmZXJlbmNlIGluIEV4YW0gU2NvcmVzIGZyb20gRXhhbSAxIHRvIEV4YW0gMiIsCiAgICAgICBjYXB0aW9uID0gIjIgc3R1ZGVudHMgZGlkIG5vdCB0YWtlIEV4YW0gMSBzbyBhcmUgbm90IGluY2x1ZGVkIGluIHRoaXMgZmlndXJlLiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lCiAgICAgICAgIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoR2VuZGVyLCBEaWZmZXJlbmNlKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSkgKwogIGdlb21fY29sKGFlcyhEaWZmZXJlbmNlLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBHZW5kZXIpKSArCiAgbGFicyh0aXRsZSA9ICJEaWZmZXJlbmNlIGluIEV4YW0gU2NvcmVzIGJ5IEdlbmRlciIsCiAgICAgICBmaWxsID0gIiIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIk9yUmQiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JQogICAgICAgICBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihGR1N0YXR1cyA9PSAiRmlyc3RHZW4iIHwgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpICU+JQogICAgICAgICBncm91cF9ieShGR1N0YXR1cywgRGlmZmVyZW5jZSkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoRGlmZmVyZW5jZSwgYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gRkdTdGF0dXMpKSArCiAgbGFicyh0aXRsZSA9ICJEaWZmZXJlbmNlIGluIEV4YW0gU2NvcmVzIGJ5IEZpcnN0IEdlbmVyYXRpb24gU3RhdHVzIiwKICAgICAgIGZpbGwgPSAiIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJPclJkIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUKICAgICAgICAgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KFVSTVN0YXR1cywgRGlmZmVyZW5jZSkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoRGlmZmVyZW5jZSwgYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gVVJNU3RhdHVzKSkgKwogIGxhYnModGl0bGUgPSAiRGlmZmVyZW5jZSBpbiBFeGFtIFNjb3JlcyBieSBVUk0gU3RhdHVzIiwKICAgICAgIGZpbGwgPSAiIikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiT3JSZCIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpkZW1vRXJyb3JEaWZmIDwtYygpCiMgRmVtYWxlIGVycm9yCmRlbW9FcnJvckRpZmZbMV0gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBFeGFtIDEgU2NvcmVgID49IDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmRlciA9PSAiRiIpJERpZmZlcmVuY2UsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBNYWxlIGVycm9yCmRlbW9FcnJvckRpZmZbMl0gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBFeGFtIDEgU2NvcmVgID49IDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmRlciA9PSAiTSIpJERpZmZlcmVuY2UsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBGRyBlcnJvcgpkZW1vRXJyb3JEaWZmWzNdIDwtIHNkKGJvb3QoZmlsdGVyKFBlcmZvcm1DaGFuZ2VzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRXhhbSAxIFNjb3JlYCA+PSAwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSREaWZmZXJlbmNlLCBib290ZnVuYywgMTAwMDApJHQpCiMgTm90IEZHIGVycm9yCmRlbW9FcnJvckRpZmZbNF0gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBFeGFtIDEgU2NvcmVgID49IDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSREaWZmZXJlbmNlLCBib290ZnVuYywgMTAwMDApJHQpCiMgVVJNIGVycm9yCmRlbW9FcnJvckRpZmZbNV0gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBFeGFtIDEgU2NvcmVgID49IDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTVN0YXR1cyA9PSAiVVJNIikkRGlmZmVyZW5jZSwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIE5vdCBVUk0gZXJyb3IKZGVtb0Vycm9yRGlmZls2XSA8LSBzZChib290KGZpbHRlcihQZXJmb3JtQ2hhbmdlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEV4YW0gMSBTY29yZWAgPj0gMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkRGlmZmVyZW5jZSwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm1EaWZmRGlmZiA8LSBkYXRhX2ZyYW1lKGMoIkYiLCAiTSIsICJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLCAiVVJNIiwgIk5vdCBVUk0iKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihQZXJmb3JtQ2hhbmdlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRXhhbSAxIFNjb3JlYCA+PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZGVyID09ICJGIikkRGlmZmVyZW5jZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihQZXJmb3JtQ2hhbmdlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRXhhbSAxIFNjb3JlYCA+PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZGVyID09ICJNIikkRGlmZmVyZW5jZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihQZXJmb3JtQ2hhbmdlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRXhhbSAxIFNjb3JlYCA+PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkRGlmZmVyZW5jZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihQZXJmb3JtQ2hhbmdlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRXhhbSAxIFNjb3JlYCA+PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJERpZmZlcmVuY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEV4YW0gMSBTY29yZWAgPj0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTVN0YXR1cyA9PSAiVVJNIikkRGlmZmVyZW5jZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihQZXJmb3JtQ2hhbmdlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRXhhbSAxIFNjb3JlYCA+PSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkRGlmZmVyZW5jZSkpLGRlbW9FcnJvckRpZmYpCmNvbG5hbWVzKFBlcmZvcm1EaWZmRGlmZikgPC0gYygiR3JvdXAiLCAiTWVhbiBEaWZmZXJlbmNlIiwgIkVycm9yIikKUGVyZm9ybURpZmZEaWZmJEdyb3VwIDwtIG9yZGVyZWQoUGVyZm9ybURpZmZEaWZmJEdyb3VwLCBsZXZlbHMgPSBjKCJGIiwgIk0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVJNIiwgIk5vdCBVUk0iKSkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybURpZmZEaWZmLCBhZXMoR3JvdXAsIGBNZWFuIERpZmZlcmVuY2VgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIERpZmZlcmVuY2VgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIERpZmZlcmVuY2VgICsgRXJyb3IpLCB3aWR0aCA9IC4zKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgb24gRXhhbSBTY29yZSBEaWZmZXJlbmNlcyIpICsKICB5bGltKGMoLTIsMCkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMgRXhhbSBXcmFwcGVyIFF1ZXN0aW9ucyAtIEV4YW0gU2NvcmUgRGlmZmVyZW5jZXMKCiMjIyMgUXVlc3Rpb24gMjEKMjEuIExhc3QgZXhhbSB3ZSBhc2tlZCB5b3UgaG93IHlvdSBwbGFubmVkIHRvIGNoYW5nZSB5b3VyIHN0dWR5IHN0cmF0ZWdpZXMuIFdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBkaWQgeW91IG1ha2U/IChTZWxlY3QgKiphbGwqKiB0aGF0IGFwcGx5LikKICBhKSBJIHN0YXJ0ZWQgc3R1ZHlpbmcgKiplYXJsaWVyKioKICBiKSBJIHN0dWRpZWQgKipyZWd1bGFybHkqKiB0aHJvdWdob3V0IHRoZSBsYXN0IG1vbnRoCiAgYykgSSBzb2x2ZWQgKiptb3JlKiogcHJhY3RpY2UgcHJvYmxlbXMgKGZyb20gUHJvYmxlbSBSb3VsZXR0ZSBvciBmcm9tIHRoZSB0ZXh0Ym9vaykKICBkKSBJIHVzZWQgKiptb3JlKiogb2YgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgKFBoeXNpY3MgSGVscCBSb29tLCBvZmZpY2UgaG91cnMsIFBpYXp6YSwgZXRjKQogIGUpIEkgZGlkICoqbm90KiogY2hhbmdlIG15IHN0dWR5IHN0cmF0ZWdpZXMgaW4gYW55IG9mIHRoZSBhYm92ZSB3YXlzCiAgCiMjIyMjIDQyNCByZXNwb25zZXMKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApICU+JQogICAgICAgICBmaWx0ZXIoYDIxYCA9PSAiQSIgfGAyMWAgPT0gIkFDInxgMjFgID09ICJDInxgMjFgID09ICJFIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMWAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjFgKSkgKwogIGdndGl0bGUoIkNoYW5nZWQgc3R1ZHkgc3RyYXRlZ2llcyIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApICU+JQogICAgICAgICBmaWx0ZXIoYDIxYCA9PSAiQSIgfGAyMWAgPT0gIkFDInxgMjFgID09ICJDInxgMjFgID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMWAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjFgKSkgKwogIGdndGl0bGUoIkNoYW5nZWQgc3R1ZHkgc3RyYXRlZ2llcyIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApICU+JSAKICAgICAgICAgZmlsdGVyKGAyMWAgPT0gIkEiIHxgMjFgID09ICJBQyJ8YDIxYCA9PSAiQyJ8YDIxYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIxYCwgRGlmZmVyZW5jZSwgZmlsbCA9IGAyMWApKSArCiAgZ2d0aXRsZSgiQ2hhbmdlZCBzdHVkeSBzdHJhdGVnaWVzIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKGAyMWAgPT0gIkEiIHxgMjFgID09ICJBQyJ8YDIxYCA9PSAiQyJ8YDIxYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMWAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjFgKSkgKwogIGdndGl0bGUoIkNoYW5nZWQgc3R1ZHkgc3RyYXRlZ2llcyIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyMgUXVlc3Rpb24gMjIKMjIuIEhvdyBkbyB5b3UgZmVlbCBhYm91dCB5b3VyIHByZXBhcmF0aW9uIGZvciB0aGlzIGV4YW0gY29tcGFyZWQgdG8gRXhhbSAxPwogIGEpIEkgKipjaGFuZ2VkKiogbXkgc3R1ZHkgc3RyYXRlZ2llcyBhbmQgSSBmZWx0ICoqbW9yZSoqIHByZXBhcmVkCiAgYikgSSAqKmNoYW5nZWQqKiBteSBzdHVkeWluZyBzdHJhdGVnaWVzIGFuZCBJIGZlbHQgKipsZXNzIG9yIGFzKiogcHJlcGFyZWQKICBjKSBJIGRpZCAqKm5vdCoqIGNoYW5nZSBteSBzdHVkeSBzdHJhdGVnaWVzIGFuZCBJIGZlbHQgKiptb3JlKiogcHJlcGFyZWQKICBkKSBJIGRpZCAqKm5vdCoqIGNoYW5nZSBteSBzdHVkeSBzdHJhdGVnaWVzIGFuZCBJIGZlbHQgKipsZXNzIG9yIGFzKiogcHJlcGFyZWQKICBlKSBJJ20gbm90IHN1cmUKICAKIyMjIyMgNDIyIHJlc3BvbnNlcwoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JSBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihgMjJgID09ICJBIiB8YDIyYCA9PSAiQiJ8YDIyYCA9PSAiRCJ8YDIyYCA9PSAiRSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjJgLCBEaWZmZXJlbmNlLCBmaWxsID0gYDIyYCkpICsKICBnZ3RpdGxlKCJQcmVwYXJhdGlvbiIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApICU+JSAKICAgICAgICAgZmlsdGVyKGAyMmAgPT0gIkEiIHxgMjJgID09ICJCInxgMjJgID09ICJEInxgMjJgID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMmAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjJgKSkgKwogIGdndGl0bGUoIlByZXBhcmF0aW9uIikgKwogIGZhY2V0X3dyYXAofkdlbmRlcikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JSBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lIAogICAgICAgICBmaWx0ZXIoYDIyYCA9PSAiQSIgfGAyMmAgPT0gIkIifGAyMmAgPT0gIkQifGAyMmAgPT0gIkUiKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyMmAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjJgKSkgKwogIGdndGl0bGUoIlByZXBhcmF0aW9uIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKGAyMmAgPT0gIkEiIHxgMjJgID09ICJCInxgMjJgID09ICJEInxgMjJgID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIyYCwgRGlmZmVyZW5jZSwgZmlsbCA9IGAyMmApKSArCiAgZ2d0aXRsZSgiUHJlcGFyYXRpb24iKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCiMjIyMgUXVlc3Rpb24gMjMKMjMuIFdoYXQgaXMgeW91ciBvcGluaW9uIGFib3V0IE0tV3JpdGUgYWN0aXZpdGllcyB0aHVzIGZhcj8KICBhKSBJICoqbGlrZSoqIE0tV3JpdGUsIGFuZCB0aGUgYWN0aXZpdGllcyBhcmUgKip1c2VmdWwqKiBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiBwaHlzaWNzCiAgYikgSSAqKmxpa2UqKiBNLVdyaXRlLCBidXQgdGhlIGFjdGl2aXRpZXMgYXJlICoqbm90IHVzZWZ1bCoqIGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIHBoeXNpY3MKICBjKSBJICoqZGlzbGlrZSoqIE0tV3JpdGUsIGJ1dCB0aGUgYWN0aXZpdGllcyBhcmUgKip1c2VmdWwqKiBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiBwaHlzaWNzCiAgZCkgSSAqKmRpc2xpa2UqKiBNLVdyaXRlLCBhbmQgdGhlIGFjdGl2aXRpZXMgYXJlICoqbm90IHVzZWZ1bCoqIGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIHBoeXNpY3MKICBlKSBJIGFtIG5ldXRyYWwgdG93YXJkcyB0aGUgTS1Xcml0ZSBhY3Rpdml0aWVzCiAgCiMjIyMjIDQyNCByZXNwb25zZXMKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JSBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihgMjNgID09ICJBIiB8YDIzYCA9PSAiQiJ8YDIzYCA9PSAiQyJ8IGAyM2AgPT0gIkQiIHxgMjNgID09ICJFIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyM2AsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjNgKSkgKwogIGdndGl0bGUoIk0tV3JpdGUgT3BpbmlvbiIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApICU+JQogICAgICAgICBmaWx0ZXIoYDIzYCA9PSAiQSIgfGAyM2AgPT0gIkIifGAyM2AgPT0gIkMifCBgMjNgID09ICJEIiB8YDIzYCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjNgLCBEaWZmZXJlbmNlLCBmaWxsID0gYDIzYCkpICsKICBnZ3RpdGxlKCJNLVdyaXRlIE9waW5pb24iKSArCiAgZmFjZXRfd3JhcCh+R2VuZGVyKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKGAyM2AgPT0gIkEiIHxgMjNgID09ICJCInxgMjNgID09ICJDInwgYDIzYCA9PSAiRCIgfGAyM2AgPT0gIkUiKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyM2AsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjNgKSkgKwogIGdndGl0bGUoIk0tV3JpdGUgT3BpbmlvbiIpICsKICBmYWNldF93cmFwKH5GR1N0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JSBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihgMjNgID09ICJBIiB8YDIzYCA9PSAiQiJ8YDIzYCA9PSAiQyJ8IGAyM2AgPT0gIkQiIHxgMjNgID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDIzYCwgRGlmZmVyZW5jZSwgZmlsbCA9IGAyM2ApKSArCiAgZ2d0aXRsZSgiTS1Xcml0ZSBPcGluaW9uIikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAojIyMjIFF1ZXN0aW9uIDI0CjI0LiBXaGF0IGRvIHlvdSBsaWtlICoqbW9zdCoqIGFib3V0IGhhdmluZyBleHRyYSB0aW1lIG9uIHRoaXMgZXhhbT8gKFNlbGVjdCAqKmFsbCoqIHRoYXQgYXBwbHkuKQogIGEpIEkgdG9vayBteSB0aW1lIHdpdGggZWFjaCBxdWVzdGlvbgogIGIpIEkgY2hlY2tlZCBteSB3b3JrIG1vcmUgdGhvcm91Z2hseSBhdCB0aGUgZW5kCiAgYykgSSByZXZpc2l0ZWQgcHJvYmxlbXMgSSB3YXMgbm90IHN1cmUgYWJvdXQKICBkKSBJIGZlbHQgbGVzcyBzdHJlc3MvcHJlc3N1cmUgZHVyaW5nIHRoaXMgZXhhbQogIGUpIE5vdGhpbmcsIEkgZGlkIG5vdCBuZWVkIGV4dHJhIHRpbWUgYW5kIGRpZCBub3QgdXNlIGl0CiAgCiMjIyMjIDQxOCByZXNwb25zZXMKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JSBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihgMjRgID09ICJBIiB8YDI0YCA9PSAiQUJDRCJ8YDI0YCA9PSAiQyJ8YDI0YCA9PSAiRCIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjRgLCBEaWZmZXJlbmNlLCBmaWxsID0gYDI0YCkpICsKICBnZ3RpdGxlKCJMaWtlIEV4dHJhIFRpbWUiKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKGAyNGAgPT0gIkEiIHxgMjRgID09ICJBQkNEInxgMjRgID09ICJDInxgMjRgID09ICJEIikgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyNGAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIkxpa2UgRXh0cmEgVGltZSIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUgZmlsdGVyKGBFeGFtIDEgU2NvcmVgID49IDApICU+JQogICAgICAgICBmaWx0ZXIoYDI0YCA9PSAiQSIgfGAyNGAgPT0gIkFCQ0QifGAyNGAgPT0gIkMifGAyNGAgPT0gIkQiKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyNGAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIkxpa2UgRXh0cmEgVGltZSIpICsKICBmYWNldF93cmFwKH5GR1N0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JSBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihgMjRgID09ICJBIiB8YDI0YCA9PSAiQUJDRCJ8YDI0YCA9PSAiQyJ8YDI0YCA9PSAiRCIpICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikpICsKICBnZW9tX2JveHBsb3QoYWVzKGAyNGAsIERpZmZlcmVuY2UsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIkxpa2UgRXh0cmEgVGltZSIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyMgUXVlc3Rpb24gMjUKMjUuIFdoYXQgZG8geW91IGxpa2UgKipsZWFzdCoqIGFib3V0IGhhdmluZyBleHRyYSB0aW1lIG9uIHRoZSBleGFtPyAoU2VsZWN0ICoqYWxsKiogdGhhdCBhcHBseS4pCiAgYSkgSSBzZWNvbmQtZ3Vlc3NlZCBteSBhbnN3ZXIgY2hvaWNlcwogIGIpIEkgZmVsdCBzdHJlc3MvcHJlc3N1cmUgYWJvdXQgd2hlbiBJIGZpbmlzaGVkIGNvbXBhcmVkIHRvIG15IHBlZXJzCiAgYykgR29pbmcgaW4sIEkgd29ycmllZCB0aGF0IGV4dHJhIHRpbWUgbWVhbnQgdGhlIGV4YW0gd291bGQgYmUgaGFyZGVyCiAgZCkgSSBkaWQgbm90IHByZXBhcmUgYXMgbXVjaCBmb3IgdGhlIGV4YW0gYXMgSSBtaWdodCBoYXZlIG90aGVyd2lzZSBiZWNhdXNlIEkgdGhvdWdodCBJJ2QgaGF2ZSB0aW1lIHRvIGZpZ3VyZSB0aGUgcHJvYmxlbXMgb3V0IG9uIHRoZSBleGFtCiAgZSkgTm90aGluZywgdGhlIGV4dHJhIHRpbWUgZGlkIG5vdCBhZmZlY3QgaG93IEkgcHJlcGFyZWQgZm9yIG9yIGV4cGVyaWVuY2VkIHRoZSBleGFtCiAgCiMjIyMjIDQwOCByZXNwb25zZXMKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JSBmaWx0ZXIoYEV4YW0gMSBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihgMjVgID09ICJBIiB8YDI1YCA9PSAiRSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjVgLCBEaWZmZXJlbmNlLCBmaWxsID0gYDI1YCkpICsKICBnZ3RpdGxlKCJEaXNsaWtlIEV4dHJhIFRpbWUiKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUgCiAgICAgICAgIGZpbHRlcihgMjVgID09ICJBIiB8YDI1YCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9ib3hwbG90KGFlcyhgMjVgLCBEaWZmZXJlbmNlLCBmaWxsID0gYDI1YCkpICsKICBnZ3RpdGxlKCJEaXNsaWtlIEV4dHJhIFRpbWUiKSArCiAgZmFjZXRfd3JhcCh+R2VuZGVyKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKGAyNWAgPT0gIkEiIHwgYDI1YCA9PSAiRSIpICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI1YCwgRGlmZmVyZW5jZSwgZmlsbCA9IGAyNWApKSArCiAgZ2d0aXRsZSgiRGlzbGlrZSBFeHRyYSBUaW1lIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lIGZpbHRlcihgRXhhbSAxIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKGAyNWAgPT0gIkEiIHxgMjVgID09ICJFIikgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fYm94cGxvdChhZXMoYDI1YCwgRGlmZmVyZW5jZSwgZmlsbCA9IGAyNWApKSArCiAgZ2d0aXRsZSgiRGlzbGlrZSBFeHRyYSBUaW1lIikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoK