IyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCgppbXBvcnQgdW5pdHRlc3QKZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKCmNsYXNzIFBFUDI2M1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgoKICAgIGRlZiB0ZXN0X3BlcDI2MyhzZWxmKToKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICB1IvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCiAgICAgICAgICAgICdceGQwXHg5Zlx4ZDBceGI4XHhkMVx4ODJceGQwXHhiZVx4ZDBceGJkJwogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICB1IlzwIi5lbmNvZGUoInV0Zi04IiksCiAgICAgICAgICAgICdcXFx4ZDBceDlmJwogICAgICAgICkKCiAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgogICAgICAgICMgc2VlICMxODgyCiAgICAgICAgYyA9IGNvbXBpbGUoIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gdSdceGMzXHhiMydcbiIsICJkdW1teSIsICJleGVjIikKICAgICAgICBkID0ge30KICAgICAgICBleGVjIGMgaW4gZAogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndSddLCB1J1x4ZjMnKQoKCiAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6CiAgICAgICAgYyA9IGNvbXBpbGUoImEsIGIgPSAnXFUwMDAxMDEwRicsICdcXFUwMDAxMDEwRiciLCAiZHVtbXkiLCAiZXhlYyIpCiAgICAgICAgZCA9IHt9CiAgICAgICAgZXhlYyhjLCBkKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCBkWydiJ10pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZFsnYSddKSwgbGVuKGRbJ2InXSkpCgogICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgogICAgICAgICMgRW5zdXJlIHRoYXQgY2hlY2tfYm9tKCkgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlciBpZgogICAgICAgICMgY2hlY2tfYm9tKCkgZmFpbHMgaW4gcHlkZWJ1ZyBtb2RlOiBhIGJ1ZmZlciBzdGFydHMgd2l0aCB0aGUgZmlyc3QKICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKCiAgICAgICAgIyBvbmUgYnl0ZSBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTE2LUxFIEJPTQogICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAnXHhmZlx4MjAnKQoKICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCiAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICdceGVmXHhiYlx4MjAnKQoKICAgIGRlZiB0ZXN0X2Vycm9yX21lc3NhZ2Uoc2VsZik6CiAgICAgICAgY29tcGlsZSgnIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKICAgICAgICBjb21waWxlKCdceGVmXHhiYlx4YmZcbicsICdkdW1teScsICdleGVjJykKICAgICAgICBjb21waWxlKCdceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoU3ludGF4RXJyb3IsICdmYWtlJyk6CiAgICAgICAgICAgIGNvbXBpbGUoJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKICAgICAgICAgICAgY29tcGlsZSgnXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCiAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoU3ludGF4RXJyb3IsICdCT00nKToKICAgICAgICAgICAgY29tcGlsZSgnXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCiAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoU3ludGF4RXJyb3IsICdmYWtlJyk6CiAgICAgICAgICAgIGNvbXBpbGUoJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFN5bnRheEVycm9yLCAnQk9NJyk6CiAgICAgICAgICAgIGNvbXBpbGUoJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKCiAgICBkZWYgdGVzdF9ub25fdW5pY29kZV9jb2RlYyhzZWxmKToKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFN5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGVjIGRpZCBub3QgcmV0dXJuIGEgdW5pY29kZScpOgogICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZF9jb2RpbmczCgoKZGVmIHRlc3RfbWFpbigpOgogICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQRVAyNjNUZXN0KQoKaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICB0ZXN0X21haW4oKQo=