IyEvYmluL3NoCiMKIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgojCgp0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc2hvcnRsb2cKJwoKLiAuL3Rlc3QtbGliLnNoCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwoJZWNobyAxID5hMSAmJgoJZ2l0IGFkZCBhMSAmJgoJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgoJY29tbWl0PSQocHJpbnRmICIlc1xuIiAiVGVzdCIgIiIgfCBnaXQgY29tbWl0LXRyZWUgIiR0cmVlIikgJiYKCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiICYmCgoJZWNobyAyID5hMSAmJgoJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkiIGExICYmCgoJIyB0ZXN0IGlmIHRoZSB3cmFwcGluZyBpcyBzdGlsbCB2YWxpZAoJIyB3aGVuIHJlcGxhY2luZyBhbGwgaXMgYnkgdHJlYmxlIGNsZWZzLgoJZWNobyAzID5hMSAmJgoJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkKAoJCWVjaG8gIlRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseSIgfAoJCXNlZCAicy9pLzEyMzQvZyIgfAoJCXRyIDEyMzQgIlwzNjBcMjM1XDIwNFwyMzYiKSIgYTEgJiYKCgkjIG5vdyBmc2NrIHVwIHRoZSB1dGY4CglnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2Rpbmcgbm9uLXV0Zi04ICYmCgllY2hvIDQgPmExICYmCglnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiQoCgkJZWNobyAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiB8CgkJc2VkICJzL2kvMTIzNC9nIiB8CgkJdHIgMTIzNCAiXDM3MFwyMzVcMjA0XDIzNiIpIiBhMSAmJgoKCWVjaG8gNSA+YTEgJiYKCWdpdCBjb21taXQgLS1xdWlldCAtbSAiYQkJCQkJCQkJMTIJMzQJNTYJNzgiIGExCgoJZWNobyA2ID5hMSAmJgoJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJDb21taXQgYnkgc29tZW9uZSBlbHNlIiBcCgkJLS1hdXRob3I9IlNvbWVvbmUgZWxzZSA8bm90IW1lPiIgYTEgJiYKCgljYXQgPmV4cGVjdC50ZW1wbGF0ZSA8PC1cRU9GCglBIFUgVGhvciAoNSk6CgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgoJU29tZW9uZSBlbHNlICgxKToKCSAgICAgIFNVQkpFQ1QKCglFT0YKJwoKZnV6eigpIHsKCWZpbGU9JDEgJiYKCXNlZCAiCgkJCXMvJF94NDAvT0JKRUNUX05BTUUvZwoJCQlzLyRfeDA1L09CSklEL2cKCQkJcy9eIFx7Nlx9W0NUYV0uKi8gICAgICBTVUJKRUNUL2cKCQkJcy9eIFx7OFx9W14gXS4qLyAgICAgICAgQ09OVElOVUFUSU9OL2cKCQkiIDwiJGZpbGUiID4iJGZpbGUuZnV6enkiICYmCglzZWQgIi9DT05USU5VQVRJT04vIGQiIDwiJGZpbGUuZnV6enkiCn0KCnRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCcgJwoJZ2l0IHNob3J0bG9nIEhFQUQgPmxvZyAmJgoJZnV6eiBsb2cgPmxvZy5wcmVkaWN0YWJsZSAmJgoJdGVzdF9jbXAgZXhwZWN0LnRlbXBsYXRlIGxvZy5wcmVkaWN0YWJsZQonCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgZm9ybWF0JyAnCglzZWQgcy9TVUJKRUNUL09CSkVDVF9OQU1FLyBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgoJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlSCIgSEVBRCA+bG9nICYmCglmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCgl0ZXN0X2NtcCBleHBlY3QgbG9nLnByZWRpY3RhYmxlCicKCnRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJicmV2JyAnCglzZWQgcy9TVUJKRUNUL09CSklELyBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgoJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlaCIgLS1hYmJyZXY9NSBIRUFEID5sb2cgJiYKCWZ1enogbG9nID5sb2cucHJlZGljdGFibGUgJiYKCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKJwoKdGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IGZyb20gdXNlci1kZWZpbmVkIGZvcm1hdCBpcyByZS13cmFwcGVkJyAnCglzZWQgInMvU1VCSkVDVC90d28gbGluZXMvIiBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgoJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSJ0d28lbmxpbmVzIiBIRUFEID5sb2cgJiYKCWZ1enogbG9nID5sb2cucHJlZGljdGFibGUgJiYKCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKJwoKdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgd3JhcHBpbmcnICcKCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgpBIFUgVGhvciAoNSk6CiAgICAgIFRlc3QKICAgICAgVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmCiAgICAgICAgIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5CiAgICAgIFRo8J2EnnMg8J2EnnMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZvCdhJ5yc3QgbPCdhJ5uZSBmb3IgdGhlIGNvbW3wnYSedCBtZXNzYWdlIHRvIHNlZSDwnYSeZgogICAgICAgICDwnYSedCDwnYSecyB3cmFwcGVkIGNvcnJlY3RseQogICAgICBUaPidhJ5zIPidhJ5zIGEgdmVyeSwgdmVyeSBsb25nIGb4nYSecnN0IGz4nYSebmUgZm9yIHRoZSBjb21t+J2EnnQKICAgICAgICAgbWVzc2FnZSB0byBzZWUg+J2EnmYg+J2EnnQg+J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKICAgICAgYQkJCQkJCQkJMTIJMzQKICAgICAgICAgNTYJNzgKClNvbWVvbmUgZWxzZSAoMSk6CiAgICAgIENvbW1pdCBieSBzb21lb25lIGVsc2UKCkVPRgoJZ2l0IHNob3J0bG9nIC13IEhFQUQgPm91dCAmJgoJdGVzdF9jbXAgZXhwZWN0IG91dAonCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBmcm9tIG5vbi1naXQgZGlyZWN0b3J5JyAnCglnaXQgbG9nIEhFQUQgPmxvZyAmJgoJR0lUX0RJUj1ub24tZXhpc3RpbmcgZ2l0IHNob3J0bG9nIC13IDxsb2cgPm91dCAmJgoJdGVzdF9jbXAgZXhwZWN0IG91dAonCgppY29udmZyb211dGY4dG9pc284ODU5MSgpIHsKCXByaW50ZiAiJXMiICIkKiIgfCBpY29udiAtZiBVVEYtOCAtdCBJU084ODU5LTEKfQoKRFNDSE89IkrDtmjDpG5uw6tzIFwiRHNjaMO2XCIgU2NoaW5kw6tsaW4iCkRTQ0hPRT0iJERTQ0hPIDxKb2hhbm5lcy5TY2hpbmRlbGluQGdteC5kZT4iCk1TRzE9InNldCBhMSB0byAyIGFuZCBzb21lIG5vbi1BU0NJSSBjaGFyczogw4TDn8O4IgpNU0cyPSJzZXQgYTEgdG8gMyBhbmQgc29tZSBub24tQVNDSUkgY2hhcnM6IMOhw6bDryIKY2F0ID4gZXhwZWN0IDw8IEVPRgokRFNDSE8gKDIpOgogICAgICAkTVNHMQogICAgICAkTVNHMgoKRU9GCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBlbmNvZGluZycgJwoJZ2l0IHJlc2V0IC0taGFyZCAiJGNvbW1pdCIgJiYKCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCgllY2hvIDIgPiBhMSAmJgoJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkTVNHMSIgLS1hdXRob3I9IiREU0NIT0UiIGExICYmCglnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgIklTTzg4NTktMSIgJiYKCWVjaG8gMyA+IGExICYmCglnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiQoaWNvbnZmcm9tdXRmOHRvaXNvODg1OTEgIiRNU0cyIikiIFwKCQktLWF1dGhvcj0iJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJERTQ0hPRSIpIiBhMSAmJgoJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKCWdpdCBzaG9ydGxvZyBIRUFEfjIuLiA+IG91dCAmJgp0ZXN0X2NtcCBleHBlY3Qgb3V0JwoKdGVzdF9kb25lCg==