IyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCgppbXBvcnQgdW5pdHRlc3QKZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CgpjbGFzcyBQRVAyNjNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKCiAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCiAgICAgICAgICAgIGInXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIlzwIi5lbmNvZGUoInV0Zi04IiksCiAgICAgICAgICAgIGInXFxceGQwXHg5ZicKICAgICAgICApCgogICAgZGVmIHRlc3RfY29tcGlsZXN0cmluZyhzZWxmKToKICAgICAgICAjIHNlZSAjMTg4MgogICAgICAgIGMgPSBjb21waWxlKGIiXG4jIGNvZGluZzogdXRmLThcbnUgPSAnXHhjM1x4YjMnXG4iLCAiZHVtbXkiLCAiZXhlYyIpCiAgICAgICAgZCA9IHt9CiAgICAgICAgZXhlYyhjLCBkKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndSddLCAnXHhmMycpCgogICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgogICAgICAgIHRyeToKICAgICAgICAgICAgY29tcGlsZShiIiMgY29kaW5nOiBjcDkzMlxucHJpbnQgJ1x4OTRceDRlJyIsICJkdW1teSIsICJleGVjIikKICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRleHQsICJwcmludCAnXHU1ZTc0JyIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5mYWlsKCkKCiAgICBkZWYgdGVzdF9pc3N1ZTQ2MjYoc2VsZik6CiAgICAgICAgYyA9IGNvbXBpbGUoIiMgY29kaW5nPWxhdGluLTFcblx1MDBjNiA9ICdcdTAwYzYnIiwgImR1bW15IiwgImV4ZWMiKQogICAgICAgIGQgPSB7fQogICAgICAgIGV4ZWMoYywgZCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ1x4YzYnXSwgJ1x4YzYnKQoKICAgIGRlZiB0ZXN0X2lzc3VlMzI5NyhzZWxmKToKICAgICAgICBjID0gY29tcGlsZSgiYSwgYiA9ICdcVTAwMDEwMTBGJywgJ1xcVTAwMDEwMTBGJyIsICJkdW1teSIsICJleGVjIikKICAgICAgICBkID0ge30KICAgICAgICBleGVjKGMsIGQpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIGRbJ2InXSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKGRbJ2EnXSksIGFzY2lpKGRbJ2InXSkpCgogICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgogICAgICAgICMgRW5zdXJlIHRoYXQgY2hlY2tfYm9tKCkgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlciBpZgogICAgICAgICMgY2hlY2tfYm9tKCkgZmFpbHMgaW4gcHlkZWJ1ZyBtb2RlOiBhIGJ1ZmZlciBzdGFydHMgd2l0aCB0aGUgZmlyc3QKICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKCiAgICAgICAgIyBvbmUgYnl0ZSBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTE2LUxFIEJPTQogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKCiAgICAgICAgIyB0d28gYnl0ZXMgaW4gY29tbW9uIHdpdGggdGhlIFVURi04IEJPTQogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCgpkZWYgdGVzdF9tYWluKCk6CiAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQRVAyNjNUZXN0KQoKaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICB0ZXN0X21haW4oKQo=