Li4gTWV0YWZ1bmN0aW9ucy9UeXBlIFNlbGVjdGlvbi8vaWZfYyB8MjAKCmlmX2MKPT09PQoKU3lub3BzaXMKLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdGVtcGxhdGU8IAogICAgICAgICAgYm9vbCBjCiAgICAgICAgLCB0eXBlbmFtZSBUMQogICAgICAgICwgdHlwZW5hbWUgVDIKICAgICAgICA+CiAgICBzdHJ1Y3QgaWZfYwogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgb25lIG9mIGl0cyB0d28gYXJndW1lbnRzLCBgYFQxYGAgb3IgYGBUMmBgLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mCmludGVncmFsIGNvbnN0YW50IGBgY2BgLiBgYGlmX2M8Yyx0MSx0Mj46OnR5cGVgYCBpcyBhIHNob3JjdXQgbm90YXRpb24gZm9yIApgYGlmXzwgYm9vbF88Yz4sdDEsdDIgPjo6dHlwZWBgLgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9pZi5ocHA+CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgY2BgICAgICAgICAgfCBBbiBpbnRlZ3JhbCBjb25zdGFudCAgICAgICAgICAgICAgfCBBIHNlbGVjdGlvbiBjb25kaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgVDFgYCwgYGBUMmBgfCBBbnkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlcyB0byBzZWxlY3QgZnJvbS4gICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IGludGVncmFsIGNvbnN0YW50IGBgY2BgIGFuZCBhcmJpdHJhcnkgdHlwZXMgYGB0MWBgLCBgYHQyYGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgaWZfYzxjLHQxLHQyPjo6dHlwZSB0OwoKOlJldHVybiB0eXBlOgogICAgQW55IHR5cGUuCgo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byBgYHR5cGVkZWYgaWZfPCBib29sXzxjPix0MSx0MiA+Ojp0eXBlIHQ7YGAgCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgaWZfYzx0cnVlLGNoYXIsbG9uZz46OnR5cGUgdDE7CiAgICB0eXBlZGVmIGlmX2M8ZmFsc2UsY2hhcixsb25nPjo6dHlwZSB0MjsKCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTx0MSwgY2hhcj4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTx0MiwgbG9uZz4gKSk7CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIC8vIGFsbG9jYXRlcyBzcGFjZSBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzIFQgb24gaGVhcCBvciAiaW5wbGFjZSIKICAgIC8vIGRlcGVuZGluZyBvbiBpdHMgc2l6ZQogICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgbGlnaHR3ZWlnaHQKICAgIHsKICAgICAgICAvLyAuLi4KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGlmX2M8CiAgICAgICAgICAgICAgc2l6ZW9mKFQpIDw9IHNpemVvZihUKikKICAgICAgICAgICAgLCBpbnBsYWNlX3N0b3JhZ2U8VD4KICAgICAgICAgICAgLCBoZWFwX3N0b3JhZ2U8VD4KICAgICAgICAgICAgPjo6dHlwZSBpbXBsX3Q7CgogICAgICAgIGltcGxfdCBpbXBsOwogICAgfTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfE1ldGFmdW5jdGlvbnN8LCB8SW50ZWdyYWwgQ29uc3RhbnR8LCB8aWZffCwgfGV2YWxfaWZ8LCB8Ym9vbF98CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=