Li4gRGF0YSBUeXBlcy9OdW1lcmljLy9zaXplX3QgfDQwCgpzaXplX3QKPT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHN0ZDo6c2l6ZV90IE4KICAgICAgICA+CiAgICBzdHJ1Y3Qgc2l6ZV90CiAgICB7CiAgICAgICAgLy8gfHVuc3BlY2lmaWVkfAogICAgICAgIC8vIC4uLgogICAgfTsKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQW4gfEludGVncmFsIENvbnN0YW50fCB3cmFwcGVyIGZvciBgYHN0ZDo6c2l6ZV90YGAuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL3NpemVfdC5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxJbnRlZ3JhbCBDb25zdGFudHwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBOYGAgICAgICAgICB8IEFuIGludGVncmFsIGNvbnN0YW50ICAgICAgICAgIHwgQSB2YWx1ZSB0byB3cmFwLiAgICAgICAgICB8IAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnxTZW1hbnRpY3MgZGlzY2xhaW1lci4uLnwgfEludGVncmFsIENvbnN0YW50fC4KCkZvciBhcmJpdHJhcnkgaW50ZWdyYWwgY29uc3RhbnQgYGBuYGA6CgorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgc2l6ZV90PGM+YGAgICAgIHwgQW4gfEludGVncmFsIENvbnN0YW50fCBgYHhgYCBzdWNoIHRoYXQgYGB4Ojp2YWx1ZSA9PSBjYGAgIHwKfCAgICAgICAgICAgICAgICAgICB8IGFuZCBgYHg6OnZhbHVlX3R5cGVgYCBpcyBpZGVudGljYWwgdG8gYGBzdGQ6OnNpemVfdGBgLiAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgc2l6ZV90PDg+IGVpZ2h0OwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgZWlnaHQ6OnZhbHVlX3R5cGUsIHN0ZDo6c2l6ZV90ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgZWlnaHQ6OnR5cGUsIGVpZ2h0ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgbmV4dDwgZWlnaHQgPjo6dHlwZSwgc2l6ZV90PDk+ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgcHJpb3I8IGVpZ2h0ID46OnR5cGUsIHNpemVfdDw3PiA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggKGVpZ2h0Ojp2YWx1ZSksID09LCA4ICk7CiAgICBhc3NlcnQoIGVpZ2h0KCkgPT0gOCApOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8RGF0YSBUeXBlc3wsIHxJbnRlZ3JhbCBDb25zdGFudHwsIHxpbnRffCwgfGxvbmdffCwgfGludGVncmFsX2N8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=