Li4gU2VxdWVuY2VzL0NvbmNlcHRzLy9WYXJpYWRpYyBTZXF1ZW5jZSB8MTAwCgpWYXJpYWRpYyBTZXF1ZW5jZQo9PT09PT09PT09PT09PT09PQoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCkEgfFZhcmlhZGljIFNlcXVlbmNlfCBpcyBhIG1lbWJlciBvZiBhIGZhbWlseSBvZiBzZXF1ZW5jZSBjbGFzc2VzIHdpdGggYm90aCAKKnZhcmlhZGljKiBhbmQgKm51bWJlcmVkKiBmb3Jtcy4gSWYgYGBzZXFgYCBpcyBhIGdlbmVyaWMgbmFtZSBmb3Igc29tZSAKfFZhcmlhZGljIFNlcXVlbmNlfCwgaXRzICp2YXJpYWRpYyBmb3JtKiBhbGxvd3MgdXMgdG8gc3BlY2lmeSBhIHNlcXVlbmNlIG9mIAoqbiogZWxlbWVudHMgfHQxLi4udG58LCBmb3IgYW55ICpuKiBmcm9tIDAgdXAgdG8gYSAKYHByZXByb2Nlc3Nvci1jb25maWd1cmFibGUgbGltaXRgX18gYGBCT09TVF9NUExfTElNSVRfYGBcICpzZXEqXCBgYF9TSVpFYGAsIAp1c2luZyB0aGUgZm9sbG93aW5nIG5vdGF0aW9uOgoKX18gYENvbmZpZ3VyYXRpb25gXwoKICAgIC4uIGxpbmUtYmxvY2s6OgoKICAgICAgICBgYHNlcTxgYFwgfHQxLi4udG58XCBgYD5gYAoKQnkgY29udHJhc3QsIGVhY2ggKm51bWJlcmVkKiBzZXF1ZW5jZSBmb3JtIGFjY2VwdHMgdGhlIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyAKdGhhdCBpcyBlbmNvZGVkIGluIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNsYXNzIHRlbXBsYXRlOgoKICAgIC4uIGxpbmUtYmxvY2s6OgoKICAgICAgICBgYHNlcWBgXCAqbipcIGBgPGBgXCB8dDEuLi50bnxcIGBgPmBgCgpGb3IgbnVtYmVyZWQgZm9ybXMsIHRoZXJlIGlzIG5vIHByZWRlZmluZWQgdG9wIGxpbWl0IGZvciAqbiosIGFzaWRlIGZyb20gY29tcGlsZXIgCmxpbWl0YXRpb25zIG9uIHRoZSBudW1iZXIgb2YgdGVtcGxhdGUgcGFyYW1ldGVycy4KCi4uIFRoZSB2YXJpYWRpYyBmb3JtIG9mIHNlcXVlbmNlIGBgc2VxYGAgaXMgZGVmaW5lZCBpbiAKICAgYGA8Ym9vc3QvbXBsL2BgXCAqc2VxKlwgYGAuaHBwPmBgIGhlYWRlci4KICAgVGhlIG51bWJlcmVkIGZvcm1zIGFyZSBkZWZpbmVkIGluIGJhdGNoZXMgb2YgMTAuIAoKCkV4cHJlc3Npb24gcmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8SW4gdGhlIGZvbGxvd2luZyB0YWJsZS4uLnwgYGBzZXFgYCBpcyBhIHBsYWNlaG9sZGVyIHRva2VuIGZvciB0aGUgYWN0dWFsIAp8VmFyaWFkaWMgU2VxdWVuY2V8IG5hbWUuCgouLiB8c2VxPHQxLi4udG4+fCByZXBsYWNlOjogYGBzZXE8YGBcIHx0MS4uLnRufFwgYGA+YGAKLi4gfHNlcTx0MS4uLnRuPjo6dHlwZXwgcmVwbGFjZTo6IGBgc2VxPGBgXCB8dDEuLi50bnxcIGBgPjo6dHlwZWBgCgouLiB8c2Vxbjx0MS4uLnRuPnwgcmVwbGFjZTo6IGBgc2VxYGBcICpuKlwgYGA8YGBcIHx0MS4uLnRufFwgYGA+YGAKLi4gfHNlcW48dDEuLi50bj46OnR5cGV8IHJlcGxhY2U6OiBgYHNlcWBgXCAqbipcIGBgPGBgXCB8dDEuLi50bnxcIGBgPjo6dHlwZWBgCgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgRXhwcmVzc2lvbiAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICB8IENvbXBsZXhpdHkgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCB8c2VxPHQxLi4udG4+fCAgICAgICAgICAgIHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgIHwgQW1vcnRpemVkIGNvbnN0YW50IHRpbWUgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IHxzZXE8dDEuLi50bj46OnR5cGV8ICAgICAgfCB8Rm9yd2FyZCBTZXF1ZW5jZXwgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgfHNlcW48dDEuLi50bj58ICAgICAgICAgICB8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICB8IEFtb3J0aXplZCBjb25zdGFudCB0aW1lICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCB8c2Vxbjx0MS4uLnRuPjo6dHlwZXwgICAgIHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgIHwgQW1vcnRpemVkIGNvbnN0YW50IHRpbWUgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgc2VxPHx0MS4uLnRufD4gczsKICAgIHR5cGVkZWYgc2VxXCAqbipcIDx8dDEuLi50bnw+IHM7Cgo6U2VtYW50aWNzOgogICAgYGBzYGAgaXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyB8dDEuLi50bnwuCgo6UG9zdGNvbmRpdGlvbjoKICAgIGBgc2l6ZTxzPjo6dmFsdWUgPT0gbmBgLgoKICAgIC4uIEZJWE1FIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgIEJPT1NUX01QTF9BU1NFUlQoKHxpc19zYW1lfFw8IGF0X2M8diwwPjo6dHlwZSxcIHx0MXwgPikpOwogICAgICAgIEJPT1NUX01QTF9BU1NFUlQoKHxpc19zYW1lfFw8IGF0X2M8diwxPjo6dHlwZSxcIHx0MnwgPikpOwogICAgICAgIC4uLgogICAgICAgIEJPT1NUX01QTF9BU1NFUlQoKHxpc19zYW1lfFw8IGF0X2M8dixcICpuKj46OnR5cGUsXCB8dG58ID4pKTsKCi4uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBzZXE8fHQxLi4udG58Pjo6dHlwZSBzOwogICAgdHlwZWRlZiBzZXFcICpuKlwgPHx0MS4uLnRufD46OnR5cGUgczsKCjpTZW1hbnRpY3M6CiAgICBgYHNgYCBpcyBpZGVudGljYWwgdG8gYGBzZXFgYFwgKm4qXCBgYDxgYFwgfHQxLi4udG58IGBgPmBgLgoKOlBvc3Rjb25kaXRpb246CiAgICBgYHNpemU8cz46OnZhbHVlID09IG5gYC4KCgpNb2RlbHMKLS0tLS0tCgoqIHx2ZWN0b3J8CiogfGxpc3R8CiogfG1hcHwKClNlZSBhbHNvCi0tLS0tLS0tCgp8U2VxdWVuY2VzfCwgfENvbmZpZ3VyYXRpb258LCB8SW50ZWdyYWwgU2VxdWVuY2UgV3JhcHBlcnwKCi4uIHx2YXJpYWRpY3wgcmVwbGFjZTo6IGB2YXJpYWRpY2BfCi4uIF9gdmFyaWFkaWNgOiBgVmFyaWFkaWMgU2VxdWVuY2VgXwoKLi4gfHZhcmlhZGljIGZvcm1zfCByZXBsYWNlOjogYHZhcmlhZGljIGZvcm1zYF8KLi4gX2B2YXJpYWRpYyBmb3Jtc2A6IGBWYXJpYWRpYyBTZXF1ZW5jZWBfCgouLiB8bnVtYmVyZWQgZm9ybXN8IHJlcGxhY2U6OiBgbnVtYmVyZWQgZm9ybXNgXwouLiBfYG51bWJlcmVkIGZvcm1zYDogYFZhcmlhZGljIFNlcXVlbmNlYF8KCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==