IiBUZXN0cyBmb3IgdGhlIHdyaXRlZmlsZSgpIGZ1bmN0aW9uIGFuZCBzb21lIDp3cml0ZSBjb21tYW5kcy4KCnNvdXJjZSBjaGVjay52aW0Kc291cmNlIHRlcm1fdXRpbC52aW0KCmZ1bmMgVGVzdF93cml0ZWZpbGUoKQogIGxldCBmID0gdGVtcG5hbWUoKQogIGNhbGwgd3JpdGVmaWxlKFsib3ZlciIsIndyaXR0ZW4iXSwgZiwgImIiKQogIGNhbGwgd3JpdGVmaWxlKFsiaGVsbG8iLCJ3b3JsZCJdLCBmLCAiYiIpCiAgY2FsbCB3cml0ZWZpbGUoWyIhIiwgImdvb2QiXSwgZiwgImEiKQogIGNhbGwgd3JpdGVmaWxlKFsibW9ybmluZyJdLCBmLCAiYWIiKQogIGNhbGwgd3JpdGVmaWxlKFsiIiwgInZpbW1lcnMiXSwgZiwgImFiIikKICBsZXQgbCA9IHJlYWRmaWxlKGYpCiAgY2FsbCBhc3NlcnRfZXF1YWwoImhlbGxvIiwgbFswXSkKICBjYWxsIGFzc2VydF9lcXVhbCgid29ybGQhIiwgbFsxXSkKICBjYWxsIGFzc2VydF9lcXVhbCgiZ29vZCIsIGxbMl0pCiAgY2FsbCBhc3NlcnRfZXF1YWwoIm1vcm5pbmciLCBsWzNdKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJ2aW1tZXJzIiwgbFs0XSkKICBjYWxsIGRlbGV0ZShmKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoInRleHQiLCAiWGZpbGUiKScsICdFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiB3cml0ZWZpbGUoKSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgTGlzdCBvciBhIEJsb2InKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2lnbm9yZV9yZWdleHBfZXJyb3IoKQogIHdyaXRlIFh0W3otYV1lc3QudHh0CiAgY2FsbCBkZWxldGUoJ1h0W3otYV1lc3QudHh0JykKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9mYWlsc19nZW50bHkoKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbInRlc3QiXSwgIlhmaWxlIiwgW10pJywgJ0U3MzA6JykKICBjYWxsIGFzc2VydF9mYWxzZShmaWxlcmVhZGFibGUoIlhmaWxlIikpCiAgY2FsbCBkZWxldGUoIlhmaWxlIikKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFsidGVzdCIsIFtdLCBbXSwgW10sICJ0c2V0Il0sICJYZmlsZSIpJywgJ0U3MzA6JykKICBjYWxsIGFzc2VydF9mYWxzZShmaWxlcmVhZGFibGUoIlhmaWxlIikpCiAgY2FsbCBkZWxldGUoIlhmaWxlIikKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFtdLCAiWGZpbGUiLCBbXSknLCAnRTczMDonKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgiWGZpbGUiKSkKICBjYWxsIGRlbGV0ZSgiWGZpbGUiKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoW10sIFtdKScsICdFNzMwOicpCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfZmFpbHNfY29udmVyc2lvbigpCiAgQ2hlY2tGZWF0dXJlIGljb252CiAgaWYgaGFzKCdzdW4nKQogICAgdGhyb3cgJ1NraXBwZWQ6IGRvZXMgbm90IHdvcmsgb24gU3VuT1MnCiAgZW5kaWYKICAiIFdpdGhvdXQgYSBiYWNrdXAgZmlsZSB0aGUgd3JpdGUgd29uJ3QgaGFwcGVuIGlmIHRoZXJlIGlzIGEgY29udmVyc2lvbgogICIgZXJyb3IuCiAgc2V0IG5vYmFja3VwIG5vd3JpdGViYWNrdXAgYmFja3VwZGlyPS4gYmFja3Vwc2tpcD0KICBuZXcKICBsZXQgY29udGVudHMgPSBbImxpbmUgb25lIiwgImxpbmUgdHdvIl0KICBjYWxsIHdyaXRlZmlsZShjb250ZW50cywgJ1hmaWxlJykKICBlZGl0IFhmaWxlCiAgY2FsbCBzZXRsaW5lKDEsIFsiZmlyc3QgbGluZSIsICJjYW5ub3QgY29udmVydCBcdTAxMGIiLCAidGhpcmQgbGluZSJdKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZSArK2VuYz1jcDkzMicsICdFNTEzOicpCiAgY2FsbCBhc3NlcnRfZXF1YWwoY29udGVudHMsIHJlYWRmaWxlKCdYZmlsZScpKQoKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQogIGJ3aXBlIQogIHNldCBiYWNrdXAmIHdyaXRlYmFja3VwJiBiYWNrdXBkaXImdmltIGJhY2t1cHNraXAmdmltCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfZmFpbHNfY29udmVyc2lvbjIoKQogIENoZWNrRmVhdHVyZSBpY29udgogIGlmIGhhcygnc3VuJykKICAgIHRocm93ICdTa2lwcGVkOiBkb2VzIG5vdCB3b3JrIG9uIFN1bk9TJwogIGVuZGlmCiAgIiBXaXRoIGEgYmFja3VwIGZpbGUgdGhlIHdyaXRlIGhhcHBlbnMgZXZlbiBpZiB0aGVyZSBpcyBhIGNvbnZlcnNpb24gZXJyb3IsCiAgIiBidXQgdGhlbiB0aGUgYmFja3VwIGZpbGUgbXVzdCByZW1haW4KICBzZXQgbm9iYWNrdXAgd3JpdGViYWNrdXAgYmFja3VwZGlyPS4gYmFja3Vwc2tpcD0KICBsZXQgY29udGVudHMgPSBbImxpbmUgb25lIiwgImxpbmUgdHdvIl0KICBjYWxsIHdyaXRlZmlsZShjb250ZW50cywgJ1hmaWxlX2NvbnZlcnNpb25fZXJyJykKICBlZGl0IFhmaWxlX2NvbnZlcnNpb25fZXJyCiAgY2FsbCBzZXRsaW5lKDEsIFsiZmlyc3QgbGluZSIsICJjYW5ub3QgY29udmVydCBcdTAxMGIiLCAidGhpcmQgbGluZSJdKQogIHNldCBmaWxlZW5jb2Rpbmc9bGF0aW4xCiAgbGV0IG91dHB1dCA9IGV4ZWN1dGUoJ3dyaXRlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1hmaWxlX2NvbnZlcnNpb25fZXJyficpKQoKICBjYWxsIGRlbGV0ZSgnWGZpbGVfY29udmVyc2lvbl9lcnInKQogIGNhbGwgZGVsZXRlKCdYZmlsZV9jb252ZXJzaW9uX2Vycn4nKQogIGJ3aXBlIQogIHNldCBiYWNrdXAmIHdyaXRlYmFja3VwJiBiYWNrdXBkaXImdmltIGJhY2t1cHNraXAmdmltCmVuZGZ1bmMKCmZ1bmMgU2V0RmxhZyh0aW1lcikKICBsZXQgZzpmbGFnID0gMQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVfcXVpdF9zcGxpdCgpCiAgIiBQcmV2ZW50IGV4aXRpbmcgYnkgc3BsaXR0aW5nIHdpbmRvdyBvbiBmaWxlIHdyaXRlLgogIGF1Z3JvdXAgdGVzdGdyb3VwCiAgICBhdXRvY21kIEJ1ZldyaXRlUHJlICogc3BsaXQKICBhdWdyb3VwIEVORAogIGUhIFhmaWxlCiAgY2FsbCBzZXRsaW5lKDEsICdub3RoaW5nJykKICB3cQoKICBpZiBoYXMoJ3RpbWVycycpCiAgICAiIHRpbWVyIHdpbGwgbm90IHJ1biBpZiAiZXhpdGluZyIgaXMgc3RpbGwgc2V0CiAgICBsZXQgZzpmbGFnID0gMAogICAgY2FsbCB0aW1lcl9zdGFydCgxLCAnU2V0RmxhZycpCiAgICBzbGVlcCA1MG0KICAgIGNhbGwgYXNzZXJ0X2VxdWFsKDEsIGc6ZmxhZykKICAgIHVubGV0IGc6ZmxhZwogIGVuZGlmCiAgYXUhIHRlc3Rncm91cAogIGJ3aXBlIFhmaWxlCiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKZnVuYyBUZXN0X25vd3JpdGVfcXVpdF9zcGxpdCgpCiAgIiBQcmV2ZW50IGV4aXRpbmcgYnkgb3BlbmluZyBhIGhlbHAgd2luZG93LgogIGUhIFhmaWxlCiAgaGVscAogIHdpbmNtZCB3CiAgZXhlIHdpbm5yKCkgLiAncScKCiAgaWYgaGFzKCd0aW1lcnMnKQogICAgIiB0aW1lciB3aWxsIG5vdCBydW4gaWYgImV4aXRpbmciIGlzIHN0aWxsIHNldAogICAgbGV0IGc6ZmxhZyA9IDAKICAgIGNhbGwgdGltZXJfc3RhcnQoMSwgJ1NldEZsYWcnKQogICAgc2xlZXAgNTBtCiAgICBjYWxsIGFzc2VydF9lcXVhbCgxLCBnOmZsYWcpCiAgICB1bmxldCBnOmZsYWcKICBlbmRpZgogIGJ3aXBlIFhmaWxlCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfc3luY19hcmcoKQogICIgVGhpcyBkb2Vzbid0IGNoZWNrIGlmIGZzeW5jKCkgd29ya3MsIG9ubHkgdGhhdCB0aGUgYXJndW1lbnQgaXMgYWNjZXB0ZWQuCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1h0ZXN0JywgJ3MnKQogIGNhbGwgd3JpdGVmaWxlKFsndHdvJ10sICdYdGVzdCcsICdTJykKICBjYWxsIGRlbGV0ZSgnWHRlc3QnKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX3N5bmNfZGV2X3N0ZG91dCgpCiAgQ2hlY2tVbml4CiAgaWYgZmlsZXdyaXRhYmxlKCcvZGV2L3N0ZG91dCcpCiAgICAiIEp1c3QgY2hlY2sgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYW4gZXJyb3IuCiAgICBjYWxsIHdyaXRlZmlsZShbJ29uZSddLCAnL2Rldi9zdGRvdXQnKQogIGVsc2UKICAgIHRocm93ICdTa2lwcGVkOiAvZGV2L3N0ZG91dCBpcyBub3Qgd3JpdGFibGUnCiAgZW5kaWYKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9hdXRvd3JpdGUoKQogIHNldCBhdXRvd3JpdGUKICBuZXcKICBuZXh0IFhhIFhiIFhjCiAgY2FsbCBzZXRsaW5lKDEsICdhYWEnKQogIG5leHQKICBjYWxsIGFzc2VydF9lcXVhbChbJ2FhYSddLCByZWFkZmlsZSgnWGEnKSkKICBjYWxsIHNldGxpbmUoMSwgJ2JiYicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2VkaXQgWFgnKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGInKSkKCiAgc2V0IGF1dG93cml0ZWFsbAogIGVkaXQgWFgKICBjYWxsIGFzc2VydF9lcXVhbChbJ2JiYiddLCByZWFkZmlsZSgnWGInKSkKCiAgYndpcGUhCiAgY2FsbCBkZWxldGUoJ1hhJykKICBjYWxsIGRlbGV0ZSgnWGInKQogIHNldCBub2F1dG93cml0ZQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2F1dG93cml0ZV9ub3dyaXRlKCkKICBzZXQgYXV0b3dyaXRlCiAgbmV3CiAgbmV4dCBYYSBYYiBYYwogIHNldCBidWZ0eXBlPW5vd3JpdGUKICBjYWxsIHNldGxpbmUoMSwgJ2FhYScpCiAgbGV0IGJ1ZiA9IGJ1Zm5yKCclJykKICAiIGJ1ZmZlciBjb250ZW50cyBzaWxlbnRseSBsb3N0CiAgZWRpdCBYWAogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGEnKSkKICByZXdpbmQKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2V0bGluZSgxKSkKCiAgYndpcGUhCiAgc2V0IG5vYXV0b3dyaXRlCmVuZGZ1bmMKCiIgVGVzdCBmb3IgJzp3ICE8Y21kPicgdG8gcGlwZSBsaW5lcyBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBhbiBleHRlcm5hbAoiIGNvbW1hbmQuCmZ1bmMgVGVzdF93cml0ZV9waXBlX3RvX2NtZCgpCiAgQ2hlY2tVbml4CiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnLCAnTDInLCAnTDMnLCAnTDQnXSkKICAyLDN3ICFjYXQgPiBYZmlsZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnTDInLCAnTDMnXSwgcmVhZGZpbGUoJ1hmaWxlJykpCiAgY2xvc2UhCiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciA6c2F2ZWFzCmZ1bmMgVGVzdF9zYXZlYXMoKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdzYXZlYXMnLCAnRTQ3MTonKQogIGNhbGwgd3JpdGVmaWxlKFsnTDEnXSwgJ1hmaWxlJykKICBuZXcgWGZpbGUKICBuZXcKICBjYWxsIHNldGxpbmUoMSwgWydMMSddKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdzYXZlYXMgWGZpbGUnLCAnRTEzOTonKQogIGNsb3NlIQogIGVuZXcgfCBvbmx5CiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlX2Vycm9ycygpCiAgIiBUZXN0IGZvciB3cml0aW5nIHBhcnRpYWwgYnVmZmVyCiAgY2FsbCB3cml0ZWZpbGUoWydMMScsICdMMicsICdMMyddLCAnWGZpbGUnKQogIG5ldyBYZmlsZQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCcxLDJ3cml0ZScsICdFMTQwOicpCiAgY2xvc2UhCgogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3ID4gWHRlc3QnLCAnRTQ5NDonKQogCiAgIiBUcnkgdG8gb3ZlcndyaXRlIGEgZGlyZWN0b3J5CiAgaWYgaGFzKCd1bml4JykKICAgIGNhbGwgbWtkaXIoJ1hkaXIxJykKICAgIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZSBYZGlyMScsICdFMTc6JykKICAgIGNhbGwgZGVsZXRlKCdYZGlyMScsICdkJykKICBlbmRpZgoKICAiIFRlc3QgZm9yIDp3YWxsIGZvciBhIGJ1ZmZlciB3aXRoIG5vIG5hbWUKICBlbmV3IHwgb25seQogIGNhbGwgc2V0bGluZSgxLCBbJ0wxJ10pCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dhbGwnLCAnRTE0MTonKQogIGVuZXchCgogICIgVGVzdCBmb3Igd3JpdGluZyBhICdyZWFkb25seScgZmlsZQogIG5ldyBYZmlsZQogIHNldCByZWFkb25seQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFNDU6JykKICBjbG9zZQoKICAiIFRlc3QgZm9yIHdyaXRpbmcgdG8gYSByZWFkLW9ubHkgZmlsZQogIG5ldyBYZmlsZQogIGNhbGwgc2V0ZnBlcm0oJ1hmaWxlJywgJ3ItLXItLXItLScpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlJywgJ0U1MDU6JykKICBjYWxsIHNldGZwZXJtKCdYZmlsZScsICdydy1ydy1ydy0nKQogIGNsb3NlCgogIGNhbGwgZGVsZXRlKCdYZmlsZScpCgogIGNhbGwgd3JpdGVmaWxlKHRlc3RfbnVsbF9saXN0KCksICdYZmlsZScpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCdYZmlsZScpKQogIGNhbGwgd3JpdGVmaWxlKHRlc3RfbnVsbF9ibG9iKCksICdYZmlsZScpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCdYZmlsZScpKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbXSwgIiIpJywgJ0U0ODI6JykKCiAgIiB2ZXJ5IGxvbmcgZmlsZSBuYW1lCiAgbGV0IGxvbmdfZm5hbWUgPSByZXBlYXQoJ24nLCA1MDAwKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdleGUgIncgIiAuLiBsb25nX2ZuYW1lJywgJ0U3NTonKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbXSwgbG9uZ19mbmFtZSknLCAnRTQ4MjonKQplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgdG8gYSBmaWxlIHdoaWNoIGlzIG1vZGlmaWVkIGFmdGVyIFZpbSByZWFkIGl0CmZ1bmMgVGVzdF93cml0ZV9maWxlX210aW1lKCkKICBDaGVja0VuZ2xpc2gKICBDaGVja1J1blZpbUluVGVybWluYWwKCiAgIiBGaXJzdCByZWFkIHRoZSBmaWxlIGludG8gYSBidWZmZXIKICBjYWxsIHdyaXRlZmlsZShbIkxpbmUxIiwgIkxpbmUyIl0sICdYZmlsZScpCiAgbGV0IG9sZF9mdGltZSA9IGdldGZ0aW1lKCdYZmlsZScpCiAgbGV0IGJ1ZiA9IFJ1blZpbUluVGVybWluYWwoJ1hmaWxlJywgI3tyb3dzIDogMTB9KQogIGNhbGwgVGVybVdhaXQoYnVmKQogIGNhbGwgdGVybV9zZW5ka2V5cyhidWYsICI6c2V0IG5vc3dhcGZpbGVcPENSPiIpCiAgY2FsbCBUZXJtV2FpdChidWYpCgogICIgTW9kaWZ5IHRoZSBmaWxlIGRpcmVjdGx5LiAgTWFrZSBzdXJlIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzCiAgIiBkaWZmZXJlbnQuIE5vdGUgdGhhdCBvbiBMaW51eC9Vbml4LCB0aGUgZmlsZSBpcyBjb25zaWRlcmVkIG1vZGlmaWVkCiAgIiBvdXRzaWRlLCBvbmx5IGlmIHRoZSBkaWZmZXJlbmNlIGlzIDIgc2Vjb25kcyBvciBtb3JlCiAgc2xlZXAgMQogIGNhbGwgd3JpdGVmaWxlKFsiTGluZTMiLCAiTGluZTQiXSwgJ1hmaWxlJykKICBsZXQgbmV3X2Z0aW1lID0gZ2V0ZnRpbWUoJ1hmaWxlJykKICB3aGlsZSBuZXdfZnRpbWUgLSBvbGRfZnRpbWUgPCAyCiAgICBzbGVlcCAxMDBtCiAgICBjYWxsIHdyaXRlZmlsZShbIkxpbmUzIiwgIkxpbmU0Il0sICdYZmlsZScpCiAgICBsZXQgbmV3X2Z0aW1lID0gZ2V0ZnRpbWUoJ1hmaWxlJykKICBlbmR3aGlsZQoKICAiIFRyeSB0byBvdmVyd3JpdGUgdGhlIGZpbGUgYW5kIGNoZWNrIGZvciB0aGUgcHJvbXB0CiAgY2FsbCB0ZXJtX3NlbmRrZXlzKGJ1ZiwgIjp3XDxDUj4iKQogIGNhbGwgVGVybVdhaXQoYnVmKQogIGNhbGwgV2FpdEZvckFzc2VydCh7LT4gYXNzZXJ0X2VxdWFsKCJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiLCB0ZXJtX2dldGxpbmUoYnVmLCA5KSl9KQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQgKHkvbik/IiwKICAgICAgICBcIHRlcm1fZ2V0bGluZShidWYsIDEwKSkKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAiblw8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIGFzc2VydF9lcXVhbChuZXdfZnRpbWUsIGdldGZ0aW1lKCdYZmlsZScpKQogIGNhbGwgdGVybV9zZW5ka2V5cyhidWYsICI6d1w8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAieVw8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIFdhaXRGb3JBc3NlcnQoey0+IGFzc2VydF9lcXVhbCgnTGluZTInLCByZWFkZmlsZSgnWGZpbGUnKVsxXSl9KQoKICAiIGNsZWFuIHVwCiAgY2FsbCBTdG9wVmltSW5UZXJtaW5hbChidWYpCiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciBhbiBhdXRvY21kIHVubG9hZGluZyBhIGJ1ZmZlciBkdXJpbmcgYSB3cml0ZSBjb21tYW5kCmZ1bmMgVGVzdF93cml0ZV9hdXRvY21kX3VubG9hZGJ1Zl9sb2NrbWFyaygpCiAgYXVncm91cCBXcml0ZVRlc3QKICAgIGF1dG9jbWQgQnVmV3JpdGVQcmUgWGZpbGUgZW5ldyB8IHdyaXRlCiAgYXVncm91cCBFTkQKICBlIFhmaWxlCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2xvY2ttYXJrcyB3cml0ZScsIFsnRTMyOicsICdFMjAzOiddKQogIGF1Z3JvdXAgV3JpdGVUZXN0CiAgICBhdSEKICBhdWdyb3VwIEVORAogIGF1Z3JvdXAhIFdyaXRlVGVzdAplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgYSBidWZmZXIgd2l0aCAnYWN3cml0ZScgYnV0IHdpdGhvdXQgYXV0b2NtZHMKZnVuYyBUZXN0X3dyaXRlX2Fjd3JpdGVfZXJyb3IoKQogIG5ldyBYZmlsZQogIGNhbGwgc2V0bGluZSgxLCBbJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10pCiAgc2V0IGJ1ZnR5cGU9YWN3cml0ZQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFNjc2OicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJzEsMndyaXRlIScsICdFNjc2OicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3cgPj4nLCAnRTY3NjonKQogIGNsb3NlIQplbmRmdW5jCgoiIFRlc3QgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgbGluZXMgZnJvbSBhbiBhdXRvY21kIHdoZW4gd3JpdGluZyBhIGJ1ZmZlcgpmdW5jIFRlc3Rfd3JpdGVfYXV0b2NtZF9hZGRfcmVtb3ZlX2xpbmVzKCkKICBuZXcgWGZpbGUKICBjYWxsIHNldGxpbmUoMSwgWydhYWEnLCAnYmJiJywgJ2NjYycsICdkZGQnXSkKCiAgIiBBdXRvY21kIGRlbGV0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGUgd2hlbiB3cml0aW5nIGEgcGFydGlhbCBmaWxlCiAgYXVncm91cCBXcml0ZVRlc3QyCiAgICBhdSEKICAgIGF1dG9jbWQgRmlsZVdyaXRlUHJlIFhmaWxlIDEsMmQKICBhdWdyb3VwIEVORAogIGNhbGwgYXNzZXJ0X2ZhaWxzKCcyLDN3IScsICdFMjA0OicpCgogICIgQXV0b2NtZCBhZGRpbmcgbGluZXMgdG8gYSBmaWxlIHdoZW4gd3JpdGluZyBhIHBhcnRpYWwgZmlsZQogIGF1Z3JvdXAgV3JpdGVUZXN0MgogICAgYXUhCiAgICBhdXRvY21kIEZpbGVXcml0ZVByZSBYZmlsZSBjYWxsIGFwcGVuZCgwLCBbJ3h4eCcsICd5eXknXSkKICBhdWdyb3VwIEVORAogICVkCiAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhJywgJ2JiYicsICdjY2MnLCAnZGRkJ10pCiAgMSwydyEKICBjYWxsIGFzc2VydF9lcXVhbChbJ3h4eCcsICd5eXknLCAnYWFhJywgJ2JiYiddLCByZWFkZmlsZSgnWGZpbGUnKSkKCiAgIiBBdXRvY21kIGRlbGV0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGUgd2hlbiB3cml0aW5nIHRoZSB3aG9sZSBmaWxlCiAgYXVncm91cCBXcml0ZVRlc3QyCiAgICBhdSEKICAgIGF1dG9jbWQgQnVmV3JpdGVQcmUgWGZpbGUgMSwyZAogIGF1Z3JvdXAgRU5ECiAgJWQKICBjYWxsIHNldGxpbmUoMSwgWydhYWEnLCAnYmJiJywgJ2NjYycsICdkZGQnXSkKICB3CiAgY2FsbCBhc3NlcnRfZXF1YWwoWydjY2MnLCAnZGRkJ10sIHJlYWRmaWxlKCdYZmlsZScpKQoKICBhdWdyb3VwIFdyaXRlVGVzdDIKICAgIGF1IQogIGF1Z3JvdXAgRU5ECiAgYXVncm91cCEgV3JpdGVUZXN0MgoKICBjbG9zZSEKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgdG8gYSByZWFkb25seSBmaWxlCmZ1bmMgVGVzdF93cml0ZV9yZWFkb25seSgpCiAgY2FsbCB3cml0ZWZpbGUoW10sICdYZmlsZScpCiAgY2FsbCBzZXRmcGVybSgnWGZpbGUnLCAici0tLS0tLS0tIikKICBlZGl0IFhmaWxlCiAgc2V0IG5vcmVhZG9ubHkgYmFja3Vwc2tpcD0KICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTUwNTonKQogIGxldCBzYXZlX2NwbyA9ICZjcG8KICBzZXQgY3BvKz1XCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlIScsICdFNTA0OicpCiAgbGV0ICZjcG8gPSBzYXZlX2NwbwogIGNhbGwgc2V0bGluZSgxLCBbJ2xpbmUxJ10pCiAgd3JpdGUhCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydsaW5lMSddLCByZWFkZmlsZSgnWGZpbGUnKSkKICBzZXQgYmFja3Vwc2tpcCYKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQplbmRmdW5jCgoiIFRlc3QgZm9yICdwYXRjaG1vZGUnCmZ1bmMgVGVzdF9wYXRjaG1vZGUoKQogIGNhbGwgd3JpdGVmaWxlKFsnb25lJ10sICdYZmlsZScpCiAgc2V0IHBhdGNobW9kZT0ub3JpZyBub2JhY2t1cCBiYWNrdXBza2lwPSB3cml0ZWJhY2t1cAogIG5ldyBYZmlsZQogIGNhbGwgc2V0bGluZSgxLCAndHdvJykKICAiIGZpcnN0IHdyaXRlIHNob3VsZCBjcmVhdGUgdGhlIC5vcmlnIGZpbGUKICB3cml0ZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnb25lJ10sIHJlYWRmaWxlKCdYZmlsZS5vcmlnJykpCiAgY2FsbCBzZXRsaW5lKDEsICd0aHJlZScpCiAgIiBzdWJzZXF1ZW50IHdyaXRlcyBzaG91bGQgbm90IGNyZWF0ZS9tb2RpZnkgdGhlIC5vcmlnIGZpbGUKICB3cml0ZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnb25lJ10sIHJlYWRmaWxlKCdYZmlsZS5vcmlnJykpCiAgc2V0IHBhdGNobW9kZSYgYmFja3VwJiBiYWNrdXBza2lwJiB3cml0ZWJhY2t1cCYKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQogIGNhbGwgZGVsZXRlKCdYZmlsZS5vcmlnJykKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgZmlsZSBpbiBhIHJlYWRvbmx5IGRpcmVjdG9yeQoiIE5PVEU6IGlmIHlvdSBydW4gdGVzdHMgYXMgcm9vdCB0aGlzIHdpbGwgZmFpbC4gIERvbid0IHJ1biB0ZXN0cyBhcyByb290IQpmdW5jIFRlc3Rfd3JpdGVfcmVhZG9ubHlfZGlyKCkKICAiIE9uIE1TLVdpbmRvd3MsIG1vZGlmeWluZyBmaWxlcyBpbiBhIHJlYWQtb25seSBkaXJlY3RvcnkgaXMgYWxsb3dlZC4KICBDaGVja1VuaXgKICAiIFJvb3QgY2FuIGRvIGl0IHRvby4KICBDaGVja05vdFJvb3QKCiAgY2FsbCBta2RpcignWGRpcicpCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1hkaXIvWGZpbGUxJykKICBjYWxsIHNldGZwZXJtKCdYZGlyJywgJ3IteHItLXItLScpCiAgIiB0cnkgdG8gY3JlYXRlIGEgbmV3IGZpbGUgaW4gdGhlIGRpcmVjdG9yeQogIG5ldyBYZGlyL1hmaWxlMgogIGNhbGwgc2V0bGluZSgxLCAndHdvJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTIxMjonKQogICIgdHJ5IHRvIGNyZWF0ZSBhIGJhY2t1cCBmaWxlIGluIHRoZSBkaXJlY3RvcnkKICBlZGl0ISBYZGlyL1hmaWxlMQogIHNldCBiYWNrdXBkaXI9Li9YZGlyIGJhY2t1cHNraXA9CiAgc2V0IHBhdGNobW9kZT0ub3JpZwogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFNTA5OicpCiAgY2FsbCBzZXRmcGVybSgnWGRpcicsICdyd3hyLS1yLS0nKQogIGNhbGwgZGVsZXRlKCdYZGlyJywgJ3JmJykKICBzZXQgYmFja3VwZGlyJiBiYWNrdXBza2lwJiBwYXRjaG1vZGUmCmVuZGZ1bmMKCiIgVGVzdCBmb3Igd3JpdGluZyBhIGZpbGUgdXNpbmcgaW52YWxpZCBmaWxlIGVuY29kaW5nCmZ1bmMgVGVzdF93cml0ZV9pbnZhbGlkX2VuY29kaW5nKCkKICBuZXcKICBjYWxsIHNldGxpbmUoMSwgJ2FiYycpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlICsrZW5jPWF4YnljIFhmaWxlJywgJ0UyMTM6JykKICBjbG9zZSEKZW5kZnVuYwoKIiBUZXN0cyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyB3aXRoIGNvbnZlcnNpb24gZm9yIFdpbjMyLgpmdW5jIFRlc3Rfd3JpdGVfZmlsZV9lbmNvZGluZygpCiAgQ2hlY2tNU1dpbmRvd3MKICBsZXQgc2F2ZV9lbmNvZGluZyA9ICZlbmNvZGluZwogIGxldCBzYXZlX2ZpbGVlbmNvZGluZ3MgPSAmZmlsZWVuY29kaW5ncwogIHNldCBlbmNvZGluZyYgZmlsZWVuY29kaW5ncyYKICBsZXQgdGV4dCA9PDwgdHJpbSBFTkQKICAgIDEgdXRmLTggdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAyIGNwMTI1MSB0ZXh0OiDE6/8gVmltIHZlcnNpb24gNi4yLiAgz+7x6+Xk7eXlIOjn7OXt5e3o5TogMTk3MCBKYW4gMDEKICAgIDMgY3A4NjYgdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCB3cml0ZWZpbGUodGV4dCwgJ1hmaWxlJykKICBlZGl0IFhmaWxlCgogICIgd3JpdGUgdGVzdHM6CiAgIiBjb21iaW5lIHRocmVlIHZhbHVlcyBmb3IgJ2VuY29kaW5nJyB3aXRoIHRocmVlIHZhbHVlcyBmb3IgJ2ZpbGVlbmNvZGluZycKICAiIGFsc28gd3JpdGUgZmlsZXMgZm9yIHJlYWQgdGVzdHMKICBjYWxsIGN1cnNvcigxLCAxKQogIHNldCBlbmNvZGluZz11dGYtOAogIC53ISArK2VuYz11dGYtOCBYdGVzdAogIC53ICsrZW5jPWNwMTI1MSA+PiBYdGVzdAogIC53ICsrZW5jPWNwODY2ID4+IFh0ZXN0CiAgLnchICsrZW5jPXV0Zi04IFh1dGY4CiAgbGV0IGV4cGVjdGVkID08PCB0cmltIEVORAogICAgMSB1dGYtOCB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDEgdXRmLTggdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAxIHV0Zi04IHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHRlc3QnKSkKCiAgY2FsbCBjdXJzb3IoMiwgMSkKICBzZXQgZW5jb2Rpbmc9Y3AxMjUxCiAgLnchICsrZW5jPXV0Zi04IFh0ZXN0CiAgLncgKytlbmM9Y3AxMjUxID4+IFh0ZXN0CiAgLncgKytlbmM9Y3A4NjYgPj4gWHRlc3QKICAudyEgKytlbmM9Y3AxMjUxIFhjcDEyNTEKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAyIGNwMTI1MSB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDIgY3AxMjUxIHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYdGVzdCcpKQoKICBjYWxsIGN1cnNvcigzLCAxKQogIHNldCBlbmNvZGluZz1jcDg2NgogIC53ISArK2VuYz11dGYtOCBYdGVzdAogIC53ICsrZW5jPWNwMTI1MSA+PiBYdGVzdAogIC53ICsrZW5jPWNwODY2ID4+IFh0ZXN0CiAgLnchICsrZW5jPWNwODY2IFhjcDg2NgogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDMgY3A4NjYgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIGFzc2VydF9lcXVhbChleHBlY3RlZCwgcmVhZGZpbGUoJ1h0ZXN0JykpCgogICIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCB1dGYtOCAnZW5jb2RpbmcnCiAgc2V0IGVuY29kaW5nPXV0Zi04IGZlbmNzPXV0Zi04LGNwMTI1MQogIGUgWHV0ZjgKICAudyEgKytlbmM9dXRmLTggWHRlc3QKICBlIFhjcDEyNTEKICAudyArK2VuYz11dGYtOCA+PiBYdGVzdAogIHNldCBmZW5jcz11dGYtOCxjcDg2NgogIGUgWGNwODY2CiAgLncgKytlbmM9dXRmLTggPj4gWHRlc3QKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHRlc3QnKSkKCiAgIiByZWFkIHRocmVlICdmaWxlZW5jb2RpbmcncyB3aXRoIGNwMTI1MSAnZW5jb2RpbmcnCiAgc2V0IGVuY29kaW5nPXV0Zi04IGZlbmNzPXV0Zi04LGNwMTI1MQogIGUgWHV0ZjgKICAudyEgKytlbmM9Y3AxMjUxIFh0ZXN0CiAgZSBYY3AxMjUxCiAgLncgKytlbmM9Y3AxMjUxID4+IFh0ZXN0CiAgc2V0IGZlbmNzPXV0Zi04LGNwODY2CiAgZSBYY3A4NjYKICAudyArK2VuYz1jcDEyNTEgPj4gWHRlc3QKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHRlc3QnKSkKCiAgIiByZWFkIHRocmVlICdmaWxlZW5jb2RpbmcncyB3aXRoIGNwODY2ICdlbmNvZGluZycKICBzZXQgZW5jb2Rpbmc9Y3A4NjYgZmVuY3M9dXRmLTgsY3AxMjUxCiAgZSBYdXRmOAogIC53ISArK2VuYz1jcDg2NiBYdGVzdAogIGUgWGNwMTI1MQogIC53ICsrZW5jPWNwODY2ID4+IFh0ZXN0CiAgc2V0IGZlbmNzPXV0Zi04LGNwODY2CiAgZSBYY3A4NjYKICAudyArK2VuYz1jcDg2NiA+PiBYdGVzdAogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDEgdXRmLTggdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgICAyIGNwMTI1MSB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICAgIDMgY3A4NjYgdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYdGVzdCcpKQoKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQogIGNhbGwgZGVsZXRlKCdYdGVzdCcpCiAgY2FsbCBkZWxldGUoJ1h1dGY4JykKICBjYWxsIGRlbGV0ZSgnWGNwMTI1MScpCiAgY2FsbCBkZWxldGUoJ1hjcDg2NicpCiAgbGV0ICZlbmNvZGluZyA9IHNhdmVfZW5jb2RpbmcKICBsZXQgJmZpbGVlbmNvZGluZ3MgPSBzYXZlX2ZpbGVlbmNvZGluZ3MKICAlYnchCmVuZGZ1bmMKCiIgVGVzdCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBhIGZpbGUgc3RhcnRpbmcgd2l0aCBhIEJPTS4KIiBCeXRlIE9yZGVyIE1hcmsgKEJPTSkgY2hhcmFjdGVyIGZvciB2YXJpb3VzIGVuY29kaW5ncyBpcyBiZWxvdzoKIiAgICAgVVRGLTggICAgICA6IEVGIEJCIEJGCiIgICAgIFVURi0xNiAoQkUpOiBGRSBGRgoiICAgICBVVEYtMTYgKExFKTogRkYgRkUKIiAgICAgVVRGLTMyIChCRSk6IDAwIDAwIEZFIEZGCiIgICAgIFVURi0zMiAoTEUpOiBGRiBGRSAwMCAwMApmdW5jIFRlc3RfcmVhZHdyaXRlX2ZpbGVfd2l0aF9ib20oKQogIGxldCB1dGY4X2JvbSA9ICJceEVGXHhCQlx4QkYiCiAgbGV0IHV0ZjE2YmVfYm9tID0gIlx4RkVceEZGIgogIGxldCB1dGYxNmxlX2JvbSA9ICJceEZGXHhGRSIKICBsZXQgdXRmMzJiZV9ib20gPSAiXG5cblx4RkVceEZGIgogIGxldCB1dGYzMmxlX2JvbSA9ICJceEZGXHhGRVxuXG4iCiAgbGV0IHNhdmVfZmlsZWVuY29kaW5nID0gJmZpbGVlbmNvZGluZwogIHNldCBjcG9wdGlvbnMrPVMKCiAgIiBDaGVjayB0aGF0IGVkaXRpbmcgYSBsYXRpbjEgZmlsZSBkb2Vzbid0IHNlZSBhIEJPTQogIGNhbGwgd3JpdGVmaWxlKFsiXHhGRVx4RkVsYXRpbi0xIl0sICdYdGVzdDEnKQogIGVkaXQgWHRlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2xhdGluMScsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMCwgJmJvbWIpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUgWGZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJceEZFXHhGRWxhdGluLTEiLCAnJ10sIHJlYWRmaWxlKCdYZmlsZTInLCAnYicpKQogIHNldCBib21iIGZlbmM9bGF0aW4xCiAgd3JpdGUgWHRlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJceEZFXHhGRWxhdGluLTEiLCAnJ10sIHJlYWRmaWxlKCdYdGVzdDMnLCAnYicpKQogIHNldCBib21iJgoKICAiIENoZWNrIHV0Zi04IEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmOF9ib20gLi4gInV0Zi04Il0sICdYdGVzdDEnKQogIGVkaXQhIFh0ZXN0MQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1dGYtOCcsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3V0Zi04JywgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWGZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyd1dGYtOCcsICcnXSwgcmVhZGZpbGUoJ1hmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dXRmLTgKICB3ISBYdGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmOF9ib20gLi4gInV0Zi04IiwgJyddLCByZWFkZmlsZSgnWHRlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1dGYtOCB3aXRoIGFuIGVycm9yICh3aWxsIGZhbGwgYmFjayB0byBsYXRpbi0xKQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmOF9ib20gLi4gInV0Zi04XHg4MGVyciJdLCAnWHRlc3QxJykKICBlZGl0ISBYdGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgnbGF0aW4xJywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgwLCAmYm9tYikKICBjYWxsIGFzc2VydF9lcXVhbCgiXHhDM1x4QUZceEMyXHhCQlx4QzJceEJGdXRmLThceEMyXHg4MGVyciIsIGdldGxpbmUoMSkpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUhIFhmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGY4X2JvbSAuLiAidXRmLThceDgwZXJyIiwgJyddLCByZWFkZmlsZSgnWGZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11dGYtOAogIHchIFh0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFsiXHhDM1x4QUZceEMyXHhCQlx4QzJceEJGdXRmLThceEMyXHg4MGVyciIsICcnXSwKICAgICAgICBcIHJlYWRmaWxlKCdYdGVzdDMnLCAnYicpKQoKICAiIENoZWNrIHVjcy0yIEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmMTZiZV9ib20gLi4gIlxudVxuY1xuc1xuLVxuMlxuIl0sICdYdGVzdDEnKQogIGVkaXQhIFh0ZXN0MQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1dGYtMTYnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1Y3MtMicsIGdldGxpbmUoMSkpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUhIFhmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsidWNzLTIiLCAnJ10sIHJlYWRmaWxlKCdYZmlsZTInLCAnYicpKQogIHNldCBmZW5jPXVjcy0yCiAgdyEgWHRlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjE2YmVfYm9tIC4uICJcbnVcbmNcbnNcbi1cbjJcbiIsICcnXSwKICAgICAgICBcIHJlYWRmaWxlKCdYdGVzdDMnLCAnYicpKQoKICAiIENoZWNrIHVjcy0ybGUgQk9NCiAgJWJ3IQogIGNhbGwgd3JpdGVmaWxlKFt1dGYxNmxlX2JvbSAuLiAidVxuY1xuc1xuLVxuMlxubFxuZVxuIl0sICdYdGVzdDEnKQogICIgTmVlZCB0byBhZGQgYSBOVUwgYnl0ZSBhZnRlciB0aGUgTkwgYnl0ZQogIGNhbGwgd3JpdGVmaWxlKDB6MDAsICdYdGVzdDEnLCAnYScpCiAgZWRpdCEgWHRlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3V0Zi0xNmxlJywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgxLCAmYm9tYikKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTJsZScsIGdldGxpbmUoMSkpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUhIFhmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsidWNzLTJsZSIsICcnXSwgcmVhZGZpbGUoJ1hmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dWNzLTJsZQogIHchIFh0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGYxNmxlX2JvbSAuLiAidVxuY1xuc1xuLVxuMlxubFxuZVxuIiwgIlxuIl0sCiAgICAgICAgXCByZWFkZmlsZSgnWHRlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1Y3MtNCBCT00KICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjMyYmVfYm9tIC4uICJcblxuXG51XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbiJdLCAnWHRlc3QxJykKICBlZGl0ISBYdGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTQnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1Y3MtNCcsIGdldGxpbmUoMSkpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUhIFhmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsidWNzLTQiLCAnJ10sIHJlYWRmaWxlKCdYZmlsZTInLCAnYicpKQogIHNldCBmZW5jPXVjcy00CiAgdyEgWHRlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjMyYmVfYm9tIC4uICJcblxuXG51XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbiIsICcnXSwgcmVhZGZpbGUoJ1h0ZXN0MycsICdiJykpCgogICIgQ2hlY2sgdWNzLTRsZSBCT00KICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjMybGVfYm9tIC4uICJ1XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbmxcblxuXG5lXG5cblxuIl0sICdYdGVzdDEnKQogICIgTmVlZCB0byBhZGQgdGhyZWUgTlVMIGJ5dGVzIGFmdGVyIHRoZSBOTCBieXRlCiAgY2FsbCB3cml0ZWZpbGUoMHowMDAwMDAsICdYdGVzdDEnLCAnYScpCiAgZWRpdCEgWHRlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy00bGUnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1Y3MtNGxlJywgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWGZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJ1Y3MtNGxlIiwgJyddLCByZWFkZmlsZSgnWGZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11Y3MtNGxlCiAgdyEgWHRlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjMybGVfYm9tIC4uICJ1XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbmxcblxuXG5lXG5cblxuIiwgIlxuXG5cbiJdLCByZWFkZmlsZSgnWHRlc3QzJywgJ2InKSkKCiAgc2V0IGNwb3B0aW9ucy09UwogIGxldCAmZmlsZWVuY29kaW5nID0gc2F2ZV9maWxlZW5jb2RpbmcKICBjYWxsIGRlbGV0ZSgnWHRlc3QxJykKICBjYWxsIGRlbGV0ZSgnWGZpbGUyJykKICBjYWxsIGRlbGV0ZSgnWHRlc3QzJykKICAlYnchCmVuZGZ1bmMKCmZ1bmMgVGVzdF9yZWFkX3dyaXRlX2JpbigpCiAgIiB3cml0ZSBmaWxlIG1pc3NpbmcgRU9MCiAgY2FsbCB3cml0ZWZpbGUoWydub2VvbCddLCAiWE5vRW9sU2V0RW9sIiwgJ2JTJykKICBjYWxsIGFzc2VydF9lcXVhbCgwejZFNkY2NTZGNkMsIHJlYWRmaWxlKCdYTm9Fb2xTZXRFb2wnLCAnQicpKQoKICAiIHdoZW4gZmlsZSBpcyByZWFkICdlb2wnIGlzIG9mZgogIHNldCBub2ZpeGVvbAogIGUhICsrZmY9dW5peCBYTm9Fb2xTZXRFb2wKICBjYWxsIGFzc2VydF9lcXVhbCgwLCAmZW9sKQoKICAiIHdyaXRpbmcgd2l0aCAnZW9sJyBzZXQgYWRkcyB0aGUgbmV3bGluZQogIHNldGxvY2FsIGVvbAogIHcKICBjYWxsIGFzc2VydF9lcXVhbCgwejZFNkY2NTZGNkMwQSwgcmVhZGZpbGUoJ1hOb0VvbFNldEVvbCcsICdCJykpCgogIGNhbGwgZGVsZXRlKCdYTm9Fb2xTZXRFb2wnKQogIHNldCBmZiYKICBid2lwZSEgWE5vRW9sU2V0RW9sCmVuZGZ1bmMKCiIgdmltOiBzaGlmdHdpZHRoPTIgc3RzPTIgZXhwYW5kdGFiCg==