Ly89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLy8KLy8gysrKysrKysrKysrKysrKysrKyspUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQovLwovLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgovLwovLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwoKLy8gPGZ1bmN0aW9uYWw+CgovLyB0ZW1wbGF0ZSA8Y2xhc3MgRm4+IAovLyBjbGFzcyBiaW5kZXIybmQgCi8vICAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgRm46OmZpcnN0X2FyZ3VtZW50X3R5cGUsIHR5cGVuYW1lIEZuOjpyZXN1bHRfdHlwZT4KLy8geyAKLy8gcHJvdGVjdGVkOiAKLy8gICBGbiBvcDsgCi8vICAgdHlwZW5hbWUgRm46OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOyAKLy8gcHVibGljOiAKLy8gICBiaW5kZXIybmQoY29uc3QgRm4mIHgsIGNvbnN0IHR5cGVuYW1lIEZuOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgeSk7IAovLyAKLy8gICB0eXBlbmFtZSBGbjo6cmVzdWx0X3R5cGUgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBGbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgeCkgY29uc3Q7IAovLyAgIHR5cGVuYW1lIEZuOjpyZXN1bHRfdHlwZSBvcGVyYXRvcigpKHR5cGVuYW1lIEZuOjpmaXJzdF9hcmd1bWVudF90eXBlJiB4KSBjb25zdDsgCi8vIH07CgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8Y2Fzc2VydD4KCiNpbmNsdWRlICIuLi90ZXN0X2Z1bmMuaCIKCmNsYXNzIHRlc3QKICAgIDogcHVibGljIHN0ZDo6YmluZGVyMm5kPHRlc3RfZnVuYz4KewogICAgdHlwZWRlZiBzdGQ6OmJpbmRlcjJuZDx0ZXN0X2Z1bmM+IGJhc2U7CnB1YmxpYzoKICAgIHRlc3QoKSA6IHN0ZDo6YmluZGVyMm5kPHRlc3RfZnVuYz4odGVzdF9mdW5jKDMpLCA0LjUpIHt9CgogICAgdm9pZCBkb190ZXN0KCkKICAgIHsKICAgICAgICBzdGF0aWNfYXNzZXJ0KChzdGQ6OmlzX2Jhc2Vfb2Y8CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPHRlc3RfZnVuYzo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9mdW5jOjpyZXN1bHRfdHlwZT4sCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Pjo6dmFsdWUpLCAiIik7CiAgICAgICAgYXNzZXJ0KG9wLmlkKCkgPT0gMyk7CiAgICAgICAgYXNzZXJ0KHZhbHVlID09IDQuNSk7CgogICAgICAgIGludCBpID0gNTsKICAgICAgICBhc3NlcnQoKCp0aGlzKShpKSA9PSAyMi41KTsKICAgICAgICBhc3NlcnQoKCp0aGlzKSg1KSA9PSAwLjUpOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICB0ZXN0IHQ7CiAgICB0LmRvX3Rlc3QoKTsKfQo=