Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9oYXNfa2V5CgpoYXNfa2V5Cj09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICAsIHR5cGVuYW1lIEtleQogICAgICAgID4KICAgIHN0cnVjdCBoYXNfa2V5CiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKUmV0dXJucyBhIHRydWUtdmFsdWVkIHxJbnRlZ3JhbCBDb25zdGFudHwgaWYgYGBTZXF1ZW5jZWBgIGNvbnRhaW5zIGFuIGVsZW1lbnQKd2l0aCBrZXkgYGBLZXlgYC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvaGFzX2tleS5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxUYWcgRGlzcGF0Y2hlZCBNZXRhZnVuY3Rpb258CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxdWVuY2VgYCAgfCB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8ICAgIHwgQSBzZXF1ZW5jZSB0byBxdWVyeS4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBLZXlgYCAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICAgICAgfCBUaGUgcXVlcmllZCBrZXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFueSB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8IGBgc2BgLCBhbmQgYXJiaXRyYXJ5IHR5cGUgYGBrZXlgYDoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGhhc19rZXk8cyxrZXk+Ojp0eXBlIGM7IAoKOlJldHVybiB0eXBlOgogICAgQm9vbGVhbiB8SW50ZWdyYWwgQ29uc3RhbnR8LgogICAgCjpTZW1hbnRpY3M6CiAgICBgYGM6OnZhbHVlID09IHRydWVgYCBpZiBgYGtleWBgIGlzIGluIGBgc2BgJ3Mgc2V0IG9mIGtleXM7IG90aGVyd2lzZQogICAgYGBjOjp2YWx1ZSA9PSBmYWxzZWBgLgoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgbWFwPCBwYWlyPGludCx1bnNpZ25lZD4sIHBhaXI8Y2hhcixsb25nPiA+IG07CiAgICBCT09TVF9NUExfQVNTRVJUX05PVCgoIGhhc19rZXk8bSxsb25nPiApKTsKCiAgICB0eXBlZGVmIGluc2VydDwgbSwgcGFpcjxsb25nLHVuc2lnbmVkIGxvbmc+ID4gbTE7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaGFzX2tleTxtMSxsb25nPiApKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfEFzc29jaWF0aXZlIFNlcXVlbmNlfCwgfGNvdW50fCwgfGluc2VydHwsIHxlcmFzZV9rZXl8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=