Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9taW5fZWxlbWVudCB8ODAKCm1pbl9lbGVtZW50Cj09PT09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBQcmVkID0gbGVzczxfMSxfMj4KICAgICAgICA+CiAgICBzdHJ1Y3QgbWluX2VsZW1lbnQKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBzbWFsbGVzdCBlbGVtZW50IGluIGBgU2VxdWVuY2VgYC4gCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL21pbl9lbGVtZW50LmhwcD4KCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnxgYFNlcXVlbmNlYGAgICB8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICAgICAgICAgIHwgQSBzZXF1ZW5jZSB0byBiZSBzZWFyY2hlZC4gICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgUHJlZGBgICAgICAgfCBCaW5hcnkgfExhbWJkYSBFeHByZXNzaW9ufCAgICB8IEEgY29tcGFyaXNvbiBjcml0ZXJpYS4gICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFueSB8Rm9yd2FyZCBTZXF1ZW5jZXwgYGBzYGAgYW5kIGJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258IGBgcHJlZGBgOgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgbWluX2VsZW1lbnQ8cyxwcmVkPjo6dHlwZSBpOyAKCjpSZXR1cm4gdHlwZToKICAgIHxGb3J3YXJkIEl0ZXJhdG9yfC4KCjpTZW1hbnRpY3M6CiAgICBgYGlgYCBpcyB0aGUgZmlyc3QgaXRlcmF0b3IgaW4gfGJlZ2luL2VuZDxzPnwgc3VjaCB0aGF0IGZvciBldmVyeSBpdGVyYXRvciBgYGpgYCAKICAgIGluIHxiZWdpbi9lbmQ8cz58LAogICAgCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAgCiAgICAgICAgYXBwbHk8IHByZWQsIGRlcmVmPGo+Ojp0eXBlLCBkZXJlZjxpPjo6dHlwZSA+Ojp0eXBlOjp2YWx1ZSA9PSBmYWxzZQoKCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KCkxpbmVhci4gWmVybyBjb21wYXJpc29ucyBpZiBgYHNgYCBpcyBlbXB0eSwgb3RoZXJ3aXNlIGV4YWN0bHkgYGBzaXplPHM+Ojp2YWx1ZSAtIDFgYApjb21wYXJpc29ucy4gCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmVjdG9yPGJvb2wsY2hhcls1MF0sbG9uZyxkb3VibGU+IHR5cGVzOwogICAgdHlwZWRlZiBtaW5fZWxlbWVudDwKICAgICAgICAgIHRyYW5zZm9ybV92aWV3PCB0eXBlcyxzaXplb2ZfPF8xPiA+CiAgICAgICAgPjo6dHlwZSBpdGVyOwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgZGVyZWY8aXRlcjo6YmFzZT46OnR5cGUsIGJvb2w+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8UXVlcnlpbmcgQWxnb3JpdGhtc3wsIHxtYXhfZWxlbWVudHwsIHxmaW5kX2lmfCwgfHVwcGVyX2JvdW5kfCwgfGZpbmR8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=