Number of students on Problem Roulette by day

Number of Problem Roulette questions answered by day, by group

Number of students answering Problem Roulette questions by day, by group

Comparing Control and Treatment Across Full Class

Control (A): 327 students
Treatment (B): 316 students
No assigned group: 18 students

Count value for retry = 0 is how many students used Problem Roulette
Count value for retry = NA is how many students did not use Problem Roulette


Comparing PR Usage to Exam Scores

Pearson Correlation Coefficient

             Exam 2 Score     count  ncorrect PRpercent examPercent
Exam 2 Score    1.0000000 0.1771050 0.2445885 0.3583900   1.0000000
count           0.1771050 1.0000000 0.9430191 0.1924701   0.1771050
ncorrect        0.2445885 0.9430191 1.0000000 0.3337134   0.2445885
PRpercent       0.3583900 0.1924701 0.3337134 1.0000000   0.3583900
examPercent     1.0000000 0.1771050 0.2445885 0.3583900   1.0000000

Student that answered 175 questions on 10/31 answered 222 overall, with 72% Problem Roulette percent correct rate.

Comparing Exam Scores to Varying Levels of PR Usage

LS0tCnRpdGxlOiAiRkEgMjAxOCBQaHlzaWNzIDE0MCBNaWR0ZXJtIDIgUHJvYmxlbSBSb3VsZXR0ZSBOdWRnZSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IsIGVjaG8gPSBGQUxTRX0KIyMgUmVjYWxjdWxhdGUgZml0IGZvciBrbWVhbnMgY2x1c3RlcmluZyBpZiBlbnZpcm9ubWVudCBpcyBlbXB0eS4KYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShrbml0cikKbGlicmFyeShib290KQpsaWJyYXJ5KGNsdXN0ZXIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KdGhlbWVfcHViIDwtIAogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSByZWwoMS4yKSwgaGp1c3QgPSAwLjUpLAogICAgICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KCksCiAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAid2hpdGUiKSwKICAgICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLHNpemUgPSAxNCksCiAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCx2anVzdCA9MixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gLTAuMixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTApLCAKICAgICAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91cj0iYmxhY2siKSwKICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfbGluZSgpLAogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91cj0iZ3JleTkwIiksCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gTkEpLAogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICAgICAgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgbGVnZW5kLmtleS5zaXplPSB1bml0KDAuMiwgImNtIiksCiAgICAgICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJpdGFsaWMiKSwKICAgICAgICAgICAgcGxvdC5tYXJnaW49dW5pdChjKDEwLDUsNSw1KSwibW0iKSwKICAgICAgICAgICAgc3RyaXAuYmFja2dyb3VuZD1lbGVtZW50X3JlY3QoY29sb3VyPSIjZjBmMGYwIixmaWxsPSIjZjBmMGYwIiksCiAgICAgICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIpLAogICAgICAgICAgYXNwZWN0LnJhdGlvPS42NQogICAgKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KU3R1ZGVudFRyZWF0bWVudCA8LSByZWFkX2NzdigicGh5c2ljc18xNDBfcHJfc3R1ZHlfY29udHJvbF90cmVhdG1lbnRfMjIxMC5jc3YiKSAlPiUgCiAgZmlsdGVyKGFjY291bnRfaWQgIT0gIk5VTEwiKQpTdHVkZW50VHJlYXRtZW50JGFjY291bnRfaWQgPSBhcy5udW1lcmljKFN0dWRlbnRUcmVhdG1lbnQkYWNjb3VudF9pZCkKY29sbmFtZXMoU3R1ZGVudFRyZWF0bWVudCkgPC0gYygiYWNjb3VudF9pZCIsICJHcm91cCIpCkFsbFF1ZXN0aW9ucyA8LSByZWFkX2NzdigicHJvYmxlbV9yb3VsZXR0ZV9hbGxfcXVlc3Rpb25fZGF0YV8xMF8yNF8xMV8xLmNzdiIpClF1ZXN0aW9uc2J5RGF5IDwtIHJlYWRfY3N2KCJwcm9ibGVtX3JvdWxldHRlX3RvcGljX2Fuc3dlcnNfYnlfdGhlZGF5XzEwXzI0XzExXzEuY3N2IikKZ3JhZGVzIDwtIHJlYWRfY3N2KCJNaWR0ZXJtMl9zY29yZXMuY3N2IikgJT4lIGZpbHRlcihmaXJzdF9uYW1lICE9ICIwIikKZ3JhZGVzJGFjY291bnRfaWQgPSBhcy5udW1lcmljKGdyYWRlcyRzdHVkZW50X2lkKQpjb2xuYW1lcyhncmFkZXMpW2NvbG5hbWVzKGdyYWRlcykgPT0gInJlZyBzY29yZSJdIDwtICJFeGFtIDIgU2NvcmUiCmdyYWRlc0UxIDwtIHJlYWRfY3N2KCJNaWR0ZXJtMV9zY29yZXMuY3N2IikgJT4lIGZpbHRlcihmaXJzdF9uYW1lICE9ICIwIikKZ3JhZGVzRTEkYWNjb3VudF9pZCA9IGFzLm51bWVyaWMoZ3JhZGVzRTEkc3R1ZGVudF9pZCkKY29sbmFtZXMoZ3JhZGVzRTEpW2NvbG5hbWVzKGdyYWRlc0UxKSA9PSAicmVnIHNjb3JlIl0gPC0gIkV4YW0gMSBTY29yZSIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQojIGFkZCBsZWFkaW5nIHplcm9zIHRvIHN0dWRlbnQgSUQgbnVtYmVycwphZGRaZXJvcyA8LSBmdW5jdGlvbihteXRhYmxlKSB7CiAgc3R1ZGVudF9pZCA8LSBjKCkKICBmb3IoaSBpbiAxOm5yb3cobXl0YWJsZSkpIHsKICAgIGlmIChjZWlsaW5nKGxvZzEwKG15dGFibGUkYWNjb3VudF9pZFtpXSsxKSkgPT0gNikgewogICAgICBzdHVkZW50X2lkW2ldID0gcGFzdGUwKCIwMCIsIG15dGFibGUkYWNjb3VudF9pZFtpXSkKICAgIH0gCiAgICBlbHNlIGlmIChjZWlsaW5nKGxvZzEwKG15dGFibGUkYWNjb3VudF9pZFtpXSsxKSkgPT0gNykgewogICAgICBzdHVkZW50X2lkW2ldID0gcGFzdGUwKCIwIiwgbXl0YWJsZSRhY2NvdW50X2lkW2ldKQogICAgfQogICAgZWxzZSB7CiAgICAgIHN0dWRlbnRfaWRbaV0gPSBteXRhYmxlJGFjY291bnRfaWRbaV0KICAgIH0KICB9CiAgbXl0YWJsZSRzdHVkZW50SUQgPC0gc3R1ZGVudF9pZAogIHJldHVybihteXRhYmxlKQp9CmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUXVlc3Rpb25UcmVhdG1lbnQgPC0gbGVmdF9qb2luKGFkZFplcm9zKEFsbFF1ZXN0aW9ucyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkWmVyb3MoU3R1ZGVudFRyZWF0bWVudCksIGJ5ID0gInN0dWRlbnRJRCIpW2MoMTAsMTIsMiwzLDUsOSw2LDcpXQpRdWVzdGlvbkRheVRyZWF0bWVudCA8LSBsZWZ0X2pvaW4oYWRkWmVyb3MoUXVlc3Rpb25zYnlEYXkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFplcm9zKFN0dWRlbnRUcmVhdG1lbnQpLCBieSA9ICJzdHVkZW50SUQiKVtjKDUsNywyLDMsNCldCnNjb3JlcyA8LSBsZWZ0X2pvaW4oYWRkWmVyb3MoZ3JhZGVzKVtjKDQwLDUpXSwgCiAgICAgICAgICAgICAgICAgICAgYWRkWmVyb3MoZ3JhZGVzRTEpW2MoNDAsNSldLCBieSA9ICJzdHVkZW50SUQiKSAlPiUKICBtdXRhdGUoRGlmZmVyZW5jZSA9IGBFeGFtIDIgU2NvcmVgIC0gYEV4YW0gMSBTY29yZWApCgpgYGAKCk51bWJlciBvZiBzdHVkZW50cyBvbiBQcm9ibGVtIFJvdWxldHRlIGJ5IGRheQpgYGB7ciwgZWNobyA9IEZBTFNFfQpRdWVzdGlvblRyZWF0bWVudCAlPiUgCiAgZmlsdGVyKHJldHJ5ID09IDApICU+JSAKICBncm91cF9ieShkYXkpICU+JQogIGZpbHRlcighZHVwbGljYXRlZChzdHVkZW50SUQpKSAlPiUgCiAgc3VtbWFyaXNlKGNvdW50ID0gbigpKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChRdWVzdGlvblRyZWF0bWVudCAlPiUKICAgICAgICAgZmlsdGVyKHJldHJ5ID09IDApICU+JQogICAgICAgICBncm91cF9ieShzdHVkZW50SUQsIGRheSkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkpICsKICBnZW9tX2ppdHRlcihhZXMoZGF5LCBjb3VudCkpICsKICBsYWJzKHRpdGxlID0gIk51bWJlciBvZiBVbmlxdWUgUXVlc3Rpb25zIGJ5IERheSIsIAogICAgICAgY2FwdGlvbiA9ICJTdHVkZW50IHRoYXQgYW5zd2VyZWQgMTcyIHRoZSBkYXkgYmVmb3JlIE1pZHRlcm0gMiBnb3QgYSAxNS8yMCIpICsKICB0aGVtZV9wdWIKYGBgCgpOdW1iZXIgb2YgUHJvYmxlbSBSb3VsZXR0ZSBxdWVzdGlvbnMgYW5zd2VyZWQgYnkgZGF5LCBieSBncm91cApgYGB7ciwgZWNobyA9IEZBTFNFfQpRdWVzdGlvblRyZWF0bWVudCAlPiUgCiAgZmlsdGVyKHJldHJ5ID09IDApICU+JSAKICBncm91cF9ieShHcm91cCwgZGF5KSAlPiUgCiAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUgCiAgZmlsdGVyKEdyb3VwID09ICJDb250cm9sIChBKSJ8R3JvdXAgPT0gIlRyZWF0bWVudCAoQikiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChRdWVzdGlvblRyZWF0bWVudCAlPiUKICAgICAgICAgZmlsdGVyKHJldHJ5ID09IDApICU+JQogICAgICAgICBncm91cF9ieShHcm91cCwgZGF5KSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgZmlsdGVyKEdyb3VwID09ICJDb250cm9sIChBKSJ8R3JvdXAgPT0gIlRyZWF0bWVudCAoQikiKSkgKwogIGdlb21fcG9pbnQoYWVzKGRheSwgY291bnQsIGNvbG9yID0gR3JvdXApLCBzaXplID0gMikgKwogIGxhYnModGl0bGUgPSAiTnVtYmVyIG9mIFVuaXF1ZSBRdWVzdGlvbnMgYnkgRGF5IiwgCiAgICAgICBjYXB0aW9uID0gIlN0dWRlbnQgdGhhdCBhbnN3ZXJlZCAxNzIgdGhlIGRheSBiZWZvcmUgTWlkdGVybSAyIGdvdCBhIDE1LzIwIiwKICAgICAgIGNvbG9yID0gIiIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9wdWIKYGBgCgpOdW1iZXIgb2Ygc3R1ZGVudHMgYW5zd2VyaW5nIFByb2JsZW0gUm91bGV0dGUgcXVlc3Rpb25zIGJ5IGRheSwgYnkgZ3JvdXAKYGBge3IsIGVjaG8gPSBGQUxTRX0KUXVlc3Rpb25UcmVhdG1lbnQgJT4lIAogIGZpbHRlcihyZXRyeSA9PSAwKSAlPiUgCiAgZ3JvdXBfYnkoR3JvdXAsIGRheSkgJT4lIAogIGZpbHRlcighZHVwbGljYXRlZChzdHVkZW50SUQpKSAlPiUgCiAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUgCiAgZmlsdGVyKEdyb3VwID09ICJDb250cm9sIChBKSJ8R3JvdXAgPT0gIlRyZWF0bWVudCAoQikiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClByb2JsZW1CeVN0dWRlbnQgPC0gUXVlc3Rpb25UcmVhdG1lbnQgJT4lCiAgZmlsdGVyKHJldHJ5ID09IDAsIEdyb3VwID09ICJDb250cm9sIChBKSIgfCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIpICU+JQogIGdyb3VwX2J5KEdyb3VwLCBzdHVkZW50SUQpICU+JQogIHN1bW1hcmlzZShjb3VudCA9IG4oKSkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpib290ZnVuYyA8LSBmdW5jdGlvbihkLGkpIHsKICBkMSA8LSBkW2ldCiAgcmV0dXJuKG1lYW4oZDEpKQp9CmBgYAoKCmBgYHtyLCBlY2hvID0gRkFMU0V9Cm1lYW5Qcm9ibGVtIDwtIGMoKQptZWFuUHJvYmxlbVsxXSA8LSBtZWFuKGZpbHRlcihQcm9ibGVtQnlTdHVkZW50LCBHcm91cCA9PSAiQ29udHJvbCAoQSkiKSRjb3VudCkKbWVhblByb2JsZW1bMl0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5U3R1ZGVudCwgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiKSRjb3VudCkKCmVycm9yUHJvYmxlbSA8LSBjKCkKZXJyb3JQcm9ibGVtWzFdIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeVN0dWRlbnQsIEdyb3VwID09ICJDb250cm9sIChBKSIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yUHJvYmxlbVsyXSA8LSBzZChib290KGZpbHRlcihQcm9ibGVtQnlTdHVkZW50LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCgpQcm9ibGVtQ29tcCA8LSBkYXRhX2ZyYW1lKGMoIkNvbnRyb2wgKEEpIiwgIlRyZWF0bWVudCAoQikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuUHJvYmxlbSwgZXJyb3JQcm9ibGVtKQpjb2xuYW1lcyhQcm9ibGVtQ29tcCkgPC0gYygiR3JvdXAiLCAiTWVhbiBOdW1iZXIgb2YgUHJvYmxlbXMiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQcm9ibGVtQ29tcCwgYWVzKEdyb3VwLCBgTWVhbiBOdW1iZXIgb2YgUHJvYmxlbXNgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIE51bWJlciBvZiBQcm9ibGVtc2AgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gTnVtYmVyIG9mIFByb2JsZW1zYCArIEVycm9yKSwgd2lkdGggPSAuMikgKwogIGdndGl0bGUoIk1lYW4gTnVtYmVyIG9mIFByb2JsZW1zIGJ5IFN0dWRlbnQiKSArCiAgbGFicyhjb2xvciA9ICIiLCBzdWJ0aXRsZSA9ICJDb250cm9sIChBKSwgbiA9IDEyMiBcbiBUcmVhdG1lbnQgKEIpLCBuID0gMTM2IikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUHJvYmxlbUJ5RGF5IDwtIFF1ZXN0aW9uVHJlYXRtZW50ICU+JQogIGZpbHRlcihyZXRyeSA9PSAwLCBHcm91cCA9PSAiQ29udHJvbCAoQSkiIHwgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiKSAlPiUKICBncm91cF9ieShHcm91cCwgZGF5LCBzdHVkZW50SUQpICU+JQogIHN1bW1hcmlzZShjb3VudCA9IG4oKSkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQptZWFuUHJvYmxlbURheSA8LSBjKCkKbWVhblByb2JsZW1EYXlbMV0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiQ29udHJvbCAoQSkiKSRjb3VudCkKbWVhblByb2JsZW1EYXlbMl0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIpJGNvdW50KQoKZXJyb3JQcm9ibGVtRGF5IDwtIGMoKQplcnJvclByb2JsZW1EYXlbMV0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiQ29udHJvbCAoQSkiKSRjb3VudCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvclByb2JsZW1EYXlbMl0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCgpQcm9ibGVtRGF5Q29tcCA8LSBkYXRhX2ZyYW1lKGMoIkNvbnRyb2wgKEEpIiwgIlRyZWF0bWVudCAoQikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuUHJvYmxlbURheSwgZXJyb3JQcm9ibGVtRGF5KQpjb2xuYW1lcyhQcm9ibGVtRGF5Q29tcCkgPC0gYygiR3JvdXAiLCAiTWVhbiBOdW1iZXIgb2YgUHJvYmxlbXMgcGVyIERheSIsICJFcnJvciIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFByb2JsZW1EYXlDb21wLCBhZXMoR3JvdXAsIGBNZWFuIE51bWJlciBvZiBQcm9ibGVtcyBwZXIgRGF5YCwgY29sb3IgPSBHcm91cCkpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBOdW1iZXIgb2YgUHJvYmxlbXMgcGVyIERheWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gTnVtYmVyIG9mIFByb2JsZW1zIHBlciBEYXlgICsgRXJyb3IpLCB3aWR0aCA9IC4yKSArCiAgZ2d0aXRsZSgiTWVhbiBOdW1iZXIgb2YgRGFpbHkgUHJvYmxlbXMgYnkgU3R1ZGVudCIpICsKICBsYWJzKGNvbG9yID0gIiIsIHN1YnRpdGxlID0gIkNvbnRyb2wgKEEpLCBuID0gMTIyIFxuIFRyZWF0bWVudCAoQiksIG4gPSAxMzYiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQptZWFuUHJvYmxlbVBlckRheSA8LSBjKCkKbWVhblByb2JsZW1QZXJEYXlbMV0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiQ29udHJvbCAoQSkiLCBkYXkgPT0gIjEwLTI0IikkY291bnQpCm1lYW5Qcm9ibGVtUGVyRGF5WzJdIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiLCBkYXkgPT0gIjEwLTI0IikkY291bnQpCm1lYW5Qcm9ibGVtUGVyRGF5WzNdIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0yNSIpJGNvdW50KQptZWFuUHJvYmxlbVBlckRheVs0XSA8LSBtZWFuKGZpbHRlcihQcm9ibGVtQnlEYXksIEdyb3VwID09ICJUcmVhdG1lbnQgKEIpIiwgZGF5ID09ICIxMC0yNSIpJGNvdW50KQptZWFuUHJvYmxlbVBlckRheVs1XSA8LSBtZWFuKGZpbHRlcihQcm9ibGVtQnlEYXksIEdyb3VwID09ICJDb250cm9sIChBKSIsIGRheSA9PSAiMTAtMjYiKSRjb3VudCkKbWVhblByb2JsZW1QZXJEYXlbNl0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMjYiKSRjb3VudCkKbWVhblByb2JsZW1QZXJEYXlbN10gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiQ29udHJvbCAoQSkiLCBkYXkgPT0gIjEwLTI3IikkY291bnQpCm1lYW5Qcm9ibGVtUGVyRGF5WzhdIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiLCBkYXkgPT0gIjEwLTI3IikkY291bnQpCm1lYW5Qcm9ibGVtUGVyRGF5WzldIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0yOCIpJGNvdW50KQptZWFuUHJvYmxlbVBlckRheVsxMF0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMjgiKSRjb3VudCkKbWVhblByb2JsZW1QZXJEYXlbMTFdIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0yOSIpJGNvdW50KQptZWFuUHJvYmxlbVBlckRheVsxMl0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMjkiKSRjb3VudCkKbWVhblByb2JsZW1QZXJEYXlbMTNdIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0zMCIpJGNvdW50KQptZWFuUHJvYmxlbVBlckRheVsxNF0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMzAiKSRjb3VudCkKbWVhblByb2JsZW1QZXJEYXlbMTVdIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0zMSIpJGNvdW50KQptZWFuUHJvYmxlbVBlckRheVsxNl0gPC0gbWVhbihmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMzEiKSRjb3VudCkKbWVhblByb2JsZW1QZXJEYXlbMTddIDwtIG1lYW4oZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMS0xIikkY291bnQpCm1lYW5Qcm9ibGVtUGVyRGF5WzE4XSA8LSBtZWFuKGZpbHRlcihQcm9ibGVtQnlEYXksIEdyb3VwID09ICJUcmVhdG1lbnQgKEIpIiwgZGF5ID09ICIxMS0xIikkY291bnQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZXJyb3JQcm9ibGVtUGVyRGF5IDwtIGMoKQplcnJvclByb2JsZW1QZXJEYXlbMV0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiQ29udHJvbCAoQSkiLCBkYXkgPT0gIjEwLTI0IikkY291bnQsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JQcm9ibGVtUGVyRGF5WzJdIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiLCBkYXkgPT0gIjEwLTI0IikkY291bnQsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JQcm9ibGVtUGVyRGF5WzNdIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0yNSIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yUHJvYmxlbVBlckRheVs0XSA8LSBzZChib290KGZpbHRlcihQcm9ibGVtQnlEYXksIEdyb3VwID09ICJUcmVhdG1lbnQgKEIpIiwgZGF5ID09ICIxMC0yNSIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yUHJvYmxlbVBlckRheVs1XSA8LSBzZChib290KGZpbHRlcihQcm9ibGVtQnlEYXksIEdyb3VwID09ICJDb250cm9sIChBKSIsIGRheSA9PSAiMTAtMjYiKSRjb3VudCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvclByb2JsZW1QZXJEYXlbNl0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMjYiKSRjb3VudCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvclByb2JsZW1QZXJEYXlbN10gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiQ29udHJvbCAoQSkiLCBkYXkgPT0gIjEwLTI3IikkY291bnQsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JQcm9ibGVtUGVyRGF5WzhdIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiLCBkYXkgPT0gIjEwLTI3IikkY291bnQsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JQcm9ibGVtUGVyRGF5WzldIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0yOCIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yUHJvYmxlbVBlckRheVsxMF0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMjgiKSRjb3VudCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvclByb2JsZW1QZXJEYXlbMTFdIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0yOSIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yUHJvYmxlbVBlckRheVsxMl0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMjkiKSRjb3VudCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvclByb2JsZW1QZXJEYXlbMTNdIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0zMCIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yUHJvYmxlbVBlckRheVsxNF0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMzAiKSRjb3VudCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvclByb2JsZW1QZXJEYXlbMTVdIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMC0zMSIpJGNvdW50LCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yUHJvYmxlbVBlckRheVsxNl0gPC0gc2QoYm9vdChmaWx0ZXIoUHJvYmxlbUJ5RGF5LCBHcm91cCA9PSAiVHJlYXRtZW50IChCKSIsIGRheSA9PSAiMTAtMzEiKSRjb3VudCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvclByb2JsZW1QZXJEYXlbMTddIDwtIHNkKGJvb3QoZmlsdGVyKFByb2JsZW1CeURheSwgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIiwgZGF5ID09ICIxMS0xIikkY291bnQsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JQcm9ibGVtUGVyRGF5WzE4XSA8LSBzZChib290KGZpbHRlcihQcm9ibGVtQnlEYXksIEdyb3VwID09ICJUcmVhdG1lbnQgKEIpIiwgZGF5ID09ICIxMS0xIikkY291bnQsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpQcm9ibGVtUGVyRGF5Q29tcCA8LSBkYXRhX2ZyYW1lKGMoIkNvbnRyb2wgKEEpIiwgIlRyZWF0bWVudCAoQikiLCJDb250cm9sIChBKSIsICJUcmVhdG1lbnQgKEIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250cm9sIChBKSIsICJUcmVhdG1lbnQgKEIpIiwiQ29udHJvbCAoQSkiLCAiVHJlYXRtZW50IChCKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udHJvbCAoQSkiLCAiVHJlYXRtZW50IChCKSIsIkNvbnRyb2wgKEEpIiwgIlRyZWF0bWVudCAoQikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRyb2wgKEEpIiwgIlRyZWF0bWVudCAoQikiLCJDb250cm9sIChBKSIsICJUcmVhdG1lbnQgKEIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250cm9sIChBKSIsICJUcmVhdG1lbnQgKEIpIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIjEwLTI0IiwgIjEwLTI0IiwgIjEwLTI1IiwgIjEwLTI1IiwgIjEwLTI2IiwgIjEwLTI2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMC0yNyIsICIxMC0yNyIsICIxMC0yOCIsICIxMC0yOCIsICIxMC0yOSIsICIxMC0yOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAtMzAiLCAiMTAtMzAiLCAiMTAtMzEiLCAiMTAtMzEiLCAiMTEtMSIsICIxMS0xIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhblByb2JsZW1QZXJEYXksIGVycm9yUHJvYmxlbVBlckRheSkKY29sbmFtZXMoUHJvYmxlbVBlckRheUNvbXApIDwtIGMoIkdyb3VwIiwgIkRheSIsICJNZWFuIE51bWJlciBvZiBQcm9ibGVtcyBieSBEYXkiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQcm9ibGVtUGVyRGF5Q29tcCwgYWVzKERheSwgYE1lYW4gTnVtYmVyIG9mIFByb2JsZW1zIGJ5IERheWAsIGNvbG9yID0gR3JvdXApKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gTnVtYmVyIG9mIFByb2JsZW1zIGJ5IERheWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gTnVtYmVyIG9mIFByb2JsZW1zIGJ5IERheWAgKyBFcnJvciksIHdpZHRoID0gLjIpICsKICBnZ3RpdGxlKCJNZWFuIE51bWJlciBvZiBQcm9ibGVtcyBieSBTdHVkZW50IikgKwogIGxhYnMoY29sb3IgPSAiIiwgc3VidGl0bGUgPSAiQ29udHJvbCAoQSksIG4gPSAxMjIgXG4gVHJlYXRtZW50IChCKSwgbiA9IDEzNiIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyMgQ29tcGFyaW5nIENvbnRyb2wgYW5kIFRyZWF0bWVudCBBY3Jvc3MgRnVsbCBDbGFzcwpgYGB7ciwgZWNobyA9IEZBTFNFfQpQUlRyZWF0bWVudEFsbCA8LSByaWdodF9qb2luKGFkZFplcm9zKEFsbFF1ZXN0aW9ucyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkWmVyb3MoU3R1ZGVudFRyZWF0bWVudCksIGJ5ID0gInN0dWRlbnRJRCIpW2MoMTAsMTIsMiwzLDYsNyldClBSVHJlYXRtZW50Q2xhc3MgPC0gcmlnaHRfam9pbihQUlRyZWF0bWVudEFsbCwgc2NvcmVzLCBieSA9ICJzdHVkZW50SUQiKQpgYGAKCkNvbnRyb2wgKEEpOiAzMjcgc3R1ZGVudHMgIApUcmVhdG1lbnQgKEIpOiAzMTYgc3R1ZGVudHMgIApObyBhc3NpZ25lZCBncm91cDogMTggc3R1ZGVudHMKCkNvdW50IHZhbHVlIGZvciByZXRyeSA9IDAgaXMgaG93IG1hbnkgc3R1ZGVudHMgdXNlZCBQcm9ibGVtIFJvdWxldHRlICAKQ291bnQgdmFsdWUgZm9yIHJldHJ5ID0gTkEgaXMgaG93IG1hbnkgc3R1ZGVudHMgZGlkIG5vdCB1c2UgUHJvYmxlbSBSb3VsZXR0ZQpgYGB7ciwgZWNobyA9IEZBTFNFfQpOdW1TdHVkZW50cyA8LSBQUlRyZWF0bWVudENsYXNzICU+JQogIGZpbHRlcighZHVwbGljYXRlZChzdHVkZW50SUQpKSAlPiUKICBncm91cF9ieShHcm91cCwgcmV0cnkpICU+JSAKICBzdW1tYXJpc2UoY291bnQgPSBuKCkpCk51bVN0dWRlbnRzCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KI2NvdW50IHZhbHVlIHdoZW4gcmV0cnkgPSAwIG1lYW5zIG51bWJlciBvZiB1bmlxdWUgcHJvYmxlbXMgYXR0ZW1wdGVkIGJ5IHN0dWRlbnQKI2NvdW50IHZhbHVlIHdoZW4gcmV0cnkgPSAyIG1lYW5zIHRoaXMgc3R1ZGVudCBkaWQgbm90IHVzZSBQcm9ibGVtIFJvdWxldHRlCgpOdW1Qcm9ibGVtc1N0dWRlbnRzIDwtIFBSVHJlYXRtZW50Q2xhc3MgJT4lIAogIGdyb3VwX2J5KEdyb3VwLCBzdHVkZW50SUQsIHJldHJ5KSAlPiUKICBzdW1tYXJpc2UoY291bnQgPSBuKCkpCk51bVByb2JsZW1zU3R1ZGVudHMkcmV0cnlbaXMubmEoTnVtUHJvYmxlbXNTdHVkZW50cyRyZXRyeSldIDwtIDIKTnVtUHJvYmxlbXNTdHVkZW50cyA8LSBmaWx0ZXIoTnVtUHJvYmxlbXNTdHVkZW50cywgcmV0cnkgIT0gMSkKUFJjb3VudCA8LSBjKCkKZm9yKGkgaW4gMTpucm93KE51bVByb2JsZW1zU3R1ZGVudHMpKSB7CiAgaWYoTnVtUHJvYmxlbXNTdHVkZW50cyRyZXRyeVtpXSA9PSAyKSBQUmNvdW50W2ldID0gMAogIGVsc2UgaWYoTnVtUHJvYmxlbXNTdHVkZW50cyRyZXRyeVtpXSA9PSAwKSBQUmNvdW50W2ldID0gTnVtUHJvYmxlbXNTdHVkZW50cyRjb3VudFtpXQogIGVsc2UgUFJjb3VudFtpXSA9IC0xCn0KTnVtUHJvYmxlbXNTdHVkZW50cyRQUmNvdW50IDwtIFBSY291bnQKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQptZWFuQWxsUHJvYmxlbSA8LSBjKCkKbWVhbkFsbFByb2JsZW1bMV0gPC0gbWVhbihmaWx0ZXIoTnVtUHJvYmxlbXNTdHVkZW50cywgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIikkUFJjb3VudCkKbWVhbkFsbFByb2JsZW1bMl0gPC0gbWVhbihmaWx0ZXIoTnVtUHJvYmxlbXNTdHVkZW50cywgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiKSRQUmNvdW50KQoKZXJyb3JBbGxQcm9ibGVtIDwtIGMoKQplcnJvckFsbFByb2JsZW1bMV0gPC0gc2QoYm9vdChmaWx0ZXIoTnVtUHJvYmxlbXNTdHVkZW50cywgR3JvdXAgPT0gIkNvbnRyb2wgKEEpIikkUFJjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvckFsbFByb2JsZW1bMl0gPC0gc2QoYm9vdChmaWx0ZXIoTnVtUHJvYmxlbXNTdHVkZW50cywgR3JvdXAgPT0gIlRyZWF0bWVudCAoQikiKSRQUmNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290ZnVuYywgMTAwMDApJHQpCgpQcm9ibGVtQWxsQ29tcCA8LSBkYXRhX2ZyYW1lKGMoIkNvbnRyb2wgKEEpIiwgIlRyZWF0bWVudCAoQikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuQWxsUHJvYmxlbSwgZXJyb3JBbGxQcm9ibGVtKQpjb2xuYW1lcyhQcm9ibGVtQWxsQ29tcCkgPC0gYygiR3JvdXAiLCAiTWVhbiBOdW1iZXIgb2YgUHJvYmxlbXMiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQcm9ibGVtQWxsQ29tcCwgYWVzKEdyb3VwLCBgTWVhbiBOdW1iZXIgb2YgUHJvYmxlbXNgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIE51bWJlciBvZiBQcm9ibGVtc2AgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gTnVtYmVyIG9mIFByb2JsZW1zYCArIEVycm9yKSwgd2lkdGggPSAuMikgKwogIGdndGl0bGUoIk1lYW4gTnVtYmVyIG9mIFByb2JsZW1zIGJ5IFN0dWRlbnQiKSArCiAgbGFicyhjb2xvciA9ICIiLCBzdWJ0aXRsZSA9ICJDb250cm9sIChBKSwgbiA9IDMyNyBcblRyZWF0bWVudCAoQiksIG4gPSAzMTYiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MiIpICsKICB0aGVtZV9wdWIKYGBgCgoKCioqKgojIyMgQ29tcGFyaW5nIFBSIFVzYWdlIHRvIEV4YW0gU2NvcmVzCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBSdXNhZ2Vfc2NvcmVzIDwtIGxlZnRfam9pbihzY29yZXMsIFF1ZXN0aW9uVHJlYXRtZW50LCBieSA9ICJzdHVkZW50SUQiKQpQUnVzYWdlX3Njb3JlcyRkYXlbaXMubmEoUFJ1c2FnZV9zY29yZXMkZGF5KV0gPC0gIk5vIFBSIFVzYWdlIgpVc2FnZSA8LSBjKCkKZm9yKGkgaW4gMTpucm93KFBSdXNhZ2Vfc2NvcmVzKSkgewogIGlmKFBSdXNhZ2Vfc2NvcmVzJGRheVtpXSA9PSAiTm8gUFIgVXNhZ2UiKSBVc2FnZVtpXSA9ICJObyIKICBlbHNlIFVzYWdlW2ldID0gIlllcyIKfQpQUnVzYWdlX3Njb3JlcyR1c2FnZSA8LSBVc2FnZQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClJhdGUgPC0gUFJ1c2FnZV9zY29yZXMgJT4lIAogIGZpbHRlcihyZXRyeSA9PSAwKSAlPiUgCiAgZ3JvdXBfYnkoc3R1ZGVudElELCBgRXhhbSAyIFNjb3JlYCkgJT4lIAogIHN1bW1hcmlzZShjb3VudCA9IG4oKSwgbmNvcnJlY3QgPSBzdW0oY29ycmVjdCkpICU+JSAKICBtdXRhdGUoUFJwZXJjZW50ID0gbmNvcnJlY3QvY291bnQqMTAwKSAlPiUgbXV0YXRlKGV4YW1QZXJjZW50ID0gYEV4YW0gMiBTY29yZWAvMjAqMTAwKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CiMgUnVuIHRoaXMgb25jZS4gUmVjaGVjayB0byBtYWtlIHN1cmUgY2x1c3RlciB2YWx1ZXMgY29ycmVzcG9uZCB0byB1c2FnZQojZml0IDwtIGttZWFucyhSYXRlJGNvdW50LCA0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KUmF0ZSRjbHVzdGVyIDwtIGZpdCRjbHVzdGVyCnVzYWdlR3JvdXAgPC0gYygpCmZvcihpIGluIDE6bnJvdyhSYXRlKSkgewogIGlmKFJhdGUkY2x1c3RlcltpXSA9PSAxKSB1c2FnZUdyb3VwW2ldID0gIkxvdyIKICBlbHNlIGlmKFJhdGUkY2x1c3RlcltpXSA9PSAyKSB1c2FnZUdyb3VwW2ldID0gIlZlcnkgSGlnaCIKICBlbHNlIGlmKFJhdGUkY2x1c3RlcltpXSA9PSAzKSB1c2FnZUdyb3VwW2ldID0gIk1lZGl1bSIKICBlbHNlIGlmKFJhdGUkY2x1c3RlcltpXSA9PSA0KSB1c2FnZUdyb3VwW2ldID0gIkhpZ2giCiAgZWxzZSB1c2FnZUdyb3VwW2ldID0gIk5vbmUiCn0KUmF0ZSRVc2FnZSA8LSB1c2FnZUdyb3VwClJhdGUkVXNhZ2UgPC0gZmFjdG9yKFJhdGUkVXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk5vbmUiLCAiTG93IiwgIk1lZGl1bSIsICJIaWdoIiwgIlZlcnkgSGlnaCIpKQpgYGAKClBlYXJzb24gQ29ycmVsYXRpb24gQ29lZmZpY2llbnQKYGBge3IsIGVjaG8gPSBGQUxTRX0KY29yKFJhdGVbYygyOjYpXSwgdXNlID0gImFsbC5vYnMiLCBtZXRob2QgPSAicGVhcnNvbiIpCgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChSYXRlKSArCiAgZ2VvbV9wb2ludChhZXMoUFJwZXJjZW50LCBleGFtUGVyY2VudCwgY29sb3IgPSBVc2FnZSkpICsKICBsYWJzKHRpdGxlID0gIlBlcmNlbnQgQ29ycmVjdCBvbiBQUiBGaXJzdCBBdHRlbXB0IHZzLiBFeGFtIDIgUGVyY2VudCIsCiAgICAgICBzdWJ0aXRsZSA9ICJyID0gMC4zNiIsCiAgICAgICBjYXB0aW9uID0gIlBlYXJzb24gQ29ycmVsYXRpb24gZm9yIGFsbCBzdHVkZW50cywgbiA9IDI1NiIsCiAgICAgICB4ID0gIlByb2JsZW0gUm91bGV0dGUgUGVyY2VudCBDb3JyZWN0IiwKICAgICAgIHkgPSAiRXhhbSAyIFBlcmNlbnQgQ29ycmVjdCIsCiAgICAgICBjb2xvciA9ICIiKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAxLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9sYWJlbChhZXMoOTcsMTAwLCBsYWJlbCA9ICIxOjEgbGluZSIpLCAKICAgICAgICAgICAgc2l6ZSA9IDMsIGNvbG9yID0gImdyYXk1MCIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUmF0ZSAlPiUKICAgICAgICAgZmlsdGVyKGNvdW50ID49IDYpKSArCiAgZ2VvbV9wb2ludChhZXMoUFJwZXJjZW50LCBleGFtUGVyY2VudCwgY29sb3IgPSBVc2FnZSkpICsKICBsYWJzKHRpdGxlID0gIlBlcmNlbnQgQ29ycmVjdCBvbiBQUiB2cy4gRXhhbSAyIFBlcmNlbnQsIHdpdGggYXQgbGVhc3QgNiBQUiBBdHRlbXB0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJyID0gMC40NCIsCiAgICAgICBjYXB0aW9uID0gIlBlYXJzb24gQ29ycmVsYXRpb24gZm9yIHN0dWRlbnRzIHRoYXQgYXR0ZW1wdGVkIGF0IGxlYXN0IDYgUFIgcHJvYmxlbXMsIG4gPSAxODgiLAogICAgICAgeCA9ICJQcm9ibGVtIFJvdWxldHRlIFBlcmNlbnQgQ29ycmVjdCIsCiAgICAgICB5ID0gIkV4YW0gMiBQZXJjZW50IENvcnJlY3QiLAogICAgICAgY29sb3IgPSAiIikgKwogIGdlb21fYWJsaW5lKGludGVyY2VwdCA9IDAsIHNsb3BlID0gMSwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21fbGFiZWwoYWVzKDk3LDEwMCwgbGFiZWwgPSAiMToxIGxpbmUiKSwgCiAgICAgICAgICAgIHNpemUgPSAzLCBjb2xvciA9ICJncmF5NTAiKSArCiAgdGhlbWVfcHViCmBgYAoKU3R1ZGVudCB0aGF0IGFuc3dlcmVkIDE3NSBxdWVzdGlvbnMgb24gMTAvMzEgYW5zd2VyZWQgMjIyIG92ZXJhbGwsIHdpdGggNzIlIFByb2JsZW0gUm91bGV0dGUgcGVyY2VudCBjb3JyZWN0IHJhdGUuCgojIyMgQ29tcGFyaW5nIEV4YW0gU2NvcmVzIHRvIFZhcnlpbmcgTGV2ZWxzIG9mIFBSIFVzYWdlCmBgYHtyLCBlY2hvID0gRkFMU0V9CnVzYWdlVGFibGUgPC0gcmlnaHRfam9pbihSYXRlLCBzY29yZXNbYygxLDIpXSwgYnkgPSAic3R1ZGVudElEIilbYygxLDksOCldCnVzYWdlVGFibGUkVXNhZ2VbaXMubmEodXNhZ2VUYWJsZSRVc2FnZSldIDwtICJOb25lIgpjb2xuYW1lcyh1c2FnZVRhYmxlKSA8LSBjKCJzdHVkZW50SUQiLCAiRXhhbSAyIFNjb3JlIiwgIlVzYWdlIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQojIyBVc2FnZSBjb21wYXJpc29ucwptZWFuU2NvcmUgPC0gYygpCm1lYW5TY29yZVsxXSA9IG1lYW4oZmlsdGVyKHVzYWdlVGFibGUsIFVzYWdlID09ICJOb25lIikkYEV4YW0gMiBTY29yZWApCm1lYW5TY29yZVsyXSA9IG1lYW4oZmlsdGVyKHVzYWdlVGFibGUsIFVzYWdlID09ICJMb3ciKSRgRXhhbSAyIFNjb3JlYCkKbWVhblNjb3JlWzNdID0gbWVhbihmaWx0ZXIodXNhZ2VUYWJsZSwgVXNhZ2UgPT0gIk1lZGl1bSIpJGBFeGFtIDIgU2NvcmVgKQptZWFuU2NvcmVbNF0gPSBtZWFuKGZpbHRlcih1c2FnZVRhYmxlLCBVc2FnZSA9PSAiSGlnaCIpJGBFeGFtIDIgU2NvcmVgKQptZWFuU2NvcmVbNV0gPSBtZWFuKGZpbHRlcih1c2FnZVRhYmxlLCBVc2FnZSA9PSAiVmVyeSBIaWdoIikkYEV4YW0gMiBTY29yZWApCgplcnJvclNjb3JlIDwtIGMoKQplcnJvclNjb3JlWzFdIDwtIHNkKGJvb3QoZmlsdGVyKHVzYWdlVGFibGUsIFVzYWdlID09ICJOb25lIikkYEV4YW0gMiBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JTY29yZVsyXSA8LSBzZChib290KGZpbHRlcih1c2FnZVRhYmxlLCBVc2FnZSA9PSAiTG93IikkYEV4YW0gMiBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JTY29yZVszXSA8LSBzZChib290KGZpbHRlcih1c2FnZVRhYmxlLCBVc2FnZSA9PSAiTWVkaXVtIikkYEV4YW0gMiBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JTY29yZVs0XSA8LSBzZChib290KGZpbHRlcih1c2FnZVRhYmxlLCBVc2FnZSA9PSAiSGlnaCIpJGBFeGFtIDIgU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yU2NvcmVbNV0gPC0gc2QoYm9vdChmaWx0ZXIodXNhZ2VUYWJsZSwgVXNhZ2UgPT0gIlZlcnkgSGlnaCIpJGBFeGFtIDIgU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCgpVc2FnZUNvbXAgPC0gZGF0YV9mcmFtZShjKCJOb25lIiwgIkxvdyIsICJNZWRpdW0iLCAiSGlnaCIsICJWZXJ5IEhpZ2giKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5TY29yZSwgZXJyb3JTY29yZSkKY29sbmFtZXMoVXNhZ2VDb21wKSA8LSBjKCJVc2FnZSIsICJNZWFuIFNjb3JlIiwgIkVycm9yIikKVXNhZ2VDb21wJFVzYWdlIDwtIGZhY3RvcihVc2FnZUNvbXAkVXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTm9uZSIsICJMb3ciLCAiTWVkaXVtIiwgIkhpZ2giLCAiVmVyeSBIaWdoIikpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KTnVtYmVycyA8LSBkYXRhX2ZyYW1lKGMoIk5vbmUiLCAiTG93IiwgIk1lZGl1bSIsICJIaWdoIiwgIlZlcnkgSGlnaCIpLAogICAgICAgICAgICAgICAgICAgICAgYygiMCIsICIxLTE3IiwgIjE4LTQ0IiwgIjQ1LTExNCIsICIyMTktMjIyIiksCiAgICAgICAgICAgICAgICAgICAgICBjKDQwNSwgMTQ2LCA3NCwgMzQsIDIpKQpjb2xuYW1lcyhOdW1iZXJzKSA8LSBjKCJVc2FnZSIsICJOdW1iZXIgb2YgUFIgUXVlc3Rpb25zIiwgIk51bWJlciBvZiBTdHVkZW50cyIpCk51bWJlcnMKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoVXNhZ2VDb21wLCBhZXMoVXNhZ2UsIGBNZWFuIFNjb3JlYCwgY29sb3IgPSBVc2FnZSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBTY29yZWAgLSBFcnJvciwgeW1heCA9IGBNZWFuIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMikgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2UgdnMuIFByb2JsZW0gUm91bGV0dGUgVXNhZ2UiKSArCiAgbGFicyhjb2xvciA9ICIiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpEaWZmUmF0ZSA8LSByaWdodF9qb2luKFJhdGUsIHNjb3JlcywgYnkgPSAic3R1ZGVudElEIilbYygxLDExLDMsNCw1LDcsOCldICU+JSAKICBmaWx0ZXIoRGlmZmVyZW5jZSA8PSAwIHwgRGlmZmVyZW5jZSA+PSAwKQpEaWZmUmF0ZSRVc2FnZVtpcy5uYShEaWZmUmF0ZSRVc2FnZSldIDwtICJOb25lIgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CiMjIFVzYWdlIGNvbXBhcmlzb25zCm1lYW5EaWZmIDwtIGMoKQptZWFuRGlmZlsxXSA9IG1lYW4oZmlsdGVyKERpZmZSYXRlLCBVc2FnZSA9PSAiTm9uZSIpJERpZmZlcmVuY2UpCm1lYW5EaWZmWzJdID0gbWVhbihmaWx0ZXIoRGlmZlJhdGUsIFVzYWdlID09ICJMb3ciKSREaWZmZXJlbmNlKQptZWFuRGlmZlszXSA9IG1lYW4oZmlsdGVyKERpZmZSYXRlLCBVc2FnZSA9PSAiTWVkaXVtIikkRGlmZmVyZW5jZSkKbWVhbkRpZmZbNF0gPSBtZWFuKGZpbHRlcihEaWZmUmF0ZSwgVXNhZ2UgPT0gIkhpZ2giKSREaWZmZXJlbmNlKQptZWFuRGlmZls1XSA9IG1lYW4oZmlsdGVyKERpZmZSYXRlLCBVc2FnZSA9PSAiVmVyeSBIaWdoIikkRGlmZmVyZW5jZSkKCmVycm9yRGlmZiA8LSBjKCkKZXJyb3JEaWZmWzFdIDwtIHNkKGJvb3QoZmlsdGVyKERpZmZSYXRlLCBVc2FnZSA9PSAiTm9uZSIpJERpZmZlcmVuY2UsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3JEaWZmWzJdIDwtIHNkKGJvb3QoZmlsdGVyKERpZmZSYXRlLCBVc2FnZSA9PSAiTG93IikkRGlmZmVyZW5jZSwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvckRpZmZbM10gPC0gc2QoYm9vdChmaWx0ZXIoRGlmZlJhdGUsIFVzYWdlID09ICJNZWRpdW0iKSREaWZmZXJlbmNlLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yRGlmZls0XSA8LSBzZChib290KGZpbHRlcihEaWZmUmF0ZSwgVXNhZ2UgPT0gIkhpZ2giKSREaWZmZXJlbmNlLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yRGlmZls1XSA8LSBzZChib290KGZpbHRlcihEaWZmUmF0ZSwgVXNhZ2UgPT0gIlZlcnkgSGlnaCIpJERpZmZlcmVuY2UsIGJvb3RmdW5jLCAxMDAwMCkkdCkKClVzYWdlQ29tcERpZmYgPC0gZGF0YV9mcmFtZShjKCJOb25lIiwgIkxvdyIsICJNZWRpdW0iLCAiSGlnaCIsICJWZXJ5IEhpZ2giKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5EaWZmLCBlcnJvckRpZmYpCmNvbG5hbWVzKFVzYWdlQ29tcERpZmYpIDwtIGMoIlVzYWdlIiwgIk1lYW4gRGlmZmVyZW5jZSIsICJFcnJvciIpClVzYWdlQ29tcERpZmYkVXNhZ2UgPC0gZmFjdG9yKFVzYWdlQ29tcERpZmYkVXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTm9uZSIsICJMb3ciLCAiTWVkaXVtIiwgIkhpZ2giLCAiVmVyeSBIaWdoIikpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFVzYWdlQ29tcERpZmYsIGFlcyhVc2FnZSwgYE1lYW4gRGlmZmVyZW5jZWAsIGNvbG9yID0gVXNhZ2UpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRGlmZmVyZW5jZWAgLSBFcnJvciwgeW1heCA9IGBNZWFuIERpZmZlcmVuY2VgICsgRXJyb3IpLCB3aWR0aCA9IC4yKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZSBmcm9tIEV4YW0gMSB0byBFeGFtIDIgIHZzLiBQcm9ibGVtIFJvdWxldHRlIFVzYWdlIikgKwogIGxhYnMoY29sb3IgPSAiIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKSArCiAgdGhlbWVfcHViCmBgYAoKCgo=