Li4gU2VxdWVuY2VzL0NvbmNlcHRzLy9FeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlIHw4MAoKRXh0ZW5zaWJsZSBBc3NvY2lhdGl2ZSBTZXF1ZW5jZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQW4gfEV4dGVuc2libGUgQXNzb2NpYXRpdmUgU2VxdWVuY2V8IGlzIGFuIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwgdGhhdCBzdXBwb3J0cyAKaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIGVsZW1lbnRzLiBJbiBjb250cmFzdCB0byB8RXh0ZW5zaWJsZSBTZXF1ZW5jZXwsIAp8RXh0ZW5zaWJsZSBBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwgZG9lcyBub3QgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgCmluc2VydGluZyBhbiBlbGVtZW50IGF0IGEgc3BlY2lmaWMgcG9zaXRpb24uIAoKCkV4cHJlc3Npb24gcmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8SW4gdGhlIGZvbGxvd2luZyB0YWJsZS4uLnwgYGBzYGAgaXMgYW4gfEFzc29jaWF0aXZlIFNlcXVlbmNlfCwgCmBgcG9zYGAgaXMgYW4gaXRlcmF0b3IgaW50byBgYHNgYCwgYW5kIGBgeGBgIGFuZCBgYGtgYCBhcmUgYXJiaXRyYXJ5IHR5cGVzLgoKSW4gYWRkaXRpb24gdG8gdGhlIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwgcmVxdWlyZW1lbnRzLCB0aGUgZm9sbG93aW5nIG11c3QgYmUgbWV0OgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wbGV4aXR5ICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYGluc2VydDxzLHg+Ojp0eXBlYGAgICAgICAgICB8IHxFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlfCAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGluc2VydDxzLHBvcyx4Pjo6dHlwZWBgICAgICB8IHxFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlfCAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlX2tleTxzLGs+Ojp0eXBlYGAgICAgICB8IHxFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlfCAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlPHMscG9zPjo6dHlwZWBgICAgICAgICB8IHxFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlfCAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGNsZWFyPHM+Ojp0eXBlYGAgICAgICAgICAgICB8IHxFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlfCAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKfFNlbWFudGljcyBkaXNjbGFpbWVyLi4ufCB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8LgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYGluc2VydDxzLHg+Ojp0eXBlYGAgICAgICAgICB8IEluc2VydHMgYGB4YGAgaW50byBgYHNgYDsgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZSBgYHJgYCBpcyAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVxdWl2YWxlbnQgdG8gYGBzYGAgZXhjZXB0IHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBhdDwgciwga2V5X3R5cGU8cyx4Pjo6dHlwZSA+Ojp0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlzIGlkZW50aWNhbCB0byBgYHZhbHVlX3R5cGU8cyx4Pjo6dHlwZWBgOyBzZWUgfGluc2VydHwuICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGluc2VydDxzLHBvcyx4Pjo6dHlwZWBgICAgICB8IEVxdWl2YWxlbnQgdG8gYGBpbnNlcnQ8cyx4Pjo6dHlwZWBgOyBgYHBvc2BgIGlzIGlnbm9yZWQ7ICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZSB8aW5zZXJ0fC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlX2tleTxzLGs+Ojp0eXBlYGAgICAgICB8IEVyYXNlcyBlbGVtZW50cyBpbiBgYHNgYCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBgYGtgYDsgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSByZXN1bHRpbmcgc2VxdWVuY2UgYGByYGAgaXMgZXF1aXZhbGVudCB0byBgYHNgYCBleGNlcHQgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgYGBoYXNfa2V5PHIsaz46OnZhbHVlID09IGZhbHNlYGA7IHNlZSB8ZXJhc2Vfa2V5fC4gICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlPHMscG9zPjo6dHlwZWBgICAgICAgICB8IEVyYXNlcyB0aGUgZWxlbWVudCBhdCBhIHNwZWNpZmljIHBvc2l0aW9uOyBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgZXJhc2Vfa2V5PHMsIGRlcmVmPHBvcz46OnR5cGUgPjo6dHlwZWBgOyBzZWUgfGVyYXNlfC4gICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGNsZWFyPHM+Ojp0eXBlYGAgICAgICAgICAgICB8IEFuIGVtcHR5IHNlcXVlbmNlIGNvbmNlcHQtaWRlbnRpY2FsIHRvIGBgc2BgOyBzZWUgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHxjbGVhcnwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCi4uIEludmFyaWFudHMKICAgLS0tLS0tLS0tLQoKICAgRm9yIGFueSBleHRlbnNpYmxlIGFzc29jaWF0aXZlIHNlcXVlbmNlIGBgc2BgIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBhbHdheXMgaG9sZDogCgoKTW9kZWxzCi0tLS0tLQoKKiB8c2V0fAoqIHxtYXB8CgouLiAqIHxtdWx0aXNldHwKCgpTZWUgYWxzbwotLS0tLS0tLQoKfFNlcXVlbmNlc3wsIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwsIHxpbnNlcnR8LCB8ZXJhc2V8LCB8Y2xlYXJ8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=