IyAkSWQ6IGVuY19tb2R1bGUudCx2IDIuMSAyMDA2LzA1LzAzIDE4OjI0OjEwIGRhbmtvZ2FpIEV4cCAkCiMgVGhpcyBmaWxlIGlzIGluIGV1Yy1qcApCRUdJTiB7CiAgICByZXF1aXJlIENvbmZpZzsgaW1wb3J0IENvbmZpZzsKICAgIGlmICgkQ29uZmlneydleHRlbnNpb25zJ30gIX4gL1xiRW5jb2RlXGIvKSB7CiAgICAgIHByaW50ICIxLi4wICMgU2tpcDogRW5jb2RlIHdhcyBub3QgYnVpbHRcbiI7CiAgICAgIGV4aXQgMDsKICAgIH0KICAgIHVubGVzcyAoZmluZCBQZXJsSU86OkxheWVyICdwZXJsaW8nKSB7CiAgICBwcmludCAiMS4uMCAjIFNraXA6IFBlcmxJTyB3YXMgbm90IGJ1aWx0XG4iOwogICAgZXhpdCAwOwogICAgfQogICAgaWYgKGRlZmluZWQgJHteVU5JQ09ERX0gYW5kICR7XlVOSUNPREV9ICE9IDApewogICAgcHJpbnQgIjEuLjAgIyBTa2lwOiBcJHteVU5JQ09ERX0gPT0gJHteVU5JQ09ERX1cbiI7CiAgICBleGl0IDA7CiAgICB9CiAgICBpZiAob3JkKCJBIikgPT0gMTkzKSB7CiAgICBwcmludCAiMS4uMCAjIGVuY29kaW5nIHByYWdtYSBkb2VzIG5vdCBzdXBwb3J0IEVCQ0RJQyBwbGF0Zm9ybXNcbiI7CiAgICBleGl0KDApOwogICAgfQp9CnVzZSBsaWIgcXcodCBleHQvRW5jb2RlL3QgLi4vZXh0L0VuY29kZS90KTsgIyBsYXR0ZXIgMiBmb3IgcGVybCBjb3JlCnVzZSBNb2RfRVVDSlA7CnVzZSBlbmNvZGluZyAiZXVjLWpwIjsKdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMzsKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgRmlsZTo6U3BlYzsKdXNlIEZpbGU6OkNvbXBhcmUgcXcoY29tcGFyZV90ZXh0KTsKCm15ICRERUJVRyA9IHNoaWZ0IHx8IDA7Cm15ICRkaXIgPSBkaXJuYW1lKF9fRklMRV9fKTsKbXkgJGZpbGUwID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZGlyLCJlbmNfbW9kdWxlLmVuYyIpOwpteSAkZmlsZTEgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRkaXIsIiQkLmVuYyIpOwoKbXkgJG9iaiA9IE1vZF9FVUNKUC0+bmV3Owpsb2NhbCAkU0lHe19fV0FSTl9ffSA9IHN1YnsgJERFQlVHIGFuZCBwcmludCBTVERFUlIgQF8gfTsKIyB0byBzaWxlbmNlIHJlb3BlbmluZyBTVEQoSU58T1VUKSB3L28gY2xvc2luZyB1bmxlc3MgJERFQlVHCgpvcGVuIFNURE9VVCwgIj4iLCAkZmlsZTEgb3IgZGllICIkZmlsZTE6JCEiOwpwcmludCAkb2JqLT5zdHIsICJcbiI7CiRvYmotPnNldCgipcaluaXIyri7+s7zIik7CnByaW50ICRvYmotPnN0ciwgIlxuIjsKCiMgUGxlYXNlIGRvIG5vdCBtb3ZlIHRoaXMgdG8gYSBwb2ludCBhZnRlciB0aGUgY29tcGFyaXNvbiAtLSBDcmFpZyBCZXJyeQojIGFuZCAidW5sZXNzICReTyBlcSAnZnJlZWJzZCciIGlzIG5lZWRlZCBmb3IgRnJlZUJTRCAodG95LSk/dGhyZWFkCiMgLS0gZGFua29nYWkKY2xvc2UgU1RET1VUIHVubGVzcyAkXk8gZXEgJ2ZyZWVic2QnOwoKbXkgJGNtcCA9IGNvbXBhcmVfdGV4dCgkZmlsZTAsICRmaWxlMSk7CmlzKCRjbXAsIDAsICJlbmNvZGluZyB2cy4gU1RET1VUIik7CgpteSBAY21wID0gcXcvvem0/Mq4u/rO8yClxqW5pcjKuLv6zvMvOwpvcGVuIFNURElOLCAiPCIsICRmaWxlMCBvciBkaWUgIiRmaWxlMDokISI7CiRvYmogPSBNb2RfRVVDSlAtPm5ldzsKbXkgJGkgPSAwOwp3aGlsZSg8U1RESU4+KXsKICAgIHMvXHI/XG5cei8vOwogICAgaXMgKCRjbXBbJGkrK10sICRfLCAiZW5jb2RpbmcgdnMuIFNURElOIC0gJGkiKTsKfQoKdW5saW5rICRmaWxlMSB1bmxlc3MgJGNtcDsKX19FTkRfXwoK