IyEgL2Jpbi9zaAojIHBvc3RybS5za2VsZXRvbgojIFNrZWxldG9uIG1haW50YWluZXIgc2NyaXB0IHNob3dpbmcgYWxsIHRoZSBwb3NzaWJsZSBjYXNlcy4KIyBXcml0dGVuIGJ5IENoYXJsZXMgQnJpc2NvZS1TbWl0aCwgTWFyY2gtQXByaWwgMTk5OC4gIFB1YmxpYyBEb21haW4uCiMgUGF0Y2ggZm9yIGFwYWNoZS9hcGFjaGUtc3NsIGJ5IErhbm9zIEhvbOFueWkgPGNzYW5pQGxtZS5saW51eC5odT4sIDIwMDEKCiMgQWJvcnQgaWYgYW55IGNvbW1hbmQgcmV0dXJucyBhbiBlcnJvciB2YWx1ZQpzZXQgLWUKCiMgREo6IGZ1bmN0aW9uIHRvIGNvbW1lbnQgdXMgb3V0IGluIGh0dHBkLmNvbmYKa2lsbGNvbmYgKCkgewoJdG1wZmlsZT0vZXRjL2FwYWNoZS9odHRwZC5jb25mLnRtcC4kJAoJY2F0IC9ldGMvYXBhY2hlL2h0dHBkLmNvbmYgfFwKCQkgc2VkICdzL14oTG9hZE1vZHVsZS4qbW9kX2R0Y2xcLnNvKS8jXDEvJyA+ICR0bXBmaWxlCgltdiAtZiAkdG1wZmlsZSAvZXRjL2FwYWNoZS9odHRwZC5jb25mCglbIC14IC91c3Ivc2Jpbi9hcGFjaGVjdGwgXSAmJiBhc2tfcmVzdGFydAp9CgpraWxsY29uZl9zc2wgKCkgewogICAgICAgdG1wZmlsZT0vZXRjL2FwYWNoZS1zc2wvaHR0cGQuY29uZi50bXAuJCQKICAgICAgIGNhdCAvZXRjL2FwYWNoZS1zc2wvaHR0cGQuY29uZiB8XAogICAgICAgICAgICAgICAgc2VkICdzL14oTG9hZE1vZHVsZS4qbW9kX2R0Y2xcLnNvKS8jXDEvJyA+ICR0bXBmaWxlCiAgICAgICBtdiAtZiAkdG1wZmlsZSAvZXRjL2FwYWNoZS1zc2wvaHR0cGQuY29uZgogICAgICAgWyAteCAvdXNyL3NiaW4vYXBhY2hlLXNzbGN0bCBdICYmIGFza19yZXN0YXJ0X3NzbAp9CgojIFJlc3RhcnQgYXBhY2hlIGlmIHVzZXIgd2FudHMuCmFza19yZXN0YXJ0ICgpIHsKCWVjaG8gLW4gIkFuIEFwYWNoZSBtb2R1bGUgaGFzIGJlZW4gbW9kaWZpZWQuICBSZXN0YXJ0IGFwYWNoZSBbWS9uXT8gIgoJcmVhZCBDT05GSUcKCWlmIFsgIi4kQ09ORklHIiAhPSAiLm4iIC1hICIuJENPTkZJRyIgIT0gIi5OIiBdCgl0aGVuCgkJL3Vzci9zYmluL2FwYWNoZWN0bCByZXN0YXJ0IHx8IHRydWUKCWZpCn0KCmFza19yZXN0YXJ0X3NzbCAoKSB7CiAgICAgICBlY2hvIC1uICJBbiBBcGFjaGUgbW9kdWxlIGhhcyBiZWVuIG1vZGlmaWVkLiAgUmVzdGFydCBhcGFjaGUtc3NsIFtZL25dPyAiCiAgICAgICByZWFkIENPTkZJRwogICAgICAgaWYgWyAiLiRDT05GSUciICE9ICIubiIgLWEgIi4kQ09ORklHIiAhPSAiLk4iIF0KICAgICAgIHRoZW4KICAgICAgICAgICAgICAgL3Vzci9zYmluL2FwYWNoZS1zc2xjdGwgcmVzdGFydCB8fCB0cnVlCiAgICAgICBmaQp9CgojIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCB0d2ljZSBkdXJpbmcgdGhlIHJlbW92YWwgb2YgdGhlIHBhY2thZ2U7IG9uY2UKIyBhZnRlciB0aGUgcmVtb3ZhbCBvZiB0aGUgcGFja2FnZSdzIGZpbGVzIGZyb20gdGhlIHN5c3RlbSwgYW5kIGFzCiMgdGhlIGZpbmFsIHN0ZXAgaW4gdGhlIHJlbW92YWwgb2YgdGhpcyBwYWNrYWdlLCBhZnRlciB0aGUgcGFja2FnZSdzCiMgY29uZmZpbGVzIGhhdmUgYmVlbiByZW1vdmVkLgoKY2FzZSAiJDEiIGluCiAgcmVtb3ZlKQogICAgIyBUaGlzIHBhY2thZ2UgaGFzIGJlZW4gcmVtb3ZlZCwgYnV0IGl0cyBjb25maWd1cmF0aW9uIGhhcyBub3QgeWV0CiAgICAjIGJlZW4gcHVyZ2VkLgoJWyAtZSAvZXRjL2FwYWNoZS9odHRwZC5jb25mIF0gJiYga2lsbGNvbmYKCVsgLWUgL2V0Yy9hcGFjaGUtc3NsL2h0dHBkLmNvbmYgXSAmJiBraWxsY29uZl9zc2wKICAgIDoKICAgIDs7CiAgcHVyZ2UgfCBkaXNhcHBlYXIgfCB1cGdyYWRlIHwgZmFpbGVkLXVwZ3JhZGUgfCBhYm9ydC11cGdyYWRlKQogICAgOgogICAgOzsKICBhYm9ydC1pbnN0YWxsKQogICAgIyBCYWNrIG91dCBvZiBhbiBhdHRlbXB0IHRvIGluc3RhbGwgdGhpcyBwYWNrYWdlLiAgVW5kbyB0aGUgZWZmZWN0cyBvZgogICAgIyAicHJlaW5zdCBpbnN0YWxsLi4uIi4gIFRoZXJlIGFyZSB0d28gc3ViLWNhc2VzLgoJWyAtZSAvZXRjL2FwYWNoZS9odHRwZC5jb25mIF0gJiYga2lsbGNvbmYKCVsgLWUgL2V0Yy9hcGFjaGUtc3NsL2h0dHBkLmNvbmYgXSAmJiBraWxsY29uZl9zc2wKICAgIDoKICAgIDs7CiAgKikgZWNobyAiJDA6IGRpZG4ndCB1bmRlcnN0YW5kIGJlaW5nIGNhbGxlZCB3aXRoIFxgJDEnIiAxPiYyCiAgICAgZXhpdCAxOzsKZXNhYwoKZXhpdCAwCg==