Li4gRGF0YSBUeXBlcy9OdW1lcmljLy9ib29sXyB8MTAKCmJvb2xcXwo9PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgYm9vbCBDCiAgICAgICAgPgogICAgc3RydWN0IGJvb2xcXwogICAgewogICAgICAgIC8vIHx1bnNwZWNpZmllZHwKICAgICAgICAvLyAuLi4KICAgIH07CgogICAgdHlwZWRlZiBib29sXzx0cnVlPiAgdHJ1ZVxfOwogICAgdHlwZWRlZiBib29sXzxmYWxzZT4gZmFsc2VcXzsKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQSBib29sZWFuIHxJbnRlZ3JhbCBDb25zdGFudHwgd3JhcHBlci4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvYm9vbC5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxJbnRlZ3JhbCBDb25zdGFudHwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBDYGAgICAgICAgICB8IEEgYm9vbGVhbiBpbnRlZ3JhbCBjb25zdGFudCAgIHwgQSB2YWx1ZSB0byB3cmFwLiAgICAgICAgICB8IAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnxTZW1hbnRpY3MgZGlzY2xhaW1lci4uLnwgfEludGVncmFsIENvbnN0YW50fC4KCkZvciBhcmJpdHJhcnkgaW50ZWdyYWwgY29uc3RhbnQgYGBjYGA6CgorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgYm9vbF88Yz5gYCAgICAgIHwgQW4gfEludGVncmFsIENvbnN0YW50fCBgYHhgYCBzdWNoIHRoYXQgYGB4Ojp2YWx1ZSA9PSBjYGAgIHwKfCAgICAgICAgICAgICAgICAgICB8IGFuZCBgYHg6OnZhbHVlX3R5cGVgYCBpcyBpZGVudGljYWwgdG8gYGBib29sYGAuICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgYm9vbF88dHJ1ZT46OnZhbHVlX3R5cGUsIGJvb2wgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBib29sXzx0cnVlPiwgdHJ1ZVxfID4gKSk7IH0KICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBib29sXzx0cnVlPjo6dHlwZSwgYm9vbF88dHJ1ZT4gPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIGJvb2xfPHRydWU+Ojp2YWx1ZSwgPT0sIHRydWUgKTsKICAgIGFzc2VydCggYm9vbF88dHJ1ZT4oKSA9PSB0cnVlICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxEYXRhIFR5cGVzfCwgfEludGVncmFsIENvbnN0YW50fCwgfGludF98LCB8bG9uZ198LCB8aW50ZWdyYWxfY3wKCgouLiB8dHJ1ZV98IHJlcGxhY2U6OiBgdHJ1ZV9gXwouLiBfYHRydWVfYDogYGJvb2xfYF8KCi4uIHxmYWxzZV98IHJlcGxhY2U6OiBgZmFsc2VfYF8KLi4gX2BmYWxzZV9gOiBgYm9vbF9gXwoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK