Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9lcXVhbCB8MTAwCgplcXVhbAo9PT09PQoKU3lub3BzaXMKLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBTZXExCiAgICAgICAgLCB0eXBlbmFtZSBTZXEyCiAgICAgICAgLCB0eXBlbmFtZSBQcmVkID0gaXNfc2FtZTxfMSxfMj4KICAgICAgICA+CiAgICBzdHJ1Y3QgZXF1YWwKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIGEgdHJ1ZS12YWx1ZWQgfEludGVncmFsIENvbnN0YW50fCBpZiB0aGUgdHdvIHNlcXVlbmNlcyBgYFNlcTFgYCAKYW5kIGBgU2VxMmBgIGFyZSBpZGVudGljYWwgd2hlbiBjb21wYXJlZCBlbGVtZW50LWJ5LWVsZW1lbnQuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2VxdWFsLmhwcD4KCgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxMWBgLCBgYFNlcTJgYHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgICAgICAgICAgfCBTZXF1ZW5jZXMgdG8gY29tcGFyZS4gICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgUHJlZGBgICAgICAgICAgIHwgQmluYXJ5IHxMYW1iZGEgRXhwcmVzc2lvbnwgICAgfCBBIGNvbXBhcmlzb24gY3JpdGVyaW9uLiAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxGb3J3YXJkIFNlcXVlbmNlfFwgcyBgYHMxYGAgYW5kIGBgczJgYCBhbmQgYSBiaW5hcnkgfExhbWJkYSBFeHByZXNzaW9ufCBgYHByZWRgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBlcXVhbDxzMSxzMixwcmVkPjo6dHlwZSBjOyAKCjpSZXR1cm4gdHlwZToKICAgIHxJbnRlZ3JhbCBDb25zdGFudHwKCjpTZW1hbnRpY3M6CiAgICBgYGM6OnZhbHVlID09IHRydWVgYCBpcyBhbmQgb25seSBpZiBgYHNpemU8czE+Ojp2YWx1ZSA9PSBzaXplPHMyPjo6dmFsdWVgYCAKICAgIGFuZCBmb3IgZXZlcnkgaXRlcmF0b3IgYGBpYGAgaW4gfGJlZ2luL2VuZDxzMT58IGBgZGVyZWY8aT46OnR5cGVgYCBpcyBpZGVudGljYWwgdG8gCgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICAgICBhZHZhbmNlPCBiZWdpbjxzMj46OnR5cGUsIGRpc3RhbmNlPCBiZWdpbjxzMT46OnR5cGUsaSA+Ojp0eXBlID46OnR5cGUKCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KCkxpbmVhci4gQXQgbW9zdCBgYHNpemU8czE+Ojp2YWx1ZWBgIGNvbXBhcmlzb25zLiAKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiB2ZWN0b3I8Y2hhcixpbnQsdW5zaWduZWQsbG9uZyx1bnNpZ25lZCBsb25nPiBzMTsKICAgIHR5cGVkZWYgbGlzdDxjaGFyLGludCx1bnNpZ25lZCxsb25nLHVuc2lnbmVkIGxvbmc+IHMyOwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggZXF1YWw8czEsczI+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8UXVlcnlpbmcgQWxnb3JpdGhtc3wsIHxmaW5kfCwgfGZpbmRfaWZ8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=