I2luY2x1ZGUgPGV4Y2VwdGlvbj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bG9jYWxlPgojaW5jbHVkZSA8Y3RpbWU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBtYWluKCkKewogIHRyeQogIHsKICAgIGxvY2FsZSBjX2xvYzsKICAgIC8vbG9jYWxlIHN5cyhjX2xvYywgIkxDX1RJTUU9VUtSX1VLUi5PQ1A7TENfTlVNRVJJQz1SVVNfUlVTLk9DUDtMQ19DVFlQRT11a3JfdWtyLm9jcDsiLCBsb2NhbGU6Om51bWVyaWMgfCBsb2NhbGU6OnRpbWUgfCBsb2NhbGU6OmN0eXBlKTsKICAgIGxvY2FsZSBzeXMoIi5vY3AiKTsKICAgIGxvY2FsZTo6Z2xvYmFsKHN5cyk7CiAgICBjaW4uaW1idWUoc3lzKTsKICAgIGNvdXQuaW1idWUoc3lzKTsKCiAgICBjb3V0PDwiTG9jYWxlIG5hbWUgaXM6ICI8PHN5cy5uYW1lKCkuY19zdHIoKTw8J1xuJzsKCiAgICBjb3V0PDwiRW50ZXIgcmVhbCBudW1iZXI6IjsKICAgIGRvdWJsZSB2YWx1ZTsKICAgIGNpbj4+dmFsdWU7CiAgICBjb3V0PDx2YWx1ZTw8J1xuJzsKCiAgICAgICAgLy8gVGltZSB0ZXN0LgogICAgICAgIGxvbmcgbGN1cl90aW1lOwogICAgICAgIHRpbWUoJmxjdXJfdGltZSk7CiAgICAgICAgc3RydWN0IHRtKiBjdXJfdGltZT1sb2NhbHRpbWUoJmxjdXJfdGltZSk7CgogICAgICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JiBudW1fcHVuY3Q9dXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY291dC5nZXRsb2MoKSk7CiAgICAgICAgY291dCA8PCBudW1fcHVuY3QuZGVjaW1hbF9wb2ludCgpIDw8ICdcbic7CiAgICAgICAgY29uc3QgdGltZV9wdXQ8Y2hhciwgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+ID4mIHRpbWVfZmFjPQogICAgICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyLCBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXIsIGNoYXJfdHJhaXRzPGNoYXI+ID4gPiA+KGNvdXQuZ2V0bG9jKCkpOwogICAgICAgIHRpbWVfZmFjLnB1dChjb3V0LCBjb3V0LCBOVUxMLCBjdXJfdGltZSwgJ3gnKTsgY291dDw8J1xuJzsKICAgICAgICB0aW1lX2ZhYy5wdXQoY291dCwgY291dCwgTlVMTCwgY3VyX3RpbWUsICd4JywgJyMnKTsgY291dDw8J1xuJzsKICAgICAgICB0aW1lX2ZhYy5wdXQoY291dCwgY291dCwgTlVMTCwgY3VyX3RpbWUsICdYJyk7IGNvdXQ8PCdcbic7CiAgICAgICAgdGltZV9mYWMucHV0KGNvdXQsIGNvdXQsIE5VTEwsIGN1cl90aW1lLCAnYycpOyBjb3V0PDwnXG4nOwogICAgICAgIHRpbWVfZmFjLnB1dChjb3V0LCBjb3V0LCBOVUxMLCBjdXJfdGltZSwgJ2MnLCAnIycpOyBjb3V0PDwnXG4nOwogICAgICAgIHRpbWVfZmFjLnB1dChjb3V0LCBjb3V0LCBOVUxMLCBjdXJfdGltZSwgJ0knKTsgY291dDw8J1xuJzsKCiAgICAgICAgY29uc3QgY3R5cGU8Y2hhcj4mIGNoYXJfdHlwZT11c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb3V0LmdldGxvYygpKTsKICAgICAgICBpZihjaGFyX3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICePJykpIHB1dHMoIlVwcGVyIik7CiAgICAgICAgaWYoY2hhcl90eXBlLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCAnrycpKSBwdXRzKCJMb3dlciIpOwogICAgICAgIHB1dHMoIk5leHQiKTsKICAgICAgICBpZihpc3VwcGVyKCePJywgY291dC5nZXRsb2MoKSkpIHB1dHMoIlVwcGVyIik7CiAgICAgICAgaWYoaXNsb3dlcignrycsIGNvdXQuZ2V0bG9jKCkpKSBwdXRzKCJMb3dlciIpOwogICAgICAgIC8qZm9yKGludCBjaD0xMjg7IGNoPDI1NjsgY2grKykKICAgICAgICAgIHByaW50ZigiQ2hhcmFjdGVyICVjICglZCkgLSB1cHBlciAlYywgbG93ZXIgJWNcbiIsKGNoYXIpY2gsIGNoLHRvdXBwZXIoKGNoYXIpY2gsIGNvdXQuZ2V0bG9jKCkpLCB0b2xvd2VyKChjaGFyKWNoLCBjb3V0LmdldGxvYygpKSk7Ki8KICB9CiAgY2F0Y2goZXhjZXB0aW9uICZlKQogIHsKICAgIGNvdXQ8PCJFeGNlcHRpb24gZmlyZWQ6XG4iPDxlLndoYXQoKTw8J1xuJzsKICB9CiAgY2F0Y2goLi4uKQogIHsKICAgIGNvdXQ8PCJVbmtub3duIGV4Y2VwdGlvbiB0aHJvd2VkIVxuIjsKICB9CiAgY291dC5mbHVzaCgpOwp9Cg==