Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9wdXNoX2Zyb250CgpwdXNoX2Zyb250Cj09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICAsIHR5cGVuYW1lIFQKICAgICAgICA+CiAgICBzdHJ1Y3QgcHVzaF9mcm9udAogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCmBgcHVzaF9mcm9udGBgIHBlcmZvcm1zIGFuIGluc2VydGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSB3aXRoIGd1YXJhbnRlZWQgfE8oMSl8CmNvbXBsZXhpdHkuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL3B1c2hfZnJvbnQuaHBwPgoKCk1vZGVsIG9mCi0tLS0tLS0tCgp8VGFnIERpc3BhdGNoZWQgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFNlcXVlbmNlYGAgIHwgfEZyb250IEV4dGVuc2libGUgU2VxdWVuY2V8ICAgfCBBIHNlcXVlbmNlIHRvIGluc2VydCBpbnRvLiAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBUYGAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKCkZvciBhbnkgfEZyb250IEV4dGVuc2libGUgU2VxdWVuY2V8IGBgc2BgIGFuZCBhcmJpdHJhcnkgdHlwZSBgYHhgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBwdXNoX2Zyb250PHMseD46OnR5cGUgcjsKCjpSZXR1cm4gdHlwZToKICAgIHxGcm9udCBFeHRlbnNpYmxlIFNlcXVlbmNlfC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvIAoKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgdHlwZWRlZiBpbnNlcnQ8IHMsYmVnaW48cz46OnR5cGUseCA+Ojp0eXBlIHI7CgoKOlBvc3Rjb25kaXRpb246CiAgICBgYHNpemU8cj46OnZhbHVlID09IHNpemU8cz46OnZhbHVlICsgMWBgOyAKICAgIGBgZnJvbnQ8cj46OnR5cGVgYCBpcyBpZGVudGljYWwgdG8gYGB4YGAuCgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpBbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiB2ZWN0b3JfYzxpbnQsMSwyLDMsNSw4LDEzLDIxPiB2OwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggc2l6ZTx2Pjo6dmFsdWUsID09LCA3ICk7CiAgICAKICAgIHR5cGVkZWYgcHVzaF9mcm9udDwgdixpbnRlZ3JhbF9jPGludCwxPiA+Ojp0eXBlIGZpYm9uYWNjaTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHNpemU8Zmlib25hY2NpPjo6dmFsdWUsID09LCA4ICk7CiAgICAKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBlcXVhbDwgCiAgICAgICAgICBmaWJvbmFjY2kKICAgICAgICAsIHZlY3Rvcl9jPGludCwxLDEsMiwzLDUsOCwxMywyMT4KICAgICAgICAsIGVxdWFsX3RvPF8sXz4KICAgICAgICA+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8RnJvbnQgRXh0ZW5zaWJsZSBTZXF1ZW5jZXwsIHxpbnNlcnR8LCB8cG9wX2Zyb250fCwgfGZyb250fCwgfHB1c2hfYmFja3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==